         Edinburgh IMP77 Compiler - Version 8.4
    1 %begin
				.section	".text"
		.Ltext0:
				.section	.rodata.str1.8,"aMS",@progbits,1
				.align 8
		.LC3:
				.asciz	"Illegal cycle I = 2, 1, ROUNDS"
				.section	".rodata"
		.LC0:
				.byte	10
				.asciz	"rounds.txt"
				.skip	244
		.LC1:
				.byte	21
				.asciz	"test-new/leibnitz.imp"
				.skip	233
				.section	.rodata.cst8,"aM",@progbits,8
				.align 8
		.LC2:
				.long	1072693248
				.long	0
				.align 8
		.LC4:
				.long	1074790400
				.long	0
				.section	".text"
				.align 4
				.global main
				.proc	04
		main:
		.LFB185:
				.register	%g2, #scratch
				.register	%g3, #scratch
				.register	%g7, #ignore
		.LVL0:
				save	%sp, -2000, %sp
		.LVL1:
				ldx	[%g7+40], %g1
				stx	%g1, [%fp+2039]
				mov	0, %g1
    2   %reals %long
				mov	%i1, %o1
				call	_imp_initialise, 0
				 mov	%i0, %o0
		.LVL2:
		.LBB18:
    3
    4   %integer rounds
    5   %real pi = 1.0
    6
				sethi	%hi(.LC2), %g4
				ldd	[%g4+%lo(.LC2)], %f10
		.LBB27:
				sethi	%hi(.LC2), %g1
				ba,pt	%xcc, .L6
				 ldd	[%g1+%lo(.LC2)], %f10
		.LFE185:
				.section	".rodata"
				.align 8
		__PRETTY_FUNCTION__.5656:
				.asciz	"_imp_SELECTINPUT"
				.section	".text"
		.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
				mov	256, %o2
				sethi	%hi(.LC0), %o1
				or	%o1, %lo(.LC0), %o1
				call	memcpy, 0
				 add	%fp, 1783, %o0
		.LVL3:
				mov	256, %o2
				add	%fp, 1783, %o1
				call	memcpy, 0
				 add	%fp, 759, %o0
		.LVL4:
				mov	256, %o2
				add	%fp, 759, %o1
				call	memcpy, 0
				 add	%fp, 1783, %o0
		.LVL5:
		.LBE18:
		.LBB19:
		.LBB20:
				mov	256, %o2
				add	%fp, 1783, %o1
				call	memcpy, 0
				 add	%fp, 495, %o0
		.LVL6:
				add	%fp, 495, %o1
				call	_imp_openinput, 0
				 mov	1, %o0
		.LVL7:
		.LBE20:
		.LBE19:
		.LBB21:
		.LBB22:
				sethi	%hi(_imp_InStream), %g1
				mov	1, %g2
				st	%g2, [%g1+%lo(_imp_InStream)]
				sethi	%hi(_imp_infile), %g1
				ldx	[%g1+%lo(_imp_infile)+296], %g2
				sethi	%hi(_imp_InFile), %g1
				stx	%g2, [%g1+%lo(_imp_InFile)]
				sethi	%hi(__PRETTY_FUNCTION__.5656), %o0
				call	check_instream, 0
				 or	%o0, %lo(__PRETTY_FUNCTION__.5656), %o0
		.LVL8:
		.LBE22:
		.LBE21:
   15   select input(1)
   16
   17   read(rounds)
				call	_imp_readint, 0
				 add	%fp, 755, %o0
		.LVL9:
		.LBB23:
		.LBB24:
				call	_imp_closeinput, 0
				 nop
		.LVL10:
		.LBE24:
		.LBE23:
   18
   19   close input;                   ! close file
   20
   21   rounds = rounds + 2;           ! do this outside the loop
				lduw	[%fp+755], %i5
				add	%i5, 2, %i4
		.LVL11:
		.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
				cmp	%i5, 0
				bl,pn	%icc, .L12
				 st	%i4, [%fp+755]
		.LVL12:
				fmovd	%f10, %f14
		.LVL13:
		.L7:
				and	%g1, 1, %g4
				st	%g4, [%fp+235]
				ld	[%fp+235], %f8
				fitod	%f8, %f8
				faddd	%f8, %f8, %f8
				fsubd	%f8, %f14, %f8
				st	%g2, [%fp+235]
				ld	[%fp+235], %f12
				fitod	%f12, %f12
				fdivd	%f8, %f12, %f8
				faddd	%f10, %f8, %f10
		.LVL15:
		.LDL1:
				sethi	%hi(_imp_current_file), %g1
				ldx	[%g1+%lo(_imp_current_file)], %o1
				brz,pn	%o1, .L3
				 mov	256, %o2
				call	_imp_c2istr, 0
				 add	%fp, 1271, %o0
		.LVL21:
				sethi	%hi(_imp_current_line), %g1
		.L14:
				lduw	[%g1+%lo(_imp_current_line)], %i3
				cmp	%i3, 0
				be,a,pt	%icc, .L5
				 mov	25, %i3
		.L5:
				sethi	%hi(.LC3), %o1
				or	%o1, %lo(.LC3), %o1
				call	_imp_c2istr, 0
				 add	%fp, 1527, %o0
		.LVL22:
				mov	256, %o2
				add	%fp, 1271, %o1
				call	memcpy, 0
				 add	%fp, 495, %o0
		.LVL23:
				mov	256, %o2
				add	%fp, 1527, %o1
				call	memcpy, 0
				 add	%fp, 239, %o0
		.LVL24:
				mov	0, %o5
				mov	1, %o4
				mov	5, %o3
				add	%fp, 239, %o2
				sra	%i3, 0, %o1
				call	_signal_event, 0
				 add	%fp, 495, %o0
		.LVL25:
		.LBE34:
				sethi	%hi(.LC1), %o1
				or	%o1, %lo(.LC1), %o1
				call	memcpy, 0
				 add	%fp, 1527, %o0
		.LVL26:
				mov	256, %o2
				add	%fp, 1527, %o1
				call	memcpy, 0
				 add	%fp, 1015, %o0
		.LVL27:
		.LBE26:
				mov	256, %o2
				add	%fp, 1015, %o1
				call	memcpy, 0
				 add	%fp, 1271, %o0
		.LVL28:
		.LBE35:
				ba,pt	%xcc, .L14
				 sethi	%hi(_imp_current_line), %g1
		.LVL29:
		.L10:
   26   %repeat
				mov	1, %g1
		.LBE25:
   27
   28   pi = pi * 4
				cmp	%i4, 1
		.L13:
				be,pn	%icc, .L10
				 add	%i5, 2, %g3
				mov	3, %g2
				cmp	%g1, %g3
				bne,pt	%icc, .L7
				 add	%g2, 2, %g2
		.LVL16:
		.L6:
		.LBE27:
		.LBB28:
		.LBB29:
				mov	16, %o1
				sethi	%hi(.LC4), %g1
				ldd	[%g1+%lo(.LC4)], %f0
		.LVL17:
				call	_imp_printfl, 0
				 fmuld	%f10, %f0, %f0
		.LVL18:
		.LBE29:
		.LBE28:
		.LBB30:
		.LBB31:
				call	_imp_newline, 0
				 nop
		.LVL19:
		.LBE31:
		.LBE30:
		.LBB32:
		.LBB33:
				call	exit, 0
				 mov	0, %o0
		.LVL20:
		.L12:
		.LBE33:
		.LBE32:
		.LBB34:
				ba,pt	%xcc, .L13
				 cmp	%i4, 1
		.L3:
		.LBB35:
		.LBB26:
   29   print fl(pi, 16);              ! print 16 decimal digits of pi
				add	%g1, 1, %g1
		.LVL14:
   30   newline
   31
   32 %endofprogram
   18 Statements compiled
