         Edinburgh IMP77 Compiler - Version 8.4
    1 %begin
		.Ltext0:
		ACKERMANN.6389:
		.LFB186:
		.LVL9:
				pushq	%r14
				pushq	%r13
				subq	$1048, %rsp
				movq	%fs:40, %rax
				movq	%rax, 1032(%rsp)
				xorl	%eax, %eax
    2   %integer %function ackermann(%integer m,n)
		.LVL0:
				pushq	%rbx
				movl	%edi, %ebx
				call	_imp_initialise@PLT
		.LVL10:
    3     %result = n+1 %if m = 0
				testl	%edi, %edi
				je	.L8
		.L2:
    4     %result = ackermann(m-1,1) %if n = 0
				testl	%esi, %esi
				je	.L9
		.L4:
				leal	1(%rsi), %eax
				ret
		.LVL6:
		.L9:
    5     %result = ackermann(m-1,ackermann(m,n-1))
				subl	$1, %esi
		.LVL1:
				call	ACKERMANN.6389
		.LVL2:
				leal	-1(%rbx), %edi
				movl	%eax, %esi
				call	ACKERMANN.6389
		.LVL3:
		.L1:
				leal	-1(%rdi), %edi
				movl	$1, %esi
		.LVL7:
				call	ACKERMANN.6389
		.LVL8:
				jmp	.L1
		.LFE186:
				.globl	main
		main:
		.LFB185:
    6   %end
				popq	%rbx
		.LVL4:
				ret
		.LVL5:
		.L8:
    7
    8   %owninteger i,j,k,k1,t1,t2
    9
   10   k = 16;  k1 = 1
				movl	$16, K.6395(%rip)
   11   %for i = 1,1,6 %cycle
				movl	$1, K1.6396(%rip)
   12     t1 = cputime            ;! cputime is in clocks_per_tick which is 1000000
				movl	%eax, T1.6397(%rip)
   13     j = ackermann(3,i)
				movl	I.6393(%rip), %esi
				movl	$3, %edi
				call	ACKERMANN.6389
		.LVL18:
				movl	%eax, J.6394(%rip)
		.LBB33:
		.LBB34:
				call	_imp_cputime@PLT
		.LVL19:
		.LBE34:
		.LBE33:
   14     t2 = cputime
				movl	$0, %eax
		.LBB24:
				movl	I.6393(%rip), %eax
				cmpl	$6, %eax
				je	.L17
		.L12:
				movl	%eax, T2.6398(%rip)
   15     %if j # k-3 %then printstring("Wrong result!  ") %and newline
				addl	$1, %eax
				movl	%eax, I.6393(%rip)
		.LBB31:
		.LBB32:
				call	_imp_cputime@PLT
		.LVL17:
		.LBE32:
		.LBE31:
				movl	K.6395(%rip), %eax
				subl	$3, %eax
				cmpl	J.6394(%rip), %eax
				je	.L11
		.LVL20:
		.LBB35:
   16     print((t2-t1){/1000},7,3)
				movabsq	$7309940773782254167, %r13
				movabsq	$9042527314015603, %r14
				jmp	.L12
		.L11:
		.LVL11:
		.LBE24:
				movl	T2.6398(%rip), %eax
				subl	T1.6397(%rip), %eax
				pxor	%xmm0, %xmm0
				cvtsi2sd	%eax, %xmm0
		.LBB25:
		.LBB26:
				movl	$3, %esi
				movl	$7, %edi
				call	_imp_print@PLT
		.LVL12:
		.LBE26:
		.LBE25:
				movq	%r13, 769(%rsp)
				movq	%r14, 777(%rsp)
				movb	$0, 785(%rsp)
				movw	$0, 786(%rsp)
				movl	$0, 788(%rsp)
				leaq	792(%rsp), %rdi
				movl	$29, %ecx
				movl	$0, %eax
				rep stosq
				movb	$15, 768(%rsp)
				movq	768(%rsp), %rax
				movq	776(%rsp), %rdx
				movq	%rax, (%rsp)
				movq	%rdx, 8(%rsp)
		.LVL21:
				movb	$15, (%rsp)
		.LBE35:
		.LBB36:
		.LBB37:
				pushq	1016(%rsp)
				pushq	1016(%rsp)
				pushq	1016(%rsp)
				pushq	1016(%rsp)
				pushq	1016(%rsp)
				pushq	1016(%rsp)
				pushq	1016(%rsp)
				pushq	1016(%rsp)
				pushq	1016(%rsp)
				pushq	1016(%rsp)
				pushq	1016(%rsp)
				pushq	1016(%rsp)
				pushq	1016(%rsp)
				pushq	1016(%rsp)
				pushq	1016(%rsp)
				pushq	1016(%rsp)
				pushq	1016(%rsp)
				pushq	1016(%rsp)
				pushq	1016(%rsp)
				pushq	1016(%rsp)
				pushq	1016(%rsp)
				pushq	1016(%rsp)
				pushq	1016(%rsp)
				pushq	1016(%rsp)
				pushq	1016(%rsp)
				pushq	1016(%rsp)
				pushq	1016(%rsp)
				pushq	1016(%rsp)
				pushq	1016(%rsp)
				pushq	1016(%rsp)
				pushq	248(%rsp)
				pushq	248(%rsp)
				call	_imp_printstring@PLT
		.LVL22:
		.LBE37:
		.LBE36:
		.LBB38:
		.LBB39:
				addq	$256, %rsp
				call	_imp_newline@PLT
		.LVL23:
				jmp	.L11
		.L17:
		.L13:
		.LVL24:
		.LBE39:
		.LBE38:
		.LBB40:
   17     print(3000*(t2-t1)/(512*k1-15*k+9*i+37),7,3)
				movl	T2.6398(%rip), %eax
				subl	T1.6397(%rip), %eax
				imull	$3000, %eax, %eax
				movl	K1.6396(%rip), %ecx
				sall	$9, %ecx
		.LVL13:
				movl	K.6395(%rip), %edx
				movl	%edx, %esi
				sall	$4, %esi
				subl	%esi, %edx
				addl	%ecx, %edx
				movl	I.6393(%rip), %ecx
		.LVL14:
				leal	(%rcx,%rcx,8), %ecx
				leal	37(%rdx,%rcx), %ecx
				cltd
				idivl	%ecx
				pxor	%xmm0, %xmm0
				cvtsi2sd	%eax, %xmm0
		.LBB27:
		.LBB28:
				movl	$3, %esi
				movl	$7, %edi
				call	_imp_print@PLT
		.LVL15:
		.LBE28:
		.LBE27:
		.LBB29:
		.LBB30:
				call	_imp_newline@PLT
		.LVL16:
		.LBE30:
		.LBE29:
   18     newline
   19     k1 = 4*k1;  k = 2*k
				sall	$2, K1.6396(%rip)
   20   %repeat
				sall	K.6395(%rip)
		.LDL1:
   21   printstring("Done."); newline
				movabsq	$199270231876, %rax
				movl	$0, %edx
				movq	%rax, 769(%rsp)
				movq	%rdx, 777(%rsp)
				movb	$0, 785(%rsp)
				movw	$0, 786(%rsp)
				movl	$0, 788(%rsp)
				leaq	792(%rsp), %rdi
				movl	$29, %ecx
				movl	$0, %eax
				rep stosq
				movb	$5, 768(%rsp)
				movq	768(%rsp), %rax
				movq	776(%rsp), %rdx
				movq	%rax, 256(%rsp)
				movq	%rdx, 264(%rsp)
		.LVL25:
				movb	$5, 256(%rsp)
		.LBE40:
		.LBB41:
		.LBB42:
				pushq	1016(%rsp)
				pushq	1016(%rsp)
				pushq	1016(%rsp)
				pushq	1016(%rsp)
				pushq	1016(%rsp)
				pushq	1016(%rsp)
				pushq	1016(%rsp)
				pushq	1016(%rsp)
				pushq	1016(%rsp)
				pushq	1016(%rsp)
				pushq	1016(%rsp)
				pushq	1016(%rsp)
				pushq	1016(%rsp)
				pushq	1016(%rsp)
				pushq	1016(%rsp)
				pushq	1016(%rsp)
				pushq	1016(%rsp)
				pushq	1016(%rsp)
				pushq	1016(%rsp)
				pushq	1016(%rsp)
				pushq	1016(%rsp)
				pushq	1016(%rsp)
				pushq	1016(%rsp)
				pushq	1016(%rsp)
				pushq	1016(%rsp)
				pushq	1016(%rsp)
				pushq	1016(%rsp)
				pushq	1016(%rsp)
				pushq	1016(%rsp)
				pushq	1016(%rsp)
				pushq	504(%rsp)
				pushq	504(%rsp)
				call	_imp_printstring@PLT
		.LVL26:
		.LBE42:
		.LBE41:
		.LBB43:
		.LBB44:
				addq	$256, %rsp
				call	_imp_newline@PLT
		.LVL27:
		.LBE44:
		.LBE43:
		.LBB45:
		.LBB46:
				movl	$0, %edi
				call	exit@PLT
		.LVL28:
		.LBE46:
		.LBE45:
		.LFE185:
				.comm	T2.6398,4,4
				.comm	J.6394,4,4
				.comm	T1.6397,4,4
				.comm	I.6393,4,4
				.comm	K1.6396,4,4
				.comm	K.6395,4,4
		.Letext0:
   22 %endofprogram
   23 Statements compiled
