         Edinburgh IMP77 Compiler - Version 8.4
    1 %realslong
		.Ltext0:
				.align	1
				.thumb
				.thumb_func
		ARCSIN.10067:
		.LFB187:
    2
    3 %begin
				@ args = 0, pretend = 0, frame = 5448
				@ frame_needed = 0, uses_anonymous_args = 0
		.LVL59:
				push	{r4, r5, r6, r7, r8, r9, r10, fp, lr}
				vpush.64	{d8, d9, d10, d11, d12}
				sub	sp, sp, #5664
				sub	sp, sp, #28
				ldr	r3, .L38+160
		.LPIC3:
				add	r3, pc
				ldr	r2, .L38+164
				ldr	r3, [r3, r2]
				ldr	r3, [r3]
				add	r2, sp, #5664
				adds	r2, r2, #20
				str	r3, [r2]
				add	r4, sp, #5376
				adds	r4, r4, #16
				add	r3, sp, #5760
				adds	r3, r3, #8
				str	r3, [r4, #280]
    4     %integer a line, b line, c line, d line,
				bl	_imp_initialise(PLT)
		.LVL60:
    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))
				vdiv.f64	d6, d12, d13
				vdiv.f64	d7, d10, d6
		.LBE143:
		.LBE142:
   24     %end {cot}
   25     %real %fn arc sin(%real x)
				@ args = 0, pretend = 0, frame = 0
				@ frame_needed = 0, uses_anonymous_args = 0
		.LVL0:
				push	{r3, lr}
				vpush.64	{d8, d9}
				vmov.f64	d9, d0
   26         %result = 2 * arc tan1(x / (1 + sqrt(1 - x^2)))
				vmov.f64	d0, #1.0e+0
		.LVL1:
				vmls.f64	d0, d9, d9
		.LVL2:
		.LBB102:
		.LBB103:
				vsqrt.f64	d8, d0
				vcmp.f64	d0, #0
				vmrs	APSR_nzcv, FPSCR
				bmi	.L4
		.LVL3:
		.L2:
		.LBE103:
		.LBE102:
				vmov.f64	d0, #1.0e+0
				vadd.f64	d0, d8, d0
		.LBB105:
		.LBB106:
				vdiv.f64	d0, d9, d0
		.LVL4:
				bl	atan(PLT)
		.LVL5:
		.LBE106:
		.LBE105:
   27     %end {arc sin}
				vadd.f64	d0, d0, d0
				vldm	sp!, {d8-d9}
		.LVL6:
				pop	{r3, pc}
		.LVL7:
		.L4:
		.LBB107:
		.LBB104:
				bl	sqrt(PLT)
		.LVL8:
				b	.L2
		.LBE104:
		.LBE107:
		.LFE187:
				.align	1
				.thumb
				.thumb_func
		TRACELINE.10096:
		.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
				ldr	r2, [r4, #276]
				ldr	r3, [r4, #272]
				cmp	r2, r3
				beq	.L28
		.L13:
   36             %if radius of curvature # 0 %then %start
				vcmp.f64	d9, #0
				vmrs	APSR_nzcv, FPSCR
				beq	.L14
   37                 %if object distance = 0 %then %start
				vldr.64	d4, [r4, #224]
				vcmp.f64	d4, #0
				vmrs	APSR_nzcv, FPSCR
				bne	.L15
   38                     axis slope angle = 0
   39                     iang sin = ray height / radius of curvature
				vldr.64	d7, [r4, #208]
				vdiv.f64	d4, d7, d9
		.LVL25:
   40                 %finish %else                                         %c
   41                     iang sin = ((object distance -                    %c
   42                         radius of curvature) / radius of curvature) * %c
   43                         axis slope angle
				vldr.64	d2, [r4, #216]
				vsub.f64	d7, d4, d9
				vdiv.f64	d3, d7, d9
				vmul.f64	d3, d3, d2
		.LVL27:
   44                 rang sin = (from index / to index) * iang sin
				vldr.64	d5, [r4, #200]
				vldr.64	d6, [r4, #192]
				vdiv.f64	d3, d5, d6
				vldr.64	d5, [r4, #200]
				vldr.64	d6, [r4, #192]
				vdiv.f64	d1, d5, d6
   45                 old axis slope angle = axis slope angle
   46                 axis slope angle = axis slope angle +                 %c
				vadd.f64	d7, d4, d15
				vmls.f64	d7, d3, d4
				vstr.64	d7, [r4, #216]
				b	.L16
		.LVL26:
		.L15:
				vadd.f64	d7, d2, d3
				vmls.f64	d7, d1, d3
				vstr.64	d7, [r4, #216]
   47                     iang sin - rang sin
   48                 %if object distance # 0 %then                         %c
   49                     ray height = object distance * old axis slope angle
				vmul.f64	d4, d4, d2
				vstr.64	d4, [r4, #208]
		.LVL28:
		.L16:
   50                 object distance = ray height / axis slope angle
				vldr.64	d5, [r4, #208]
				vdiv.f64	d6, d5, d7
				vstr.64	d6, [r4, #224]
				b	.L22
		.L14:
   51             %else
   52                 object distance = object distance * (to index / from index)
				vldr.64	d6, [r4, #192]
				vldr.64	d5, [r4, #200]
				vdiv.f64	d4, d6, d5
				vldr.64	d7, [r4, #224]
				vmul.f64	d7, d7, d4
				vstr.64	d7, [r4, #224]
   53                 axis slope angle = axis slope angle * (from index / to index)
				vdiv.f64	d4, d5, d6
				vldr.64	d7, [r4, #216]
				vmul.f64	d7, d7, d4
				vstr.64	d7, [r4, #216]
				b	.L22
		.L19:
		.LVL29:
		.LBB136:
		.LBB137:
				vldr.64	d0, [r4, #216]
				bl	sin(PLT)
		.LVL30:
		.LBE137:
		.LBE136:
   54             %finish
   55         %else
   56             %if radius of curvature # 0 %then %start
				vcmp.f64	d9, #0
				vmrs	APSR_nzcv, FPSCR
				beq	.L18
   57                 %if object distance = 0 %then %start
				vldr.64	d8, [r4, #224]
				vcmp.f64	d8, #0
				vmrs	APSR_nzcv, FPSCR
				bne	.L19
   58                     axis slope angle = 0
				vldr.64	d15, .L30
				b	.L11
		.LVL12:
		.L27:
		.LBE135:
		.LBE134:
				vstr.64	d15, [r4, #216]
   59                     iang sin = ray height / radius of curvature
				vldr.64	d7, [r4, #208]
				vdiv.f64	d8, d7, d9
		.LVL48:
				b	.L20
		.LVL49:
		.L18:
		.LBB146:
		.LBB147:
				vldr.64	d0, [r4, #216]
				bl	sin(PLT)
		.LVL50:
		.LBE147:
		.LBE146:
   60                 %finish %else %c
   61                     iang sin = ((object distance -                    %c
   62                         radius of curvature) / radius of curvature) * %c
   63                         sin(axis slope angle)
				vsub.f64	d7, d8, d9
				vdiv.f64	d8, d7, d9
				vmul.f64	d8, d8, d0
		.LVL31:
		.L20:
   64                 iang = arc sin(iang sin)
				vmov.f64	d0, d8
				bl	ARCSIN.10067(PLT)
		.LVL32:
   65                 rang sin = (from index / to index) * iang sin
				vldr.64	d6, [r4, #200]
				vldr.64	d7, [r4, #192]
				vdiv.f64	d0, d6, d7
		.LVL33:
   66                 old axis slope angle = axis slope angle
   67                 axis slope angle = axis slope angle +                 %c
				vldr.64	d9, [r4, #216]
				vadd.f64	d9, d0, d9
				vmul.f64	d0, d0, d8
		.LVL34:
				bl	ARCSIN.10067(PLT)
		.LVL35:
				vsub.f64	d8, d9, d0
		.LVL36:
				add	fp, sp, #512
				mov	r1, fp
				add	r10, sp, #520
				mov	r0, r10
				vmov.f64	d0, d8
				bl	sincos(PLT)
		.LVL37:
				vldr.64	d13, [fp]
				vldr.64	d12, [r10]
				vstr.64	d8, [r4, #216]
   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)
				vmov.f64	d14, #5.0e-1
				vldr.64	d8, [r4, #232]
		.LVL38:
		.LBB138:
		.LBB139:
				vmul.f64	d0, d9, d14
				bl	sin(PLT)
		.LVL39:
				vmov.f64	d11, d0
		.LVL40:
		.LBE139:
		.LBE138:
		.LBB140:
		.LBB141:
				vmov.f64	d0, d9
		.LVL41:
				bl	sin(PLT)
		.LVL42:
		.LBE141:
		.LBE140:
		.LBB142:
		.LBB143:
				vadd.f64	d8, d8, d8
		.LVL43:
		.LBB144:
		.LBB145:
				vmul.f64	d11, d11, d11
		.LBE145:
		.LBE144:
				vmul.f64	d8, d8, d11
		.LVL44:
   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
				vmul.f64	d0, d8, d0
				vmla.f64	d8, d7, d0
		.LVL45:
				vstr.64	d8, [r4, #224]
		.L17:
		.L21:
		.L22:
		.LBE152:
		.LBE155:
   80                     sin(old axis slope angle + iang)) *               %c
   81                     cot(axis slope angle)) + sagitta
   82             %else
   83                 rang = -arcsin((from index / to index) *              %c
				vldr.64	d6, [r4, #200]
				vldr.64	d7, [r4, #192]
				vdiv.f64	d5, d6, d7
				vmul.f64	d0, d5, d0
				bl	ARCSIN.10067(PLT)
		.LVL51:
				vmov.f64	d8, d0
		.LVL52:
		.LBB148:
		.LBB149:
				bl	cos(PLT)
		.LVL53:
				vmov.f64	d9, d0
		.LVL54:
		.LBE149:
		.LBE148:
		.LBB150:
		.LBB151:
				vldr.64	d0, [r4, #216]
				bl	cos(PLT)
		.LVL55:
		.LBE151:
		.LBE150:
   84                     sin(axis slope angle))
   85                 object distance = object distance * ((to index *      %c
				vldr.64	d7, [r4, #192]
				vmul.f64	d9, d9, d7
				vldr.64	d7, [r4, #200]
				vmul.f64	d0, d0, d7
				vdiv.f64	d6, d9, d0
				vldr.64	d7, [r4, #224]
				vmul.f64	d7, d7, d6
				vstr.64	d7, [r4, #224]
   86                     cos(-rang)) / (from index *                       %c
   87                     cos(axis slope angle)))
   88                 axis slope angle = -rang
				vstr.64	d8, [r4, #216]
				b	.L22
		.L10:
		.LVL56:
		.L5:
		.LBE153:
		.LBE156:
		.LBE133:
   89             %finish
   90         %finish
   91     %end {transit surface}
   92     %routine trace line(%integer line, %real ray h)
				@ Nested: function declared inside another function.
				@ args = 0, pretend = 0, frame = 792
				@ frame_needed = 0, uses_anonymous_args = 0
		.LVL9:
				push	{r4, r5, r6, r7, r8, r9, r10, fp, lr}
				vpush.64	{d8, d9, d10, d11, d12, d13, d14, d15}
				subw	sp, sp, #1308
				mov	r9, r0
				mov	r4, ip
				ldr	r8, .L30+8
		.LPIC0:
				add	r8, pc
				ldr	r3, .L30+12
				ldr	r3, [r8, r3]
				ldr	r3, [r3]
				str	r3, [sp, #1300]
   93         %integer i
   94         object distance = 0
				movs	r2, #0
				movs	r3, #0
				strd	r2, [ip, #224]
   95         ray height = ray h
				vstr.64	d0, [ip, #208]
   96         from index = 1
				movs	r2, #0
				movs	r3, #0
				movt	r3, 16368
				strd	r2, [ip, #200]
		.LBB133:
   97         %for i = 1, 1, current surfaces %cycle
   98             radius of curvature = test case(i, curvature radius)
				ldr	r7, [ip, #268]
		.LVL10:
				lsls	r3, r5, #2
				ldr	r2, [r4, #264]
				add	r2, r2, r3
				add	r2, r4, r2, lsl #3
				vldr.64	d9, [r2, #56]
				vstr.64	d9, [r4, #232]
   99             to index = test case(i, index of refraction)
				cmp	r7, #1
				bmi	.L27
		.LVL11:
		.L6:
				ldr	r3, .L30+16
				ldr	r3, [r8, r3]
				ldr	r1, [r3]
				cbz	r1, .L7
				add	r0, sp, #788
		.LVL13:
				bl	_imp_c2istr(PLT)
		.LVL14:
		.L8:
				ldr	r3, .L30+20
				ldr	r3, [r8, r3]
				ldr	r5, [r3]
				cmp	r5, #0
				it	eq
				moveq	r5, #99
				ldr	r1, .L30+24
		.LPIC2:
				add	r1, pc
				addw	r6, sp, #1044
				mov	r0, r6
				bl	_imp_c2istr(PLT)
		.LVL15:
				movs	r3, #0
				str	r3, [sp, #508]
				movs	r3, #1
				str	r3, [sp, #504]
				movs	r3, #5
				str	r3, [sp, #500]
				mov	r2, #256
				mov	r1, r6
				add	r0, sp, #244
				bl	memcpy(PLT)
		.LVL16:
				str	r5, [sp, #240]
				movs	r2, #240
				add	r1, sp, #804
				mov	r0, sp
				bl	memcpy(PLT)
		.LVL17:
				add	r3, sp, #788
				ldm	r3, {r0, r1, r2, r3}
				bl	_signal_event(PLT)
		.LVL18:
				b	.L6
		.LVL19:
		.L7:
		.LBB154:
				mov	r6, #256
				mov	r2, r6
				ldr	r1, .L30+28
		.LPIC1:
				add	r1, pc
				addw	r5, sp, #1044
				mov	r0, r5
		.LVL20:
				bl	memcpy(PLT)
		.LVL21:
				mov	r2, r6
				mov	r1, r5
				add	r5, sp, #532
				mov	r0, r5
				bl	memcpy(PLT)
		.LVL22:
		.LBE154:
				mov	r2, r6
				mov	r1, r5
				add	r0, sp, #788
				bl	memcpy(PLT)
		.LVL23:
				b	.L8
		.LVL24:
		.L28:
		.LBB155:
		.LBB152:
				ldr	r2, [r4, #260]
				add	r3, r3, r2
				add	r3, r4, r3, lsl #3
				vldr.64	d7, [r3, #56]
				vstr.64	d7, [r4, #192]
  100             %if to index > 1 %then                                     %c
				vmov.f64	d10, #1.0e+0
		.LBB134:
		.LBB135:
				vcmpe.f64	d7, d10
				vmrs	APSR_nzcv, FPSCR
				bls	.L12
  101                 to index = to index + ((spectral line(d line) -        %c
				ldr	r3, [r4, #256]
				add	r2, r4, r3, lsl #3
				add	r3, r4, r9, lsl #3
				vldr.64	d5, [r2, #-8]
				vldr.64	d6, [r3, #-8]
				vsub.f64	d5, d5, d6
				ldr	r3, [r4, #252]
				add	r2, r4, r3, lsl #3
				ldr	r3, [r4, #248]
				add	r3, r4, r3, lsl #3
				vldr.64	d6, [r2, #-8]
				vldr.64	d4, [r3, #-8]
				vsub.f64	d6, d6, d4
				vdiv.f64	d4, d5, d6
				vsub.f64	d3, d7, d10
				ldr	r3, [r4, #244]
				add	r3, r3, r5, lsl #2
				add	r3, r4, r3, lsl #3
				vldr.64	d5, [r3, #56]
				vdiv.f64	d6, d3, d5
				vmla.f64	d7, d4, d6
				vstr.64	d7, [r4, #192]
		.L12:
		.LBB156:
		.LBB153:
  102                     spectral line(line)) /                             %c
				cmp	r7, #0
				beq	.L5
				movs	r5, #0
				cmp	r7, r6
				beq	.L5
		.LVL46:
		.L11:
  103                     (spectral line(c line) - spectral line(f line))) * %c
				adds	r6, r5, #1
		.LVL47:
  104                     ((test case(i, index of refraction) - 1.0) /       %c
  105                     test case(i, dispersion))
  106             transit surface
  107             from index = to index
				ldrd	r2, [r4, #192]
				strd	r2, [r4, #200]
  108             %if i < current surfaces %then                             %c
				ldr	r3, [r4, #268]
				cmp	r6, r3
				bge	.L23
  109                 object distance = object distance -                    %c
				ldr	r3, [r4, #240]
				add	r5, r3, r5, lsl #2
				add	r5, r4, r5, lsl #3
				vldr.64	d7, [r4, #224]
				vldr.64	d6, [r5, #56]
				vsub.f64	d7, d7, d6
				vstr.64	d7, [r4, #224]
		.L23:
				mov	r5, r6
  110                     test case(i, edge thickness)
  111         %repeat
  112     %end {trace line}
  113     %comment END GLOBAL DECLARATONS
				ldr	r3, .L30+12
				ldr	r3, [r8, r3]
				ldr	r2, [sp, #1300]
				ldr	r3, [r3]
				cmp	r2, r3
				bne	.L29
				addw	sp, sp, #1308
				@ sp needed
				vldm	sp!, {d8-d15}
				pop	{r4, r5, r6, r7, r8, r9, r10, fp, pc}
		.LVL57:
		.L29:
				bl	__stack_chk_fail(PLT)
		.LVL58:
		.L31:
				.align	3
		.L30:
				.word	0
				.word	0
				.word	_GLOBAL_OFFSET_TABLE_-(.LPIC0+4)
				.word	__stack_chk_guard(GOT)
				.word	_imp_current_file(GOT)
				.word	_imp_current_line(GOT)
				.word	.LC8-(.LPIC2+4)
				.word	.LANCHOR0-(.LPIC1+4)
		.LFE190:
				.align	1
				.global	main
				.thumb
				.thumb_func
		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
				movs	r2, #3
				str	r2, [r4, #252]
				movs	r1, #6
				str	r1, [r4, #248]
		.LVL62:
				adr	r1, .L38+16
				ldrd	r0, [r1]
				strd	r0, [r4]
  118     spectral line(a line)       = 7621.0
				movs	r3, #4
				str	r3, [r4, #256]
		.LVL61:
  119     spectral line(b line)       = 6869.955
				adr	r1, .L38+24
				ldrd	r0, [r1]
				strd	r0, [r4, #8]
  120     spectral line(c line)       = 6562.8160
				adr	r1, .L38+32
				ldrd	r0, [r1]
				strd	r0, [r4, #16]
  121     spectral line(d line)       = 5895.944
				adr	r1, .L38+40
				ldrd	r0, [r1]
				strd	r0, [r4, #24]
  122     spectral line(e line)       = 5269.557
				adr	r1, .L38+48
				ldrd	r0, [r1]
				strd	r0, [r4, #32]
  123     spectral line(f line)       = 4861.344
				adr	r1, .L38+56
				ldrd	r0, [r1]
				strd	r0, [r4, #40]
  124     spectral line(g prime line) = 4340.477
				adr	r1, .L38+64
				ldrd	r0, [r1]
				strd	r0, [r4, #48]
  125     spectral line(h line)       = 3968.494
				adr	r1, .L38+72
				ldrd	r0, [r1]
				strd	r0, [r4, #56]
  126     %comment  Initialise the test case array
  127     current surfaces = 4
				str	r3, [r4, #268]
  128     curvature radius = 1; index of refraction = 2; dispersion = 3
				movs	r1, #1
				str	r1, [r4, #264]
  129         edge thickness = 4
				movs	r1, #2
				str	r1, [r4, #260]
				str	r3, [r4, #240]
				adr	r3, .L38+80
				ldrd	r2, [r3]
				strd	r2, [r4, #64]
  130     test case(1, curvature radius)    =   27.05
				str	r2, [r4, #244]
  131     test case(1, index of refraction) =    1.5137
				adr	r3, .L38+88
				ldrd	r2, [r3]
				strd	r2, [r4, #72]
  132     test case(1, dispersion)          =   63.6
				adr	r3, .L38+96
				ldrd	r2, [r3]
				strd	r2, [r4, #80]
  133     test case(1, edge thickness)      =    0.52
				adr	r3, .L38+104
				ldrd	r2, [r3]
				strd	r2, [r4, #88]
  134     test case(2, curvature radius)    =  -16.68
				adr	r9, .L38+112
				ldrd	r8, [r9]
				strd	r8, [r4, #96]
  135     test case(2, index of refraction) =    1.0
				movs	r6, #0
				movs	r7, #0
				movt	r7, 16368
				strd	r6, [r4, #104]
  136     test case(2, dispersion)          =    0.0
				movs	r2, #0
				movs	r3, #0
				strd	r2, [r4, #112]
  137     test case(2, edge thickness)      =    0.138
				adr	fp, .L38+120
				ldrd	r10, [fp]
				strd	r10, [r4, #120]
  138     test case(3, curvature radius)    =  -16.68
				strd	r8, [r4, #128]
  139     test case(3, index of refraction) =    1.6164
				adr	r9, .L38+128
				ldrd	r8, [r9]
				strd	r8, [r4, #136]
  140     test case(3, dispersion)          =   36.7
				adr	r9, .L38+136
				ldrd	r8, [r9]
				strd	r8, [r4, #144]
  141     test case(3, edge thickness)      =    0.38
				adr	r9, .L38+144
				ldrd	r8, [r9]
				strd	r8, [r4, #152]
  142     test case(4, curvature radius)    =  -78.1
				adr	r9, .L38+152
				ldrd	r8, [r9]
				strd	r8, [r4, #160]
  143     test case(4, index of refraction) =    1.0
				strd	r6, [r4, #168]
  144     test case(4, dispersion)          =    0.0
				strd	r2, [r4, #176]
  145     test case(4, edge thickness)      =    0.0
				strd	r2, [r4, #184]
		.LVL63:
  146     marginal ray = 1; paraxial ray = 2
  147     od field = 1; sa field = 2
				str	r1, [r4, #272]
		.LVL64:
		.LBB157:
		.LBB158:
  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)
				vmov.f64	d8, #2.0e+0
				mov	ip, r4
				vmov.f64	d0, d8
				ldr	r0, [r4, #256]
				bl	TRACELINE.10096(PLT)
		.LVL65:
  154             od sa(paraxial, od field) = object distance
				add	r5, sp, #240
		.L33:
				adds	r3, r3, #1
				str	r3, [r4, #276]
				ldr	r3, [r4, #276]
				subs	r2, r3, #1
				add	r2, r5, r2, lsl #4
				ldrd	r0, [r4, #224]
				strd	r0, [r2]
  155             od sa(paraxial, sa field) = axis slope angle
				ldrd	r0, [r4, #216]
				strd	r0, [r2, #8]
		.LDL1:
  156         %repeat
  157         %comment Trace marginal ray in C
				movs	r3, #0
				cmp	r3, #2
				bne	.L33
		.L34:
		.LBE158:
				add	r7, sp, #5376
				adds	r7, r7, #16
				movs	r3, #1
				str	r3, [r7, #276]
  158         paraxial = marginal ray
				add	r4, sp, #5376
				adds	r4, r4, #16
  159         trace line(c line, clear aperture / 2)
				vmov.f64	d8, #2.0e+0
				mov	ip, r7
				vmov.f64	d0, d8
				ldr	r0, [r7, #252]
				bl	TRACELINE.10096(PLT)
		.LVL66:
  160         od cline = object distance
				vldr.64	d12, [r7, #224]
		.LVL67:
  161         %comment Trace marginal ray in F
  162         trace line(f line, clear aperture / 2)
				mov	ip, r7
				vmov.f64	d0, d8
				ldr	r0, [r7, #248]
				bl	TRACELINE.10096(PLT)
		.LVL68:
  163         od fline = object distance
  164         aberr lspher = od sa(paraxial ray, od field) -               %c
				ldr	r4, [r7, #272]
				subs	r4, r4, #1
				add	r9, sp, #240
				add	r4, r9, r4, lsl #4
				vldr.64	d9, [r4]
				vldr.64	d8, [sp, #240]
				vsub.f64	d11, d9, d8
		.LVL69:
  165             od sa(marginal ray, od field)
  166         aberr osc = 1 - ((od sa(paraxial ray, od field) *            %c
				vldr.64	d10, [r9, #8]
		.LVL70:
		.LBB159:
		.LBB160:
				vmov.f64	d0, d10
				bl	sin(PLT)
		.LVL71:
		.LBE160:
		.LBE159:
				vldr.64	d7, [r4, #8]
				vmul.f64	d9, d9, d7
				vmul.f64	d8, d8, d0
				vdiv.f64	d7, d9, d8
				vmov.f64	d8, #1.0e+0
				vsub.f64	d8, d8, d7
		.LVL72:
  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
				vldr.64	d7, [r7, #224]
				vsub.f64	d12, d7, d12
		.LVL73:
		.LBB161:
		.LBB162:
				vmul.f64	d0, d0, d0
		.LBE162:
		.LBE161:
  171         max lspher = 0.0000926 / sin(od sa(marginal ray, sa field)) ^ 2
				vldr.64	d7, .L38
				vdiv.f64	d9, d7, d0
		.LDL2:
		.LVL74:
		.LDL3:
		.LBE157:
		.LBB163:
  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    ")
				ldr	r6, .L38+168
		.LPIC4:
				add	r6, pc
				mov	r4, #256
				mov	r2, r4
				adds	r1, r6, r4
				add	r8, sp, #5120
				add	r8, r8, #16
				mov	r0, r8
				bl	memcpy(PLT)
		.LVL75:
				mov	r2, r4
				mov	r1, r8
				add	r5, sp, #272
				mov	r0, r5
				bl	memcpy(PLT)
		.LVL76:
				mov	r2, r4
				mov	r1, r5
				mov	r0, r8
				bl	memcpy(PLT)
		.LVL77:
		.LBE163:
		.LBB164:
		.LBB165:
				movs	r5, #240
				mov	r2, r5
				add	r1, sp, #5152
				mov	r0, sp
				bl	memcpy(PLT)
		.LVL78:
				ldm	r8, {r0, r1, r2, r3}
				bl	_imp_printstring(PLT)
		.LVL79:
		.LBE165:
		.LBE164:
		.LBB166:
  177     outbigreal(1, od sa(marginal ray, od field))
  178     print string("   ")
				add	r10, r6, #512
				mov	r2, r4
				mov	r1, r10
				add	r8, sp, #4864
				add	r8, r8, #16
				mov	r0, r8
				bl	memcpy(PLT)
		.LVL80:
				mov	r2, r4
				mov	r1, r8
				add	fp, sp, #528
				mov	r0, fp
				bl	memcpy(PLT)
		.LVL81:
				mov	r2, r4
				mov	r1, fp
				mov	r0, r8
				bl	memcpy(PLT)
		.LVL82:
		.LBE166:
		.LBB167:
		.LBB168:
				mov	r2, r5
				add	r1, sp, #4896
				mov	r0, sp
				bl	memcpy(PLT)
		.LVL83:
				ldm	r8, {r0, r1, r2, r3}
				bl	_imp_printstring(PLT)
		.LVL84:
		.LBE168:
		.LBE167:
		.LBB169:
		.LBB170:
				movs	r1, #11
				movs	r0, #5
				vmov.f64	d0, d10
				bl	_imp_print(PLT)
		.LVL85:
		.LBE170:
		.LBE169:
		.LBB171:
		.LBB172:
				bl	_imp_newline(PLT)
		.LVL86:
		.LBE172:
		.LBE171:
		.LBB173:
  179     print(od sa(marginal ray, sa field), 5, 11); newline
  180     print string("  Paraxial ray    ")
				mov	r2, r4
				add	r1, r6, #768
				add	r8, sp, #4608
				add	r8, r8, #16
				mov	r0, r8
				bl	memcpy(PLT)
		.LVL87:
				mov	r2, r4
				mov	r1, r8
				add	fp, sp, #784
				mov	r0, fp
				bl	memcpy(PLT)
		.LVL88:
				mov	r2, r4
				mov	r1, fp
				mov	r0, r8
				bl	memcpy(PLT)
		.LVL89:
		.LBE173:
		.LBB174:
		.LBB175:
				mov	r2, r5
				add	r1, sp, #4640
				mov	r0, sp
				bl	memcpy(PLT)
		.LVL90:
				ldm	r8, {r0, r1, r2, r3}
				bl	_imp_printstring(PLT)
		.LVL91:
		.LBE175:
		.LBE174:
		.LBB176:
  181     outbigreal(1, od sa(paraxial ray, od field))
  182     print string("   ")
				mov	r2, r4
				mov	r1, r10
				add	r8, sp, #4352
				add	r8, r8, #16
				mov	r0, r8
				bl	memcpy(PLT)
		.LVL92:
				mov	r2, r4
				mov	r1, r8
				add	r10, sp, #1040
				mov	r0, r10
				bl	memcpy(PLT)
		.LVL93:
				mov	r2, r4
				mov	r1, r10
				mov	r0, r8
				bl	memcpy(PLT)
		.LVL94:
		.LBE176:
		.LBB177:
		.LBB178:
				mov	r2, r5
				add	r1, sp, #4384
				mov	r0, sp
				bl	memcpy(PLT)
		.LVL95:
				ldm	r8, {r0, r1, r2, r3}
				bl	_imp_printstring(PLT)
		.LVL96:
		.LBE178:
		.LBE177:
  183     print(od sa(paraxial ray, sa field), 5, 11); newline
				ldr	r3, [r7, #272]
				add	r9, r9, r3, lsl #4
		.LBB179:
		.LBB180:
				movs	r1, #11
				movs	r0, #5
				vldr.64	d0, [r9, #-8]
				bl	_imp_print(PLT)
		.LVL97:
		.LBE180:
		.LBE179:
		.LBB181:
		.LBB182:
				bl	_imp_newline(PLT)
		.LVL98:
		.LBE182:
		.LBE181:
		.LBB183:
  184     print string("Longitudinal spherical aberration: ")
				mov	r2, r4
				add	r1, r6, #1024
				add	r7, sp, #4096
				adds	r7, r7, #16
				mov	r0, r7
				bl	memcpy(PLT)
		.LVL99:
				mov	r2, r4
				mov	r1, r7
				add	r8, sp, #1296
				mov	r0, r8
				bl	memcpy(PLT)
		.LVL100:
				mov	r2, r4
				mov	r1, r8
				mov	r0, r7
				bl	memcpy(PLT)
		.LVL101:
		.LBE183:
		.LBB184:
		.LBB185:
				mov	r2, r5
				add	r1, sp, #4128
				mov	r0, sp
				bl	memcpy(PLT)
		.LVL102:
				ldm	r7, {r0, r1, r2, r3}
				bl	_imp_printstring(PLT)
		.LVL103:
		.LBE185:
		.LBE184:
		.LBB186:
		.LBB187:
				movs	r1, #11
				movs	r0, #5
				vmov.f64	d0, d11
				bl	_imp_print(PLT)
		.LVL104:
		.LBE187:
		.LBE186:
		.LBB188:
		.LBB189:
				bl	_imp_newline(PLT)
		.LVL105:
		.LBE189:
		.LBE188:
		.LBB190:
  185     print(aberr lspher, 5, 11); newline
  186     print string("    (Maximum permissible): ")
				add	r8, r6, #1280
				mov	r2, r4
				mov	r1, r8
				add	r7, sp, #3856
				mov	r0, r7
				bl	memcpy(PLT)
		.LVL106:
				mov	r2, r4
				mov	r1, r7
				add	r9, sp, #1552
				mov	r0, r9
				bl	memcpy(PLT)
		.LVL107:
				mov	r2, r4
				mov	r1, r9
				mov	r0, r7
				bl	memcpy(PLT)
		.LVL108:
		.LBE190:
		.LBB191:
		.LBB192:
				mov	r2, r5
				add	r1, sp, #3872
				mov	r0, sp
				bl	memcpy(PLT)
		.LVL109:
				ldm	r7, {r0, r1, r2, r3}
				bl	_imp_printstring(PLT)
		.LVL110:
		.LBE192:
		.LBE191:
		.LBB193:
		.LBB194:
				movs	r1, #11
				movs	r0, #5
				vmov.f64	d0, d9
				bl	_imp_print(PLT)
		.LVL111:
		.LBE194:
		.LBE193:
		.LBB195:
		.LBB196:
				bl	_imp_newline(PLT)
		.LVL112:
		.LBE196:
		.LBE195:
		.LBB197:
  187     print(max lspher, 5, 11); newline
  188     print string("Offense against sine condition (coma): ")
				mov	r2, r4
				add	r1, r6, #1536
				add	r7, sp, #3600
				mov	r0, r7
				bl	memcpy(PLT)
		.LVL113:
				mov	r2, r4
				mov	r1, r7
				add	r9, sp, #1808
				mov	r0, r9
				bl	memcpy(PLT)
		.LVL114:
				mov	r2, r4
				mov	r1, r9
				mov	r0, r7
				bl	memcpy(PLT)
		.LVL115:
		.LBE197:
		.LBB198:
		.LBB199:
				mov	r2, r5
				add	r1, sp, #3616
				mov	r0, sp
				bl	memcpy(PLT)
		.LVL116:
				ldm	r7, {r0, r1, r2, r3}
				bl	_imp_printstring(PLT)
		.LVL117:
		.LBE199:
		.LBE198:
		.LBB200:
		.LBB201:
				movs	r1, #11
				movs	r0, #5
				vmov.f64	d0, d8
				bl	_imp_print(PLT)
		.LVL118:
		.LBE201:
		.LBE200:
		.LBB202:
		.LBB203:
				bl	_imp_newline(PLT)
		.LVL119:
		.LBE203:
		.LBE202:
		.LBB204:
  189     print(aberr osc, 5, 11); newline
  190     print string("    (Maximum permissible): ")
				mov	r2, r4
				mov	r1, r8
				add	r7, sp, #3344
				mov	r0, r7
				bl	memcpy(PLT)
		.LVL120:
				mov	r2, r4
				mov	r1, r7
				add	r9, sp, #2064
				mov	r0, r9
				bl	memcpy(PLT)
		.LVL121:
				mov	r2, r4
				mov	r1, r9
				mov	r0, r7
				bl	memcpy(PLT)
		.LVL122:
		.LBE204:
		.LBB205:
		.LBB206:
				mov	r2, r5
				add	r1, sp, #3360
				mov	r0, sp
				bl	memcpy(PLT)
		.LVL123:
				ldm	r7, {r0, r1, r2, r3}
				bl	_imp_printstring(PLT)
		.LVL124:
		.LBE206:
		.LBE205:
		.LBB207:
		.LBB208:
				movs	r1, #11
				movs	r0, #5
				vldr.64	d0, .L38+8
				bl	_imp_print(PLT)
		.LVL125:
		.LBE208:
		.LBE207:
		.LBB209:
		.LBB210:
				bl	_imp_newline(PLT)
		.LVL126:
		.LBE210:
		.LBE209:
		.LBB211:
  191     print(max osc, 5, 11); newline
  192     print string("Axial chromatic aberration: ")
				mov	r2, r4
				add	r1, r6, #1792
				add	r6, sp, #3088
				mov	r0, r6
				bl	memcpy(PLT)
		.LVL127:
				mov	r2, r4
				mov	r1, r6
				add	r7, sp, #2320
				mov	r0, r7
				bl	memcpy(PLT)
		.LVL128:
				mov	r2, r4
				mov	r1, r7
				mov	r0, r6
				bl	memcpy(PLT)
		.LVL129:
		.LBE211:
		.LBB212:
		.LBB213:
				mov	r2, r5
				add	r1, sp, #3104
				mov	r0, sp
				bl	memcpy(PLT)
		.LVL130:
				ldm	r6, {r0, r1, r2, r3}
				bl	_imp_printstring(PLT)
		.LVL131:
		.LBE213:
		.LBE212:
		.LBB214:
		.LBB215:
				movs	r1, #11
				movs	r0, #5
				vmov.f64	d0, d12
				bl	_imp_print(PLT)
		.LVL132:
		.LBE215:
		.LBE214:
		.LBB216:
		.LBB217:
				bl	_imp_newline(PLT)
		.LVL133:
		.LBE217:
		.LBE216:
		.LBB218:
  193     print(aberr lchrom, 5, 11); newline
  194     print string("    (Maximum permissible): ")
				mov	r2, r4
				mov	r1, r8
				add	r6, sp, #2832
				mov	r0, r6
				bl	memcpy(PLT)
		.LVL134:
				mov	r2, r4
				mov	r1, r6
				add	r7, sp, #2576
				mov	r0, r7
				bl	memcpy(PLT)
		.LVL135:
				mov	r2, r4
				mov	r1, r7
				mov	r0, r6
				bl	memcpy(PLT)
		.LVL136:
		.LBE218:
		.LBB219:
		.LBB220:
				mov	r2, r5
				add	r1, sp, #2848
				mov	r0, sp
				bl	memcpy(PLT)
		.LVL137:
				ldm	r6, {r0, r1, r2, r3}
				bl	_imp_printstring(PLT)
		.LVL138:
		.LBE220:
		.LBE219:
		.LBB221:
		.LBB222:
				movs	r1, #11
				movs	r0, #5
				vmov.f64	d0, d9
				bl	_imp_print(PLT)
		.LVL139:
		.LBE222:
		.LBE221:
		.LBB223:
		.LBB224:
				bl	_imp_newline(PLT)
		.LVL140:
		.LBE224:
		.LBE223:
		.LBB225:
		.LBB226:
				movs	r0, #0
				bl	exit(PLT)
		.LVL141:
		.L39:
				.align	3
		.L38:
				.word	-487743358
				.word	1058555463
				.word	1202590843
				.word	1063549665
				.word	0
				.word	1086178560
				.word	2061584302
				.word	1085986292
				.word	-446676599
				.word	1085907664
				.word	-1443109011
				.word	1085736945
				.word	-1752346657
				.word	1085576590
				.word	274877907
				.word	1085472088
				.word	481036337
				.word	1085338746
				.word	-309237645
				.word	1085210876
				.word	-858993459
				.word	1077611724
				.word	2109687936
				.word	1073231901
				.word	-858993459
				.word	1078971596
				.word	171798692
				.word	1071686615
				.word	2061584302
				.word	-1070551532
				.word	-412316860
				.word	1069656571
				.word	1058279942
				.word	1073339590
				.word	-1717986918
				.word	1078090137
				.word	-2061584302
				.word	1071141355
				.word	1717986918
				.word	-1068267930
				.word	_GLOBAL_OFFSET_TABLE_-(.LPIC3+4)
				.word	__stack_chk_guard(GOT)
				.word	.LANCHOR0-(.LPIC4+4)
		.LBE226:
		.LBE225:
		.LFE185:
				.section	.rodata
				.align	2
				.set	.LANCHOR0,. + 0
		.LC0:
				.byte	19
				.ascii	"test-new/fbench.imp\000"
				.space	235
		.LC1:
				.byte	18
				.ascii	"  Marginal ray    \000"
				.space	236
		.LC2:
				.byte	3
				.ascii	"   \000"
				.space	251
		.LC3:
				.byte	18
				.ascii	"  Paraxial ray    \000"
				.space	236
		.LC4:
				.byte	35
				.ascii	"Longitudinal spherical aberration: \000"
				.space	219
		.LC5:
				.byte	27
				.ascii	"    (Maximum permissible): \000"
				.space	227
		.LC6:
				.byte	39
				.ascii	"Offense against sine condition (coma): \000"
				.space	215
		.LC7:
				.byte	28
				.ascii	"Axial chromatic aberration: \000"
				.space	226
				.section	.rodata.str1.4,"aMS",%progbits,1
				.align	2
		.LC8:
				.ascii	"Illegal cycle I = 1, 1, CURRENTSURFACES\000"
		.Letext0:
  195     print(max lchrom, 5, 11); newline
  196 %end %of %program
  163 Statements compiled
