         Edinburgh IMP77 Compiler - Version 8.4
    1 %realslong
				.option nopic
		.Ltext0:
				.align	1
		ARCSIN.6043:
		.LFB187:
    2
    3 %begin
		.LVL66:
				add	sp,sp,-1744
				sd	ra,1736(sp)
				sd	s0,1728(sp)
				sd	s1,1720(sp)
				sd	s2,1712(sp)
				sd	s3,1704(sp)
				sd	s4,1696(sp)
				sd	s5,1688(sp)
				fsd	fs0,1672(sp)
				fsd	fs1,1664(sp)
				fsd	fs2,1656(sp)
				fsd	fs3,1648(sp)
				fsd	fs4,1640(sp)
				fsd	fs5,1632(sp)
				li	t1,-4096
				add	sp,sp,t1
				lui	a5,%hi(__stack_chk_guard)
				ld	a5,%lo(__stack_chk_guard)(a5)
				li	s0,4096
				add	a4,s0,1608
				add	a3,sp,16
				add	a4,a4,a3
				sd	a5,0(a4)
				add	a5,s0,1600
				add	a5,a5,a3
				add	a4,s0,1728
				add	a4,a4,a3
				sd	a4,0(a5)
    4     %integer a line, b line, c line, d line,
				call	_imp_initialise
		.LVL67:
    5              e line, f line, g prime line,
    6              h line
    7     %real %array spectral line(1:8)
    8     %integer current surfaces
    9     %real %array test case(1:4, 1:4)
   10     %integer curvature radius, index of refraction, dispersion,
   11         edge thickness
   12
   13     %real clear aperture, aberr lspher, aberr osc, aberr lchrom,
   14          max lspher, max osc, max lchrom, radius of curvature,
   15          object distance, ray height, axis slope angle,
   16          from index, to index
   17     %integer number of iterations, iteration
   18     %integer paraxial, marginal ray, paraxial ray
   19     %integer od field, sa field
   20     %real %array od sa(1:2, 1:2)
   21     %real od cline, od fline
   22     %real %fn cot(%real x)
   23         %result = 1.0 / (sin(x) / cos(x))
				fmv.d	fs3,fs1
				j	.L11
		.LVL13:
		.L27:
		.LBE140:
		.LBE139:
		.LBE138:
		.LBE137:
				fdiv.d	fs0,fs0,fs8
				fdiv.d	fs0,fs3,fs0
		.LBE141:
		.LBE148:
   24     %end {cot}
   25     %real %fn arc sin(%real x)
		.LVL0:
				add	sp,sp,-32
				sd	ra,24(sp)
				fsd	fs0,8(sp)
				fsd	fs1,0(sp)
				fmv.d	fs1,fa0
		.LBB102:
		.LBB103:
				fmul.d	fa5,fa0,fa0
		.LBE103:
		.LBE102:
   26         %result = 2 * arc tan1(x / (1 + sqrt(1 - x^2)))
				lui	a5,%hi(.LC8)
				fld	fa0,%lo(.LC8)(a5)
		.LVL1:
				fsub.d	fa0,fa0,fa5
		.LVL2:
		.LBB104:
		.LBB105:
				fsqrt.d	fs0,fa0
				fmv.d.x	fa5,zero
				frflags	a4
				flt.d	a5,fa0,fa5
				fsflags a4
				bnez	a5,.L4
		.LVL3:
		.L2:
		.LBE105:
		.LBE104:
				lui	a5,%hi(.LC8)
				fld	fa0,%lo(.LC8)(a5)
				fadd.d	fa0,fs0,fa0
		.LBB107:
		.LBB108:
				fdiv.d	fa0,fs1,fa0
		.LVL4:
				call	atan
		.LVL5:
		.LBE108:
		.LBE107:
   27     %end {arc sin}
				fadd.d	fa0,fa0,fa0
				ld	ra,24(sp)
				fld	fs0,8(sp)
				fld	fs1,0(sp)
		.LVL6:
				add	sp,sp,32
				jr	ra
		.LVL7:
		.L4:
		.LBB109:
		.LBB106:
				call	sqrt
		.LVL8:
				j	.L2
		.LBE106:
		.LBE109:
		.LFE187:
				.align	1
		TRACELINE.6072:
		.LFB190:
   28     %routine out big real(%integer channel, %real x)
   29         %real fraction
   30         fraction = x
   31     %end {out big real}
?CHANNEL unused
   32     %routine transit surface
   33         %real iang, rang, iang sin, rang sin,
   34               old axis slope angle, sagitta
   35         %if paraxial = paraxial ray %then %start
				lw	a4,276(s0)
				lw	a5,272(s0)
				beq	a4,a5,.L28
		.L13:
   36             %if radius of curvature # 0 %then %start
				fmv.d.x	fa5,zero
				feq.d	a5,fs0,fa5
				bnez	a5,.L14
   37                 %if object distance = 0 %then %start
				fld	fa5,224(s0)
				fmv.d.x	fa4,zero
				feq.d	a5,fa5,fa4
				beqz	a5,.L15
   38                     axis slope angle = 0
   39                     iang sin = ray height / radius of curvature
				fld	fa5,208(s0)
				fdiv.d	fa4,fa5,fs0
		.LVL27:
   40                 %finish %else                                         %c
   41                     iang sin = ((object distance -                    %c
   42                         radius of curvature) / radius of curvature) * %c
   43                         axis slope angle
				fld	fa2,216(s0)
				fsub.d	fa4,fa5,fs0
				fdiv.d	fa4,fa4,fs0
				fmul.d	fa4,fa4,fa2
		.LVL30:
   44                 rang sin = (from index / to index) * iang sin
				fld	fa5,200(s0)
				fld	fa3,192(s0)
				fdiv.d	fa5,fa5,fa3
				fmul.d	fa5,fa5,fa4
		.LVL28:
				fld	fa3,200(s0)
				fld	fa1,192(s0)
				fdiv.d	fa3,fa3,fa1
				fmul.d	fa4,fa3,fa4
		.LVL31:
   45                 old axis slope angle = axis slope angle
   46                 axis slope angle = axis slope angle +                 %c
				fmv.d.x	fs0,zero
				fadd.d	fs0,fa4,fs0
				fsub.d	fs0,fs0,fa5
				fsd	fs0,216(s0)
				j	.L16
		.LVL29:
		.L15:
				fadd.d	fs0,fa2,fa4
				fsub.d	fs0,fs0,fa4
				fsd	fs0,216(s0)
   47                     iang sin - rang sin
   48                 %if object distance # 0 %then                         %c
   49                     ray height = object distance * old axis slope angle
				fmul.d	fa5,fa5,fa2
		.LVL32:
				fsd	fa5,208(s0)
		.LVL33:
		.L16:
   50                 object distance = ray height / axis slope angle
				fld	fa5,208(s0)
				fdiv.d	fs0,fa5,fs0
				fsd	fs0,224(s0)
				j	.L22
		.L14:
   51             %else
   52                 object distance = object distance * (to index / from index)
				fld	fa3,192(s0)
				fld	fa5,200(s0)
				fdiv.d	fa2,fa3,fa5
				fld	fa4,224(s0)
				fmul.d	fa4,fa4,fa2
				fsd	fa4,224(s0)
   53                 axis slope angle = axis slope angle * (from index / to index)
				fdiv.d	fa5,fa5,fa3
				fld	fa4,216(s0)
				fmul.d	fa5,fa4,fa5
				fsd	fa5,216(s0)
				j	.L22
		.L19:
		.LVL34:
		.LBB142:
		.LBB143:
				fld	fa0,216(s0)
				call	sin
		.LVL35:
		.LBE143:
		.LBE142:
   54             %finish
   55         %else
   56             %if radius of curvature # 0 %then %start
				fmv.d.x	fa5,zero
				feq.d	a5,fs0,fa5
				bnez	a5,.L18
   57                 %if object distance = 0 %then %start
				fld	fs5,224(s0)
				feq.d	a5,fs5,fa5
				beqz	a5,.L19
   58                     axis slope angle = 0
				fsd	fa5,216(s0)
   59                     iang sin = ray height / radius of curvature
				fld	fa5,208(s0)
				fdiv.d	fs0,fa5,fs0
		.LVL54:
				j	.L20
		.LVL55:
		.L18:
		.LBB151:
		.LBB152:
				fld	fa0,216(s0)
				call	sin
		.LVL56:
		.LBE152:
		.LBE151:
   60                 %finish %else %c
   61                     iang sin = ((object distance -                    %c
   62                         radius of curvature) / radius of curvature) * %c
   63                         sin(axis slope angle)
				fsub.d	fs5,fs5,fs0
				fdiv.d	fs0,fs5,fs0
				fmul.d	fs0,fs0,fa0
		.LVL36:
		.L20:
   64                 iang = arc sin(iang sin)
				fmv.d	fa0,fs0
				call	ARCSIN.6043
		.LVL37:
   65                 rang sin = (from index / to index) * iang sin
				fld	fa0,200(s0)
		.LVL38:
				fld	fa5,192(s0)
				fdiv.d	fa0,fa0,fa5
   66                 old axis slope angle = axis slope angle
   67                 axis slope angle = axis slope angle +                 %c
				fld	fs6,216(s0)
				fadd.d	fs6,fa0,fs6
				fmul.d	fa0,fa0,fs0
		.LVL39:
				call	ARCSIN.6043
		.LVL40:
				fsub.d	fs5,fs6,fa0
				mv	a1,sp
				add	a0,sp,8
				fmv.d	fa0,fs5
				call	sincos
		.LVL41:
				fld	fs8,0(sp)
				fld	fs0,8(sp)
		.LVL42:
				fsd	fs5,216(s0)
   68                     iang - arcsin(rang sin)
   69
   70 ! for some reason imp2021 likes this but not the original!:
   71 sagitta = 2 * radius of curvature * (sin((old axis slope angle + iang) / 2) ^ 2)
				lui	a4,%hi(.LC10)
				fld	fs4,%lo(.LC10)(a4)
		.LBB139:
		.LBB140:
				fld	fs5,232(s0)
		.LVL43:
		.LBB144:
		.LBB145:
				fmul.d	fa0,fs6,fs4
				call	sin
		.LVL44:
				fmv.d	fs7,fa0
		.LVL45:
		.LBE145:
		.LBE144:
		.LBB146:
		.LBB147:
				fmv.d	fa0,fs6
		.LVL46:
				call	sin
		.LVL47:
		.LBE147:
		.LBE146:
		.LBB148:
		.LBB141:
				fadd.d	fs5,fs5,fs5
		.LVL48:
		.LBB149:
		.LBB150:
				fmul.d	fs7,fs7,fs7
		.LBE150:
		.LBE149:
				fmul.d	fs5,fs5,fs7
		.LVL49:
   72
   73 !                sagitta = sin((old axis slope angle + iang) / 2)
   74 !                sagitta = 2 * radius of curvature * (sagitta ^ 2)
   75 !%comment                 sagitta = sin((old axis slope angle + iang) / 2)
   76 !%comment                 sagitta = 2 * radius of curvature * (sagitta ^ 2)
   77
   78
   79 object distance = ((radius of curvature *             %c
				fmul.d	fa0,fs5,fa0
				fmul.d	fs0,fs0,fa0
				fadd.d	fs0,fs0,fs5
				fsd	fs0,224(s0)
		.L17:
		.L21:
		.LVL50:
		.L22:
		.LBE157:
		.LBE160:
   80                     sin(old axis slope angle + iang)) *               %c
   81                     cot(axis slope angle)) + sagitta
   82             %else
   83                 rang = -arcsin((from index / to index) *              %c
				fld	fa5,200(s0)
				fld	fa4,192(s0)
				fdiv.d	fa5,fa5,fa4
				fmul.d	fa0,fa5,fa0
				call	ARCSIN.6043
		.LVL57:
				fmv.d	fs5,fa0
		.LVL58:
		.LBB153:
		.LBB154:
				call	cos
		.LVL59:
				fmv.d	fs0,fa0
		.LVL60:
		.LBE154:
		.LBE153:
		.LBB155:
		.LBB156:
				fld	fa0,216(s0)
				call	cos
		.LVL61:
		.LBE156:
		.LBE155:
   84                     sin(axis slope angle))
   85                 object distance = object distance * ((to index *      %c
				fld	fa5,192(s0)
				fmul.d	fs0,fs0,fa5
				fld	fa5,200(s0)
				fmul.d	fa0,fa0,fa5
				fdiv.d	fs0,fs0,fa0
				fld	fa5,224(s0)
				fmul.d	fs0,fa5,fs0
				fsd	fs0,224(s0)
   86                     cos(-rang)) / (from index *                       %c
   87                     cos(axis slope angle)))
   88                 axis slope angle = -rang
				fsd	fs5,216(s0)
				j	.L22
		.L10:
		.LVL62:
		.L5:
		.LBE158:
		.LBE161:
		.LBE135:
   89             %finish
   90         %finish
   91     %end {transit surface}
   92     %routine trace line(%integer line, %real ray h)
		.LVL9:
				add	sp,sp,-1440
				sd	ra,1432(sp)
				sd	s0,1424(sp)
				sd	s1,1416(sp)
				sd	s2,1408(sp)
				sd	s3,1400(sp)
				sd	s4,1392(sp)
				fsd	fs0,1384(sp)
				fsd	fs1,1376(sp)
				fsd	fs2,1368(sp)
				fsd	fs3,1360(sp)
				fsd	fs4,1352(sp)
				fsd	fs5,1344(sp)
				fsd	fs6,1336(sp)
				fsd	fs7,1328(sp)
				fsd	fs8,1320(sp)
				mv	s4,a0
				mv	s0,t2
				lui	a5,%hi(__stack_chk_guard)
				ld	a5,%lo(__stack_chk_guard)(a5)
				sd	a5,1304(sp)
   93         %integer i
   94         object distance = 0
				sd	zero,224(t2)
   95         ray height = ray h
				fsd	fa0,208(t2)
   96         from index = 1
				lui	a5,%hi(.LC8)
				fld	fa5,%lo(.LC8)(a5)
				fsd	fa5,200(t2)
		.LBB135:
   97         %for i = 1, 1, current surfaces %cycle
   98             radius of curvature = test case(i, curvature radius)
				lw	s3,268(t2)
		.LVL10:
		.LBB136:
				lw	a5,264(s0)
				addw	a5,a5,-1
				sll	a4,s1,2
				add	a5,a4,a5
				add	a5,a5,8
				sll	a5,a5,3
				add	a5,s0,a5
				fld	fs0,0(a5)
				fsd	fs0,232(s0)
   99             to index = test case(i, index of refraction)
				addw	a5,s3,-1
		.LVL11:
		.LBE136:
				sll	a4,a5,32
				bltz	a4,.L27
		.LVL12:
		.L6:
				lui	a5,%hi(_imp_current_file)
		.LVL14:
				ld	a1,%lo(_imp_current_file)(a5)
				beqz	a1,.L7
				add	a0,sp,792
		.LVL15:
				call	_imp_c2istr
		.LVL16:
		.L8:
				lui	a5,%hi(_imp_current_line)
				lw	s1,%lo(_imp_current_line)(a5)
				bnez	s1,.L9
				li	s1,99
		.L9:
				lui	a1,%hi(.LC9)
				addi	a1,a1,%lo(.LC9)
				add	a0,sp,1048
				call	_imp_c2istr
		.LVL17:
				li	a2,256
				add	a1,sp,792
				add	a0,sp,272
				call	memcpy
		.LVL18:
				li	a2,256
				add	a1,sp,1048
				add	a0,sp,16
				call	memcpy
		.LVL19:
				li	a5,0
				li	a4,1
				li	a3,5
				add	a2,sp,16
				mv	a1,s1
				add	a0,sp,272
				call	_signal_event
		.LVL20:
				j	.L6
		.LVL21:
		.L7:
		.LBB159:
				li	a2,256
				lui	a1,%hi(.LANCHOR0)
				addi	a1,a1,%lo(.LANCHOR0)
				add	a0,sp,1048
		.LVL22:
				call	memcpy
		.LVL23:
				li	a2,256
				add	a1,sp,1048
				add	a0,sp,536
				call	memcpy
		.LVL24:
		.LBE159:
				li	a2,256
				add	a1,sp,536
				add	a0,sp,792
				call	memcpy
		.LVL25:
				j	.L8
		.LVL26:
		.L28:
		.LBB160:
		.LBB157:
				lw	a5,260(s0)
				addw	a5,a5,-1
				add	a4,a4,a5
				add	a4,a4,8
				sll	a4,a4,3
				add	a4,s0,a4
				fld	fa4,0(a4)
				fsd	fa4,192(s0)
  100             %if to index > 1 %then                                     %c
				lui	a5,%hi(.LC8)
				fld	fs1,%lo(.LC8)(a5)
				fle.d	a5,fa4,fs1
				bnez	a5,.L12
  101                 to index = to index + ((spectral line(d line) -        %c
				addw	s4,s4,-1
				sll	s4,s4,3
				fmv.d	fs2,fs1
		.LBB137:
		.LBB138:
				lw	a5,256(s0)
				addw	a5,a5,-1
				sll	a5,a5,3
				add	a5,s0,a5
				add	a4,s0,s4
				fld	fa5,0(a5)
				fld	fa3,0(a4)
				fsub.d	fa5,fa5,fa3
				lw	a4,252(s0)
				addw	a4,a4,-1
				sll	a4,a4,3
				add	a4,s0,a4
				lw	a5,248(s0)
				addw	a5,a5,-1
				sll	a5,a5,3
				add	a5,s0,a5
				fld	fa3,0(a4)
				fld	fa2,0(a5)
				fsub.d	fa3,fa3,fa2
				fdiv.d	fa5,fa5,fa3
				fsub.d	fa3,fa4,fs2
				lw	a5,244(s0)
				addw	a4,a5,-1
				sll	a5,s1,2
				add	a5,a5,a4
				add	a5,a5,8
				sll	a5,a5,3
				add	a5,s0,a5
				fld	fa2,0(a5)
				fdiv.d	fa3,fa3,fa2
				fmul.d	fa5,fa5,fa3
				fadd.d	fa5,fa5,fa4
				fsd	fa5,192(s0)
		.L12:
		.LBB161:
		.LBB158:
  102                     spectral line(line)) /                             %c
				beqz	s3,.L5
				li	s1,0
				beq	s3,s2,.L5
		.L11:
		.LVL52:
  103                     (spectral line(c line) - spectral line(f line))) * %c
				addw	s2,s1,1
		.LVL53:
  104                     ((test case(i, index of refraction) - 1.0) /       %c
  105                     test case(i, dispersion))
  106             transit surface
  107             from index = to index
				fld	fa5,192(s0)
				fsd	fa5,200(s0)
  108             %if i < current surfaces %then                             %c
				lw	a5,268(s0)
				ble	a5,s2,.L23
  109                 object distance = object distance -                    %c
				lw	a5,240(s0)
				addw	a4,a5,-1
				sll	a5,s1,2
				add	a5,a5,a4
				add	a5,a5,8
				sll	a5,a5,3
				add	a5,s0,a5
				fld	fa5,224(s0)
				fld	fa4,0(a5)
				fsub.d	fa5,fa5,fa4
				fsd	fa5,224(s0)
		.L23:
				mv	s1,s2
		.LVL51:
  110                     test case(i, edge thickness)
  111         %repeat
  112     %end {trace line}
  113     %comment END GLOBAL DECLARATONS
				ld	a4,1304(sp)
				lui	a5,%hi(__stack_chk_guard)
				ld	a5,%lo(__stack_chk_guard)(a5)
				bne	a4,a5,.L29
				ld	ra,1432(sp)
				ld	s0,1424(sp)
				ld	s1,1416(sp)
				ld	s2,1408(sp)
				ld	s3,1400(sp)
		.LVL63:
				ld	s4,1392(sp)
				fld	fs0,1384(sp)
				fld	fs1,1376(sp)
				fld	fs2,1368(sp)
				fld	fs3,1360(sp)
				fld	fs4,1352(sp)
				fld	fs5,1344(sp)
				fld	fs6,1336(sp)
				fld	fs7,1328(sp)
				fld	fs8,1320(sp)
				add	sp,sp,1440
				jr	ra
		.LVL64:
		.L29:
				call	__stack_chk_fail
		.LVL65:
		.LFE190:
				.align	1
				.globl	main
		main:
		.LFB185:
  114     %comment Spectral lines
  115     a line = 1; b line = 2; c line = 3; d line = 4
  116         e line = 5; f line = 6; g prime line = 7
  117         h line = 8
				li	a3,3
				add	a5,s0,1572
				add	a4,sp,16
				add	a5,a5,a4
				sw	a3,0(a5)
				li	a4,6
				add	a1,s0,1568
				add	a0,sp,16
				add	a1,a1,a0
				sw	a4,0(a1)
		.LVL69:
				lui	a4,%hi(.LC11)
				fld	fa5,%lo(.LC11)(a4)
				add	a4,s0,1320
				add	a4,a4,a0
				fsd	fa5,0(a4)
  118     spectral line(a line)       = 7621.0
				li	a5,4
				add	a4,s0,1576
				add	a1,sp,16
				add	a4,a4,a1
				sw	a5,0(a4)
		.LVL68:
  119     spectral line(b line)       = 6869.955
				lui	a4,%hi(.LC12)
				fld	fa5,%lo(.LC12)(a4)
				add	a4,s0,1328
				add	a4,a4,a0
				fsd	fa5,0(a4)
  120     spectral line(c line)       = 6562.8160
				lui	a4,%hi(.LC13)
				fld	fa5,%lo(.LC13)(a4)
				add	a4,s0,1336
				add	a4,a4,a0
				fsd	fa5,0(a4)
  121     spectral line(d line)       = 5895.944
				lui	a4,%hi(.LC14)
				fld	fa5,%lo(.LC14)(a4)
				add	a4,s0,1344
				add	a4,a4,a0
				fsd	fa5,0(a4)
  122     spectral line(e line)       = 5269.557
				lui	a4,%hi(.LC15)
				fld	fa5,%lo(.LC15)(a4)
				add	a4,s0,1352
				add	a4,a4,a0
				fsd	fa5,0(a4)
  123     spectral line(f line)       = 4861.344
				lui	a4,%hi(.LC16)
				fld	fa5,%lo(.LC16)(a4)
				add	a4,s0,1360
				add	a4,a4,a0
				fsd	fa5,0(a4)
  124     spectral line(g prime line) = 4340.477
				lui	a4,%hi(.LC17)
				fld	fa5,%lo(.LC17)(a4)
				add	a4,s0,1368
				add	a4,a4,a0
				fsd	fa5,0(a4)
  125     spectral line(h line)       = 3968.494
				lui	a4,%hi(.LC18)
				fld	fa5,%lo(.LC18)(a4)
				add	a4,s0,1376
				add	a4,a4,a0
				fsd	fa5,0(a4)
  126     %comment  Initialise the test case array
  127     current surfaces = 4
				add	a4,s0,1588
				add	a4,a4,a0
				sw	a5,0(a4)
  128     curvature radius = 1; index of refraction = 2; dispersion = 3
				li	a4,1
				add	a1,s0,1584
				add	a1,a1,a0
				sw	a4,0(a1)
  129         edge thickness = 4
				li	a4,2
				add	a1,s0,1580
				add	a1,a1,a0
				sw	a4,0(a1)
				add	a2,s0,1560
				add	a2,a2,a0
				sw	a5,0(a2)
				lui	a5,%hi(.LC19)
				fld	fa5,%lo(.LC19)(a5)
				add	a5,s0,1384
				add	a5,a5,a0
				fsd	fa5,0(a5)
  130     test case(1, curvature radius)    =   27.05
				add	a1,s0,1564
				add	a1,a1,a0
				sw	a3,0(a1)
  131     test case(1, index of refraction) =    1.5137
				lui	a5,%hi(.LC20)
				fld	fa5,%lo(.LC20)(a5)
				add	a5,s0,1392
				add	a5,a5,a0
				fsd	fa5,0(a5)
  132     test case(1, dispersion)          =   63.6
				lui	a5,%hi(.LC21)
				fld	fa5,%lo(.LC21)(a5)
				add	a5,s0,1400
				add	a5,a5,a0
				fsd	fa5,0(a5)
  133     test case(1, edge thickness)      =    0.52
				lui	a5,%hi(.LC22)
				fld	fa5,%lo(.LC22)(a5)
				add	a5,s0,1408
				add	a5,a5,a0
				fsd	fa5,0(a5)
  134     test case(2, curvature radius)    =  -16.68
				lui	a5,%hi(.LC23)
				fld	fa4,%lo(.LC23)(a5)
				add	a5,s0,1416
				add	a5,a5,a0
				fsd	fa4,0(a5)
  135     test case(2, index of refraction) =    1.0
				lui	a5,%hi(.LC8)
				fld	fa5,%lo(.LC8)(a5)
				add	a5,s0,1424
				add	a5,a5,a0
				fsd	fa5,0(a5)
  136     test case(2, dispersion)          =    0.0
				add	a5,s0,1432
				add	a5,a5,a0
				sd	zero,0(a5)
  137     test case(2, edge thickness)      =    0.138
				lui	a5,%hi(.LC24)
				fld	fa3,%lo(.LC24)(a5)
				add	a5,s0,1440
				add	a5,a5,a0
				fsd	fa3,0(a5)
  138     test case(3, curvature radius)    =  -16.68
				add	a5,s0,1448
				add	a5,a5,a0
				fsd	fa4,0(a5)
  139     test case(3, index of refraction) =    1.6164
				lui	a5,%hi(.LC25)
				fld	fa4,%lo(.LC25)(a5)
				add	a5,s0,1456
				add	a5,a5,a0
				fsd	fa4,0(a5)
  140     test case(3, dispersion)          =   36.7
				lui	a5,%hi(.LC26)
				fld	fa4,%lo(.LC26)(a5)
				add	a5,s0,1464
				add	a5,a5,a0
				fsd	fa4,0(a5)
  141     test case(3, edge thickness)      =    0.38
				lui	a5,%hi(.LC27)
				fld	fa4,%lo(.LC27)(a5)
				add	a5,s0,1472
				add	a5,a5,a0
				fsd	fa4,0(a5)
  142     test case(4, curvature radius)    =  -78.1
				lui	a5,%hi(.LC28)
				fld	fa4,%lo(.LC28)(a5)
				add	a5,s0,1480
				add	a5,a5,a0
				fsd	fa4,0(a5)
  143     test case(4, index of refraction) =    1.0
				add	a5,s0,1488
				add	a5,a5,a0
				fsd	fa5,0(a5)
  144     test case(4, dispersion)          =    0.0
				add	a5,s0,1496
				add	a5,a5,a0
				sd	zero,0(a5)
  145     test case(4, edge thickness)      =    0.0
				add	a5,s0,1504
				add	a5,a5,a0
				sd	zero,0(a5)
		.LVL70:
  146     marginal ray = 1; paraxial ray = 2
  147     od field = 1; sa field = 2
				add	a5,s0,1592
				add	a5,a5,a0
				sw	a4,0(a5)
		.LVL71:
		.LBB162:
		.LBB163:
  148     %comment  number of iterations = 40263820;
  149     number of iterations = 1
  150     clear aperture = 4
  151     %for iteration = 1, 1, number of iterations %cycle
  152         %for paraxial = marginal ray, 1, paraxial ray %cycle
  153             trace line(d line, clear aperture / 2)
				lui	a5,%hi(.LC29)
				fld	fs0,%lo(.LC29)(a5)
				add	t2,s1,1320
				add	t2,t2,a3
				fmv.d	fa0,fs0
				add	a5,s1,1576
				add	a5,a5,a3
				lw	a0,0(a5)
				call	TRACELINE.6072
		.LVL72:
  154             od sa(paraxial, od field) = object distance
				li	a5,-4096
				add	a3,s0,1616
				add	a3,a3,a0
				add	a5,a3,a5
				sd	a5,8(sp)
				li	s0,2
		.L31:
				add	a5,s1,1596
				add	a4,sp,16
				add	a5,a5,a4
				lw	a4,0(a5)
				addw	a5,a4,-1
				sll	a5,a5,4
				ld	a2,8(sp)
				add	a5,a2,a5
				add	a2,s1,1544
				add	a1,sp,16
				add	a2,a2,a1
				fld	fa5,0(a2)
				fsd	fa5,-1352(a5)
  155             od sa(paraxial, sa field) = axis slope angle
				add	a3,s1,1536
				add	a3,a3,a1
				fld	fa5,0(a3)
				fsd	fa5,-1344(a5)
		.LDL1:
  156         %repeat
  157         %comment Trace marginal ray in C
				li	a4,0
				bne	a4,s0,.L31
		.L32:
		.LBE163:
				li	a5,1
				li	a4,4096
				add	a3,a4,1596
				add	a3,a3,a1
				sw	a5,0(a3)
  158         paraxial = marginal ray
				addw	a4,a4,1
				li	s1,4096
				add	a5,s1,1596
				add	a3,sp,16
				add	a5,a5,a3
				sw	a4,0(a5)
  159         trace line(c line, clear aperture / 2)
				lui	a5,%hi(.LC29)
				fld	fs0,%lo(.LC29)(a5)
				add	t2,a4,1320
				add	t2,t2,a1
				fmv.d	fa0,fs0
				mv	s0,a4
				add	a5,a4,1572
				add	a5,a5,a1
				lw	a0,0(a5)
				call	TRACELINE.6072
		.LVL73:
  160         od cline = object distance
				add	a5,s0,1544
				add	a3,sp,16
				add	a5,a5,a3
				fld	fs5,0(a5)
		.LVL74:
  161         %comment Trace marginal ray in F
  162         trace line(f line, clear aperture / 2)
				mv	s2,s0
				add	t2,s0,1320
				add	t2,t2,a3
				fmv.d	fa0,fs0
				add	a5,s0,1568
				add	a5,a5,a3
				lw	a0,0(a5)
				call	TRACELINE.6072
		.LVL75:
  163         od fline = object distance
  164         aberr lspher = od sa(paraxial ray, od field) -               %c
				add	a5,s0,1592
				add	a4,sp,16
				add	a5,a5,a4
				lw	s0,0(a5)
				addw	s0,s0,-1
				li	s1,-4096
				sll	s0,s0,4
				add	a5,sp,1632
				add	s0,a5,s0
				fld	fs0,-1352(s0)
				fld	fs1,280(sp)
				fsub.d	fs3,fs0,fs1
		.LVL76:
  165             od sa(marginal ray, od field)
  166         aberr osc = 1 - ((od sa(paraxial ray, od field) *            %c
				fld	fs4,288(sp)
		.LVL77:
		.LBB164:
		.LBB165:
				fmv.d	fa0,fs4
				call	sin
		.LVL78:
		.LBE165:
		.LBE164:
				fld	fa5,-1344(s0)
				fmul.d	fs0,fs0,fa5
				fmul.d	fs1,fs1,fa0
				fdiv.d	fs0,fs0,fs1
				lui	a5,%hi(.LC8)
				fld	fa5,%lo(.LC8)(a5)
				fsub.d	fs0,fa5,fs0
		.LVL79:
  167                           od sa(paraxial ray, sa field)) /           %c
  168                           (sin(od sa(marginal ray, sa field)) *      %c
  169                            od sa(marginal ray, od field)))
  170         aberr lchrom = od fline - od cline
				add	a5,s2,1544
				add	a4,sp,16
				add	a5,a5,a4
				fld	fs2,0(a5)
				fsub.d	fs2,fs2,fs5
		.LVL80:
		.LBB166:
		.LBB167:
				fmul.d	fa0,fa0,fa0
		.LBE167:
		.LBE166:
  171         max lspher = 0.0000926 / sin(od sa(marginal ray, sa field)) ^ 2
				lui	a5,%hi(.LC30)
				fld	fs1,%lo(.LC30)(a5)
				fdiv.d	fs1,fs1,fa0
		.LDL2:
		.LVL81:
		.LDL3:
		.LBE162:
		.LBB168:
  172         max lchrom = max lspher
  173         max osc = 0.0025
  174     %repeat
  175     %comment Print the analysis of the ray trace
  176     print string("  Marginal ray    ")
				lui	s0,%hi(.LANCHOR0)
				addi	s0,s0,%lo(.LANCHOR0)
				li	a2,256
				add	a1,s0,256
				mv	s5,s2
				add	a0,s2,1064
				add	a0,a0,a4
				call	memcpy
		.LVL82:
				add	s2,sp,312
				li	a2,256
				add	a1,s5,1064
				add	a5,sp,16
				add	a1,a1,a5
				mv	a0,s2
				call	memcpy
		.LVL83:
				li	a2,256
				mv	a1,s2
				add	a0,s5,1064
				add	a5,sp,16
				add	a0,a0,a5
				call	memcpy
		.LVL84:
		.LBE168:
		.LBB169:
		.LBB170:
				add	s2,sp,16
				li	a2,256
				add	a1,s5,1064
				add	a5,sp,16
				add	a1,a1,a5
				mv	a0,s2
				call	memcpy
		.LVL85:
				add	s1,s1,-1616
				add	a5,s5,1616
				add	a4,sp,16
				add	a5,a5,a4
				add	s1,a5,s1
				mv	a0,s1
				call	_imp_printstring
		.LVL86:
		.LBE170:
		.LBE169:
		.LBB171:
  177     outbigreal(1, od sa(marginal ray, od field))
  178     print string("   ")
				add	s3,s0,512
				li	a2,256
				mv	a1,s3
				add	a0,s5,808
				add	a5,sp,16
				add	a0,a0,a5
				call	memcpy
		.LVL87:
				add	s4,sp,568
				li	a2,256
				add	a1,s5,808
				add	a5,sp,16
				add	a1,a1,a5
				mv	a0,s4
				call	memcpy
		.LVL88:
				li	a2,256
				mv	a1,s4
				add	a0,s5,808
				add	a5,sp,16
				add	a0,a0,a5
				call	memcpy
		.LVL89:
		.LBE171:
		.LBB172:
		.LBB173:
				li	a2,256
				add	a1,s5,808
				add	a5,sp,16
				add	a1,a1,a5
				mv	a0,s2
				call	memcpy
		.LVL90:
				mv	a0,s1
				call	_imp_printstring
		.LVL91:
		.LBE173:
		.LBE172:
		.LBB174:
		.LBB175:
				li	a1,11
				li	a0,5
				fmv.d	fa0,fs4
				call	_imp_print
		.LVL92:
		.LBE175:
		.LBE174:
		.LBB176:
		.LBB177:
				call	_imp_newline
		.LVL93:
		.LBE177:
		.LBE176:
		.LBB178:
  179     print(od sa(marginal ray, sa field), 5, 11); newline
  180     print string("  Paraxial ray    ")
				li	a2,256
				add	a1,s0,768
				add	a0,s5,552
				add	a5,sp,16
				add	a0,a0,a5
				call	memcpy
		.LVL94:
				add	s4,sp,824
				li	a2,256
				add	a1,s5,552
				add	a5,sp,16
				add	a1,a1,a5
				mv	a0,s4
				call	memcpy
		.LVL95:
				li	a2,256
				mv	a1,s4
				add	a0,s5,552
				add	a5,sp,16
				add	a0,a0,a5
				call	memcpy
		.LVL96:
		.LBE178:
		.LBB179:
		.LBB180:
				li	a2,256
				add	a1,s5,552
				add	a5,sp,16
				add	a1,a1,a5
				mv	a0,s2
				call	memcpy
		.LVL97:
				mv	a0,s1
				call	_imp_printstring
		.LVL98:
		.LBE180:
		.LBE179:
		.LBB181:
  181     outbigreal(1, od sa(paraxial ray, od field))
  182     print string("   ")
				li	a2,256
				mv	a1,s3
				add	a0,s5,296
				add	a5,sp,16
				add	a0,a0,a5
				call	memcpy
		.LVL99:
				add	s3,sp,1080
				li	a2,256
				add	a1,s5,296
				add	a5,sp,16
				add	a1,a1,a5
				mv	a0,s3
				call	memcpy
		.LVL100:
				li	a2,256
				mv	a1,s3
				add	a0,s5,296
				add	a5,sp,16
				add	a0,a0,a5
				call	memcpy
		.LVL101:
		.LBE181:
		.LBB182:
		.LBB183:
				li	a2,256
				add	a1,s5,296
				add	a5,sp,16
				add	a1,a1,a5
				mv	a0,s2
				call	memcpy
		.LVL102:
				mv	a0,s1
				call	_imp_printstring
		.LVL103:
		.LBE183:
		.LBE182:
  183     print(od sa(paraxial ray, sa field), 5, 11); newline
				add	a5,s5,1592
				add	a4,sp,16
				add	a5,a5,a4
				lw	a5,0(a5)
				addw	a5,a5,-1
				sll	a5,a5,4
				add	a4,sp,1632
				add	a5,a4,a5
		.LBB184:
		.LBB185:
				li	a1,11
				li	a0,5
				fld	fa0,-1344(a5)
				call	_imp_print
		.LVL104:
		.LBE185:
		.LBE184:
		.LBB186:
		.LBB187:
				call	_imp_newline
		.LVL105:
		.LBE187:
		.LBE186:
		.LBB188:
  184     print string("Longitudinal spherical aberration: ")
				li	a2,256
				add	a1,s0,1024
				add	a0,s5,40
				add	a5,sp,16
				add	a0,a0,a5
				call	memcpy
		.LVL106:
				add	s3,sp,1336
				li	a2,256
				add	a1,s5,40
				add	a5,sp,16
				add	a1,a1,a5
				mv	a0,s3
				call	memcpy
		.LVL107:
				li	a2,256
				mv	a1,s3
				add	a0,s5,40
				add	a5,sp,16
				add	a0,a0,a5
				call	memcpy
		.LVL108:
		.LBE188:
		.LBB189:
		.LBB190:
				li	a2,256
				add	a1,s5,40
				add	a5,sp,16
				add	a1,a1,a5
				mv	a0,s2
				call	memcpy
		.LVL109:
				mv	a0,s1
				call	_imp_printstring
		.LVL110:
		.LBE190:
		.LBE189:
		.LBB191:
		.LBB192:
				li	a1,11
				li	a0,5
				fmv.d	fa0,fs3
				call	_imp_print
		.LVL111:
		.LBE192:
		.LBE191:
		.LBB193:
		.LBB194:
				call	_imp_newline
		.LVL112:
		.LBE194:
		.LBE193:
		.LBB195:
  185     print(aberr lspher, 5, 11); newline
  186     print string("    (Maximum permissible): ")
				add	s4,s0,1280
				li	a2,256
				mv	a1,s4
				add	a0,s5,-216
				add	a5,sp,16
				add	a0,a0,a5
				call	memcpy
		.LVL113:
				add	s3,sp,1592
				li	a2,256
				add	a1,s5,-216
				add	a5,sp,16
				add	a1,a1,a5
				mv	a0,s3
				call	memcpy
		.LVL114:
				li	a2,256
				mv	a1,s3
				add	a0,s5,-216
				add	a5,sp,16
				add	a0,a0,a5
				call	memcpy
		.LVL115:
		.LBE195:
		.LBB196:
		.LBB197:
				li	a2,256
				add	a1,s5,-216
				add	a5,sp,16
				add	a1,a1,a5
				mv	a0,s2
				call	memcpy
		.LVL116:
				mv	a0,s1
				call	_imp_printstring
		.LVL117:
		.LBE197:
		.LBE196:
		.LBB198:
		.LBB199:
				li	a1,11
				li	a0,5
				fmv.d	fa0,fs1
				call	_imp_print
		.LVL118:
		.LBE199:
		.LBE198:
		.LBB200:
		.LBB201:
				call	_imp_newline
		.LVL119:
		.LBE201:
		.LBE200:
		.LBB202:
  187     print(max lspher, 5, 11); newline
  188     print string("Offense against sine condition (coma): ")
				add	a5,sp,1632
				add	s3,a5,2008
				li	a2,256
				add	a1,s0,1536
				mv	a0,s3
				call	memcpy
		.LVL120:
				add	s5,sp,1848
				li	a2,256
				mv	a1,s3
				mv	a0,s5
				call	memcpy
		.LVL121:
				li	a2,256
				mv	a1,s5
				mv	a0,s3
				call	memcpy
		.LVL122:
		.LBE202:
		.LBB203:
		.LBB204:
				li	a2,256
				mv	a1,s3
				mv	a0,s2
				call	memcpy
		.LVL123:
				mv	a0,s1
				call	_imp_printstring
		.LVL124:
		.LBE204:
		.LBE203:
		.LBB205:
		.LBB206:
				li	a1,11
				li	a0,5
				fmv.d	fa0,fs0
				call	_imp_print
		.LVL125:
		.LBE206:
		.LBE205:
		.LBB207:
		.LBB208:
				call	_imp_newline
		.LVL126:
		.LBE208:
		.LBE207:
		.LBB209:
  189     print(aberr osc, 5, 11); newline
  190     print string("    (Maximum permissible): ")
				add	a5,sp,1632
				add	s3,a5,1752
				li	a2,256
				mv	a1,s4
				mv	a0,s3
				call	memcpy
		.LVL127:
				add	a5,sp,1632
				add	s5,a5,472
				li	a2,256
				mv	a1,s3
				mv	a0,s5
				call	memcpy
		.LVL128:
				li	a2,256
				mv	a1,s5
				mv	a0,s3
				call	memcpy
		.LVL129:
		.LBE209:
		.LBB210:
		.LBB211:
				li	a2,256
				mv	a1,s3
				mv	a0,s2
				call	memcpy
		.LVL130:
				mv	a0,s1
				call	_imp_printstring
		.LVL131:
		.LBE211:
		.LBE210:
		.LBB212:
		.LBB213:
				li	a1,11
				li	a0,5
				lui	a5,%hi(.LC31)
				fld	fa0,%lo(.LC31)(a5)
				call	_imp_print
		.LVL132:
		.LBE213:
		.LBE212:
		.LBB214:
		.LBB215:
				call	_imp_newline
		.LVL133:
		.LBE215:
		.LBE214:
		.LBB216:
  191     print(max osc, 5, 11); newline
  192     print string("Axial chromatic aberration: ")
				add	a5,sp,1632
				add	s3,a5,1496
				li	a2,256
				add	a1,s0,1792
				mv	a0,s3
				call	memcpy
		.LVL134:
				add	a5,sp,1632
				add	s0,a5,728
				li	a2,256
				mv	a1,s3
				mv	a0,s0
				call	memcpy
		.LVL135:
				li	a2,256
				mv	a1,s0
				mv	a0,s3
				call	memcpy
		.LVL136:
		.LBE216:
		.LBB217:
		.LBB218:
				li	a2,256
				mv	a1,s3
				mv	a0,s2
				call	memcpy
		.LVL137:
				mv	a0,s1
				call	_imp_printstring
		.LVL138:
		.LBE218:
		.LBE217:
		.LBB219:
		.LBB220:
				li	a1,11
				li	a0,5
				fmv.d	fa0,fs2
				call	_imp_print
		.LVL139:
		.LBE220:
		.LBE219:
		.LBB221:
		.LBB222:
				call	_imp_newline
		.LVL140:
		.LBE222:
		.LBE221:
		.LBB223:
  193     print(aberr lchrom, 5, 11); newline
  194     print string("    (Maximum permissible): ")
				add	a5,sp,1632
				add	s3,a5,1240
				li	a2,256
				mv	a1,s4
				mv	a0,s3
				call	memcpy
		.LVL141:
				add	a5,sp,1632
				add	s0,a5,984
				li	a2,256
				mv	a1,s3
				mv	a0,s0
				call	memcpy
		.LVL142:
				li	a2,256
				mv	a1,s0
				mv	a0,s3
				call	memcpy
		.LVL143:
		.LBE223:
		.LBB224:
		.LBB225:
				li	a2,256
				mv	a1,s3
				mv	a0,s2
				call	memcpy
		.LVL144:
				mv	a0,s1
				call	_imp_printstring
		.LVL145:
		.LBE225:
		.LBE224:
		.LBB226:
		.LBB227:
				li	a1,11
				li	a0,5
				fmv.d	fa0,fs1
				call	_imp_print
		.LVL146:
		.LBE227:
		.LBE226:
		.LBB228:
		.LBB229:
				call	_imp_newline
		.LVL147:
		.LBE229:
		.LBE228:
		.LBB230:
		.LBB231:
				li	a0,0
				call	exit
		.LVL148:
		.LBE231:
		.LBE230:
		.LFE185:
				.section	.rodata
				.align	3
				.set	.LANCHOR0,. + 0
		.LC0:
				.byte	19
				.string	"test-new/fbench.imp"
				.zero	235
		.LC1:
				.byte	18
				.string	"  Marginal ray    "
				.zero	236
		.LC2:
				.byte	3
				.string	"   "
				.zero	251
		.LC3:
				.byte	18
				.string	"  Paraxial ray    "
				.zero	236
		.LC4:
				.byte	35
				.string	"Longitudinal spherical aberration: "
				.zero	219
		.LC5:
				.byte	27
				.string	"    (Maximum permissible): "
				.zero	227
		.LC6:
				.byte	39
				.string	"Offense against sine condition (coma): "
				.zero	215
		.LC7:
				.byte	28
				.string	"Axial chromatic aberration: "
				.zero	226
				.section	.rodata.str1.8,"aMS",@progbits,1
				.align	3
		.LC9:
				.string	"Illegal cycle I = 1, 1, CURRENTSURFACES"
				.section	.srodata.cst8,"aM",@progbits,8
				.align	3
		.LC8:
				.word	0
				.word	1072693248
		.LC10:
				.word	0
				.word	1071644672
		.LC11:
				.word	0
				.word	1086178560
		.LC12:
				.word	2061584302
				.word	1085986292
		.LC13:
				.word	-446676599
				.word	1085907664
		.LC14:
				.word	-1443109011
				.word	1085736945
		.LC15:
				.word	-1752346657
				.word	1085576590
		.LC16:
				.word	274877907
				.word	1085472088
		.LC17:
				.word	481036337
				.word	1085338746
		.LC18:
				.word	-309237645
				.word	1085210876
		.LC19:
				.word	-858993459
				.word	1077611724
		.LC20:
				.word	2109687936
				.word	1073231901
		.LC21:
				.word	-858993459
				.word	1078971596
		.LC22:
				.word	171798692
				.word	1071686615
		.LC23:
				.word	2061584302
				.word	-1070551532
		.LC24:
				.word	-412316860
				.word	1069656571
		.LC25:
				.word	1058279942
				.word	1073339590
		.LC26:
				.word	-1717986918
				.word	1078090137
		.LC27:
				.word	-2061584302
				.word	1071141355
		.LC28:
				.word	1717986918
				.word	-1068267930
		.LC29:
				.word	0
				.word	1073741824
		.LC30:
				.word	-487743358
				.word	1058555463
		.LC31:
				.word	1202590843
				.word	1063549665
		.Letext0:
  195     print(max lchrom, 5, 11); newline
  196 %end %of %program
  163 Statements compiled
