         Edinburgh IMP77 Compiler - Version 8.4
    1 %realslong
				.machinemode zarch
				.machine "zEC12"
		.text
		.Ltext0:
				.align	8
		ARCSIN.6731:
		.LFB187:
    2
    3 %begin
		.LVL58:
				stmg	%r9,%r15,72(%r15)
				larl	%r13,.L42
				lgr	%r14,%r15
				lay	%r15,-5904(%r15)
				aghi	%r14,-40
				std	%f8,0(%r14)
				std	%f10,8(%r14)
				std	%f12,16(%r14)
				std	%f14,24(%r14)
				std	%f9,32(%r14)
				ear	%r1,%a0
				sllg	%r1,%r1,32
				ear	%r1,%a1
				lay	%r4,5856(%r15)
				mvc	0(8,%r4),40(%r1)
				lay	%r1,6064(%r15)
				stg	%r1,5848(%r15)
    4     %integer a line, b line, c line, d line,
				brasl	%r14,_imp_initialise@PLT
		.LVL59:
    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))
				ldr	%f4,%f12
				ddbr	%f4,%f9
				ld	%f2,.L34-.L33(%r13)
				ddbr	%f2,%f4
		.LBE147:
		.LBE146:
   24     %end {cot}
   25     %real %fn arc sin(%real x)
		.LVL0:
				stmg	%r13,%r15,104(%r15)
				larl	%r13,.L5
				lgr	%r14,%r15
				lay	%r15,-176(%r15)
				aghi	%r14,-16
				std	%f8,0(%r14)
				std	%f10,8(%r14)
				ldr	%f10,%f0
		.LBB102:
		.LBB103:
				ldr	%f2,%f0
				mdbr	%f2,%f0
		.LBE103:
		.LBE102:
   26         %result = 2 * arc tan1(x / (1 + sqrt(1 - x^2)))
				ld	%f0,.L6-.L5(%r13)
		.LVL1:
				sdbr	%f0,%f2
		.LVL2:
		.LBB104:
		.LBB105:
				sqdbr	%f8,%f0
				lzdr	%f2
				cdbr	%f0,%f2
				jl	.L4
		.LVL3:
		.L2:
		.LBE105:
		.LBE104:
				adb	%f8,.L6-.L5(%r13)
		.LVL4:
		.LBB107:
		.LBB108:
				ldr	%f0,%f10
				ddbr	%f0,%f8
				brasl	%r14,atan@PLT
		.LVL5:
		.LBE108:
		.LBE107:
   27     %end {arc sin}
				adbr	%f0,%f0
				ld	%f8,160(%r15)
				ld	%f10,168(%r15)
		.LVL6:
				lg	%r4,288(%r15)
				lmg	%r13,%r15,280(%r15)
				br	%r4
		.LVL7:
		.L4:
		.LBB109:
		.LBB106:
				brasl	%r14,sqrt@PLT
		.LVL8:
				j	.L2
				.section	.rodata
				.align	8
		.L5:
		.L6:
				.long	1072693248
				.long	0
				.align	2
		.text
		.LBE106:
		.LBE109:
		.LFE187:
				.section	.rodata.str1.2,"aMS",@progbits,1
				.align	2
		.LC9:
				.string	"Illegal cycle I = 1, 1, CURRENTSURFACES"
				.section	.rodata
				.align	2
		.LC0:
				.byte	19
				.string	"test-new/fbench.imp"
				.zero	235
		.text
				.align	8
		TRACELINE.6760:
		.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
				clc	276(4,%r11),272(%r11)
				je	.L31
		.L15:
   36             %if radius of curvature # 0 %then %start
				lzdr	%f0
				cdbr	%f8,%f0
				je	.L16
   37                 %if object distance = 0 %then %start
				ld	%f2,224(%r11)
				cdbr	%f2,%f0
				jne	.L17
   38                     axis slope angle = 0
   39                     iang sin = ray height / radius of curvature
				ld	%f2,208(%r11)
				ddbr	%f2,%f8
				ldr	%f4,%f2
		.LVL22:
   40                 %finish %else                                         %c
   41                     iang sin = ((object distance -                    %c
   42                         radius of curvature) / radius of curvature) * %c
   43                         axis slope angle
				ld	%f1,216(%r11)
				ldr	%f4,%f2
				sdbr	%f4,%f8
				ddbr	%f4,%f8
				mdbr	%f4,%f1
		.LVL26:
   44                 rang sin = (from index / to index) * iang sin
				ld	%f2,200(%r11)
		.LVL23:
				ddb	%f2,192(%r11)
				mdbr	%f2,%f4
		.LVL24:
				ld	%f6,200(%r11)
				ddb	%f6,192(%r11)
				mdbr	%f4,%f6
		.LVL27:
   45                 old axis slope angle = axis slope angle
   46                 axis slope angle = axis slope angle +                 %c
				adbr	%f0,%f2
				sdbr	%f0,%f2
				std	%f0,216(%r11)
				j	.L18
		.LVL25:
		.L17:
				ldr	%f0,%f1
				adbr	%f0,%f4
				sdbr	%f0,%f4
				std	%f0,216(%r11)
   47                     iang sin - rang sin
   48                 %if object distance # 0 %then                         %c
   49                     ray height = object distance * old axis slope angle
				mdbr	%f2,%f1
		.LVL28:
				std	%f2,208(%r11)
		.LVL29:
		.L18:
   50                 object distance = ray height / axis slope angle
				ld	%f2,208(%r11)
				ddbr	%f2,%f0
				std	%f2,224(%r11)
				j	.L24
		.L16:
   51             %else
   52                 object distance = object distance * (to index / from index)
				ld	%f4,192(%r11)
				ld	%f0,200(%r11)
				ldr	%f2,%f4
				ddbr	%f2,%f0
				mdb	%f2,224(%r11)
				std	%f2,224(%r11)
   53                 axis slope angle = axis slope angle * (from index / to index)
				ddbr	%f0,%f4
				mdb	%f0,216(%r11)
				std	%f0,216(%r11)
				j	.L24
		.L21:
		.LVL30:
		.LBB140:
		.LBB141:
				ld	%f0,216(%r11)
				brasl	%r14,sin@PLT
		.LVL31:
		.LBE141:
		.LBE140:
   54             %finish
   55         %else
   56             %if radius of curvature # 0 %then %start
				lzdr	%f0
				cdbr	%f8,%f0
				je	.L20
   57                 %if object distance = 0 %then %start
				ld	%f10,224(%r11)
				cdbr	%f10,%f0
				jne	.L21
   58                     axis slope angle = 0
				std	%f0,216(%r11)
   59                     iang sin = ray height / radius of curvature
				ld	%f0,208(%r11)
				ddbr	%f0,%f8
				ldr	%f10,%f0
		.LVL48:
				j	.L22
		.LVL49:
		.L20:
		.LBB150:
		.LBB151:
				ld	%f0,216(%r11)
				brasl	%r14,sin@PLT
		.LVL50:
		.LBE151:
		.LBE150:
   60                 %finish %else %c
   61                     iang sin = ((object distance -                    %c
   62                         radius of curvature) / radius of curvature) * %c
   63                         sin(axis slope angle)
				sdbr	%f10,%f8
				ddbr	%f10,%f8
				mdbr	%f10,%f0
		.LVL32:
		.L22:
   64                 iang = arc sin(iang sin)
				ldr	%f0,%f10
				brasl	%r14,ARCSIN.6731
		.LVL33:
   65                 rang sin = (from index / to index) * iang sin
				ld	%f0,200(%r11)
				ddb	%f0,192(%r11)
   66                 old axis slope angle = axis slope angle
   67                 axis slope angle = axis slope angle +                 %c
				adb	%f0,216(%r11)
		.LVL34:
				ldr	%f14,%f0
				mdbr	%f0,%f10
		.LVL35:
				brasl	%r14,ARCSIN.6731
		.LVL36:
				ldr	%f8,%f14
				sdbr	%f8,%f0
				aghik	%r3,%r15,168
				la	%r2,176(%r15)
				ldr	%f0,%f8
				brasl	%r14,sincos@PLT
		.LVL37:
				ld	%f9,168(%r15)
				ld	%f12,176(%r15)
				std	%f8,216(%r11)
   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)
				ld	%f8,232(%r11)
		.LVL38:
		.LBB142:
		.LBB143:
				ld	%f0,.L35-.L33(%r13)
				mdbr	%f0,%f14
				brasl	%r14,sin@PLT
		.LVL39:
				ldr	%f10,%f0
		.LVL40:
		.LBE143:
		.LBE142:
		.LBB144:
		.LBB145:
				ldr	%f0,%f14
		.LVL41:
				brasl	%r14,sin@PLT
		.LVL42:
		.LBE145:
		.LBE144:
		.LBB146:
		.LBB147:
				adbr	%f8,%f8
		.LVL43:
		.LBB148:
		.LBB149:
				mdbr	%f10,%f10
		.LBE149:
		.LBE148:
				mdbr	%f8,%f10
		.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
				mdbr	%f0,%f8
				mdbr	%f2,%f0
				adbr	%f2,%f8
				std	%f2,224(%r11)
		.L19:
		.L23:
		.LVL45:
		.L24:
		.LBE139:
		.LBE138:
   80                     sin(old axis slope angle + iang)) *               %c
   81                     cot(axis slope angle)) + sagitta
   82             %else
   83                 rang = -arcsin((from index / to index) *              %c
				ld	%f2,200(%r11)
				ddb	%f2,192(%r11)
				mdbr	%f0,%f2
				brasl	%r14,ARCSIN.6731
		.LVL51:
				ldr	%f10,%f0
		.LVL52:
		.LBB152:
		.LBB153:
				brasl	%r14,cos@PLT
		.LVL53:
				ldr	%f8,%f0
		.LVL54:
		.LBE153:
		.LBE152:
		.LBB154:
		.LBB155:
				ld	%f0,216(%r11)
				brasl	%r14,cos@PLT
		.LVL55:
		.LBE155:
		.LBE154:
   84                     sin(axis slope angle))
   85                 object distance = object distance * ((to index *      %c
				mdb	%f8,192(%r11)
				mdb	%f0,200(%r11)
				ddbr	%f8,%f0
				mdb	%f8,224(%r11)
				std	%f8,224(%r11)
   86                     cos(-rang)) / (from index *                       %c
   87                     cos(axis slope angle)))
   88                 axis slope angle = -rang
				std	%f10,216(%r11)
				j	.L24
		.L12:
		.LVL56:
		.L7:
		.LBE156:
		.LBE157:
		.LBE135:
   89             %finish
   90         %finish
   91     %end {transit surface}
   92     %routine trace line(%integer line, %real ray h)
		.LVL9:
				stmg	%r6,%r15,48(%r15)
				larl	%r13,.L33
				lgr	%r14,%r15
				lay	%r15,-1512(%r15)
				aghi	%r14,-40
				std	%f8,0(%r14)
				std	%f10,8(%r14)
				std	%f12,16(%r14)
				std	%f14,24(%r14)
				std	%f9,32(%r14)
				lgr	%r7,%r2
				lgr	%r11,%r0
				ear	%r1,%a0
				sllg	%r1,%r1,32
				ear	%r1,%a1
				mvc	1464(8,%r15),40(%r1)
   93         %integer i
   94         object distance = 0
				lzdr	%f2
				std	%f2,224(%r11)
   95         ray height = ray h
				std	%f0,208(%r11)
   96         from index = 1
				ld	%f0,.L34-.L33(%r13)
		.LVL10:
				std	%f0,200(%r11)
		.LBB135:
   97         %for i = 1, 1, current surfaces %cycle
   98             radius of curvature = test case(i, curvature radius)
				l	%r9,268(%r11)
		.LVL11:
		.LBB136:
				l	%r1,264(%r11)
				ahik	%r2,%r1,-1
				lgfr	%r1,%r10
				sllg	%r1,%r1,2
				lgr	%r3,%r1
				agfr	%r3,%r2
				lgr	%r2,%r3
				aghi	%r2,8
				sllg	%r2,%r2,3
				ld	%f8,0(%r2,%r11)
				std	%f8,232(%r11)
   99             to index = test case(i, index of refraction)
				ahik	%r1,%r9,-1
		.LVL12:
		.LBE136:
				cijl	%r1,0,.L30
		.LVL13:
		.L8:
				lgrl	%r1,_imp_current_file@GOTENT
		.LVL15:
				ltg	%r3,0(%r1)
				je	.L9
				la	%r2,952(%r15)
		.LVL16:
				brasl	%r14,_imp_c2istr@PLT
		.LVL17:
		.L10:
				lgrl	%r1,_imp_current_line@GOTENT
				lt	%r10,0(%r1)
				ltr	%r10,%r10
				lhi	%r1,99
				locrne	%r1,%r10
				lr	%r10,%r1
				larl	%r3,.LC9
				la	%r2,1208(%r15)
				brasl	%r14,_imp_c2istr@PLT
		.LVL18:
				mvc	440(256,%r15),952(%r15)
				mvc	184(256,%r15),1208(%r15)
				mvghi	160(%r15),0
				lghi	%r6,1
				lghi	%r5,5
				la	%r4,184(%r15)
				lgfr	%r3,%r10
				la	%r2,440(%r15)
				brasl	%r14,_signal_event@PLT
		.LVL19:
				j	.L8
		.LVL20:
		.L9:
		.LBB137:
				larl	%r1,.LC0
				mvc	1208(256,%r15),0(%r1)
				mvc	696(256,%r15),1208(%r15)
		.LBE137:
				mvc	952(256,%r15),696(%r15)
				j	.L10
		.LVL21:
		.L31:
		.LBB138:
		.LBB139:
				l	%r2,260(%r11)
				ahi	%r2,-1
				agfr	%r1,%r2
				aghi	%r1,8
				sllg	%r1,%r1,3
				ld	%f2,0(%r1,%r11)
				std	%f2,192(%r11)
  100             %if to index > 1 %then                                     %c
				cdb	%f2,.L34-.L33(%r13)
				jle	.L14
  101                 to index = to index + ((spectral line(d line) -        %c
				ahi	%r7,-1
				lgfr	%r7,%r7
				sllg	%r7,%r7,3
				sr	%r9,%r10
				j	.L13
		.LVL14:
		.L30:
				l	%r1,256(%r11)
				ahi	%r1,-1
				lgfr	%r1,%r1
				sllg	%r1,%r1,3
				ld	%f0,0(%r1,%r11)
				sdb	%f0,0(%r7,%r11)
				l	%r1,252(%r11)
				ahi	%r1,-1
				lgfr	%r1,%r1
				sllg	%r2,%r1,3
				l	%r1,248(%r11)
				ahi	%r1,-1
				lgfr	%r1,%r1
				sllg	%r1,%r1,3
				ld	%f4,0(%r2,%r11)
				sdb	%f4,0(%r1,%r11)
				ddbr	%f0,%f4
				ldr	%f4,%f2
				sdb	%f4,.L34-.L33(%r13)
				l	%r1,244(%r11)
				ahik	%r2,%r1,-1
				lgfr	%r1,%r10
				sllg	%r1,%r1,2
				agfr	%r1,%r2
				aghi	%r1,8
				sllg	%r1,%r1,3
				ddb	%f4,0(%r1,%r11)
				mdbr	%f0,%f4
				adbr	%f0,%f2
				std	%f0,192(%r11)
		.L14:
		.LBB157:
		.LBB156:
  102                     spectral line(line)) /                             %c
				cije	%r9,0,.L7
				lhi	%r10,0
				brct	%r9,.L13
				j	.L7
		.LVL46:
		.L13:
  103                     (spectral line(c line) - spectral line(f line))) * %c
				ahik	%r8,%r10,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
				ld	%f0,192(%r11)
				std	%f0,200(%r11)
  108             %if i < current surfaces %then                             %c
				c	%r8,268(%r11)
				jhe	.L25
  109                 object distance = object distance -                    %c
				l	%r1,240(%r11)
				ahik	%r2,%r1,-1
				lgfr	%r10,%r10
				sllg	%r1,%r10,2
				agfr	%r1,%r2
				aghi	%r1,8
				sllg	%r1,%r1,3
				ld	%f0,224(%r11)
				sdb	%f0,0(%r1,%r11)
				std	%f0,224(%r11)
		.L25:
				lr	%r10,%r8
  110                     test case(i, edge thickness)
  111         %repeat
  112     %end {trace line}
  113     %comment END GLOBAL DECLARATONS
				ear	%r1,%a0
				sllg	%r1,%r1,32
				ear	%r1,%a1
				clc	1464(8,%r15),40(%r1)
				jne	.L32
				ld	%f8,1472(%r15)
				ld	%f10,1480(%r15)
				ld	%f12,1488(%r15)
				ld	%f14,1496(%r15)
				ld	%f9,1504(%r15)
				lg	%r4,1624(%r15)
				lmg	%r6,%r15,1560(%r15)
				br	%r4
		.L32:
				brasl	%r14,__stack_chk_fail@PLT
		.LVL57:
				.section	.rodata
				.align	8
		.L33:
		.L35:
				.long	1071644672
				.long	0
		.L34:
				.long	1072693248
				.long	0
				.align	2
		.text
		.LFE190:
				.section	.rodata
				.align	2
		.LC1:
				.byte	18
				.string	"  Marginal ray    "
				.zero	236
				.align	2
		.LC2:
				.byte	3
				.string	"   "
				.zero	251
				.align	2
		.LC3:
				.byte	18
				.string	"  Paraxial ray    "
				.zero	236
				.align	2
		.LC4:
				.byte	35
				.string	"Longitudinal spherical aberration: "
				.zero	219
				.align	2
		.LC5:
				.byte	27
				.string	"    (Maximum permissible): "
				.zero	227
				.align	2
		.LC6:
				.byte	39
				.string	"Offense against sine condition (coma): "
				.zero	215
				.align	2
		.LC7:
				.byte	28
				.string	"Axial chromatic aberration: "
				.zero	226
		.text
				.align	8
		.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
				lay	%r1,5820(%r15)
				mvhi	0(%r1),3
				lay	%r1,5816(%r15)
				mvhi	0(%r1),6
		.LVL61:
				ld	%f0,.L43-.L42(%r13)
				stdy	%f0,5568(%r15)
  118     spectral line(a line)       = 7621.0
				lay	%r1,5824(%r15)
				mvhi	0(%r1),4
		.LVL60:
  119     spectral line(b line)       = 6869.955
				ld	%f0,.L44-.L42(%r13)
				stdy	%f0,5576(%r15)
  120     spectral line(c line)       = 6562.8160
				ld	%f0,.L45-.L42(%r13)
				stdy	%f0,5584(%r15)
  121     spectral line(d line)       = 5895.944
				ld	%f0,.L46-.L42(%r13)
				stdy	%f0,5592(%r15)
  122     spectral line(e line)       = 5269.557
				ld	%f0,.L47-.L42(%r13)
				stdy	%f0,5600(%r15)
  123     spectral line(f line)       = 4861.344
				ld	%f0,.L48-.L42(%r13)
				stdy	%f0,5608(%r15)
  124     spectral line(g prime line) = 4340.477
				ld	%f0,.L49-.L42(%r13)
				stdy	%f0,5616(%r15)
  125     spectral line(h line)       = 3968.494
				ld	%f0,.L50-.L42(%r13)
				stdy	%f0,5624(%r15)
  126     %comment  Initialise the test case array
  127     current surfaces = 4
				lay	%r1,5836(%r15)
				mvhi	0(%r1),4
  128     curvature radius = 1; index of refraction = 2; dispersion = 3
				lay	%r1,5832(%r15)
				mvhi	0(%r1),1
  129         edge thickness = 4
				lay	%r1,5828(%r15)
				mvhi	0(%r1),2
				lay	%r1,5808(%r15)
				mvhi	0(%r1),4
				ld	%f0,.L51-.L42(%r13)
				stdy	%f0,5632(%r15)
  130     test case(1, curvature radius)    =   27.05
				lay	%r1,5812(%r15)
				mvhi	0(%r1),3
  131     test case(1, index of refraction) =    1.5137
				ld	%f0,.L52-.L42(%r13)
				stdy	%f0,5640(%r15)
  132     test case(1, dispersion)          =   63.6
				ld	%f0,.L53-.L42(%r13)
				stdy	%f0,5648(%r15)
  133     test case(1, edge thickness)      =    0.52
				ld	%f0,.L54-.L42(%r13)
				stdy	%f0,5656(%r15)
  134     test case(2, curvature radius)    =  -16.68
				ld	%f0,.L55-.L42(%r13)
				stdy	%f0,5664(%r15)
  135     test case(2, index of refraction) =    1.0
				ld	%f0,.L56-.L42(%r13)
				stdy	%f0,5672(%r15)
  136     test case(2, dispersion)          =    0.0
				lzdr	%f0
				stdy	%f0,5680(%r15)
  137     test case(2, edge thickness)      =    0.138
				ld	%f0,.L57-.L42(%r13)
				stdy	%f0,5688(%r15)
  138     test case(3, curvature radius)    =  -16.68
				ld	%f0,.L55-.L42(%r13)
				stdy	%f0,5696(%r15)
  139     test case(3, index of refraction) =    1.6164
				ld	%f0,.L58-.L42(%r13)
				stdy	%f0,5704(%r15)
  140     test case(3, dispersion)          =   36.7
				ld	%f0,.L59-.L42(%r13)
				stdy	%f0,5712(%r15)
  141     test case(3, edge thickness)      =    0.38
				ld	%f0,.L60-.L42(%r13)
				stdy	%f0,5720(%r15)
  142     test case(4, curvature radius)    =  -78.1
				ld	%f0,.L61-.L42(%r13)
				stdy	%f0,5728(%r15)
  143     test case(4, index of refraction) =    1.0
				ld	%f0,.L56-.L42(%r13)
				stdy	%f0,5736(%r15)
  144     test case(4, dispersion)          =    0.0
				lzdr	%f0
				stdy	%f0,5744(%r15)
  145     test case(4, edge thickness)      =    0.0
				stdy	%f0,5752(%r15)
		.LVL62:
  146     marginal ray = 1; paraxial ray = 2
  147     od field = 1; sa field = 2
				lay	%r1,5840(%r15)
				mvhi	0(%r1),2
		.LVL63:
		.LBB158:
		.LBB159:
  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)
				aghik	%r11,%r15,5568
		.L37:
				lgr	%r0,%r11
				ld	%f0,.L62-.L42(%r13)
				lgf	%r2,5824(%r15)
				brasl	%r14,TRACELINE.6760
		.LVL64:
  154             od sa(paraxial, od field) = object distance
				ly	%r2,5844(%r15)
				ahik	%r1,%r2,-1
				lgfr	%r1,%r1
				sllg	%r1,%r1,4
				ldy	%f0,5792(%r15)
				std	%f0,416(%r1,%r15)
  155             od sa(paraxial, sa field) = axis slope angle
				ldy	%f0,5784(%r15)
				std	%f0,424(%r1,%r15)
		.LDL1:
  156         %repeat
  157         %comment Trace marginal ray in C
				lhi	%r2,0
				cijlh	%r2,2,.L37
		.L38:
		.LBE159:
				lay	%r1,5844(%r15)
				mvhi	0(%r1),1
  158         paraxial = marginal ray
				ahik	%r1,%r2,1
				sty	%r1,5844(%r15)
  159         trace line(c line, clear aperture / 2)
				aghik	%r11,%r15,5568
				lgr	%r0,%r11
				ld	%f0,.L62-.L42(%r13)
				lgf	%r2,5820(%r15)
				brasl	%r14,TRACELINE.6760
		.LVL65:
  160         od cline = object distance
				ldy	%f9,5792(%r15)
		.LVL66:
  161         %comment Trace marginal ray in F
  162         trace line(f line, clear aperture / 2)
				lgr	%r0,%r11
				ld	%f0,.L62-.L42(%r13)
				lgf	%r2,5816(%r15)
				brasl	%r14,TRACELINE.6760
		.LVL67:
  163         od fline = object distance
  164         aberr lspher = od sa(paraxial ray, od field) -               %c
				ly	%r1,5840(%r15)
				ahik	%r11,%r1,-1
				lgfr	%r11,%r11
				sllg	%r11,%r11,4
				ld	%f8,416(%r11,%r15)
				ld	%f10,416(%r15)
				ldr	%f12,%f8
				sdbr	%f12,%f10
		.LVL68:
  165             od sa(marginal ray, od field)
  166         aberr osc = 1 - ((od sa(paraxial ray, od field) *            %c
				lg	%r9,424(%r15)
		.LVL69:
		.LBB160:
		.LBB161:
				ldgr	%f0,%r9
				brasl	%r14,sin@PLT
		.LVL70:
		.LBE161:
		.LBE160:
				mdb	%f8,424(%r11,%r15)
				mdbr	%f10,%f0
				ddbr	%f8,%f10
				ld	%f14,.L56-.L42(%r13)
				sdbr	%f14,%f8
		.LVL71:
  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
				ldy	%f10,5792(%r15)
		.LVL72:
				sdbr	%f10,%f9
		.LVL73:
		.LBB162:
		.LBB163:
				mdbr	%f0,%f0
		.LBE163:
		.LBE162:
  171         max lspher = 0.0000926 / sin(od sa(marginal ray, sa field)) ^ 2
				ld	%f8,.L63-.L42(%r13)
				ddbr	%f8,%f0
		.LDL2:
		.LVL74:
		.LDL3:
		.LBE158:
		.LBB164:
  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    ")
				larl	%r1,.LC1
				lay	%r2,5312(%r15)
				mvc	0(256,%r2),0(%r1)
				mvc	448(256,%r15),0(%r2)
				mvc	0(256,%r2),448(%r15)
		.LBE164:
		.LBB165:
		.LBB166:
				mvc	160(256,%r15),0(%r2)
				aghik	%r11,%r15,160
				lgr	%r2,%r11
				brasl	%r14,_imp_printstring@PLT
		.LVL75:
		.LBE166:
		.LBE165:
		.LBB167:
  177     outbigreal(1, od sa(marginal ray, od field))
  178     print string("   ")
				larl	%r10,.LC2
				lay	%r1,5056(%r15)
				mvc	0(256,%r1),0(%r10)
				mvc	704(256,%r15),0(%r1)
				mvc	0(256,%r1),704(%r15)
		.LBE167:
		.LBB168:
		.LBB169:
				mvc	160(256,%r15),0(%r1)
				lgr	%r2,%r11
				brasl	%r14,_imp_printstring@PLT
		.LVL76:
		.LBE169:
		.LBE168:
		.LBB170:
		.LBB171:
				lghi	%r3,11
				lghi	%r2,5
				ldgr	%f0,%r9
				brasl	%r14,_imp_print@PLT
		.LVL77:
		.LBE171:
		.LBE170:
		.LBB172:
		.LBB173:
				brasl	%r14,_imp_newline@PLT
		.LVL78:
		.LBE173:
		.LBE172:
		.LBB174:
  179     print(od sa(marginal ray, sa field), 5, 11); newline
  180     print string("  Paraxial ray    ")
				larl	%r1,.LC3
				lay	%r2,4800(%r15)
				mvc	0(256,%r2),0(%r1)
				mvc	960(256,%r15),0(%r2)
				mvc	0(256,%r2),960(%r15)
		.LBE174:
		.LBB175:
		.LBB176:
				mvc	160(256,%r15),0(%r2)
				lgr	%r2,%r11
				brasl	%r14,_imp_printstring@PLT
		.LVL79:
		.LBE176:
		.LBE175:
		.LBB177:
  181     outbigreal(1, od sa(paraxial ray, od field))
  182     print string("   ")
				lay	%r1,4544(%r15)
				mvc	0(256,%r1),0(%r10)
				mvc	1216(256,%r15),0(%r1)
				mvc	0(256,%r1),1216(%r15)
		.LBE177:
		.LBB178:
		.LBB179:
				mvc	160(256,%r15),0(%r1)
				lgr	%r2,%r11
				brasl	%r14,_imp_printstring@PLT
		.LVL80:
		.LBE179:
		.LBE178:
  183     print(od sa(paraxial ray, sa field), 5, 11); newline
				ly	%r1,5840(%r15)
				ahi	%r1,-1
				lgfr	%r1,%r1
		.LVL81:
				sllg	%r1,%r1,4
		.LVL82:
		.LBB180:
		.LBB181:
				lghi	%r3,11
				lghi	%r2,5
				ld	%f0,424(%r1,%r15)
				brasl	%r14,_imp_print@PLT
		.LVL83:
		.LBE181:
		.LBE180:
		.LBB182:
		.LBB183:
				brasl	%r14,_imp_newline@PLT
		.LVL84:
		.LBE183:
		.LBE182:
		.LBB184:
  184     print string("Longitudinal spherical aberration: ")
				larl	%r1,.LC4
				lay	%r2,4288(%r15)
				mvc	0(256,%r2),0(%r1)
				mvc	1472(256,%r15),0(%r2)
				mvc	0(256,%r2),1472(%r15)
		.LBE184:
		.LBB185:
		.LBB186:
				mvc	160(256,%r15),0(%r2)
				lgr	%r2,%r11
				brasl	%r14,_imp_printstring@PLT
		.LVL85:
		.LBE186:
		.LBE185:
		.LBB187:
		.LBB188:
				lghi	%r3,11
				lghi	%r2,5
				ldr	%f0,%f12
				brasl	%r14,_imp_print@PLT
		.LVL86:
		.LBE188:
		.LBE187:
		.LBB189:
		.LBB190:
				brasl	%r14,_imp_newline@PLT
		.LVL87:
		.LBE190:
		.LBE189:
		.LBB191:
  185     print(aberr lspher, 5, 11); newline
  186     print string("    (Maximum permissible): ")
				larl	%r10,.LC5
				mvc	4032(256,%r15),0(%r10)
				mvc	1728(256,%r15),4032(%r15)
				mvc	4032(256,%r15),1728(%r15)
		.LBE191:
		.LBB192:
		.LBB193:
				mvc	160(256,%r15),4032(%r15)
				lgr	%r2,%r11
				brasl	%r14,_imp_printstring@PLT
		.LVL88:
		.LBE193:
		.LBE192:
		.LBB194:
		.LBB195:
				lghi	%r3,11
				lghi	%r2,5
				ldr	%f0,%f8
				brasl	%r14,_imp_print@PLT
		.LVL89:
		.LBE195:
		.LBE194:
		.LBB196:
		.LBB197:
				brasl	%r14,_imp_newline@PLT
		.LVL90:
		.LBE197:
		.LBE196:
		.LBB198:
  187     print(max lspher, 5, 11); newline
  188     print string("Offense against sine condition (coma): ")
				larl	%r1,.LC6
				mvc	3776(256,%r15),0(%r1)
				mvc	1984(256,%r15),3776(%r15)
				mvc	3776(256,%r15),1984(%r15)
		.LBE198:
		.LBB199:
		.LBB200:
				mvc	160(256,%r15),3776(%r15)
				lgr	%r2,%r11
				brasl	%r14,_imp_printstring@PLT
		.LVL91:
		.LBE200:
		.LBE199:
		.LBB201:
		.LBB202:
				lghi	%r3,11
				lghi	%r2,5
				ldr	%f0,%f14
				brasl	%r14,_imp_print@PLT
		.LVL92:
		.LBE202:
		.LBE201:
		.LBB203:
		.LBB204:
				brasl	%r14,_imp_newline@PLT
		.LVL93:
		.LBE204:
		.LBE203:
		.LBB205:
  189     print(aberr osc, 5, 11); newline
  190     print string("    (Maximum permissible): ")
				mvc	3520(256,%r15),0(%r10)
				mvc	2240(256,%r15),3520(%r15)
				mvc	3520(256,%r15),2240(%r15)
		.LBE205:
		.LBB206:
		.LBB207:
				mvc	160(256,%r15),3520(%r15)
				lgr	%r2,%r11
				brasl	%r14,_imp_printstring@PLT
		.LVL94:
		.LBE207:
		.LBE206:
		.LBB208:
		.LBB209:
				lghi	%r3,11
				lghi	%r2,5
				ld	%f0,.L64-.L42(%r13)
				brasl	%r14,_imp_print@PLT
		.LVL95:
		.LBE209:
		.LBE208:
		.LBB210:
		.LBB211:
				brasl	%r14,_imp_newline@PLT
		.LVL96:
		.LBE211:
		.LBE210:
		.LBB212:
  191     print(max osc, 5, 11); newline
  192     print string("Axial chromatic aberration: ")
				larl	%r1,.LC7
				mvc	3264(256,%r15),0(%r1)
				mvc	2496(256,%r15),3264(%r15)
				mvc	3264(256,%r15),2496(%r15)
		.LBE212:
		.LBB213:
		.LBB214:
				mvc	160(256,%r15),3264(%r15)
				lgr	%r2,%r11
				brasl	%r14,_imp_printstring@PLT
		.LVL97:
		.LBE214:
		.LBE213:
		.LBB215:
		.LBB216:
				lghi	%r3,11
				lghi	%r2,5
				ldr	%f0,%f10
				brasl	%r14,_imp_print@PLT
		.LVL98:
		.LBE216:
		.LBE215:
		.LBB217:
		.LBB218:
				brasl	%r14,_imp_newline@PLT
		.LVL99:
		.LBE218:
		.LBE217:
		.LBB219:
  193     print(aberr lchrom, 5, 11); newline
  194     print string("    (Maximum permissible): ")
				mvc	3008(256,%r15),0(%r10)
				mvc	2752(256,%r15),3008(%r15)
				mvc	3008(256,%r15),2752(%r15)
		.LBE219:
		.LBB220:
		.LBB221:
				mvc	160(256,%r15),3008(%r15)
				lgr	%r2,%r11
				brasl	%r14,_imp_printstring@PLT
		.LVL100:
		.LBE221:
		.LBE220:
		.LBB222:
		.LBB223:
				lghi	%r3,11
				lghi	%r2,5
				ldr	%f0,%f8
				brasl	%r14,_imp_print@PLT
		.LVL101:
		.LBE223:
		.LBE222:
		.LBB224:
		.LBB225:
				brasl	%r14,_imp_newline@PLT
		.LVL102:
		.LBE225:
		.LBE224:
		.LBB226:
		.LBB227:
				lghi	%r2,0
				brasl	%r14,exit@PLT
		.LVL103:
				.section	.rodata
				.align	8
		.L42:
		.L64:
				.long	1063549665
				.long	1202590843
		.L63:
				.long	1058555463
				.long	-487743358
		.L62:
				.long	1073741824
				.long	0
		.L61:
				.long	-1068267930
				.long	1717986918
		.L60:
				.long	1071141355
				.long	-2061584302
		.L59:
				.long	1078090137
				.long	-1717986918
		.L58:
				.long	1073339590
				.long	1058279942
		.L57:
				.long	1069656571
				.long	-412316860
		.L56:
				.long	1072693248
				.long	0
		.L55:
				.long	-1070551532
				.long	2061584302
		.L54:
				.long	1071686615
				.long	171798692
		.L53:
				.long	1078971596
				.long	-858993459
		.L52:
				.long	1073231901
				.long	2109687936
		.L51:
				.long	1077611724
				.long	-858993459
		.L50:
				.long	1085210876
				.long	-309237645
		.L49:
				.long	1085338746
				.long	481036337
		.L48:
				.long	1085472088
				.long	274877907
		.L47:
				.long	1085576590
				.long	-1752346657
		.L46:
				.long	1085736945
				.long	-1443109011
		.L45:
				.long	1085907664
				.long	-446676599
		.L44:
				.long	1085986292
				.long	2061584302
		.L43:
				.long	1086178560
				.long	0
				.align	2
		.text
		.LBE227:
		.LBE226:
		.LFE185:
		.Letext0:
  195     print(max lchrom, 5, 11); newline
  196 %end %of %program
  163 Statements compiled
