         Edinburgh IMP77 Compiler - Version 8.4
    1 %realslong
		.Ltext0:
				.align	2
		ARCSIN.7731:
		.LFB187:
    2
    3 %begin
		.LVL66:
				mov	x16, 5840
				sub	sp, sp, x16
				stp	x29, x30, [sp]
				add	x29, sp, 0
				stp	x19, x20, [sp, 16]
				stp	x21, x22, [sp, 32]
				stp	x23, x24, [sp, 48]
				stp	x25, x26, [sp, 64]
				stp	d8, d9, [sp, 80]
				stp	d10, d11, [sp, 96]
				str	d12, [sp, 112]
				adrp	x2, :got:__stack_chk_guard
				ldr	x2, [x2, #:got_lo12:__stack_chk_guard]
				ldr	x3, [x2]
				str	x3, [x29, 5832]
				mov	x3,0
				add	x2, x29, 4096
				add	x2, x2, 1744
				str	x2, [x29, 5824]
    4     %integer a line, b line, c line, d line,
				bl	_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))
				fdiv	d8, d8, d13
				fdiv	d8, d9, d8
		.LBE146:
		.LBE145:
   24     %end {cot}
   25     %real %fn arc sin(%real x)
		.LVL0:
				stp	x29, x30, [sp, -32]!
				add	x29, sp, 0
				stp	d8, d9, [sp, 16]
				fmov	d9, d0
		.LBB102:
		.LBB103:
				fmul	d1, d0, d0
		.LBE103:
		.LBE102:
   26         %result = 2 * arc tan1(x / (1 + sqrt(1 - x^2)))
				fmov	d0, 1.0e+0
		.LVL1:
				fsub	d0, d0, d1
		.LVL2:
		.LBB104:
		.LBB105:
				fsqrt	d8, d0
				fcmp	d0, #0.0
				bmi	.L4
		.LVL3:
		.L2:
		.LBE105:
		.LBE104:
				fmov	d0, 1.0e+0
				fadd	d0, d8, d0
		.LBB107:
		.LBB108:
				fdiv	d0, d9, d0
		.LVL4:
				bl	atan
		.LVL5:
		.LBE108:
		.LBE107:
   27     %end {arc sin}
				fadd	d0, d0, d0
				ldp	d8, d9, [sp, 16]
		.LVL6:
				ldp	x29, x30, [sp], 32
				ret
		.LVL7:
		.L4:
		.LBB109:
		.LBB106:
				bl	sqrt
		.LVL8:
				b	.L2
		.LBE106:
		.LBE109:
		.LFE187:
				.align	2
		TRACELINE.7760:
		.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	w1, [x19, 276]
				ldr	w0, [x19, 272]
				cmp	w1, w0
				beq	.L29
		.L13:
   36             %if radius of curvature # 0 %then %start
				fcmp	d8, #0.0
				beq	.L14
   37                 %if object distance = 0 %then %start
				ldr	d0, [x19, 224]
				fcmp	d0, #0.0
				bne	.L15
   38                     axis slope angle = 0
   39                     iang sin = ray height / radius of curvature
				ldr	d0, [x19, 208]
				fdiv	d1, d0, d8
		.LVL26:
   40                 %finish %else                                         %c
   41                     iang sin = ((object distance -                    %c
   42                         radius of curvature) / radius of curvature) * %c
   43                         axis slope angle
				ldr	d3, [x19, 216]
				fsub	d1, d0, d8
				fdiv	d8, d1, d8
				fmul	d1, d8, d3
		.LVL29:
   44                 rang sin = (from index / to index) * iang sin
				ldr	d2, [x19, 192]
				ldr	d0, [x19, 200]
				fdiv	d0, d0, d2
				fmul	d0, d0, d1
		.LVL27:
				ldr	d4, [x19, 192]
				ldr	d2, [x19, 200]
				fdiv	d2, d2, d4
				fmul	d1, d2, d1
		.LVL30:
   45                 old axis slope angle = axis slope angle
   46                 axis slope angle = axis slope angle +                 %c
				movi	d8, #0
				fadd	d8, d1, d8
				fsub	d8, d8, d0
				str	d8, [x19, 216]
				b	.L16
		.LVL28:
		.L15:
				fadd	d8, d3, d1
				fsub	d8, d8, d1
				str	d8, [x19, 216]
   47                     iang sin - rang sin
   48                 %if object distance # 0 %then                         %c
   49                     ray height = object distance * old axis slope angle
				fmul	d0, d0, d3
		.LVL31:
				str	d0, [x19, 208]
		.LVL32:
		.L16:
   50                 object distance = ray height / axis slope angle
				ldr	d0, [x19, 208]
				fdiv	d8, d0, d8
				str	d8, [x19, 224]
				b	.L22
		.L14:
   51             %else
   52                 object distance = object distance * (to index / from index)
				ldr	d2, [x19, 192]
				ldr	d0, [x19, 200]
				fdiv	d3, d2, d0
				ldr	d1, [x19, 224]
				fmul	d1, d1, d3
				str	d1, [x19, 224]
   53                 axis slope angle = axis slope angle * (from index / to index)
				fdiv	d0, d0, d2
				ldr	d1, [x19, 216]
				fmul	d0, d1, d0
				str	d0, [x19, 216]
				b	.L22
		.L19:
		.LVL33:
		.LBB139:
		.LBB140:
				ldr	d0, [x19, 216]
				bl	sin
		.LVL34:
		.LBE140:
		.LBE139:
   54             %finish
   55         %else
   56             %if radius of curvature # 0 %then %start
				fcmp	d8, #0.0
				beq	.L18
   57                 %if object distance = 0 %then %start
				ldr	d10, [x19, 224]
				fcmp	d10, #0.0
				bne	.L19
   58                     axis slope angle = 0
				str	xzr, [x19, 216]
   59                     iang sin = ray height / radius of curvature
				ldr	d0, [x19, 208]
				fdiv	d8, d0, d8
		.LVL53:
				b	.L20
		.LVL54:
		.L18:
		.LBB149:
		.LBB150:
				ldr	d0, [x19, 216]
				bl	sin
		.LVL55:
		.LBE150:
		.LBE149:
   60                 %finish %else %c
   61                     iang sin = ((object distance -                    %c
   62                         radius of curvature) / radius of curvature) * %c
   63                         sin(axis slope angle)
				fsub	d10, d10, d8
				fdiv	d8, d10, d8
				fmul	d8, d8, d0
		.LVL35:
		.L20:
   64                 iang = arc sin(iang sin)
				fmov	d0, d8
				bl	ARCSIN.7731
		.LVL36:
   65                 rang sin = (from index / to index) * iang sin
				ldr	d1, [x19, 192]
				ldr	d0, [x19, 200]
		.LVL37:
				fdiv	d0, d0, d1
   66                 old axis slope angle = axis slope angle
   67                 axis slope angle = axis slope angle +                 %c
				ldr	d12, [x19, 216]
				fadd	d12, d0, d12
				fmul	d0, d0, d8
		.LVL38:
				bl	ARCSIN.7731
		.LVL39:
				fsub	d10, d12, d0
				mov	x1, x24
				mov	x0, x25
				fmov	d0, d10
				bl	sincos
		.LVL40:
				ldr	d13, [x29, 128]
				ldr	d8, [x29, 136]
		.LVL41:
				str	d10, [x19, 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)
				ldr	d10, [x19, 232]
		.LVL42:
		.LBB141:
		.LBB142:
				fmov	d0, 5.0e-1
				fmul	d0, d12, d0
		.LVL43:
				bl	sin
		.LVL44:
				fmov	d11, d0
		.LVL45:
		.LBE142:
		.LBE141:
		.LBB143:
		.LBB144:
				fmov	d0, d12
		.LVL46:
				bl	sin
		.LVL47:
		.LBE144:
		.LBE143:
		.LBB145:
		.LBB146:
				fadd	d10, d10, d10
		.LVL48:
		.LBB147:
		.LBB148:
				fmul	d11, d11, d11
		.LBE148:
		.LBE147:
				fmul	d10, d10, d11
		.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	d0, d10, d0
				fmul	d8, d8, d0
				fadd	d8, d8, d10
				str	d8, [x19, 224]
		.L17:
		.L21:
		.LVL50:
		.L22:
		.LBE138:
		.LBE137:
   80                     sin(old axis slope angle + iang)) *               %c
   81                     cot(axis slope angle)) + sagitta
   82             %else
   83                 rang = -arcsin((from index / to index) *              %c
				ldr	d2, [x19, 192]
				ldr	d1, [x19, 200]
				fdiv	d1, d1, d2
				fmul	d0, d1, d0
				bl	ARCSIN.7731
		.LVL56:
				fmov	d10, d0
		.LVL57:
		.LBB151:
		.LBB152:
				bl	cos
		.LVL58:
				fmov	d8, d0
		.LVL59:
		.LBE152:
		.LBE151:
		.LBB153:
		.LBB154:
				ldr	d0, [x19, 216]
				bl	cos
		.LVL60:
		.LBE154:
		.LBE153:
   84                     sin(axis slope angle))
   85                 object distance = object distance * ((to index *      %c
				ldr	d1, [x19, 192]
				fmul	d8, d8, d1
				ldr	d1, [x19, 200]
				fmul	d0, d0, d1
				fdiv	d8, d8, d0
				ldr	d0, [x19, 224]
				fmul	d8, d0, d8
				str	d8, [x19, 224]
   86                     cos(-rang)) / (from index *                       %c
   87                     cos(axis slope angle)))
   88                 axis slope angle = -rang
				str	d10, [x19, 216]
				b	.L22
		.L10:
		.LVL61:
		.L27:
				ldp	d8, d9, [x29, 80]
				ldp	d10, d11, [x29, 96]
				ldp	d12, d13, [x29, 112]
		.LVL62:
		.L5:
		.LBE155:
		.LBE156:
		.LBE135:
   89             %finish
   90         %finish
   91     %end {transit surface}
   92     %routine trace line(%integer line, %real ray h)
		.LVL9:
				sub	sp, sp, #1440
				stp	x29, x30, [sp]
				add	x29, sp, 0
				stp	x19, x20, [sp, 16]
				stp	x21, x22, [sp, 32]
				stp	x23, x24, [sp, 48]
				str	x25, [sp, 64]
				mov	w23, w0
				mov	x19, x18
				adrp	x0, :got:__stack_chk_guard
		.LVL10:
				ldr	x0, [x0, #:got_lo12:__stack_chk_guard]
				ldr	x1, [x0]
				str	x1, [x29, 1432]
				mov	x1,0
   93         %integer i
   94         object distance = 0
				str	xzr, [x18, 224]
   95         ray height = ray h
				str	d0, [x18, 208]
   96         from index = 1
				fmov	d0, 1.0e+0
		.LVL11:
				str	d0, [x18, 200]
		.LBB135:
   97         %for i = 1, 1, current surfaces %cycle
   98             radius of curvature = test case(i, curvature radius)
				ldr	w22, [x18, 268]
		.LVL12:
				ldr	w0, [x19, 264]
				sub	w0, w0, #1
				sbfiz	x2, x20, 2, 32
				add	x0, x2, x0, sxtw
				add	x0, x0, 8
				ldr	d8, [x19, x0, lsl 3]
				str	d8, [x19, 232]
   99             to index = test case(i, index of refraction)
				cmp	w22, #1
				bmi	.L28
		.LVL13:
		.L6:
				adrp	x0, :got:_imp_current_file
				ldr	x0, [x0, #:got_lo12:_imp_current_file]
				ldr	x0, [x0]
				cbz	x0, .L7
				add	x8, x29, 920
				bl	_imp_c2istr
		.LVL17:
		.L8:
				adrp	x0, :got:_imp_current_line
				ldr	x0, [x0, #:got_lo12:_imp_current_line]
				ldr	w21, [x0]
				cmp	w21, 0
				mov	w0, 99
				csel	w21, w21, w0, ne
				add	x25, x29, 1176
				mov	x8, x25
				adrp	x0, .LC8
				add	x0, x0, :lo12:.LC8
				bl	_imp_c2istr
		.LVL18:
				add	x20, x29, 400
				mov	x26, 256
				mov	x2, x26
				add	x1, x29, 920
				mov	x0, x20
				bl	memcpy
		.LVL19:
				add	x24, x29, 144
				mov	x2, x26
				mov	x1, x25
				mov	x0, x24
				bl	memcpy
		.LVL20:
				mov	w5, 0
				mov	w4, 1
				mov	w3, 5
				mov	x2, x24
				mov	w1, w21
				mov	x0, x20
				bl	_signal_event
		.LVL21:
				ldr	x26, [x29, 72]
				b	.L6
		.L7:
		.LBB136:
				add	x21, x29, 1176
				mov	x24, 256
				mov	x2, x24
				adrp	x1, .LANCHOR0
				add	x1, x1, :lo12:.LANCHOR0
				mov	x0, x21
				bl	memcpy
		.LVL22:
				add	x20, x29, 664
				mov	x2, x24
				mov	x1, x21
				mov	x0, x20
				bl	memcpy
		.LVL23:
		.LBE136:
				mov	x2, x24
				mov	x1, x20
				add	x0, x29, 920
				bl	memcpy
		.LVL24:
				b	.L8
		.LVL25:
		.L29:
		.LBB137:
		.LBB138:
				ldr	w1, [x19, 260]
				sub	w1, w1, #1
				add	x1, x2, x1, sxtw
				add	x1, x1, 8
				ldr	d2, [x19, x1, lsl 3]
				str	d2, [x19, 192]
  100             %if to index > 1 %then                                     %c
				fmov	d9, 1.0e+0
				fcmpe	d2, d9
				bls	.L12
  101                 to index = to index + ((spectral line(d line) -        %c
				sub	w23, w23, #1
		.LVL14:
				sxtw	x23, w23
				add	x25, x29, 136
				add	x24, x29, 128
				b	.L11
		.LVL15:
		.L28:
				str	x26, [x29, 72]
		.LVL16:
				ldr	w0, [x19, 256]
				sub	w0, w0, #1
				ldr	d1, [x19, w0, sxtw 3]
				ldr	d0, [x19, x23, lsl 3]
				fsub	d1, d1, d0
				ldr	w1, [x19, 252]
				sub	w1, w1, #1
				ldr	w0, [x19, 248]
				sub	w0, w0, #1
				ldr	d0, [x19, w1, sxtw 3]
				ldr	d3, [x19, w0, sxtw 3]
				fsub	d0, d0, d3
				fdiv	d1, d1, d0
				fsub	d0, d2, d9
				ldr	w0, [x19, 244]
				sub	w0, w0, #1
				add	x0, x2, x0, sxtw
				add	x0, x0, 8
				ldr	d3, [x19, x0, lsl 3]
				fdiv	d0, d0, d3
				fmul	d1, d1, d0
				fadd	d1, d1, d2
				str	d1, [x19, 192]
		.L12:
		.LBB156:
		.LBB155:
  102                     spectral line(line)) /                             %c
				cbz	w22, .L5
				stp	d8, d9, [x29, 80]
				stp	d10, d11, [x29, 96]
				stp	d12, d13, [x29, 112]
				mov	w20, 0
				cmp	w22, w21
				beq	.L27
		.LVL51:
		.L11:
  103                     (spectral line(c line) - spectral line(f line))) * %c
				add	w21, w20, 1
		.LVL52:
  104                     ((test case(i, index of refraction) - 1.0) /       %c
  105                     test case(i, dispersion))
  106             transit surface
  107             from index = to index
				ldr	d0, [x19, 192]
				str	d0, [x19, 200]
  108             %if i < current surfaces %then                             %c
				ldr	w0, [x19, 268]
				cmp	w21, w0
				bge	.L23
  109                 object distance = object distance -                    %c
				ldr	w0, [x19, 240]
				sub	w0, w0, #1
				sbfiz	x20, x20, 2, 32
				add	x20, x20, x0, sxtw
				add	x20, x20, 8
				ldr	d0, [x19, 224]
				ldr	d1, [x19, x20, lsl 3]
				fsub	d0, d0, d1
				str	d0, [x19, 224]
		.L23:
				mov	w20, w21
  110                     test case(i, edge thickness)
  111         %repeat
  112     %end {trace line}
  113     %comment END GLOBAL DECLARATONS
				adrp	x0, :got:__stack_chk_guard
				ldr	x0, [x0, #:got_lo12:__stack_chk_guard]
				ldr	x1, [x29, 1432]
				ldr	x0, [x0]
				eor	x0, x1, x0
				cbnz	x0, .L30
				ldp	x19, x20, [sp, 16]
				ldp	x21, x22, [sp, 32]
		.LVL63:
				ldp	x23, x24, [sp, 48]
				ldr	x25, [sp, 64]
				ldp	x29, x30, [sp]
				add	sp, sp, 1440
				ret
		.LVL64:
		.L30:
				str	x26, [x29, 72]
				stp	d8, d9, [x29, 80]
				stp	d10, d11, [x29, 96]
				stp	d12, d13, [x29, 112]
				bl	__stack_chk_fail
		.LVL65:
		.LFE190:
				.align	2
				.global	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
				mov	w2, 3
				str	w2, [x29, 5796]
				mov	w1, 6
				str	w1, [x29, 5792]
		.LVL69:
				mov	x1, 216603790671872
				movk	x1, 0x40bd, lsl 48
				str	x1, [x29, 5544]
  118     spectral line(a line)       = 7621.0
				mov	w0, 4
				str	w0, [x29, 5800]
		.LVL68:
  119     spectral line(b line)       = 6869.955
				adrp	x1, .LC9
				ldr	d0, [x1, #:lo12:.LC9]
				str	d0, [x29, 5552]
  120     spectral line(c line)       = 6562.8160
				adrp	x1, .LC10
				ldr	d0, [x1, #:lo12:.LC10]
				str	d0, [x29, 5560]
  121     spectral line(d line)       = 5895.944
				adrp	x1, .LC11
				ldr	d0, [x1, #:lo12:.LC11]
				str	d0, [x29, 5568]
  122     spectral line(e line)       = 5269.557
				adrp	x1, .LC12
				ldr	d0, [x1, #:lo12:.LC12]
				str	d0, [x29, 5576]
  123     spectral line(f line)       = 4861.344
				adrp	x1, .LC13
				ldr	d0, [x1, #:lo12:.LC13]
				str	d0, [x29, 5584]
  124     spectral line(g prime line) = 4340.477
				adrp	x1, .LC14
				ldr	d0, [x1, #:lo12:.LC14]
				str	d0, [x29, 5592]
  125     spectral line(h line)       = 3968.494
				adrp	x1, .LC15
				ldr	d0, [x1, #:lo12:.LC15]
				str	d0, [x29, 5600]
  126     %comment  Initialise the test case array
  127     current surfaces = 4
				str	w0, [x29, 5812]
  128     curvature radius = 1; index of refraction = 2; dispersion = 3
				mov	w1, 1
				str	w1, [x29, 5808]
  129         edge thickness = 4
				mov	w1, 2
				str	w1, [x29, 5804]
				str	w0, [x29, 5784]
				adrp	x0, .LC16
				ldr	d0, [x0, #:lo12:.LC16]
				str	d0, [x29, 5608]
  130     test case(1, curvature radius)    =   27.05
				str	w2, [x29, 5788]
  131     test case(1, index of refraction) =    1.5137
				adrp	x0, .LC17
				ldr	d0, [x0, #:lo12:.LC17]
				str	d0, [x29, 5616]
  132     test case(1, dispersion)          =   63.6
				adrp	x0, .LC18
				ldr	d0, [x0, #:lo12:.LC18]
				str	d0, [x29, 5624]
  133     test case(1, edge thickness)      =    0.52
				adrp	x0, .LC19
				ldr	d0, [x0, #:lo12:.LC19]
				str	d0, [x29, 5632]
  134     test case(2, curvature radius)    =  -16.68
				adrp	x0, .LC20
				ldr	d1, [x0, #:lo12:.LC20]
				str	d1, [x29, 5640]
  135     test case(2, index of refraction) =    1.0
				fmov	d0, 1.0e+0
				str	d0, [x29, 5648]
  136     test case(2, dispersion)          =    0.0
				str	xzr, [x29, 5656]
  137     test case(2, edge thickness)      =    0.138
				adrp	x0, .LC21
				ldr	d2, [x0, #:lo12:.LC21]
				str	d2, [x29, 5664]
  138     test case(3, curvature radius)    =  -16.68
				str	d1, [x29, 5672]
  139     test case(3, index of refraction) =    1.6164
				adrp	x0, .LC22
				ldr	d1, [x0, #:lo12:.LC22]
				str	d1, [x29, 5680]
  140     test case(3, dispersion)          =   36.7
				adrp	x0, .LC23
				ldr	d1, [x0, #:lo12:.LC23]
				str	d1, [x29, 5688]
  141     test case(3, edge thickness)      =    0.38
				adrp	x0, .LC24
				ldr	d1, [x0, #:lo12:.LC24]
				str	d1, [x29, 5696]
  142     test case(4, curvature radius)    =  -78.1
				adrp	x0, .LC25
				ldr	d1, [x0, #:lo12:.LC25]
				str	d1, [x29, 5704]
  143     test case(4, index of refraction) =    1.0
				str	d0, [x29, 5712]
  144     test case(4, dispersion)          =    0.0
				str	xzr, [x29, 5720]
  145     test case(4, edge thickness)      =    0.0
				str	xzr, [x29, 5728]
		.LVL70:
  146     marginal ray = 1; paraxial ray = 2
  147     od field = 1; sa field = 2
				str	w1, [x29, 5816]
		.LVL71:
		.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)
				add	x21, x29, 4096
				add	x21, x21, 1448
				fmov	d8, 2.0e+0
				mov	x18, x21
				fmov	d0, d8
				ldr	w0, [x29, 5800]
				bl	TRACELINE.7760
		.LVL72:
  154             od sa(paraxial, od field) = object distance
				add	x20, x29, 392
				ldr	w0, [x29, 5820]
				sub	w1, w0, #1
				sbfiz	x1, x1, 4, 32
				ldr	d0, [x29, 5768]
				str	d0, [x20, x1]
  155             od sa(paraxial, sa field) = axis slope angle
				add	x19, x29, 400
		.L32:
				ldr	d0, [x29, 5760]
				str	d0, [x19, x1]
		.LDL1:
  156         %repeat
  157         %comment Trace marginal ray in C
				mov	w0, 0
				cmp	w0, 2
				bne	.L32
		.L33:
		.LBE158:
				mov	w0, 1
				str	w0, [x29, 5820]
  158         paraxial = marginal ray
				add	w0, w0, 1
				str	w0, [x29, 5820]
  159         trace line(c line, clear aperture / 2)
				add	x19, x29, 4096
				add	x19, x19, 1448
				mov	x18, x19
				fmov	d0, 2.0e+0
				ldr	w0, [x29, 5796]
				bl	TRACELINE.7760
		.LVL73:
  160         od cline = object distance
				ldr	d12, [x29, 5768]
		.LVL74:
  161         %comment Trace marginal ray in F
  162         trace line(f line, clear aperture / 2)
				mov	x18, x19
				fmov	d0, 2.0e+0
				ldr	w0, [x29, 5792]
				bl	TRACELINE.7760
		.LVL75:
  163         od fline = object distance
  164         aberr lspher = od sa(paraxial ray, od field) -               %c
				ldr	w19, [x29, 5816]
				sub	w19, w19, #1
				sbfiz	x19, x19, 4, 32
				add	x0, x29, 392
				ldr	d8, [x0, x19]
				ldr	d9, [x29, 392]
				fsub	d11, d8, d9
		.LVL76:
  165             od sa(marginal ray, od field)
  166         aberr osc = 1 - ((od sa(paraxial ray, od field) *            %c
				ldr	d10, [x29, 400]
		.LVL77:
		.LBB159:
		.LBB160:
				fmov	d0, d10
				bl	sin
		.LVL78:
		.LBE160:
		.LBE159:
				add	x24, x29, 400
				ldr	d1, [x24, x19]
				fmul	d8, d8, d1
				fmul	d9, d9, d0
				fdiv	d8, d8, d9
				fmov	d1, 1.0e+0
				fsub	d8, d1, d8
		.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
				ldr	d1, [x29, 5768]
		.LVL80:
				fsub	d12, d1, d12
		.LVL81:
		.LBB161:
		.LBB162:
				fmul	d0, d0, d0
		.LBE162:
		.LBE161:
  171         max lspher = 0.0000926 / sin(od sa(marginal ray, sa field)) ^ 2
				adrp	x0, .LC26
				ldr	d9, [x0, #:lo12:.LC26]
				fdiv	d9, d9, d0
		.LDL2:
		.LVL82:
		.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    ")
				adrp	x21, .LANCHOR0
				add	x21, x21, :lo12:.LANCHOR0
				add	x22, x29, 4096
				add	x22, x22, 1192
				mov	x19, 256
				mov	x2, x19
				add	x1, x21, x19
				mov	x0, x22
				bl	memcpy
		.LVL83:
				add	x20, x29, 424
				mov	x2, x19
				mov	x1, x22
				mov	x0, x20
				bl	memcpy
		.LVL84:
				mov	x2, x19
				mov	x1, x20
				mov	x0, x22
				bl	memcpy
		.LVL85:
		.LBE163:
		.LBB164:
		.LBB165:
				add	x20, x29, 128
				mov	x2, x19
				mov	x1, x22
				mov	x0, x20
				bl	memcpy
		.LVL86:
				mov	x0, x20
				bl	_imp_printstring
		.LVL87:
		.LBE165:
		.LBE164:
		.LBB166:
  177     outbigreal(1, od sa(marginal ray, od field))
  178     print string("   ")
				add	x23, x21, 1024
				add	x25, x21, 512
				add	x22, x29, 4096
				add	x22, x22, 936
				mov	x2, x19
				mov	x1, x25
				mov	x0, x22
				bl	memcpy
		.LVL88:
				add	x26, x29, 680
				mov	x2, x19
				mov	x1, x22
				mov	x0, x26
				bl	memcpy
		.LVL89:
				mov	x2, x19
				mov	x1, x26
				mov	x0, x22
				bl	memcpy
		.LVL90:
		.LBE166:
		.LBB167:
		.LBB168:
				mov	x2, x19
				mov	x1, x22
				mov	x0, x20
				bl	memcpy
		.LVL91:
				mov	x0, x20
				bl	_imp_printstring
		.LVL92:
		.LBE168:
		.LBE167:
		.LBB169:
		.LBB170:
				mov	w1, 11
				mov	w0, 5
				fmov	d0, d10
				bl	_imp_print
		.LVL93:
		.LBE170:
		.LBE169:
		.LBB171:
		.LBB172:
				bl	_imp_newline
		.LVL94:
		.LBE172:
		.LBE171:
		.LBB173:
  179     print(od sa(marginal ray, sa field), 5, 11); newline
  180     print string("  Paraxial ray    ")
				add	x22, x29, 4096
				add	x22, x22, 680
				mov	x2, x19
				add	x1, x21, 768
				mov	x0, x22
				bl	memcpy
		.LVL95:
				add	x26, x29, 936
				mov	x2, x19
				mov	x1, x22
				mov	x0, x26
				bl	memcpy
		.LVL96:
				mov	x2, x19
				mov	x1, x26
				mov	x0, x22
				bl	memcpy
		.LVL97:
		.LBE173:
		.LBB174:
		.LBB175:
				mov	x2, x19
				mov	x1, x22
				mov	x0, x20
				bl	memcpy
		.LVL98:
				mov	x0, x20
				bl	_imp_printstring
		.LVL99:
		.LBE175:
		.LBE174:
		.LBB176:
  181     outbigreal(1, od sa(paraxial ray, od field))
  182     print string("   ")
				add	x22, x29, 4096
				add	x22, x22, 424
				mov	x2, x19
				mov	x1, x25
				mov	x0, x22
				bl	memcpy
		.LVL100:
				add	x25, x29, 1192
				mov	x2, x19
				mov	x1, x22
				mov	x0, x25
				bl	memcpy
		.LVL101:
				mov	x2, x19
				mov	x1, x25
				mov	x0, x22
				bl	memcpy
		.LVL102:
		.LBE176:
		.LBB177:
		.LBB178:
				mov	x2, x19
				mov	x1, x22
				mov	x0, x20
				bl	memcpy
		.LVL103:
				mov	x0, x20
				bl	_imp_printstring
		.LVL104:
		.LBE178:
		.LBE177:
  183     print(od sa(paraxial ray, sa field), 5, 11); newline
				ldr	w2, [x29, 5816]
				sub	w2, w2, #1
				sbfiz	x2, x2, 4, 32
		.LBB179:
		.LBB180:
				mov	w1, 11
				mov	w0, 5
				ldr	d0, [x24, x2]
				bl	_imp_print
		.LVL105:
		.LBE180:
		.LBE179:
		.LBB181:
		.LBB182:
				bl	_imp_newline
		.LVL106:
		.LBE182:
		.LBE181:
		.LBB183:
  184     print string("Longitudinal spherical aberration: ")
				add	x22, x29, 4096
				add	x22, x22, 168
				mov	x2, x19
				mov	x1, x23
				mov	x0, x22
				bl	memcpy
		.LVL107:
				add	x23, x29, 1448
				mov	x2, x19
				mov	x1, x22
				mov	x0, x23
				bl	memcpy
		.LVL108:
				mov	x2, x19
				mov	x1, x23
				mov	x0, x22
				bl	memcpy
		.LVL109:
		.LBE183:
		.LBB184:
		.LBB185:
				mov	x2, x19
				mov	x1, x22
				mov	x0, x20
				bl	memcpy
		.LVL110:
				mov	x0, x20
				bl	_imp_printstring
		.LVL111:
		.LBE185:
		.LBE184:
		.LBB186:
		.LBB187:
				mov	w1, 11
				mov	w0, 5
				fmov	d0, d11
				bl	_imp_print
		.LVL112:
		.LBE187:
		.LBE186:
		.LBB188:
		.LBB189:
				bl	_imp_newline
		.LVL113:
		.LBE189:
		.LBE188:
		.LBB190:
  185     print(aberr lspher, 5, 11); newline
  186     print string("    (Maximum permissible): ")
				add	x23, x21, 1280
				add	x22, x29, 4008
				mov	x2, x19
				mov	x1, x23
				mov	x0, x22
				bl	memcpy
		.LVL114:
				add	x24, x29, 1704
				mov	x2, x19
				mov	x1, x22
				mov	x0, x24
				bl	memcpy
		.LVL115:
				mov	x2, x19
				mov	x1, x24
				mov	x0, x22
				bl	memcpy
		.LVL116:
		.LBE190:
		.LBB191:
		.LBB192:
				mov	x2, x19
				mov	x1, x22
				mov	x0, x20
				bl	memcpy
		.LVL117:
				mov	x0, x20
				bl	_imp_printstring
		.LVL118:
		.LBE192:
		.LBE191:
		.LBB193:
		.LBB194:
				mov	w1, 11
				mov	w0, 5
				fmov	d0, d9
				bl	_imp_print
		.LVL119:
		.LBE194:
		.LBE193:
		.LBB195:
		.LBB196:
				bl	_imp_newline
		.LVL120:
		.LBE196:
		.LBE195:
		.LBB197:
  187     print(max lspher, 5, 11); newline
  188     print string("Offense against sine condition (coma): ")
				add	x22, x29, 3752
				mov	x2, x19
				add	x1, x21, 1536
				mov	x0, x22
				bl	memcpy
		.LVL121:
				add	x24, x29, 1960
				mov	x2, x19
				mov	x1, x22
				mov	x0, x24
				bl	memcpy
		.LVL122:
				mov	x2, x19
				mov	x1, x24
				mov	x0, x22
				bl	memcpy
		.LVL123:
		.LBE197:
		.LBB198:
		.LBB199:
				mov	x2, x19
				mov	x1, x22
				mov	x0, x20
				bl	memcpy
		.LVL124:
				mov	x0, x20
				bl	_imp_printstring
		.LVL125:
		.LBE199:
		.LBE198:
		.LBB200:
		.LBB201:
				mov	w1, 11
				mov	w0, 5
				fmov	d0, d8
				bl	_imp_print
		.LVL126:
		.LBE201:
		.LBE200:
		.LBB202:
		.LBB203:
				bl	_imp_newline
		.LVL127:
		.LBE203:
		.LBE202:
		.LBB204:
  189     print(aberr osc, 5, 11); newline
  190     print string("    (Maximum permissible): ")
				add	x22, x29, 3496
				mov	x2, x19
				mov	x1, x23
				mov	x0, x22
				bl	memcpy
		.LVL128:
				add	x24, x29, 2216
				mov	x2, x19
				mov	x1, x22
				mov	x0, x24
				bl	memcpy
		.LVL129:
				mov	x2, x19
				mov	x1, x24
				mov	x0, x22
				bl	memcpy
		.LVL130:
		.LBE204:
		.LBB205:
		.LBB206:
				mov	x2, x19
				mov	x1, x22
				mov	x0, x20
				bl	memcpy
		.LVL131:
				mov	x0, x20
				bl	_imp_printstring
		.LVL132:
		.LBE206:
		.LBE205:
		.LBB207:
		.LBB208:
				mov	w1, 11
				mov	w0, 5
				adrp	x2, .LC27
				ldr	d0, [x2, #:lo12:.LC27]
				bl	_imp_print
		.LVL133:
		.LBE208:
		.LBE207:
		.LBB209:
		.LBB210:
				bl	_imp_newline
		.LVL134:
		.LBE210:
		.LBE209:
		.LBB211:
  191     print(max osc, 5, 11); newline
  192     print string("Axial chromatic aberration: ")
				add	x0, x29, 3240
				mov	x2, x19
				add	x1, x21, 1792
				mov	x21, x0
				bl	memcpy
		.LVL135:
				add	x22, x29, 2472
				mov	x2, x19
				mov	x1, x21
				mov	x0, x22
				bl	memcpy
		.LVL136:
				mov	x2, x19
				mov	x1, x22
				mov	x0, x21
				bl	memcpy
		.LVL137:
		.LBE211:
		.LBB212:
		.LBB213:
				mov	x2, x19
				mov	x1, x21
				mov	x0, x20
				bl	memcpy
		.LVL138:
				mov	x0, x20
				bl	_imp_printstring
		.LVL139:
		.LBE213:
		.LBE212:
		.LBB214:
		.LBB215:
				mov	w1, 11
				mov	w0, 5
				fmov	d0, d12
				bl	_imp_print
		.LVL140:
		.LBE215:
		.LBE214:
		.LBB216:
		.LBB217:
				bl	_imp_newline
		.LVL141:
		.LBE217:
		.LBE216:
		.LBB218:
  193     print(aberr lchrom, 5, 11); newline
  194     print string("    (Maximum permissible): ")
				add	x21, x29, 2984
				mov	x2, x19
				mov	x1, x23
				mov	x0, x21
				bl	memcpy
		.LVL142:
				add	x22, x29, 2728
				mov	x2, x19
				mov	x1, x21
				mov	x0, x22
				bl	memcpy
		.LVL143:
				mov	x2, x19
				mov	x1, x22
				mov	x0, x21
				bl	memcpy
		.LVL144:
		.LBE218:
		.LBB219:
		.LBB220:
				mov	x2, x19
				mov	x1, x21
				mov	x0, x20
				bl	memcpy
		.LVL145:
				mov	x0, x20
				bl	_imp_printstring
		.LVL146:
		.LBE220:
		.LBE219:
		.LBB221:
		.LBB222:
				mov	w1, 11
				mov	w0, 5
				fmov	d0, d9
				bl	_imp_print
		.LVL147:
		.LBE222:
		.LBE221:
		.LBB223:
		.LBB224:
				bl	_imp_newline
		.LVL148:
		.LBE224:
		.LBE223:
		.LBB225:
		.LBB226:
				mov	w0, 0
				bl	exit
		.LVL149:
		.LBE226:
		.LBE225:
		.LFE185:
				.section	.rodata.cst8,"aM",@progbits,8
				.align	3
		.LC9:
				.word	2061584302
				.word	1085986292
				.align	3
		.LC10:
				.word	-446676599
				.word	1085907664
				.align	3
		.LC11:
				.word	-1443109011
				.word	1085736945
				.align	3
		.LC12:
				.word	-1752346657
				.word	1085576590
				.align	3
		.LC13:
				.word	274877907
				.word	1085472088
				.align	3
		.LC14:
				.word	481036337
				.word	1085338746
				.align	3
		.LC15:
				.word	-309237645
				.word	1085210876
				.align	3
		.LC16:
				.word	-858993459
				.word	1077611724
				.align	3
		.LC17:
				.word	2109687936
				.word	1073231901
				.align	3
		.LC18:
				.word	-858993459
				.word	1078971596
				.align	3
		.LC19:
				.word	171798692
				.word	1071686615
				.align	3
		.LC20:
				.word	2061584302
				.word	-1070551532
				.align	3
		.LC21:
				.word	-412316860
				.word	1069656571
				.align	3
		.LC22:
				.word	1058279942
				.word	1073339590
				.align	3
		.LC23:
				.word	-1717986918
				.word	1078090137
				.align	3
		.LC24:
				.word	-2061584302
				.word	1071141355
				.align	3
		.LC25:
				.word	1717986918
				.word	-1068267930
				.align	3
		.LC26:
				.word	-487743358
				.word	1058555463
				.align	3
		.LC27:
				.word	1202590843
				.word	1063549665
				.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
		.LC8:
				.string	"Illegal cycle I = 1, 1, CURRENTSURFACES"
		.Letext0:
  195     print(max lchrom, 5, 11); newline
  196 %end %of %program
  163 Statements compiled
