         Edinburgh IMP77 Compiler - Version 8.4
    1 %begin
		.Ltext0:
		P2.6397:
		.LFB187:
		.LVL16:
				pushq	%r14
				pushq	%r13
				pushq	%r12
				pushq	%rbp
				pushq	%rbx
				subq	$1056, %rsp
				movq	%fs:40, %rax
				movq	%rax, 1048(%rsp)
				xorl	%eax, %eax
    2   %string(255) s
				call	_imp_initialise@PLT
		.LVL17:
    3   %integer n
    4
    5   %routine p1 (%string(*)%name k)
		.LVL8:
				pushq	%r14
				pushq	%r13
				pushq	%r12
				pushq	%rbx
				subq	$1048, %rsp
				movq	%fs:40, %rax
				movq	%rax, 1032(%rsp)
				xorl	%eax, %eax
		.LVL9:
		.LBB30:
    6     print string("p1: ")
				movq	$540684656, 769(%rsp)
				movq	$0, 777(%rsp)
				movb	$0, 785(%rsp)
				movw	$0, 786(%rsp)
				movl	$0, 788(%rsp)
				leaq	792(%rsp), %rdi
		.LVL10:
				movl	$29, %ecx
				rep stosq
				movb	$4, 768(%rsp)
				movq	768(%rsp), %rax
				movq	776(%rsp), %rdx
				movq	%rax, (%rsp)
				movq	%rdx, 8(%rsp)
				movdqa	784(%rsp), %xmm0
				movaps	%xmm0, 16(%rsp)
				movdqa	800(%rsp), %xmm1
				movaps	%xmm1, 32(%rsp)
				movdqa	816(%rsp), %xmm2
				movaps	%xmm2, 48(%rsp)
				movdqa	832(%rsp), %xmm3
				movaps	%xmm3, 64(%rsp)
				movdqa	848(%rsp), %xmm4
				movaps	%xmm4, 80(%rsp)
				movdqa	864(%rsp), %xmm5
				movaps	%xmm5, 96(%rsp)
				movdqa	880(%rsp), %xmm6
				movaps	%xmm6, 112(%rsp)
				movdqa	896(%rsp), %xmm7
				movaps	%xmm7, 128(%rsp)
				movdqa	912(%rsp), %xmm0
				movaps	%xmm0, 144(%rsp)
				movdqa	928(%rsp), %xmm1
				movaps	%xmm1, 160(%rsp)
				movq	944(%rsp), %r13
				movq	952(%rsp), %r14
				movq	%r13, 176(%rsp)
				movq	%r14, 184(%rsp)
				movq	960(%rsp), %rsi
				movq	968(%rsp), %rdi
				movq	%rsi, 192(%rsp)
				movq	%rdi, 200(%rsp)
				movq	976(%rsp), %r9
				movq	984(%rsp), %r10
				movq	%r9, 208(%rsp)
				movq	%r10, 216(%rsp)
				movq	992(%rsp), %rcx
				movq	1000(%rsp), %rbx
				movq	%rcx, 224(%rsp)
				movq	%rbx, 232(%rsp)
				movq	1008(%rsp), %r11
				movq	1016(%rsp), %r12
				movq	%r11, 240(%rsp)
				movq	%r12, 248(%rsp)
		.LVL11:
				movb	$4, (%rsp)
				movq	(%rsp), %rax
				movq	8(%rsp), %rdx
				movq	%rax, 768(%rsp)
				movq	%rdx, 776(%rsp)
		.LBE30:
		.LBB31:
		.LBB32:
				pushq	%r12
				pushq	%r11
				pushq	%rbx
				pushq	%rcx
				pushq	%r10
				pushq	%r9
				pushq	%rdi
				pushq	%rsi
				pushq	%r14
				pushq	%r13
				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	%rdx
				pushq	%rax
				call	_imp_printstring@PLT
		.LVL12:
				movdqa	512(%rsp), %xmm2
				movaps	%xmm2, 768(%rsp)
				movdqa	528(%rsp), %xmm3
				movaps	%xmm3, 784(%rsp)
				movdqa	544(%rsp), %xmm4
				movaps	%xmm4, 800(%rsp)
				movdqa	560(%rsp), %xmm5
				movaps	%xmm5, 816(%rsp)
				movdqa	576(%rsp), %xmm6
				movaps	%xmm6, 832(%rsp)
				movdqa	592(%rsp), %xmm7
				movaps	%xmm7, 848(%rsp)
				movdqa	608(%rsp), %xmm0
				movaps	%xmm0, 864(%rsp)
				movdqa	624(%rsp), %xmm1
				movaps	%xmm1, 880(%rsp)
				movdqa	640(%rsp), %xmm2
				movaps	%xmm2, 896(%rsp)
				movdqa	656(%rsp), %xmm3
				movaps	%xmm3, 912(%rsp)
				movq	672(%rsp), %r13
				movq	680(%rsp), %r14
				movq	%r13, 928(%rsp)
				movq	%r14, 936(%rsp)
				movq	688(%rsp), %rax
				movq	696(%rsp), %rdx
				movq	%rax, 944(%rsp)
				movq	%rdx, 952(%rsp)
				movq	704(%rsp), %rcx
				movq	712(%rsp), %rbx
				movq	%rcx, 960(%rsp)
				movq	%rbx, 968(%rsp)
				movq	720(%rsp), %rsi
				movq	728(%rsp), %rdi
				movq	%rsi, 976(%rsp)
				movq	%rdi, 984(%rsp)
				movq	736(%rsp), %r9
				movq	744(%rsp), %r10
				movq	%r9, 992(%rsp)
				movq	%r10, 1000(%rsp)
				movq	752(%rsp), %r11
				movq	760(%rsp), %r12
				movq	%r11, 1008(%rsp)
				movq	%r12, 1016(%rsp)
		.LBE32:
		.LBE31:
		.LBB33:
		.LBB34:
				addq	$256, %rsp
				pushq	%r12
				pushq	%r11
				pushq	%r10
				pushq	%r9
				pushq	%rdi
				pushq	%rsi
				pushq	%rbx
				pushq	%rcx
				pushq	%rdx
				pushq	%rax
				pushq	%r14
				pushq	%r13
				pushq	504(%rsp)
				pushq	504(%rsp)
				pushq	504(%rsp)
				pushq	504(%rsp)
				pushq	504(%rsp)
				pushq	504(%rsp)
				pushq	504(%rsp)
				pushq	504(%rsp)
				pushq	504(%rsp)
				pushq	504(%rsp)
				pushq	504(%rsp)
				pushq	504(%rsp)
				pushq	504(%rsp)
				pushq	504(%rsp)
				pushq	504(%rsp)
				pushq	504(%rsp)
				pushq	504(%rsp)
				pushq	504(%rsp)
				pushq	504(%rsp)
				pushq	504(%rsp)
				call	_imp_printstring@PLT
		.LVL13:
		.LBE34:
		.LBE33:
		.LBB35:
		.LBB36:
				addq	$256, %rsp
				call	_imp_newline@PLT
		.LVL14:
		.LBE36:
		.LBE35:
    7     print string(k)
    8     newline
    9   %end
   10
				movq	1032(%rsp), %rax
				xorq	%fs:40, %rax
				jne	.L8
				addq	$1048, %rsp
				popq	%rbx
				popq	%r12
				popq	%r13
				popq	%r14
				ret
		.L8:
				call	__stack_chk_fail@PLT
		.LVL15:
		.LFE186:
				.globl	main
		main:
		.LFB185:
   11   %routine p2 (%string(*)%name k)
		.LVL0:
				pushq	%r14
				pushq	%r13
				pushq	%r12
				pushq	%rbx
				subq	$1048, %rsp
				movq	%fs:40, %rax
				movq	%rax, 1032(%rsp)
				xorl	%eax, %eax
		.LVL1:
		.LBB23:
   12     print string("p2: ")
				movq	$540684912, 769(%rsp)
				movq	$0, 777(%rsp)
				movb	$0, 785(%rsp)
				movw	$0, 786(%rsp)
				movl	$0, 788(%rsp)
				leaq	792(%rsp), %rdi
		.LVL2:
				movl	$29, %ecx
				rep stosq
				movb	$4, 768(%rsp)
				movq	768(%rsp), %rax
				movq	776(%rsp), %rdx
				movq	%rax, (%rsp)
				movq	%rdx, 8(%rsp)
				movdqa	784(%rsp), %xmm0
				movaps	%xmm0, 16(%rsp)
				movdqa	800(%rsp), %xmm1
				movaps	%xmm1, 32(%rsp)
				movdqa	816(%rsp), %xmm2
				movaps	%xmm2, 48(%rsp)
				movdqa	832(%rsp), %xmm3
				movaps	%xmm3, 64(%rsp)
				movdqa	848(%rsp), %xmm4
				movaps	%xmm4, 80(%rsp)
				movdqa	864(%rsp), %xmm5
				movaps	%xmm5, 96(%rsp)
				movdqa	880(%rsp), %xmm6
				movaps	%xmm6, 112(%rsp)
				movdqa	896(%rsp), %xmm7
				movaps	%xmm7, 128(%rsp)
				movdqa	912(%rsp), %xmm0
				movaps	%xmm0, 144(%rsp)
				movdqa	928(%rsp), %xmm1
				movaps	%xmm1, 160(%rsp)
				movq	944(%rsp), %r13
				movq	952(%rsp), %r14
				movq	%r13, 176(%rsp)
				movq	%r14, 184(%rsp)
				movq	960(%rsp), %rsi
				movq	968(%rsp), %rdi
				movq	%rsi, 192(%rsp)
				movq	%rdi, 200(%rsp)
				movq	976(%rsp), %r9
				movq	984(%rsp), %r10
				movq	%r9, 208(%rsp)
				movq	%r10, 216(%rsp)
				movq	992(%rsp), %rcx
				movq	1000(%rsp), %rbx
				movq	%rcx, 224(%rsp)
				movq	%rbx, 232(%rsp)
				movq	1008(%rsp), %r11
				movq	1016(%rsp), %r12
				movq	%r11, 240(%rsp)
				movq	%r12, 248(%rsp)
		.LVL3:
				movb	$4, (%rsp)
				movq	(%rsp), %rax
				movq	8(%rsp), %rdx
				movq	%rax, 768(%rsp)
				movq	%rdx, 776(%rsp)
		.LBE23:
		.LBB24:
		.LBB25:
				pushq	%r12
				pushq	%r11
				pushq	%rbx
				pushq	%rcx
				pushq	%r10
				pushq	%r9
				pushq	%rdi
				pushq	%rsi
				pushq	%r14
				pushq	%r13
				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	%rdx
				pushq	%rax
				call	_imp_printstring@PLT
		.LVL4:
				movdqa	512(%rsp), %xmm2
				movaps	%xmm2, 768(%rsp)
				movdqa	528(%rsp), %xmm3
				movaps	%xmm3, 784(%rsp)
				movdqa	544(%rsp), %xmm4
				movaps	%xmm4, 800(%rsp)
				movdqa	560(%rsp), %xmm5
				movaps	%xmm5, 816(%rsp)
				movdqa	576(%rsp), %xmm6
				movaps	%xmm6, 832(%rsp)
				movdqa	592(%rsp), %xmm7
				movaps	%xmm7, 848(%rsp)
				movdqa	608(%rsp), %xmm0
				movaps	%xmm0, 864(%rsp)
				movdqa	624(%rsp), %xmm1
				movaps	%xmm1, 880(%rsp)
				movdqa	640(%rsp), %xmm2
				movaps	%xmm2, 896(%rsp)
				movdqa	656(%rsp), %xmm3
				movaps	%xmm3, 912(%rsp)
				movq	672(%rsp), %r13
				movq	680(%rsp), %r14
				movq	%r13, 928(%rsp)
				movq	%r14, 936(%rsp)
				movq	688(%rsp), %rax
				movq	696(%rsp), %rdx
				movq	%rax, 944(%rsp)
				movq	%rdx, 952(%rsp)
				movq	704(%rsp), %rcx
				movq	712(%rsp), %rbx
				movq	%rcx, 960(%rsp)
				movq	%rbx, 968(%rsp)
				movq	720(%rsp), %rsi
				movq	728(%rsp), %rdi
				movq	%rsi, 976(%rsp)
				movq	%rdi, 984(%rsp)
				movq	736(%rsp), %r9
				movq	744(%rsp), %r10
				movq	%r9, 992(%rsp)
				movq	%r10, 1000(%rsp)
				movq	752(%rsp), %r11
				movq	760(%rsp), %r12
				movq	%r11, 1008(%rsp)
				movq	%r12, 1016(%rsp)
		.LBE25:
		.LBE24:
		.LBB26:
		.LBB27:
				addq	$256, %rsp
				pushq	%r12
				pushq	%r11
				pushq	%r10
				pushq	%r9
				pushq	%rdi
				pushq	%rsi
				pushq	%rbx
				pushq	%rcx
				pushq	%rdx
				pushq	%rax
				pushq	%r14
				pushq	%r13
				pushq	504(%rsp)
				pushq	504(%rsp)
				pushq	504(%rsp)
				pushq	504(%rsp)
				pushq	504(%rsp)
				pushq	504(%rsp)
				pushq	504(%rsp)
				pushq	504(%rsp)
				pushq	504(%rsp)
				pushq	504(%rsp)
				pushq	504(%rsp)
				pushq	504(%rsp)
				pushq	504(%rsp)
				pushq	504(%rsp)
				pushq	504(%rsp)
				pushq	504(%rsp)
				pushq	504(%rsp)
				pushq	504(%rsp)
				pushq	504(%rsp)
				pushq	504(%rsp)
				call	_imp_printstring@PLT
		.LVL5:
		.LBE27:
		.LBE26:
		.LBB28:
		.LBB29:
				addq	$256, %rsp
				call	_imp_newline@PLT
		.LVL6:
		.LBE29:
		.LBE28:
   13     print string(k)
   14     newline
   15   %end
   16
				movq	1032(%rsp), %rax
				xorq	%fs:40, %rax
				jne	.L4
				addq	$1048, %rsp
				popq	%rbx
				popq	%r12
				popq	%r13
				popq	%r14
				ret
		.L4:
				call	__stack_chk_fail@PLT
		.LVL7:
		.LFE187:
		P1.6390:
		.LFB186:
   17   %routine pass (%routine p (%string(*)%name k), %string(*)%name k)
   18     p(k)
				movq	%rbx, %rdi
				call	P1.6390
		.LVL19:
		.L12:
		.LBE48:
		.LBE47:
		.LBB49:
				movq	%r13, 273(%rsp)
				movq	%r14, 281(%rsp)
				movb	$0, 289(%rsp)
				movw	$0, 290(%rsp)
				movl	$0, 292(%rsp)
				leaq	296(%rsp), %rdi
				movl	$29, %ecx
				movq	%rbp, %rax
				rep stosq
				movb	$9, 272(%rsp)
				movq	272(%rsp), %rax
				movq	280(%rsp), %rdx
				movq	%rax, 528(%rsp)
				movq	%rdx, 536(%rsp)
		.LVL20:
				movb	$9, 528(%rsp)
		.LBE49:
		.LBB50:
		.LBB51:
				pushq	520(%rsp)
				pushq	520(%rsp)
				pushq	520(%rsp)
				pushq	520(%rsp)
				pushq	520(%rsp)
				pushq	520(%rsp)
				pushq	520(%rsp)
				pushq	520(%rsp)
				pushq	520(%rsp)
				pushq	520(%rsp)
				pushq	520(%rsp)
				pushq	520(%rsp)
				pushq	520(%rsp)
				pushq	520(%rsp)
				pushq	520(%rsp)
				pushq	520(%rsp)
				pushq	520(%rsp)
				pushq	520(%rsp)
				pushq	520(%rsp)
				pushq	520(%rsp)
				pushq	520(%rsp)
				pushq	520(%rsp)
				pushq	520(%rsp)
				pushq	520(%rsp)
				pushq	520(%rsp)
				pushq	520(%rsp)
				pushq	520(%rsp)
				pushq	520(%rsp)
				pushq	520(%rsp)
				pushq	520(%rsp)
				pushq	776(%rsp)
				pushq	776(%rsp)
				call	_imp_printstring@PLT
		.LVL21:
		.LBE51:
		.LBE50:
		.LBB52:
		.LBB53:
				addq	$256, %rsp
				call	_imp_newline@PLT
		.LVL22:
		.L10:
		.LBE53:
		.LBE52:
				movq	%rbx, %rdi
				call	P2.6397
		.LVL26:
				jmp	.L12
		.LBE55:
		.LBE54:
		.LFE185:
		.Letext0:
   19   %end
   20
   21   %cycle
   22     read(n)
				leaq	12(%rsp), %r12
				movq	%r12, %rdi
				call	_imp_readint@PLT
		.LVL23:
   23     read(s)
				leaq	16(%rsp), %rbx
		.LBB46:
				movq	%rbx, %rdi
				call	_imp_readitem@PLT
		.LVL24:
   24     %if n = 1 %start
				cmpl	$1, 12(%rsp)
				je	.L15
		.L11:
		.LVL25:
		.LBB54:
		.LBB55:
   25       pass(p1,s)
   26     %else
   27       pass(p2,s)
   28     %finish
   29     print string("test done")
				movabsq	$7957689157142406516, %r13
				movl	$101, %r14d
				movl	$0, %ebp
				jmp	.L10
		.L15:
		.LVL18:
		.LBE46:
		.LBB47:
		.LBB48:
   30     newline
   31   %repeat
   32
   33 %end
   34 %end %of %file
   29 Statements compiled
