         Edinburgh IMP77 Compiler - Version 8.4
    1 %begin
				.option nopic
		.Ltext0:
				.align	1
				.globl	main
		main:
		.LFB185:
		.LVL0:
				add	sp,sp,-608
				sd	ra,600(sp)
				sd	s0,592(sp)
				lui	a5,%hi(__stack_chk_guard)
				ld	a5,%lo(__stack_chk_guard)(a5)
				sd	a5,584(sp)
    2
				call	_imp_initialise
		.LVL1:
				add	a4,sp,176
    3   ! the example in https://www.ancientgeek.org.uk/EMAS/EMAS_Papers/The_IMP_language_and_compiler.pdf
    4   %integer i, j, k, n
    5
    6   n = 42 ; ! a little initialisation has been added which was not explicit in the paper to avoid runtime errors.
    7
    8   %integer %array a(0:100), b(0:n)
    9
   10   a(n) = n %for n = 0, 1, 100
   11   b(n) = n %for n = 0, 1, 42
				li	a5,-1
   12   write(n,3); newline
				li	a5,-1
				li	a1,3
				li	a0,42
				call	_imp_writeint
		.LVL6:
		.LBB11:
		.LBB12:
				call	_imp_newline
		.LVL7:
				add	a5,sp,180
				add	a4,sp,8
				add	a2,sp,348
		.LBE12:
		.LBE11:
				li	a0,0
   13
				li	a2,100
		.LVL2:
		.L2:
				bne	a5,a2,.L2
				mv	a4,sp
   14   n = 42
				addw	a3,a5,1
				sext.w	a5,a3
		.LVL3:
				li	a2,42
		.LVL4:
		.L3:
				addw	a3,a5,1
				sext.w	a5,a3
		.LVL5:
				bne	a5,a2,.L3
		.L4:
   15
				sw	a3,0(a4)
		.LDL1:
				add	a4,a4,4
   16   j = 0; k = 0;
				sw	a3,0(a4)
		.LDL2:
		.LDL3:
				add	a4,a4,4
   17
				li	s0,0
		.LVL8:
		.L5:
		.LBB13:
   18   %cycle i = 1, 1, n
   19     j = j + a(i)
				lw	a3,0(a5)
				addw	a0,a3,a0
		.LVL9:
   20     k = k + b(i+1)        ;! should cause a runtime error since i+1 == n+1 and array b is 0:n ...
				lw	a3,0(a4)
				addw	s0,a3,s0
		.LVL10:
		.LDL4:
				add	a5,a5,4
				add	a4,a4,4
   21   %repeat
   22
   23   write(j, 5); write(k, 5); newline
				bne	a5,a2,.L5
		.L6:
		.LBE13:
				li	a1,5
				call	_imp_writeint
		.LVL11:
   24
				li	a1,5
				mv	a0,s0
				call	_imp_writeint
		.LVL12:
		.LBB14:
		.LBB15:
				call	_imp_newline
		.LVL13:
		.LBE15:
		.LBE14:
		.LBB16:
		.LBB17:
				li	a0,0
				call	exit
		.LVL14:
		.LBE17:
		.LBE16:
		.LFE185:
		.Letext0:
   25 %endofprogram
   19 Statements compiled
