         Edinburgh IMP77 Compiler - Version 8.4
    1 %begin
		.Ltext0:
		DOHANOI.6391:
		.LFB186:
		.LVL18:
				subq	$1048, %rsp
				movq	%fs:40, %rax
				movq	%rax, 1032(%rsp)
				xorl	%eax, %eax
    2   %routine do hanoi(%integer n, f, t, u)
		.LVL0:
				pushq	%r15
				pushq	%r14
				pushq	%r13
				pushq	%r12
				pushq	%rbp
				pushq	%rbx
				subq	$3112, %rsp
				movl	%edi, %ebp
				movl	%esi, %r15d
				movl	%edx, 8(%rsp)
				movl	%ecx, 12(%rsp)
				movq	%fs:40, %rax
				movq	%rax, 3096(%rsp)
				xorl	%eax, %eax
				call	_imp_initialise@PLT
		.LVL19:
				movl	$3, %ecx
				movl	$2, %edx
				movl	$1, %esi
				movl	$4, %edi
				call	DOHANOI.6391
		.LVL20:
		.LBB47:
		.LBB48:
    3     do hanoi(n - 1, f, u, t) %if n >= 2
				cmpl	$1, %edi
				jg	.L6
		.LVL1:
		.L2:
		.LBB34:
		.LBB35:
		.LBB36:
		.LBB37:
		.LBB38:
		.LBB39:
				leaq	2832(%rsp), %rdi
				movl	$0, %edx
				movl	8(%rsp), %esi
				call	_imp_itos@PLT
		.LVL2:
		.LBE39:
		.LBE38:
		.LBE37:
		.LBB40:
		.LBB41:
		.LBB42:
		.LBB43:
		.LBB44:
				leaq	2576(%rsp), %rdi
				movl	$0, %edx
				movl	%r15d, %esi
				call	_imp_itos@PLT
		.LVL3:
		.LBE44:
		.LBE43:
		.LBE42:
    4     print string("Move disk from ".itos(f,0)." to ".itos(t,0).to string(nl))
				leal	-1(%rdi), %edi
		.LVL12:
				movl	%edx, %ecx
		.LVL13:
				movl	12(%rsp), %edx
		.LVL14:
				call	DOHANOI.6391
		.LVL15:
				jmp	.L2
		.L7:
    5     do hanoi(n - 1, u, t, f) %if n >= 2
				addq	$256, %rsp
				cmpl	$1, %ebp
				jg	.L7
		.L3:
		.L1:
    6   %end
				leaq	784(%rsp), %rbx
				leaq	1296(%rsp), %rdx
				leaq	1040(%rsp), %rsi
				movq	%rbx, %rdi
				call	_imp_join@PLT
		.LVL4:
		.LBE41:
				leaq	528(%rsp), %r12
				leaq	1552(%rsp), %rdx
				movq	%rbx, %rsi
				movq	%r12, %rdi
				call	_imp_join@PLT
		.LVL5:
		.LBE40:
				leaq	272(%rsp), %rbx
				leaq	1808(%rsp), %rdx
				movq	%r12, %rsi
				movq	%rbx, %rdi
				call	_imp_join@PLT
		.LVL6:
		.LBE36:
				leaq	2320(%rsp), %rdi
				leaq	2064(%rsp), %rdx
				movq	%rbx, %rsi
				call	_imp_join@PLT
		.LVL7:
				movdqa	16(%rsp), %xmm0
				movaps	%xmm0, 2320(%rsp)
				movdqa	32(%rsp), %xmm1
				movaps	%xmm1, 2336(%rsp)
				movdqa	48(%rsp), %xmm2
				movaps	%xmm2, 2352(%rsp)
				movdqa	64(%rsp), %xmm3
				movaps	%xmm3, 2368(%rsp)
				movdqa	80(%rsp), %xmm4
				movaps	%xmm4, 2384(%rsp)
				movdqa	96(%rsp), %xmm5
				movaps	%xmm5, 2400(%rsp)
				movdqa	112(%rsp), %xmm6
				movaps	%xmm6, 2416(%rsp)
				movdqa	128(%rsp), %xmm7
				movaps	%xmm7, 2432(%rsp)
				movdqa	144(%rsp), %xmm0
				movaps	%xmm0, 2448(%rsp)
				movdqa	160(%rsp), %xmm1
				movaps	%xmm1, 2464(%rsp)
				movq	176(%rsp), %r13
				movq	184(%rsp), %r14
				movq	%r13, 2480(%rsp)
				movq	%r14, 2488(%rsp)
				movq	192(%rsp), %rax
				movq	200(%rsp), %rdx
				movq	%rax, 2496(%rsp)
				movq	%rdx, 2504(%rsp)
				movq	208(%rsp), %rsi
				movq	216(%rsp), %rdi
				movq	%rsi, 2512(%rsp)
				movq	%rdi, 2520(%rsp)
				movq	224(%rsp), %r9
				movq	232(%rsp), %r10
				movq	%r9, 2528(%rsp)
				movq	%r10, 2536(%rsp)
				movq	240(%rsp), %rcx
				movq	248(%rsp), %rbx
				movq	%rcx, 2544(%rsp)
				movq	%rbx, 2552(%rsp)
				movq	256(%rsp), %r11
				movq	264(%rsp), %r12
				movq	%r11, 2560(%rsp)
				movq	%r12, 2568(%rsp)
		.LBE35:
		.LBE34:
		.LBB45:
		.LBB46:
				pushq	%r12
				pushq	%r11
				pushq	%rbx
				pushq	%rcx
				pushq	%r10
				pushq	%r9
				pushq	%rdi
				pushq	%rsi
				pushq	%rdx
				pushq	%rax
				pushq	%r14
				pushq	%r13
				pushq	264(%rsp)
				pushq	264(%rsp)
				pushq	264(%rsp)
				pushq	264(%rsp)
				pushq	264(%rsp)
				pushq	264(%rsp)
				pushq	264(%rsp)
				pushq	264(%rsp)
				pushq	264(%rsp)
				pushq	264(%rsp)
				pushq	264(%rsp)
				pushq	264(%rsp)
				pushq	264(%rsp)
				pushq	264(%rsp)
				pushq	264(%rsp)
				pushq	264(%rsp)
				pushq	264(%rsp)
				pushq	264(%rsp)
				pushq	264(%rsp)
				pushq	264(%rsp)
				call	_imp_printstring@PLT
		.LVL8:
		.LBE46:
		.LBE45:
				leal	-1(%rbp), %edi
				movl	%r15d, %ecx
				movl	8(%rsp), %edx
				movl	12(%rsp), %esi
				call	DOHANOI.6391
		.LVL16:
				jmp	.L1
		.L8:
				call	__stack_chk_fail@PLT
		.LVL17:
		.LFE186:
				.globl	main
		main:
		.LFB185:
    7   do hanoi(4, 1, 2, 3)
				movq	3096(%rsp), %rax
				xorq	%fs:40, %rax
				jne	.L8
				addq	$3112, %rsp
				popq	%rbx
				popq	%rbp
		.LVL9:
				popq	%r12
				popq	%r13
				popq	%r14
				popq	%r15
		.LVL10:
				ret
		.LVL11:
		.L6:
    8   print string("Towers of Hanoi puzzle completed!".to string(nl))
    9 %end %of %program
    9 Statements compiled
				leaq	768(%rsp), %rdi
				leaq	512(%rsp), %rdx
				leaq	256(%rsp), %rsi
				call	_imp_join@PLT
		.LVL21:
		.LBE48:
		.LBE47:
		.LBB49:
		.LBB50:
				pushq	248(%rsp)
				pushq	248(%rsp)
				pushq	248(%rsp)
				pushq	248(%rsp)
				pushq	248(%rsp)
				pushq	248(%rsp)
				pushq	248(%rsp)
				pushq	248(%rsp)
				pushq	248(%rsp)
				pushq	248(%rsp)
				pushq	248(%rsp)
				pushq	248(%rsp)
				pushq	248(%rsp)
				pushq	248(%rsp)
				pushq	248(%rsp)
				pushq	248(%rsp)
				pushq	248(%rsp)
				pushq	248(%rsp)
				pushq	248(%rsp)
				pushq	248(%rsp)
				pushq	248(%rsp)
				pushq	248(%rsp)
				pushq	248(%rsp)
				pushq	248(%rsp)
				pushq	248(%rsp)
				pushq	248(%rsp)
				pushq	248(%rsp)
				pushq	248(%rsp)
				pushq	248(%rsp)
				pushq	248(%rsp)
				pushq	248(%rsp)
				pushq	248(%rsp)
				call	_imp_printstring@PLT
		.LVL22:
		.LBE50:
		.LBE49:
		.LBB51:
		.LBB52:
				addq	$256, %rsp
				movl	$0, %edi
				call	exit@PLT
		.LVL23:
		.LBE52:
		.LBE51:
		.LFE185:
		.Letext0:
