         Edinburgh IMP77 Compiler - Version 8.4
    1 %begin
				.section .mdebug.abi32
				.previous
				.nan	legacy
				.module	fp=xx
				.module	nooddspreg
				.abicalls
		$Ltext0:
				.align	2
				LFB187 = .
				.set	nomips16
				.set	nomicromips
				.ent	main
		main:
				.frame	$sp,1304,$31		# vars= 1032, regs= 1/0, args= 256, gp= 8
				.mask	0x80000000,-4
				.fmask	0x00000000,0
				.set	noreorder
				.set	nomacro
				LVL12 = .
				addiu	$sp,$sp,-1304
				sw	$31,1300($sp)
				lui	$28,%hi(__gnu_local_gp)
				addiu	$28,$28,%lo(__gnu_local_gp)
				.cprestore	256
				lw	$2,%got(__stack_chk_guard)($28)
				lw	$2,0($2)
				sw	$2,1292($sp)
    2
				lw	$25,%call16(_imp_initialise)($28)
				.reloc	1f,R_MIPS_JALR,_imp_initialise
			1:	jalr	$25
				nop
				LVL13 = .
				lw	$28,256($sp)
				LVL14 = .
				LVL15 = .
				LBB44 = .
				LBB45 = .
				lw	$2,%got(_imp_OutStream)($28)
				sw	$0,0($2)
				lw	$2,%got(_imp_outfile)($28)
				lw	$3,4($2)
				lw	$2,%got(_imp_OutFile)($28)
				sw	$3,0($2)
				lui	$4,%hi(__PRETTY_FUNCTION__.5601)
				addiu	$4,$4,%lo(__PRETTY_FUNCTION__.5601)
				lw	$25,%call16(check_outstream)($28)
				.reloc	1f,R_MIPS_JALR,check_outstream
			1:	jalr	$25
				nop
				LVL16 = .
				lw	$28,256($sp)
				LVL17 = .
				LBE45 = .
				LBE44 = .
				LBB46 = .
    3     ! An example program which uses a %routinespec and a call
    4     ! to the routine BEFORE actually the routine implementation
    5
    6     %routinespec css
    7
    8     selectoutput(0)
    9     printstring("start %SPEC test"); newline
				lui	$2,%hi($LC0)
				addiu	$2,$2,%lo($LC0)
				addiu	$3,$sp,1036
				addiu	$4,$2,256
		$L7:
				lw	$8,0($2)
				lw	$7,4($2)
				lw	$6,8($2)
				lw	$5,12($2)
				sw	$8,0($3)
				sw	$7,4($3)
				sw	$6,8($3)
				sw	$5,12($3)
				addiu	$2,$2,16
				bne	$2,$4,$L7
				addiu	$3,$3,16
				addiu	$2,$sp,1036
				addiu	$3,$sp,268
				addiu	$4,$sp,1292
		$L8:
				lw	$8,0($2)
				lw	$7,4($2)
				lw	$6,8($2)
				lw	$5,12($2)
				sw	$8,0($3)
				sw	$7,4($3)
				sw	$6,8($3)
				sw	$5,12($3)
				addiu	$2,$2,16
				bne	$2,$4,$L8
				addiu	$3,$3,16
				addiu	$2,$sp,268
				addiu	$3,$sp,1036
				addiu	$4,$sp,524
		$L9:
				lw	$8,0($2)
				lw	$7,4($2)
				lw	$6,8($2)
				lw	$5,12($2)
				sw	$8,0($3)
				sw	$7,4($3)
				sw	$6,8($3)
				sw	$5,12($3)
				addiu	$2,$2,16
				bne	$2,$4,$L9
				addiu	$3,$3,16
				LBE46 = .
				LBB47 = .
				LBB48 = .
				addiu	$2,$sp,1052
				addiu	$3,$sp,16
				addiu	$4,$sp,1292
		$L10:
				lw	$8,0($2)
				lw	$7,4($2)
				lw	$6,8($2)
				lw	$5,12($2)
				sw	$8,0($3)
				sw	$7,4($3)
				sw	$6,8($3)
				sw	$5,12($3)
				addiu	$2,$2,16
				bne	$2,$4,$L10
				addiu	$3,$3,16
				lw	$4,1036($sp)
				lw	$5,1040($sp)
				lw	$6,1044($sp)
				lw	$7,1048($sp)
				lw	$25,%call16(_imp_printstring)($28)
				.reloc	1f,R_MIPS_JALR,_imp_printstring
			1:	jalr	$25
				nop
				LVL18 = .
				lw	$28,256($sp)
				LBE48 = .
				LBE47 = .
				LBB49 = .
				LBB50 = .
				lw	$25,%call16(_imp_newline)($28)
				.reloc	1f,R_MIPS_JALR,_imp_newline
			1:	jalr	$25
				nop
				LVL19 = .
				lw	$28,256($sp)
				LVL20 = .
				LBE50 = .
				LBE49 = .
				LBB51 = .
				LBB52 = .
				LBB53 = .
				LBB54 = .
   10     css
   11     printstring("end %SPEC test"); newline
				lui	$2,%hi($LC1)
				addiu	$2,$2,%lo($LC1)
				addiu	$3,$sp,780
				addiu	$4,$2,256
		$L11:
				lw	$8,0($2)
				lw	$7,4($2)
				lw	$6,8($2)
				lw	$5,12($2)
				sw	$8,0($3)
				sw	$7,4($3)
				sw	$6,8($3)
				sw	$5,12($3)
				addiu	$2,$2,16
				bne	$2,$4,$L11
				addiu	$3,$3,16
				addiu	$2,$sp,780
				addiu	$3,$sp,524
				addiu	$4,$sp,1036
		$L12:
				lw	$8,0($2)
				lw	$7,4($2)
				lw	$6,8($2)
				lw	$5,12($2)
				sw	$8,0($3)
				sw	$7,4($3)
				sw	$6,8($3)
				sw	$5,12($3)
				addiu	$2,$2,16
				bne	$2,$4,$L12
				addiu	$3,$3,16
				addiu	$2,$sp,524
				addiu	$3,$sp,780
				move	$4,$3
		$L13:
				lw	$8,0($2)
				lw	$7,4($2)
				lw	$6,8($2)
				lw	$5,12($2)
				sw	$8,0($3)
				sw	$7,4($3)
				sw	$6,8($3)
				sw	$5,12($3)
				addiu	$2,$2,16
				bne	$2,$4,$L13
				addiu	$3,$3,16
				LBE57 = .
				LBB58 = .
				LBB59 = .
				addiu	$2,$sp,796
				addiu	$3,$sp,16
				addiu	$4,$sp,1036
		$L14:
				lw	$8,0($2)
				lw	$7,4($2)
				lw	$6,8($2)
				lw	$5,12($2)
				sw	$8,0($3)
				sw	$7,4($3)
				sw	$6,8($3)
				sw	$5,12($3)
				addiu	$2,$2,16
				bne	$2,$4,$L14
				addiu	$3,$3,16
				lw	$4,780($sp)
				lw	$5,784($sp)
				lw	$6,788($sp)
				lw	$7,792($sp)
				lw	$25,%call16(_imp_printstring)($28)
				.reloc	1f,R_MIPS_JALR,_imp_printstring
			1:	jalr	$25
				nop
				LVL25 = .
				lw	$28,256($sp)
				LBE59 = .
				LBE58 = .
				LBB60 = .
				LBB61 = .
				lw	$25,%call16(_imp_newline)($28)
				.reloc	1f,R_MIPS_JALR,_imp_newline
			1:	jalr	$25
				nop
				LVL26 = .
				lw	$28,256($sp)
				LVL27 = .
				LBE61 = .
				LBE60 = .
				LBB62 = .
				LBB63 = .
				move	$4,$0
				lw	$25,%call16(exit)($28)
				.reloc	1f,R_MIPS_JALR,exit
			1:	jalr	$25
				nop
				LVL28 = .
				LBE63 = .
				LBE62 = .
				.set	macro
				.set	reorder
				.end	main
		$LFE185:
				.comm	CALLCOUNT.6023,4,4
				.rdata
				.align	2
		__PRETTY_FUNCTION__.5601:
				.ascii	"_imp_SELECTOUTPUT\000"
				.text
		$Letext0:
   12
   13     %routine css
   14         %integer a,b,c
   15
   16         %integerfnspec three(%integer p1,p2,p3)
   17         %integerfnspec two(%integer p1,p2)
   18
   19         c = 5
   20
   21         %integerfn one(%integer p1)
				.set	nomips16
				.set	nomicromips
				.ent	ONE.6017
		ONE.6017:
				.frame	$sp,40,$31		# vars= 0, regs= 4/0, args= 16, gp= 8
				.mask	0x80070000,-4
				.fmask	0x00000000,0
				.set	noreorder
				.set	nomacro
				LVL0 = .
				addiu	$sp,$sp,-40
				sw	$31,36($sp)
				sw	$18,32($sp)
				sw	$17,28($sp)
				sw	$16,24($sp)
				LVL1 = .
   22             %integer a1,b1,c1,d1
   23             %owninteger callcount
   24
   25             %begin
   26                 a1 = p1
   27                 b1 = 2*p1
				sll	$17,$4,1
				LVL2 = .
   28                 c1 = 3*p1
   29                 callcount = callcount + 1
				lui	$3,%hi(CALLCOUNT.6023)
				lw	$2,%lo(CALLCOUNT.6023)($3)
				addiu	$2,$2,1
				sw	$2,%lo(CALLCOUNT.6023)($3)
				LDL1 = .
   30             %end
   31
   32             ! Use callcount as a defence against repeated calls to routine 'three'
   33             ! which would cause a stack overflow.
   34             %if (callcount < 10) %then d1 = three(a1,b1,c1) %else d1 = -1
				slt	$2,$2,10
				beq	$2,$0,$L4
				addu	$18,$17,$4
				LVL3 = .
				LBB20 = .
				LBB21 = .
   35             %result = d1
				.option	pic0
				b	$L1
				.option	pic2
				li	$2,-1			# 0xffffffffffffffff
				.set	macro
				.set	reorder
				.end	ONE.6017
		$LFE187:
				.rdata
				.align	2
		$LC0:
				.byte	16
				.ascii	"start %SPEC test\000"
				.space	238
				.align	2
		$LC1:
				.byte	14
				.ascii	"end %SPEC test\000"
				.space	240
				.align	2
				.globl	main
				LFB185 = .
   36         %end
				lw	$31,36($sp)
				lw	$18,32($sp)
				LVL9 = .
				lw	$17,28($sp)
				LVL10 = .
				lw	$16,24($sp)
				jr	$31
				addiu	$sp,$sp,40
				LVL11 = .
		$L4:
				L2 = .
				L3 = .
   37
   38         b = 3
   39
   40         %integerfn three(%integer p1,p2,p3)
   41             %integer a3,b3
   42             a3 = one(p1)
				.option	pic0
				jal	ONE.6017
				nop
				.option	pic2
				LVL4 = .
				move	$16,$2
				LVL5 = .
				LBB22 = .
				LBB23 = .
				li	$4,3			# 0x3
				.option	pic0
				jal	ONE.6017
				nop
				.option	pic2
				LVL21 = .
				lw	$28,256($sp)
				LVL22 = .
				LBB55 = .
				LBB56 = .
				li	$4,13			# 0xd
				.option	pic0
				jal	ONE.6017
				nop
				.option	pic2
				LVL23 = .
				lw	$28,256($sp)
				LVL24 = .
				LBE56 = .
				LBE55 = .
				LBE54 = .
				LBE53 = .
				LBE52 = .
				LBE51 = .
				LBB57 = .
   43             b3 = two(p2,p3)
   44             %result = a3 + b3
				addu	$2,$16,$2
				LVL8 = .
		$L1:
				LBE21 = .
				LBE20 = .
   45         %end
   46
   47         a = three(b,c,b+c)
   48
   49         %integerfn two(%integer p1,p2)
   50             %integer a2,b2
   51
   52             %result = one(p1+p2)
				addu	$4,$17,$18
				.option	pic0
				jal	ONE.6017
				nop
				.option	pic2
				LVL6 = .
				LVL7 = .
				LBE23 = .
				LBE22 = .
   53         %end
?B2 unused
?A2 unused
   54
   55     %end
   56
   57 %endofprogram
   39 Statements compiled
