         Edinburgh IMP77 Compiler - Version 8.4
    1 %begin
				.option nopic
		.Ltext0:
				.align	1
				.globl	main
		main:
		.LFB185:
		.LVL0:
				add	sp,sp,-1840
				sd	ra,1832(sp)
				sd	s0,1824(sp)
				sd	s1,1816(sp)
				sd	s2,1808(sp)
				lui	a5,%hi(__stack_chk_guard)
				ld	a5,%lo(__stack_chk_guard)(a5)
				sd	a5,1800(sp)
    2   %reals %long
				call	_imp_initialise
		.LVL1:
		.LBB18:
    3
    4   %integer rounds
    5   %real pi = 1.0
    6
				lui	a5,%hi(.LC2)
				fld	fa4,%lo(.LC2)(a5)
		.LBB27:
				lui	a5,%hi(.LC2)
				fld	fa4,%lo(.LC2)(a5)
				j	.L6
		.LFE185:
				.section	.rodata
				.align	3
				.set	.LANCHOR0,. + 0
		.LC0:
				.byte	10
				.string	"rounds.txt"
				.zero	244
		__PRETTY_FUNCTION__.5601:
				.string	"_imp_SELECTINPUT"
				.zero	7
		.LC1:
				.byte	21
				.string	"test-new/leibnitz.imp"
				.zero	233
				.section	.rodata.str1.8,"aMS",@progbits,1
				.align	3
		.LC3:
				.string	"Illegal cycle I = 2, 1, ROUNDS"
				.section	.srodata.cst8,"aM",@progbits,8
				.align	3
		.LC2:
				.word	0
				.word	1072693248
		.LC4:
				.word	0
				.word	1074790400
		.Letext0:
    7   !%on %event 9 %start
    8   !  print string("Cannot open file"); newline
    9   !  %stop
   10   !%finish
   11
   12   %integer i
   13
   14   open input(1, "rounds.txt");   ! open file
				lui	a1,%hi(.LANCHOR0)
				addi	s0,a1,%lo(.LANCHOR0)
				li	a2,256
				addi	a1,a1,%lo(.LANCHOR0)
				add	a0,sp,1544
				call	memcpy
		.LVL2:
				li	a2,256
				add	a1,sp,1544
				add	a0,sp,520
				call	memcpy
		.LVL3:
				li	a2,256
				add	a1,sp,520
				add	a0,sp,1544
				call	memcpy
		.LVL4:
		.LBE18:
		.LBB19:
		.LBB20:
				li	a2,256
				add	a1,sp,1544
				add	a0,sp,256
				call	memcpy
		.LVL5:
				add	a1,sp,256
				li	a0,1
				call	_imp_openinput
		.LVL6:
		.LBE20:
		.LBE19:
		.LBB21:
		.LBB22:
				lui	a5,%hi(_imp_InStream)
				li	a4,1
				sw	a4,%lo(_imp_InStream)(a5)
				lui	a5,%hi(_imp_infile+296)
				ld	a4,%lo(_imp_infile+296)(a5)
				lui	a5,%hi(_imp_InFile)
				sd	a4,%lo(_imp_InFile)(a5)
				add	a0,s0,256
				call	check_instream
		.LVL7:
		.LBE22:
		.LBE21:
   15   select input(1)
   16
   17   read(rounds)
				add	a0,sp,516
				call	_imp_readint
		.LVL8:
		.LBB23:
		.LBB24:
				call	_imp_closeinput
		.LVL9:
		.LBE24:
		.LBE23:
   18
   19   close input;                   ! close file
   20
   21   rounds = rounds + 2;           ! do this outside the loop
				lw	s0,516(sp)
				addw	a5,s0,2
				sext.w	s1,a5
				sw	a5,516(sp)
		.LVL10:
		.LBB25:
   22
   23   %for i=2, 1, rounds %cycle
   24     %long %real x = -1.0 + 2.0 * (i & 1); ! allows vectorization
   25     pi = pi + (x / (2 * i - 1)); ! double / unsigned = double
				bltz	s0,.L13
		.LVL11:
		.L2:
				fmv.d	fa2,fa4
		.LVL12:
		.L7:
				and	a5,a4,1
				fcvt.d.w	fa5,a5
				fadd.d	fa5,fa5,fa5
				fsub.d	fa5,fa5,fa2
				fcvt.d.w	fa3,a3
				fdiv.d	fa5,fa5,fa3
				fadd.d	fa4,fa4,fa5
		.LVL14:
		.LDL1:
				addw	a3,a3,2
				lui	a5,%hi(_imp_current_file)
		.LVL20:
				ld	a1,%lo(_imp_current_file)(a5)
				beqz	a1,.L3
				add	a0,sp,1032
				call	_imp_c2istr
		.LVL21:
		.L4:
				lui	a5,%hi(_imp_current_line)
				lw	s2,%lo(_imp_current_line)(a5)
				bnez	s2,.L5
				li	s2,25
		.L5:
				lui	a1,%hi(.LC3)
				addi	a1,a1,%lo(.LC3)
				add	a0,sp,1288
				call	_imp_c2istr
		.LVL22:
				li	a2,256
				add	a1,sp,1032
				add	a0,sp,256
				call	memcpy
		.LVL23:
				li	a2,256
				add	a1,sp,1288
				mv	a0,sp
				call	memcpy
		.LVL24:
				li	a5,0
				li	a4,1
				li	a3,5
				mv	a2,sp
				mv	a1,s2
				add	a0,sp,256
				call	_signal_event
		.LVL25:
				j	.L2
		.LVL26:
		.L3:
		.LBB26:
				li	a2,256
				lui	a1,%hi(.LANCHOR0+280)
				addi	a1,a1,%lo(.LANCHOR0+280)
				add	a0,sp,1288
				call	memcpy
		.LVL27:
				li	a2,256
				add	a1,sp,1288
				add	a0,sp,776
				call	memcpy
		.LVL28:
		.LBE26:
				li	a2,256
				add	a1,sp,776
				add	a0,sp,1032
				call	memcpy
		.LVL29:
				j	.L4
		.LVL30:
		.L10:
		.LBE34:
   26   %repeat
				li	a4,1
		.LBE25:
   27
   28   pi = pi * 4
				li	a5,1
				beq	s1,a5,.L10
				addw	a2,s0,2
				li	a3,3
				bne	a4,a2,.L7
		.LVL15:
		.L6:
		.LBE27:
		.LBB28:
		.LBB29:
				li	a0,16
				lui	a5,%hi(.LC4)
				fld	fa0,%lo(.LC4)(a5)
				fmul.d	fa0,fa4,fa0
		.LVL16:
				call	_imp_printfl
		.LVL17:
		.LBE29:
		.LBE28:
		.LBB30:
		.LBB31:
				call	_imp_newline
		.LVL18:
		.LBE31:
		.LBE30:
		.LBB32:
		.LBB33:
				li	a0,0
				call	exit
		.LVL19:
		.L13:
		.LBE33:
		.LBE32:
		.LBB34:
   29   print fl(pi, 16);              ! print 16 decimal digits of pi
				addw	a4,a4,1
		.LVL13:
   30   newline
   31
   32 %endofprogram
   18 Statements compiled
