         Edinburgh IMP77 Compiler - Version 8.4
    1 %begin
		.Ltext0:
				.section	.rodata
		.LC3:
				.string	"Illegal cycle I = A, B, C"
				.align 32
		.LC0:
				.byte	19
				.string	"test-in/test126.imp"
				.zero	235
				.align 32
		.LC1:
				.byte	5
				.string	"Pass!"
				.zero	249
				.align 32
		.LC2:
				.byte	5
				.string	"Fail!"
				.zero	249
				.globl	main
		main:
		.LFB189:
				leal	4(%esp), %ecx
				andl	$-16, %esp
				pushl	-4(%ecx)
				pushl	%ebp
				movl	%esp, %ebp
				pushl	%edi
				pushl	%esi
				pushl	%ebx
				pushl	%ecx
				subl	$4216, %esp
				call	__x86.get_pc_thunk.bx
				addl	$_GLOBAL_OFFSET_TABLE_, %ebx
				movl	%ecx, %eax
				movl	4(%eax), %edx
				movl	%edx, -4220(%ebp)
				movl	%gs:20, %esi
				movl	%esi, -28(%ebp)
				xorl	%esi, %esi
				subl	$8, %esp
				pushl	-4220(%ebp)
				pushl	(%eax)
				call	_imp_initialise@PLT
				addl	$16, %esp
    2 %integer i, a,b,c, q
    3
    4   q = 0;
				movl	$0, -4208(%ebp)
    5
    6   %for i = 3,1,5 %cycle
				movl	$2, -4212(%ebp)
		.L2:
				cmpl	$5, -4212(%ebp)
				je	.L71
				addl	$1, -4212(%ebp)
				nop
		.L4:
    7     q = q+i
				movl	-4212(%ebp), %eax
				addl	%eax, -4208(%ebp)
    8   %repeat
				jmp	.L2
		.L71:
    9
   10   %for i = 3,2,5 %cycle
				movl	$1, -4212(%ebp)
		.L5:
				cmpl	$5, -4212(%ebp)
				je	.L72
				addl	$2, -4212(%ebp)
				nop
		.L7:
   11     q = q+i
				movl	-4212(%ebp), %eax
				addl	%eax, -4208(%ebp)
   12   %repeat
				jmp	.L5
		.L72:
   13
   14   %for i = 5,-1,3 %cycle
				movl	$6, -4212(%ebp)
		.L8:
				cmpl	$3, -4212(%ebp)
				je	.L73
				subl	$1, -4212(%ebp)
				nop
		.L10:
   15     q = q+i
				movl	-4212(%ebp), %eax
				addl	%eax, -4208(%ebp)
   16   %repeat
				jmp	.L8
		.L73:
   17
   18   %for i = 5,-2,3 %cycle
				movl	$7, -4212(%ebp)
		.L11:
				cmpl	$3, -4212(%ebp)
				je	.L74
				subl	$2, -4212(%ebp)
				nop
		.L13:
   19     q = q+i
				movl	-4212(%ebp), %eax
				addl	%eax, -4208(%ebp)
   20   %repeat
				jmp	.L11
		.L74:
   21
   22   a = 3; b = 1; c = 5
				movl	$3, -4204(%ebp)
				movl	$1, -4200(%ebp)
				movl	$5, -4196(%ebp)
		.LBB24:
   23
   24   %for i = a, b, c %cycle
				movl	-4204(%ebp), %eax
				movl	%eax, -4192(%ebp)
				movl	-4200(%ebp), %eax
				movl	%eax, -4188(%ebp)
				movl	-4196(%ebp), %eax
				movl	%eax, -4184(%ebp)
		.LBB25:
				movl	-4184(%ebp), %eax
				subl	-4192(%ebp), %eax
				movl	%eax, -4180(%ebp)
				movl	-4180(%ebp), %eax
				xorl	-4188(%ebp), %eax
				testl	%eax, %eax
				js	.L14
				cmpl	$1, -4188(%ebp)
				je	.L15
				cmpl	$-1, -4188(%ebp)
				je	.L15
				movl	-4180(%ebp), %eax
				cltd
				idivl	-4188(%ebp)
				movl	%edx, %eax
				testl	%eax, %eax
				je	.L15
		.L14:
				movl	$1, %eax
				jmp	.L16
		.L15:
				movl	$0, %eax
		.L16:
		.LBE25:
				testl	%eax, %eax
				je	.L17
				leal	-2588(%ebp), %eax
				subl	$8, %esp
				leal	.LC3@GOTOFF(%ebx), %edx
				pushl	%edx
				pushl	%eax
				call	_imp_c2istr@PLT
				addl	$12, %esp
				movl	_imp_current_line@GOT(%ebx), %eax
				movl	(%eax), %eax
				testl	%eax, %eax
				je	.L18
				movl	_imp_current_line@GOT(%ebx), %eax
				movl	(%eax), %eax
				movl	%eax, -4224(%ebp)
				jmp	.L19
		.L18:
				movl	$24, -4224(%ebp)
		.L19:
				movl	_imp_current_file@GOT(%ebx), %eax
				movl	(%eax), %eax
				testl	%eax, %eax
				je	.L20
				movl	_imp_current_file@GOT(%ebx), %eax
				movl	(%eax), %edx
				leal	-2332(%ebp), %eax
				subl	$8, %esp
				pushl	%edx
				pushl	%eax
				call	_imp_c2istr@PLT
				addl	$12, %esp
				jmp	.L21
		.L20:
		.LBB26:
				leal	-284(%ebp), %eax
				leal	.LC0@GOTOFF(%ebx), %edx
				movl	$64, %ecx
				movl	%eax, %edi
				movl	%edx, %esi
				rep movsl
				leal	-4124(%ebp), %eax
				leal	-284(%ebp), %edx
				movl	$64, %ecx
				movl	%eax, %edi
				movl	%edx, %esi
				rep movsl
		.LBE26:
				leal	-2332(%ebp), %eax
				leal	-4124(%ebp), %edx
				movl	$64, %ecx
				movl	%eax, %edi
				movl	%edx, %esi
				rep movsl
		.L21:
				pushl	$0
				pushl	$1
				pushl	$5
				subl	$256, %esp
				movl	%esp, %eax
				movl	%eax, %edi
				leal	-2588(%ebp), %eax
				movl	$64, %edx
				movl	%eax, %esi
				movl	%edx, %ecx
				rep movsl
				pushl	-4224(%ebp)
				subl	$256, %esp
				movl	%esp, %eax
				movl	%eax, %edi
				leal	-2332(%ebp), %eax
				movl	$64, %edx
				movl	%eax, %esi
				movl	%edx, %ecx
				rep movsl
				call	_signal_event@PLT
				addl	$528, %esp
		.L17:
				movl	-4192(%ebp), %eax
				subl	-4188(%ebp), %eax
				movl	%eax, -4212(%ebp)
		.L22:
				movl	-4212(%ebp), %eax
				cmpl	-4184(%ebp), %eax
				je	.L75
				movl	-4188(%ebp), %eax
				addl	%eax, -4212(%ebp)
				nop
		.L24:
		.LBE24:
   25     q = q+i+a
				movl	-4208(%ebp), %edx
				movl	-4212(%ebp), %eax
				addl	%eax, %edx
				movl	-4204(%ebp), %eax
				addl	%edx, %eax
				movl	%eax, -4208(%ebp)
   26   %repeat
				jmp	.L22
		.L75:
   27
   28   a = 3; b = 2; c = 5
				movl	$3, -4204(%ebp)
				movl	$2, -4200(%ebp)
				movl	$5, -4196(%ebp)
		.LBB27:
   29
   30   %for i = a, b, c %cycle
				movl	-4204(%ebp), %eax
				movl	%eax, -4176(%ebp)
				movl	-4200(%ebp), %eax
				movl	%eax, -4172(%ebp)
				movl	-4196(%ebp), %eax
				movl	%eax, -4168(%ebp)
		.LBB28:
				movl	-4168(%ebp), %eax
				subl	-4176(%ebp), %eax
				movl	%eax, -4164(%ebp)
				movl	-4164(%ebp), %eax
				xorl	-4172(%ebp), %eax
				testl	%eax, %eax
				js	.L25
				cmpl	$1, -4172(%ebp)
				je	.L26
				cmpl	$-1, -4172(%ebp)
				je	.L26
				movl	-4164(%ebp), %eax
				cltd
				idivl	-4172(%ebp)
				movl	%edx, %eax
				testl	%eax, %eax
				je	.L26
		.L25:
				movl	$1, %eax
				jmp	.L27
		.L26:
				movl	$0, %eax
		.L27:
		.LBE28:
				testl	%eax, %eax
				je	.L28
				leal	-2076(%ebp), %eax
				subl	$8, %esp
				leal	.LC3@GOTOFF(%ebx), %edx
				pushl	%edx
				pushl	%eax
				call	_imp_c2istr@PLT
				addl	$12, %esp
				movl	_imp_current_line@GOT(%ebx), %eax
				movl	(%eax), %eax
				testl	%eax, %eax
				je	.L29
				movl	_imp_current_line@GOT(%ebx), %eax
				movl	(%eax), %eax
				movl	%eax, -4224(%ebp)
				jmp	.L30
		.L29:
				movl	$30, -4224(%ebp)
		.L30:
				movl	_imp_current_file@GOT(%ebx), %eax
				movl	(%eax), %eax
				testl	%eax, %eax
				je	.L31
				movl	_imp_current_file@GOT(%ebx), %eax
				movl	(%eax), %edx
				leal	-1820(%ebp), %eax
				subl	$8, %esp
				pushl	%edx
				pushl	%eax
				call	_imp_c2istr@PLT
				addl	$12, %esp
				jmp	.L32
		.L31:
		.LBB29:
				leal	-284(%ebp), %eax
				leal	.LC0@GOTOFF(%ebx), %edx
				movl	$64, %ecx
				movl	%eax, %edi
				movl	%edx, %esi
				rep movsl
				leal	-3868(%ebp), %eax
				leal	-284(%ebp), %edx
				movl	$64, %ecx
				movl	%eax, %edi
				movl	%edx, %esi
				rep movsl
		.LBE29:
				leal	-1820(%ebp), %eax
				leal	-3868(%ebp), %edx
				movl	$64, %ecx
				movl	%eax, %edi
				movl	%edx, %esi
				rep movsl
		.L32:
				pushl	$0
				pushl	$1
				pushl	$5
				subl	$256, %esp
				movl	%esp, %eax
				movl	%eax, %edi
				leal	-2076(%ebp), %eax
				movl	$64, %edx
				movl	%eax, %esi
				movl	%edx, %ecx
				rep movsl
				pushl	-4224(%ebp)
				subl	$256, %esp
				movl	%esp, %eax
				movl	%eax, %edi
				leal	-1820(%ebp), %eax
				movl	$64, %edx
				movl	%eax, %esi
				movl	%edx, %ecx
				rep movsl
				call	_signal_event@PLT
				addl	$528, %esp
		.L28:
				movl	-4176(%ebp), %eax
				subl	-4172(%ebp), %eax
				movl	%eax, -4212(%ebp)
		.L33:
				movl	-4212(%ebp), %eax
				cmpl	-4168(%ebp), %eax
				je	.L76
				movl	-4172(%ebp), %eax
				addl	%eax, -4212(%ebp)
				nop
		.L35:
		.LBE27:
   31     q = q+i+a
				movl	-4208(%ebp), %edx
				movl	-4212(%ebp), %eax
				addl	%eax, %edx
				movl	-4204(%ebp), %eax
				addl	%edx, %eax
				movl	%eax, -4208(%ebp)
   32   %repeat
				jmp	.L33
		.L76:
   33
   34   a = 5; b = -1; c = 3
				movl	$5, -4204(%ebp)
				movl	$-1, -4200(%ebp)
				movl	$3, -4196(%ebp)
		.LBB30:
   35
   36   %for i = a, b, c %cycle
				movl	-4204(%ebp), %eax
				movl	%eax, -4160(%ebp)
				movl	-4200(%ebp), %eax
				movl	%eax, -4156(%ebp)
				movl	-4196(%ebp), %eax
				movl	%eax, -4152(%ebp)
		.LBB31:
				movl	-4152(%ebp), %eax
				subl	-4160(%ebp), %eax
				movl	%eax, -4148(%ebp)
				movl	-4148(%ebp), %eax
				xorl	-4156(%ebp), %eax
				testl	%eax, %eax
				js	.L36
				cmpl	$1, -4156(%ebp)
				je	.L37
				cmpl	$-1, -4156(%ebp)
				je	.L37
				movl	-4148(%ebp), %eax
				cltd
				idivl	-4156(%ebp)
				movl	%edx, %eax
				testl	%eax, %eax
				je	.L37
		.L36:
				movl	$1, %eax
				jmp	.L38
		.L37:
				movl	$0, %eax
		.L38:
		.LBE31:
				testl	%eax, %eax
				je	.L39
				leal	-1564(%ebp), %eax
				subl	$8, %esp
				leal	.LC3@GOTOFF(%ebx), %edx
				pushl	%edx
				pushl	%eax
				call	_imp_c2istr@PLT
				addl	$12, %esp
				movl	_imp_current_line@GOT(%ebx), %eax
				movl	(%eax), %eax
				testl	%eax, %eax
				je	.L40
				movl	_imp_current_line@GOT(%ebx), %eax
				movl	(%eax), %eax
				movl	%eax, -4224(%ebp)
				jmp	.L41
		.L40:
				movl	$36, -4224(%ebp)
		.L41:
				movl	_imp_current_file@GOT(%ebx), %eax
				movl	(%eax), %eax
				testl	%eax, %eax
				je	.L42
				movl	_imp_current_file@GOT(%ebx), %eax
				movl	(%eax), %edx
				leal	-1308(%ebp), %eax
				subl	$8, %esp
				pushl	%edx
				pushl	%eax
				call	_imp_c2istr@PLT
				addl	$12, %esp
				jmp	.L43
		.L42:
		.LBB32:
				leal	-284(%ebp), %eax
				leal	.LC0@GOTOFF(%ebx), %edx
				movl	$64, %ecx
				movl	%eax, %edi
				movl	%edx, %esi
				rep movsl
				leal	-3612(%ebp), %eax
				leal	-284(%ebp), %edx
				movl	$64, %ecx
				movl	%eax, %edi
				movl	%edx, %esi
				rep movsl
		.LBE32:
				leal	-1308(%ebp), %eax
				leal	-3612(%ebp), %edx
				movl	$64, %ecx
				movl	%eax, %edi
				movl	%edx, %esi
				rep movsl
		.L43:
				pushl	$0
				pushl	$1
				pushl	$5
				subl	$256, %esp
				movl	%esp, %eax
				movl	%eax, %edi
				leal	-1564(%ebp), %eax
				movl	$64, %edx
				movl	%eax, %esi
				movl	%edx, %ecx
				rep movsl
				pushl	-4224(%ebp)
				subl	$256, %esp
				movl	%esp, %eax
				movl	%eax, %edi
				leal	-1308(%ebp), %eax
				movl	$64, %edx
				movl	%eax, %esi
				movl	%edx, %ecx
				rep movsl
				call	_signal_event@PLT
				addl	$528, %esp
		.L39:
				movl	-4160(%ebp), %eax
				subl	-4156(%ebp), %eax
				movl	%eax, -4212(%ebp)
		.L44:
				movl	-4212(%ebp), %eax
				cmpl	-4152(%ebp), %eax
				je	.L77
				movl	-4156(%ebp), %eax
				addl	%eax, -4212(%ebp)
				nop
		.L46:
		.LBE30:
   37     q = q+i+a
				movl	-4208(%ebp), %edx
				movl	-4212(%ebp), %eax
				addl	%eax, %edx
				movl	-4204(%ebp), %eax
				addl	%edx, %eax
				movl	%eax, -4208(%ebp)
   38   %repeat
				jmp	.L44
		.L77:
   39
   40   a = 5; b = -2; c = 3
				movl	$5, -4204(%ebp)
				movl	$-2, -4200(%ebp)
				movl	$3, -4196(%ebp)
		.LBB33:
   41
   42   %for i = a, b, c %cycle
				movl	-4204(%ebp), %eax
				movl	%eax, -4144(%ebp)
				movl	-4200(%ebp), %eax
				movl	%eax, -4140(%ebp)
				movl	-4196(%ebp), %eax
				movl	%eax, -4136(%ebp)
		.LBB34:
				movl	-4136(%ebp), %eax
				subl	-4144(%ebp), %eax
				movl	%eax, -4132(%ebp)
				movl	-4132(%ebp), %eax
				xorl	-4140(%ebp), %eax
				testl	%eax, %eax
				js	.L47
				cmpl	$1, -4140(%ebp)
				je	.L48
				cmpl	$-1, -4140(%ebp)
				je	.L48
				movl	-4132(%ebp), %eax
				cltd
				idivl	-4140(%ebp)
				movl	%edx, %eax
				testl	%eax, %eax
				je	.L48
		.L47:
				movl	$1, %eax
				jmp	.L49
		.L48:
				movl	$0, %eax
		.L49:
		.LBE34:
				testl	%eax, %eax
				je	.L50
				leal	-1052(%ebp), %eax
				subl	$8, %esp
				leal	.LC3@GOTOFF(%ebx), %edx
				pushl	%edx
				pushl	%eax
				call	_imp_c2istr@PLT
				addl	$12, %esp
				movl	_imp_current_line@GOT(%ebx), %eax
				movl	(%eax), %eax
				testl	%eax, %eax
				je	.L51
				movl	_imp_current_line@GOT(%ebx), %eax
				movl	(%eax), %eax
				movl	%eax, -4224(%ebp)
				jmp	.L52
		.L51:
				movl	$42, -4224(%ebp)
		.L52:
				movl	_imp_current_file@GOT(%ebx), %eax
				movl	(%eax), %eax
				testl	%eax, %eax
				je	.L53
				movl	_imp_current_file@GOT(%ebx), %eax
				movl	(%eax), %edx
				leal	-796(%ebp), %eax
				subl	$8, %esp
				pushl	%edx
				pushl	%eax
				call	_imp_c2istr@PLT
				addl	$12, %esp
				jmp	.L54
		.L53:
		.LBB35:
				leal	-284(%ebp), %eax
				leal	.LC0@GOTOFF(%ebx), %edx
				movl	$64, %ecx
				movl	%eax, %edi
				movl	%edx, %esi
				rep movsl
				leal	-3356(%ebp), %eax
				leal	-284(%ebp), %edx
				movl	$64, %ecx
				movl	%eax, %edi
				movl	%edx, %esi
				rep movsl
		.LBE35:
				leal	-796(%ebp), %eax
				leal	-3356(%ebp), %edx
				movl	$64, %ecx
				movl	%eax, %edi
				movl	%edx, %esi
				rep movsl
		.L54:
				pushl	$0
				pushl	$1
				pushl	$5
				subl	$256, %esp
				movl	%esp, %eax
				movl	%eax, %edi
				leal	-1052(%ebp), %eax
				movl	$64, %edx
				movl	%eax, %esi
				movl	%edx, %ecx
				rep movsl
				pushl	-4224(%ebp)
				subl	$256, %esp
				movl	%esp, %eax
				movl	%eax, %edi
				leal	-796(%ebp), %eax
				movl	$64, %edx
				movl	%eax, %esi
				movl	%edx, %ecx
				rep movsl
				call	_signal_event@PLT
				addl	$528, %esp
		.L50:
				movl	-4144(%ebp), %eax
				subl	-4140(%ebp), %eax
				movl	%eax, -4212(%ebp)
		.L55:
				movl	-4212(%ebp), %eax
				cmpl	-4136(%ebp), %eax
				je	.L78
				movl	-4140(%ebp), %eax
				addl	%eax, -4212(%ebp)
				nop
		.L57:
		.LBE33:
   43     q = q+i+a
				movl	-4208(%ebp), %edx
				movl	-4212(%ebp), %eax
				addl	%eax, %edx
				movl	-4204(%ebp), %eax
				addl	%edx, %eax
				movl	%eax, -4208(%ebp)
   44   %repeat
				jmp	.L55
		.L78:
   45
   46   %if q = 120 %then printstring("Pass!") %else printstring("Fail!")
				cmpl	$120, -4208(%ebp)
				jne	.L79
		.LBB36:
				leal	-284(%ebp), %eax
				leal	.LC1@GOTOFF(%ebx), %edx
				movl	$64, %ecx
				movl	%eax, %edi
				movl	%edx, %esi
				rep movsl
				leal	-3100(%ebp), %eax
				leal	-284(%ebp), %edx
				movl	$64, %ecx
				movl	%eax, %edi
				movl	%edx, %esi
				rep movsl
				leal	-540(%ebp), %eax
				leal	-3100(%ebp), %edx
				movl	$64, %ecx
				movl	%eax, %edi
				movl	%edx, %esi
				rep movsl
		.LBE36:
		.LBB37:
		.LBB38:
				subl	$256, %esp
				movl	%esp, %eax
				movl	%eax, %edi
				leal	-540(%ebp), %eax
				movl	$64, %edx
				movl	%eax, %esi
				movl	%edx, %ecx
				rep movsl
				call	_imp_printstring@PLT
				addl	$256, %esp
		.LBE38:
		.LBE37:
				jmp	.L60
		.L79:
				nop
		.L59:
		.LBB39:
				leal	-284(%ebp), %eax
				leal	.LC2@GOTOFF(%ebx), %edx
				movl	$64, %ecx
				movl	%eax, %edi
				movl	%edx, %esi
				rep movsl
				leal	-2844(%ebp), %eax
				leal	-284(%ebp), %edx
				movl	$64, %ecx
				movl	%eax, %edi
				movl	%edx, %esi
				rep movsl
				leal	-284(%ebp), %eax
				leal	-2844(%ebp), %edx
				movl	$64, %ecx
				movl	%eax, %edi
				movl	%edx, %esi
				rep movsl
		.LBE39:
		.LBB40:
		.LBB41:
				subl	$256, %esp
				movl	%esp, %eax
				movl	%eax, %edi
				leal	-284(%ebp), %eax
				movl	$64, %edx
				movl	%eax, %esi
				movl	%edx, %ecx
				rep movsl
				call	_imp_printstring@PLT
				addl	$256, %esp
		.L60:
		.LBE41:
		.LBE40:
		.LBB42:
		.LBB43:
				call	_imp_newline@PLT
				movl	$0, -4128(%ebp)
		.LBE43:
		.LBE42:
		.LBB44:
		.LBB45:
				subl	$12, %esp
				pushl	-4128(%ebp)
				call	exit@PLT
		.LBE45:
		.LBE44:
		.LFE189:
				.section	.text.__x86.get_pc_thunk.bx,"axG",@progbits,__x86.get_pc_thunk.bx,comdat
				.globl	__x86.get_pc_thunk.bx
				.hidden	__x86.get_pc_thunk.bx
		__x86.get_pc_thunk.bx:
		.LFB190:
				movl	(%esp), %ebx
				ret
		.LFE190:
		.Letext0:
   47   newline
   48
   49 %endofprogram
   42 Statements compiled
