         Edinburgh IMP77 Compiler - Version 8.4
    1 %realslong
				NO_APP
		.Ltext0:
				.align	2
		ARCSIN.6028:
		.LFB187:
    2
    3 %begin
		.LVL74:
		 		link.w %fp,#-5436
		 		fmovem #92,-(%sp)
		 		movem.l #15420,-(%sp)
		 		lea (8,%fp),%a0
		.LVL75:
		 		move.l %a0,-36(%fp)
    4     %integer a line, b line, c line, d line,
		 		move.l 12(%fp),-(%sp)
		 		move.l 8(%fp),-(%sp)
		 		jsr _imp_initialise
		.LVL76:
    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.x %fp5,%fp3
		 		fmovecr #0x32,%fp1
		 		fdiv.x %fp3,%fp1
		.LBE149:
		.LBE148:
   24     %end {cot}
   25     %real %fn arc sin(%real x)
		.LVL0:
		 		link.w %fp,#0
		 		fmovem #12,-(%sp)
		 		fmove.d 8(%fp),%fp3
		.LBB102:
		.LBB103:
		 		fmove.x %fp3,%fp0
		 		fmul.x %fp3,%fp0
		.LBE103:
		.LBE102:
   26         %result = 2 * arc tan1(x / (1 + sqrt(1 - x^2)))
		 		fmovecr #0x32,%fp1
		 		fsub.x %fp0,%fp1
		.LVL1:
		.LBB104:
		.LBB105:
		 		fsqrt.x %fp1,%fp2
		 		ftst.x %fp1
		 		fjolt .L3
		.LVL2:
		.L2:
		.LBE105:
		.LBE104:
		 		fmovecr #0x32,%fp0
		 		fadd.x %fp0,%fp2
		.LVL3:
		.LBB107:
		.LBB108:
		 		fdiv.x %fp2,%fp3
		.LVL4:
		 		fmove.d %fp3,-(%sp)
		 		jsr atan
		.LVL5:
		 		addq.l #8,%sp
		.LVL6:
		.LBE108:
		.LBE107:
   27     %end {arc sin}
		 		fadd.x %fp0,%fp0
		 		fmovem -24(%fp),#48
		 		unlk %fp
		 		rts
		.LVL7:
		.L3:
		.LBB109:
		.LBB106:
		 		fmove.d %fp1,-(%sp)
		 		jsr sqrt
		.LVL8:
		 		addq.l #8,%sp
		 		jra .L2
		.LBE106:
		.LBE109:
		.LFE187:
				.section	.rodata.str1.1,"aMS",@progbits,1
		.LC8:
		 		.string	"Illegal cycle I = 1, 1, CURRENTSURFACES"
				.section	.rodata
		.LC0:
		 		.byte	19
		 		.string	"test-new/fbench.imp"
		 		.zero	235
				.align	2
		TRACELINE.6057:
		.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
		 		move.l 276(%a2),%d0
		 		cmp.l 272(%a2),%d0
		 		jeq .L25
		.L12:
   36             %if radius of curvature # 0 %then %start
		 		fcmp.x %fp7,%fp3
		 		fjeq .L13
   37                 %if object distance = 0 %then %start
		 		fmove.d 256(%a2),%fp1
		 		fcmp.x %fp7,%fp1
		 		fjne .L14
   38                     axis slope angle = 0
   39                     iang sin = ray height / radius of curvature
		 		fmove.d 240(%a2),%fp0
		 		fdiv.x %fp3,%fp0
		 		fmove.x %fp0,%fp3
		.LVL31:
   40                 %finish %else                                         %c
   41                     iang sin = ((object distance -                    %c
   42                         radius of curvature) / radius of curvature) * %c
   43                         axis slope angle
		 		fmove.d 248(%a2),%fp4
		 		fmove.x %fp1,%fp0
		 		fsub.x %fp3,%fp0
		 		fdiv.x %fp3,%fp0
		 		fmove.x %fp0,%fp2
		 		fmul.x %fp4,%fp2
		.LVL35:
   44                 rang sin = (from index / to index) * iang sin
		 		fmove.d 232(%a2),%fp2
		 		fdiv.d 224(%a2),%fp2
		 		fmul.x %fp3,%fp2
		.LVL33:
		 		fmove.d 232(%a2),%fp3
		 		fdiv.d 224(%a2),%fp3
		 		fmul.x %fp3,%fp2
		.LVL36:
   45                 old axis slope angle = axis slope angle
   46                 axis slope angle = axis slope angle +                 %c
		 		fmovecr #0xf,%fp0
		.LVL32:
		 		fadd.x %fp3,%fp0
		 		fsub.x %fp2,%fp0
		 		fmove.d %fp0,248(%a2)
		 		jra .L15
		.LVL34:
		.L14:
		 		fmove.x %fp4,%fp0
		 		fadd.x %fp2,%fp0
		 		fsub.x %fp2,%fp0
		 		fmove.d %fp0,248(%a2)
   47                     iang sin - rang sin
   48                 %if object distance # 0 %then                         %c
   49                     ray height = object distance * old axis slope angle
		 		fmul.x %fp4,%fp1
		.LVL37:
		 		fmove.d %fp1,240(%a2)
		.LVL38:
		.L15:
   50                 object distance = ray height / axis slope angle
		 		fmove.d 240(%a2),%fp1
		 		fdiv.x %fp0,%fp1
		 		fmove.d %fp1,256(%a2)
		 		jra .L21
		.L13:
   51             %else
   52                 object distance = object distance * (to index / from index)
		 		fmove.d 224(%a2),%fp1
		 		fmove.d 232(%a2),%fp0
		 		fmove.x %fp1,%fp2
		 		fdiv.x %fp0,%fp2
		 		fmul.d 256(%a2),%fp2
		 		fmove.d %fp2,256(%a2)
   53                 axis slope angle = axis slope angle * (from index / to index)
		 		fdiv.x %fp1,%fp0
		 		fmul.d 248(%a2),%fp0
		 		fmove.d %fp0,248(%a2)
		 		jra .L21
		.L18:
		.LVL39:
		.LBB142:
		.LBB143:
		 		move.l 252(%a2),-(%sp)
		.LVL40:
		 		move.l 248(%a2),-(%sp)
		 		jsr (%a3)
		.LVL41:
		 		addq.l #8,%sp
		.LBE143:
		.LBE142:
   54             %finish
   55         %else
   56             %if radius of curvature # 0 %then %start
		 		fmovecr #0xf,%fp7
		.LBB139:
		.LBB140:
		 		lea sin,%a3
		 		move.l %fp,%d6
		.LVL13:
		 		add.l #-776,%d6
		.LVL14:
		 		move.l %fp,%d7
		.LVL15:
		 		add.l #-784,%d7
		.LVL16:
		 		jra .L10
		.LVL17:
		.L24:
		.LBE140:
		.LBE139:
		.LBE138:
		.LBE137:
		 		fcmp.x %fp7,%fp3
		 		fjeq .L17
   57                 %if object distance = 0 %then %start
		 		fmove.d 256(%a2),%fp2
		 		fcmp.x %fp7,%fp2
		 		fjne .L18
   58                     axis slope angle = 0
		 		clr.l 248(%a2)
		 		clr.l 252(%a2)
   59                     iang sin = ray height / radius of curvature
		 		fmove.d 240(%a2),%fp2
		 		fdiv.x %fp3,%fp2
		.LVL61:
		 		jra .L19
		.LVL62:
		.L17:
		.LBB152:
		.LBB141:
		 		move.l 252(%a2),-(%sp)
		.LVL63:
		 		move.l 248(%a2),-(%sp)
		 		jsr (%a3)
		.LVL64:
		.LBE141:
		.LBE152:
   60                 %finish %else %c
   61                     iang sin = ((object distance -                    %c
   62                         radius of curvature) / radius of curvature) * %c
   63                         sin(axis slope angle)
		 		fsub.x %fp3,%fp2
		 		fdiv.x %fp3,%fp2
		 		fmul.x %fp0,%fp2
		.LVL42:
		.L19:
   64                 iang = arc sin(iang sin)
		 		fmove.d %fp2,-(%sp)
		 		lea ARCSIN.6028,%a4
		 		jsr (%a4)
		.LVL43:
   65                 rang sin = (from index / to index) * iang sin
		 		fmove.d 232(%a2),%fp0
		.LVL44:
		 		fdiv.d 224(%a2),%fp0
   66                 old axis slope angle = axis slope angle
   67                 axis slope angle = axis slope angle +                 %c
		 		fmove.x %fp0,%fp6
		 		fadd.d 248(%a2),%fp6
		 		fmul.x %fp2,%fp0
		.LVL45:
		 		fmove.d %fp0,-(%sp)
		.LVL46:
		 		jsr (%a4)
		.LVL47:
		 		fmove.x %fp6,%fp2
		.LVL48:
		 		fsub.x %fp0,%fp2
		 		move.l %d7,-(%sp)
		 		move.l %d6,-(%sp)
		 		fmove.d %fp2,-(%sp)
		 		jsr sincos
		.LVL49:
		 		fmove.d -784(%fp),%fp5
		 		fmove.d -776(%fp),%fp3
		 		fmove.d %fp2,248(%a2)
   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)
		 		fmove.d 264(%a2),%fp2
		.LVL50:
		.LBB144:
		.LBB145:
		 		lea (32,%sp),%sp
		 		fmove.x %fp6,%fp0
		 		fmul.d #0x3fe0000000000000,%fp0
		.LVL51:
		 		fmove.d %fp0,-(%sp)
		 		jsr (%a3)
		.LVL52:
		 		fmove.x %fp0,%fp4
		.LVL53:
		.LBE145:
		.LBE144:
		.LBB146:
		.LBB147:
		 		fmove.d %fp6,(%sp)
		 		jsr (%a3)
		.LVL54:
		 		addq.l #8,%sp
		.LVL55:
		.LBE147:
		.LBE146:
		.LBB148:
		.LBB149:
		 		fadd.x %fp2,%fp2
		.LVL56:
		.LBB150:
		.LBB151:
		 		fmul.x %fp4,%fp4
		.LBE151:
		.LBE150:
		 		fmul.x %fp4,%fp2
		.LVL57:
   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.x %fp2,%fp0
		 		fmul.x %fp1,%fp0
		 		fadd.x %fp2,%fp0
		 		fmove.d %fp0,256(%a2)
		.L16:
		.L20:
		.LVL58:
		.L21:
		.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
		 		fmove.d 232(%a2),%fp1
		 		fdiv.d 224(%a2),%fp1
		 		fmul.x %fp0,%fp1
		 		fmove.d %fp1,(%sp)
		 		jsr ARCSIN.6028
		.LVL65:
		 		fmove.x %fp0,%fp4
		.LVL66:
		.LBB153:
		.LBB154:
		 		fmove.d %fp0,-(%sp)
		 		lea cos,%a4
		 		jsr (%a4)
		.LVL67:
		 		addq.l #8,%sp
		 		fmove.x %fp0,%fp2
		.LVL68:
		.LBE154:
		.LBE153:
		.LBB155:
		.LBB156:
		 		move.l 252(%a2),-(%sp)
		.LVL69:
		 		move.l 248(%a2),-(%sp)
		 		jsr (%a4)
		.LVL70:
		.LBE156:
		.LBE155:
   84                     sin(axis slope angle))
   85                 object distance = object distance * ((to index *      %c
		 		fmul.d 224(%a2),%fp2
		 		fmul.d 232(%a2),%fp0
		 		fdiv.x %fp0,%fp2
		 		fmul.d 256(%a2),%fp2
		 		fmove.d %fp2,256(%a2)
   86                     cos(-rang)) / (from index *                       %c
   87                     cos(axis slope angle)))
   88                 axis slope angle = -rang
		 		fmove.d %fp4,248(%a2)
		 		lea (16,%sp),%sp
		 		jra .L21
		.L9:
		.LVL71:
		.L4:
		.LBE158:
		.LBE161:
		.LBE135:
   89             %finish
   90         %finish
   91     %end {transit surface}
   92     %routine trace line(%integer line, %real ray h)
		.LVL9:
		 		link.w %fp,#-784
		 		fmovem #252,-(%sp)
		 		movem.l #16184,-(%sp)
		 		move.l %a0,%a2
   93         %integer i
   94         object distance = 0
		 		clr.l 256(%a0)
		 		clr.l 260(%a0)
   95         ray height = ray h
		 		move.l 12(%fp),%d0
		 		move.l 16(%fp),%d1
		 		move.l %d0,240(%a0)
		 		move.l %d1,244(%a0)
   96         from index = 1
		 		move.l #1072693248,232(%a0)
		 		clr.l 236(%a0)
		.LBB135:
   97         %for i = 1, 1, current surfaces %cycle
   98             radius of curvature = test case(i, curvature radius)
		 		move.l 220(%a0),%d4
		.LVL10:
		.LBB136:
		 		move.l %d2,%d0
		 		lsl.l #2,%d0
		 		move.l %d0,%d1
		 		add.l 216(%a2),%d1
		 		fmove.d 80(%a2,%d1.l*8),%fp3
		 		fmove.d %fp3,264(%a2)
   99             to index = test case(i, index of refraction)
		 		move.l %d4,%d0
		 		subq.l #1,%d0
		.LVL11:
		.LBE136:
		 		jmi .L24
		.LVL12:
		.L5:
		 		pea .LC8
		 		lea (-512,%fp),%a1
		 		jsr _imp_c2istr
		.LVL18:
		 		move.l _imp_current_line,%d2
		 		addq.l #4,%sp
		 		jne .L6
		 		moveq #99,%d2
		.L6:
		 		move.l _imp_current_file,%d0
		 		jeq .L7
		 		move.l %d0,-(%sp)
		 		lea (-256,%fp),%a1
		 		jsr _imp_c2istr
		.LVL19:
		 		addq.l #4,%sp
		.L8:
		 		clr.l -(%sp)
		 		pea 1.w
		 		pea 5.w
		 		lea (-256,%sp),%sp
		 		move.l %sp,%d0
		 		move.l #256,%d3
		 		move.l %d3,-(%sp)
		 		pea -512(%fp)
		 		move.l %d0,-(%sp)
		 		lea memcpy,%a3
		 		jsr (%a3)
		.LVL20:
		 		lea (12,%sp),%sp
		 		move.l %d2,-(%sp)
		 		lea (-256,%sp),%sp
		 		move.l %sp,%d0
		 		move.l %d3,-(%sp)
		 		pea -256(%fp)
		 		move.l %d0,-(%sp)
		 		jsr (%a3)
		.LVL21:
		 		lea (12,%sp),%sp
		 		jsr _signal_event
		.LVL22:
		 		lea (528,%sp),%sp
		 		jra .L5
		.L7:
		.LBB159:
		 		move.l %fp,%d3
		.LVL23:
		 		add.l #-256,%d3
		.LVL24:
		 		move.l #256,%d5
		 		move.l %d5,-(%sp)
		 		pea .LC0
		 		move.l %d3,-(%sp)
		 		lea memcpy,%a3
		 		jsr (%a3)
		.LVL25:
		 		move.l %fp,%d6
		.LVL26:
		 		add.l #-768,%d6
		.LVL27:
		 		move.l %d5,-(%sp)
		 		move.l %d3,-(%sp)
		 		move.l %d6,-(%sp)
		 		jsr (%a3)
		.LVL28:
		.LBE159:
		 		move.l %d5,-(%sp)
		 		move.l %d6,-(%sp)
		 		move.l %d3,-(%sp)
		 		jsr (%a3)
		.LVL29:
		 		lea (36,%sp),%sp
		 		jra .L8
		.LVL30:
		.L25:
		.LBB160:
		.LBB157:
		 		add.l 84(%a2),%d0
		 		fmove.d 80(%a2,%d0.l*8),%fp0
		 		fmove.d %fp0,224(%a2)
  100             %if to index > 1 %then                                     %c
		 		fcmp.d #0x3ff0000000000000,%fp0
		 		fjle .L11
  101                 to index = to index + ((spectral line(d line) -        %c
		 		move.l 8(%fp),%d5
		 		addq.l #1,%d5
		.LBB137:
		.LBB138:
		 		move.l 80(%a2),%d0
		 		addq.l #1,%d0
		 		fmove.d (%a2,%d0.l*8),%fp2
		 		fsub.d (%a2,%d5.l*8),%fp2
		 		move.l 12(%a2),%d1
		 		addq.l #1,%d1
		 		move.l 8(%a2),%d0
		 		addq.l #1,%d0
		 		fmove.d (%a2,%d1.l*8),%fp1
		 		fsub.d (%a2,%d0.l*8),%fp1
		 		fdiv.x %fp1,%fp2
		 		fmove.x %fp0,%fp4
		 		fmovecr #0x32,%fp1
		 		fsub.x %fp1,%fp4
		 		move.l %d2,%d0
		 		lsl.l #2,%d0
		 		add.l 4(%a2),%d0
		 		fdiv.d 80(%a2,%d0.l*8),%fp4
		 		fmul.x %fp4,%fp2
		 		fadd.x %fp0,%fp2
		 		fmove.d %fp2,224(%a2)
		.L11:
		.LBB161:
		.LBB158:
  102                     spectral line(line)) /                             %c
		 		tst.l %d4
		 		jeq .L4
		 		clr.l %d2
		 		cmp.l %d4,%d3
		 		jeq .L4
		.LVL59:
		.L10:
  103                     (spectral line(c line) - spectral line(f line))) * %c
		 		move.l %d2,%d3
		 		addq.l #1,%d3
		.LVL60:
  104                     ((test case(i, index of refraction) - 1.0) /       %c
  105                     test case(i, dispersion))
  106             transit surface
  107             from index = to index
		 		move.l 224(%a2),232(%a2)
		 		move.l 228(%a2),236(%a2)
  108             %if i < current surfaces %then                             %c
		 		cmp.l 220(%a2),%d3
		 		jge .L22
  109                 object distance = object distance -                    %c
		 		lsl.l #2,%d2
		 		add.l (%a2),%d2
		 		fmove.d 256(%a2),%fp0
		 		fsub.d 80(%a2,%d2.l*8),%fp0
		 		fmove.d %fp0,256(%a2)
		.L22:
		 		move.l %d3,%d2
  110                     test case(i, edge thickness)
  111         %repeat
  112     %end {trace line}
  113     %comment END GLOBAL DECLARATONS
		 		movem.l -892(%fp),#7420
		.LVL72:
		 		fmovem -856(%fp),#63
		 		unlk %fp
		.LVL73:
		 		rts
		.LFE190:
				.section	.rodata
		.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
				.align	2
				.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
		 		moveq #3,%d0
		 		move.l %d0,-304(%fp)
		 		moveq #6,%d3
		 		move.l %d3,-308(%fp)
		.LVL78:
		 		move.l #1086178560,-300(%fp)
		 		clr.l -296(%fp)
  118     spectral line(a line)       = 7621.0
		 		moveq #4,%d2
		 		move.l %d2,-236(%fp)
		.LVL77:
  119     spectral line(b line)       = 6869.955
		 		move.l #1085986292,-292(%fp)
		 		move.l #2061584302,-288(%fp)
  120     spectral line(c line)       = 6562.8160
		 		move.l #1085907664,-284(%fp)
		 		move.l #-446676599,-280(%fp)
  121     spectral line(d line)       = 5895.944
		 		move.l #1085736945,-276(%fp)
		 		move.l #-1443109011,-272(%fp)
  122     spectral line(e line)       = 5269.557
		 		move.l #1085576590,-268(%fp)
		 		move.l #-1752346657,-264(%fp)
  123     spectral line(f line)       = 4861.344
		 		move.l #1085472088,-260(%fp)
		 		move.l #274877907,-256(%fp)
  124     spectral line(g prime line) = 4340.477
		 		move.l #1085338746,-252(%fp)
		 		move.l #481036337,-248(%fp)
  125     spectral line(h line)       = 3968.494
		 		move.l #1085210876,-244(%fp)
		 		move.l #-309237645,-240(%fp)
  126     %comment  Initialise the test case array
  127     current surfaces = 4
		 		move.l %d2,-96(%fp)
  128     curvature radius = 1; index of refraction = 2; dispersion = 3
		 		moveq #1,%d0
		 		move.l %d0,-100(%fp)
  129         edge thickness = 4
		 		moveq #2,%d2
		 		move.l %d2,-232(%fp)
		 		moveq #4,%d0
		 		move.l %d0,-316(%fp)
		 		move.l #1077611724,-228(%fp)
		 		move.l #-858993459,-224(%fp)
  130     test case(1, curvature radius)    =   27.05
		 		moveq #3,%d3
		 		move.l %d3,-312(%fp)
  131     test case(1, index of refraction) =    1.5137
		 		move.l #1073231901,-220(%fp)
		 		move.l #2109687936,-216(%fp)
  132     test case(1, dispersion)          =   63.6
		 		move.l #1078971596,-212(%fp)
		 		move.l #-858993459,-208(%fp)
  133     test case(1, edge thickness)      =    0.52
		 		move.l #1071686615,-204(%fp)
		 		move.l #171798692,-200(%fp)
  134     test case(2, curvature radius)    =  -16.68
		 		move.l #-1070551532,-196(%fp)
		 		move.l #2061584302,-192(%fp)
  135     test case(2, index of refraction) =    1.0
		 		move.l #1072693248,-188(%fp)
		 		clr.l -184(%fp)
  136     test case(2, dispersion)          =    0.0
		 		clr.l -180(%fp)
		 		clr.l -176(%fp)
  137     test case(2, edge thickness)      =    0.138
		 		move.l #1069656571,-172(%fp)
		 		move.l #-412316860,-168(%fp)
  138     test case(3, curvature radius)    =  -16.68
		 		move.l #-1070551532,-164(%fp)
		 		move.l #2061584302,-160(%fp)
  139     test case(3, index of refraction) =    1.6164
		 		move.l #1073339590,-156(%fp)
		 		move.l #1058279942,-152(%fp)
  140     test case(3, dispersion)          =   36.7
		 		move.l #1078090137,-148(%fp)
		 		move.l #-1717986918,-144(%fp)
  141     test case(3, edge thickness)      =    0.38
		 		move.l #1071141355,-140(%fp)
		 		move.l #-2061584302,-136(%fp)
  142     test case(4, curvature radius)    =  -78.1
		 		move.l #-1068267930,-132(%fp)
		 		move.l #1717986918,-128(%fp)
  143     test case(4, index of refraction) =    1.0
		 		move.l #1072693248,-124(%fp)
		 		clr.l -120(%fp)
  144     test case(4, dispersion)          =    0.0
		 		clr.l -116(%fp)
		 		clr.l -112(%fp)
  145     test case(4, edge thickness)      =    0.0
		 		clr.l -108(%fp)
		 		clr.l -104(%fp)
		.LVL79:
  146     marginal ray = 1; paraxial ray = 2
  147     od field = 1; sa field = 2
		 		move.l %d2,-44(%fp)
		.LVL80:
		 		addq.l #8,%sp
		.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)
		 		lea TRACELINE.6057,%a2
		.L27:
		 		clr.l -(%sp)
		 		move.l #1073741824,-(%sp)
		 		move.l -236(%fp),-(%sp)
		 		lea (-316,%fp),%a0
		 		jsr (%a2)
		.LVL81:
  154             od sa(paraxial, od field) = object distance
		 		move.l -40(%fp),%d1
		 		move.l %d1,%d0
		 		subq.l #1,%d0
		 		lsl.l #4,%d0
		 		lea (%fp,%d0.l),%a0
		 		move.l -60(%fp),%d2
		 		move.l -56(%fp),%d3
		 		move.l %d2,-32(%a0)
		 		move.l %d3,-28(%a0)
  155             od sa(paraxial, sa field) = axis slope angle
		 		move.l -68(%fp),%d2
		 		move.l -64(%fp),%d3
		 		move.l %d2,-24(%a0)
		 		move.l %d3,-20(%a0)
		.LDL1:
  156         %repeat
  157         %comment Trace marginal ray in C
		 		clr.l %d1
		 		lea (12,%sp),%sp
		 		moveq #2,%d3
		 		cmp.l %d1,%d3
		 		jne .L27
		.L28:
		.LBE163:
		 		moveq #1,%d0
		 		move.l %d0,-40(%fp)
  158         paraxial = marginal ray
		 		addq.l #1,%d1
		 		move.l %d1,-40(%fp)
  159         trace line(c line, clear aperture / 2)
		 		clr.l -(%sp)
		 		move.l #1073741824,-(%sp)
		 		move.l -304(%fp),-(%sp)
		 		lea TRACELINE.6057,%a2
		 		lea (-316,%fp),%a0
		 		jsr (%a2)
		.LVL82:
  160         od cline = object distance
		 		fmove.d -60(%fp),%fp3
		.LVL83:
  161         %comment Trace marginal ray in F
  162         trace line(f line, clear aperture / 2)
		 		clr.l -(%sp)
		 		move.l #1073741824,-(%sp)
		 		move.l -308(%fp),-(%sp)
		 		lea (-316,%fp),%a0
		 		jsr (%a2)
		.LVL84:
  163         od fline = object distance
  164         aberr lspher = od sa(paraxial ray, od field) -               %c
		 		move.l -44(%fp),%d0
		 		subq.l #1,%d0
		 		lsl.l #4,%d0
		 		lea (%fp,%d0.l),%a2
		 		fmove.d -32(%a2),%fp2
		 		fmove.d -32(%fp),%fp4
		 		fmove.x %fp2,%fp6
		 		fsub.x %fp4,%fp6
		.LVL85:
  165             od sa(marginal ray, od field)
  166         aberr osc = 1 - ((od sa(paraxial ray, od field) *            %c
		 		move.l -24(%fp),%a4
		 		move.l -20(%fp),%a5
		.LVL86:
		.LBB164:
		.LBB165:
		 		move.l %a5,-(%sp)
		 		move.l %a4,-(%sp)
		 		jsr sin
		.LVL87:
		 		addq.l #8,%sp
		.LVL88:
		.LBE165:
		.LBE164:
		 		fmul.d -24(%a2),%fp2
		 		fmul.x %fp0,%fp4
		 		fdiv.x %fp4,%fp2
		 		fmovecr #0x32,%fp4
		 		fsub.x %fp2,%fp4
		.LVL89:
  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
		 		fmove.d -60(%fp),%fp1
		.LVL90:
		 		fsub.x %fp3,%fp1
		.LVL91:
		 		fmove.x %fp1,%fp3
		.LVL92:
		.LBB166:
		.LBB167:
		 		fmul.x %fp0,%fp0
		.LBE167:
		.LBE166:
  171         max lspher = 0.0000926 / sin(od sa(marginal ray, sa field)) ^ 2
		 		fmove.d #0x3f184647e2eda082,%fp2
		 		fdiv.x %fp0,%fp2
		.LDL2:
		.LVL93:
		.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    ")
		 		move.l %fp,%d3
		.LVL94:
		 		add.l #-572,%d3
		.LVL95:
		 		move.l #256,%d2
		 		move.l %d2,-(%sp)
		 		pea .LC1
		 		move.l %d3,-(%sp)
		 		lea memcpy,%a2
		 		jsr (%a2)
		.LVL96:
		 		move.l %fp,%d4
		.LVL97:
		 		add.l #-5436,%d4
		.LVL98:
		 		lea (36,%sp),%sp
		 		move.l %d2,-(%sp)
		 		move.l %d3,-(%sp)
		 		move.l %d4,-(%sp)
		 		jsr (%a2)
		.LVL99:
		 		move.l %d2,-(%sp)
		 		move.l %d4,-(%sp)
		 		move.l %d3,-(%sp)
		 		jsr (%a2)
		.LVL100:
		.LBE168:
		.LBB169:
		.LBB170:
		 		lea (-256,%sp),%sp
		 		move.l %sp,%d0
		 		move.l %d2,-(%sp)
		 		move.l %d3,-(%sp)
		 		move.l %d0,-(%sp)
		 		jsr (%a2)
		.LVL101:
		 		lea (12,%sp),%sp
		 		lea _imp_printstring,%a3
		 		jsr (%a3)
		.LVL102:
		.LBE170:
		.LBE169:
		.LBB171:
  177     outbigreal(1, od sa(marginal ray, od field))
  178     print string("   ")
		 		add.l #4608,%d4
		.LVL103:
		 		move.l #.LC2,%d3
		 		lea (280,%sp),%sp
		 		move.l %d2,-(%sp)
		 		move.l %d3,-(%sp)
		 		move.l %d4,-(%sp)
		 		jsr (%a2)
		.LVL104:
		 		move.l %fp,%d5
		.LVL105:
		 		add.l #-5180,%d5
		.LVL106:
		 		move.l %d2,-(%sp)
		 		move.l %d4,-(%sp)
		 		move.l %d5,-(%sp)
		 		jsr (%a2)
		.LVL107:
		 		move.l %d2,-(%sp)
		 		move.l %d5,-(%sp)
		 		move.l %d4,-(%sp)
		 		jsr (%a2)
		.LVL108:
		.LBE171:
		.LBB172:
		.LBB173:
		 		lea (-220,%sp),%sp
		 		move.l %sp,%d0
		 		move.l %d2,-(%sp)
		 		move.l %d4,-(%sp)
		 		move.l %d0,-(%sp)
		 		jsr (%a2)
		.LVL109:
		 		lea (12,%sp),%sp
		 		jsr (%a3)
		.LVL110:
		.LBE173:
		.LBE172:
		.LBB174:
		.LBB175:
		 		add.l %d2,%sp
		 		pea 11.w
		 		pea 5.w
		 		move.l %a5,-(%sp)
		 		move.l %a4,-(%sp)
		 		lea _imp_print,%a5
		 		jsr (%a5)
		.LVL111:
		.LBE175:
		.LBE174:
		.LBB176:
		.LBB177:
		 		lea _imp_newline,%a4
		 		jsr (%a4)
		.LVL112:
		.LBE177:
		.LBE176:
		.LBB178:
  179     print(od sa(marginal ray, sa field), 5, 11); newline
  180     print string("  Paraxial ray    ")
		 		add.l #-256,%d4
		 		move.l %d2,-(%sp)
		 		pea .LC3
		 		move.l %d4,-(%sp)
		 		jsr (%a2)
		.LVL113:
		 		add.l #256,%d5
		.LVL114:
		 		move.l %d2,-(%sp)
		 		move.l %d4,-(%sp)
		 		move.l %d5,-(%sp)
		 		jsr (%a2)
		.LVL115:
		 		lea (40,%sp),%sp
		 		move.l %d2,-(%sp)
		 		move.l %d5,-(%sp)
		 		move.l %d4,-(%sp)
		 		jsr (%a2)
		.LVL116:
		.LBE178:
		.LBB179:
		.LBB180:
		 		lea (-256,%sp),%sp
		 		move.l %sp,%d0
		 		move.l %d2,-(%sp)
		 		move.l %d4,-(%sp)
		 		move.l %d0,-(%sp)
		 		jsr (%a2)
		.LVL117:
		 		lea (12,%sp),%sp
		 		jsr (%a3)
			.LVL118:
			.LBE180:
			.LBE179:
			.LBB181:
  181     outbigreal(1, od sa(paraxial ray, od field))
  182     print string("   ")
				.loc 1 182 0
		 		add.l #-256,%d4
		 		lea (268,%sp),%sp
		 		move.l %d2,-(%sp)
		 		move.l %d3,-(%sp)
		 		move.l %d4,-(%sp)
		 		jsr (%a2)
			.LVL119:
		 		move.l %fp,%d3
			.LVL120:
		 		add.l #-4668,%d3
			.LVL121:
		 		move.l %d2,-(%sp)
		 		move.l %d4,-(%sp)
		 		move.l %d3,-(%sp)
		 		jsr (%a2)
			.LVL122:
		 		move.l %d2,-(%sp)
		 		move.l %d3,-(%sp)
		 		move.l %d4,-(%sp)
		 		jsr (%a2)
			.LVL123:
			.LBE181:
			.LBB182:
			.LBB183:
				.loc 2 589 0
		 		lea (-220,%sp),%sp
		 		move.l %sp,%d0
		 		move.l %d2,-(%sp)
		 		move.l %d4,-(%sp)
		 		move.l %d0,-(%sp)
		 		jsr (%a2)
			.LVL124:
		 		lea (12,%sp),%sp
		 		jsr (%a3)
			.LVL125:
			.LBE183:
			.LBE182:
			.LBB184:
			.LBB185:
				.loc 2 663 0
		 		add.l %d2,%sp
		 		pea 11.w
		 		pea 5.w
			.LBE185:
			.LBE184:
  183     print(od sa(paraxial ray, sa field), 5, 11); newline
				.loc 1 183 0
		 		move.l -44(%fp),%d0
		 		subq.l #1,%d0
			.LVL126:
		 		lsl.l #4,%d0
			.LVL127:
			.LBB187:
			.LBB186:
				.loc 2 663 0
		 		move.l -20(%fp,%d0.l),-(%sp)
		 		move.l -24(%fp,%d0.l),-(%sp)
		 		jsr (%a5)
			.LVL128:
			.LBE186:
			.LBE187:
			.LBB188:
			.LBB189:
				.loc 2 661 0
		 		jsr (%a4)
			.LVL129:
			.LBE189:
			.LBE188:
			.LBB190:
  184     print string("Longitudinal spherical aberration: ")
				.loc 1 184 0
		 		add.l #3072,%d3
			.LVL130:
		 		move.l %d2,-(%sp)
		 		pea .LC4
		 		move.l %d3,-(%sp)
		 		jsr (%a2)
			.LVL131:
		 		add.l #-3072,%d4
		 		move.l %d2,-(%sp)
		 		move.l %d3,-(%sp)
		 		move.l %d4,-(%sp)
		 		jsr (%a2)
			.LVL132:
		 		lea (40,%sp),%sp
		 		move.l %d2,-(%sp)
		 		move.l %d4,-(%sp)
		 		move.l %d3,-(%sp)
		 		jsr (%a2)
			.LVL133:
			.LBE190:
			.LBB191:
			.LBB192:
				.loc 2 589 0
		 		lea (-256,%sp),%sp
		 		move.l %sp,%d0
		 		move.l %d2,-(%sp)
		 		move.l %d3,-(%sp)
		 		move.l %d0,-(%sp)
		 		jsr (%a2)
			.LVL134:
		 		lea (12,%sp),%sp
		 		jsr (%a3)
			.LVL135:
			.LBE192:
			.LBE191:
			.LBB193:
			.LBB194:
				.loc 2 663 0
		 		lea (268,%sp),%sp
		 		pea 11.w
		 		pea 5.w
		 		fmove.d %fp6,-(%sp)
		 		jsr (%a5)
			.LVL136:
			.LBE194:
			.LBE193:
			.LBB195:
			.LBB196:
				.loc 2 661 0
		 		jsr (%a4)
			.LVL137:
			.LBE196:
			.LBE195:
			.LBB197:
  185     print(aberr lspher, 5, 11); newline
  186     print string("    (Maximum permissible): ")
				.loc 1 186 0
		 		add.l #-256,%d3
			.LVL138:
		 		move.l #.LC5,%d4
		 		move.l %d2,-(%sp)
		 		move.l %d4,-(%sp)
		 		move.l %d3,-(%sp)
		 		jsr (%a2)
			.LVL139:
		 		add.l #768,%d5
		 		move.l %d2,-(%sp)
		 		move.l %d3,-(%sp)
		 		move.l %d5,-(%sp)
		 		jsr (%a2)
			.LVL140:
		 		lea (40,%sp),%sp
		 		move.l %d2,-(%sp)
		 		move.l %d5,-(%sp)
		 		move.l %d3,-(%sp)
		 		jsr (%a2)
			.LVL141:
			.LBE197:
			.LBB198:
			.LBB199:
				.loc 2 589 0
		 		lea (-256,%sp),%sp
		 		move.l %sp,%d0
		 		move.l %d2,-(%sp)
		 		move.l %d3,-(%sp)
		 		move.l %d0,-(%sp)
		 		jsr (%a2)
			.LVL142:
		 		lea (12,%sp),%sp
		 		jsr (%a3)
			.LVL143:
			.LBE199:
			.LBE198:
			.LBB200:
			.LBB201:
				.loc 2 663 0
		 		lea (268,%sp),%sp
		 		pea 11.w
		 		pea 5.w
		 		fmove.d %fp2,-(%sp)
		 		jsr (%a5)
			.LVL144:
			.LBE201:
			.LBE200:
			.LBB202:
			.LBB203:
				.loc 2 661 0
		 		jsr (%a4)
			.LVL145:
			.LBE203:
			.LBE202:
			.LBB204:
  187     print(max lspher, 5, 11); newline
  188     print string("Offense against sine condition (coma): ")
				.loc 1 188 0
		 		add.l #-256,%d3
			.LVL146:
		 		move.l %d2,-(%sp)
		 		pea .LC6
		 		move.l %d3,-(%sp)
		 		jsr (%a2)
			.LVL147:
		 		add.l #256,%d5
		 		move.l %d2,-(%sp)
		 		move.l %d3,-(%sp)
		 		move.l %d5,-(%sp)
		 		jsr (%a2)
			.LVL148:
		 		lea (40,%sp),%sp
		 		move.l %d2,-(%sp)
		 		move.l %d5,-(%sp)
		 		move.l %d3,-(%sp)
		 		jsr (%a2)
			.LVL149:
			.LBE204:
			.LBB205:
			.LBB206:
				.loc 2 589 0
		 		lea (-256,%sp),%sp
		 		move.l %sp,%d0
		 		move.l %d2,-(%sp)
		 		move.l %d3,-(%sp)
		 		move.l %d0,-(%sp)
		 		jsr (%a2)
			.LVL150:
		 		lea (12,%sp),%sp
		 		jsr (%a3)
			.LVL151:
			.LBE206:
			.LBE205:
			.LBB207:
			.LBB208:
				.loc 2 663 0
		 		lea (268,%sp),%sp
		 		pea 11.w
		 		pea 5.w
		 		fmove.d %fp4,-(%sp)
		 		jsr (%a5)
			.LVL152:
			.LBE208:
			.LBE207:
			.LBB209:
			.LBB210:
				.loc 2 661 0
		 		jsr (%a4)
			.LVL153:
			.LBE210:
			.LBE209:
			.LBB211:
  189     print(aberr osc, 5, 11); newline
  190     print string("    (Maximum permissible): ")
				.loc 1 190 0
		 		add.l #-256,%d3
			.LVL154:
		 		move.l %d2,-(%sp)
		 		move.l %d4,-(%sp)
		 		move.l %d3,-(%sp)
		 		jsr (%a2)
			.LVL155:
		 		add.l #256,%d5
		 		move.l %d2,-(%sp)
		 		move.l %d3,-(%sp)
		 		move.l %d5,-(%sp)
		 		jsr (%a2)
			.LVL156:
		 		lea (40,%sp),%sp
		 		move.l %d2,-(%sp)
		 		move.l %d5,-(%sp)
		 		move.l %d3,-(%sp)
		 		jsr (%a2)
			.LVL157:
			.LBE211:
			.LBB212:
			.LBB213:
				.loc 2 589 0
		 		lea (-256,%sp),%sp
		 		move.l %sp,%d0
		 		move.l %d2,-(%sp)
		 		move.l %d3,-(%sp)
		 		move.l %d0,-(%sp)
		 		jsr (%a2)
			.LVL158:
		 		lea (12,%sp),%sp
		 		jsr (%a3)
			.LVL159:
			.LBE213:
			.LBE212:
			.LBB214:
			.LBB215:
				.loc 2 663 0
		 		lea (268,%sp),%sp
		 		pea 11.w
		 		pea 5.w
		 		move.l #1202590843,-(%sp)
		 		move.l #1063549665,-(%sp)
		 		jsr (%a5)
			.LVL160:
			.LBE215:
			.LBE214:
			.LBB216:
			.LBB217:
				.loc 2 661 0
		 		jsr (%a4)
			.LVL161:
			.LBE217:
			.LBE216:
			.LBB218:
  191     print(max osc, 5, 11); newline
  192     print string("Axial chromatic aberration: ")
				.loc 1 192 0
		 		add.l #-256,%d3
			.LVL162:
		 		move.l %d2,-(%sp)
		 		pea .LC7
		 		move.l %d3,-(%sp)
		 		jsr (%a2)
			.LVL163:
		 		add.l #256,%d5
		 		move.l %d2,-(%sp)
		 		move.l %d3,-(%sp)
		 		move.l %d5,-(%sp)
		 		jsr (%a2)
			.LVL164:
		 		lea (40,%sp),%sp
		 		move.l %d2,-(%sp)
		 		move.l %d5,-(%sp)
		 		move.l %d3,-(%sp)
		 		jsr (%a2)
			.LVL165:
			.LBE218:
			.LBB219:
			.LBB220:
				.loc 2 589 0
		 		lea (-256,%sp),%sp
		 		move.l %sp,%d0
		 		move.l %d2,-(%sp)
		 		move.l %d3,-(%sp)
		 		move.l %d0,-(%sp)
		 		jsr (%a2)
			.LVL166:
		 		lea (12,%sp),%sp
		 		jsr (%a3)
			.LVL167:
			.LBE220:
			.LBE219:
			.LBB221:
			.LBB222:
				.loc 2 663 0
		 		lea (268,%sp),%sp
		 		pea 11.w
		 		pea 5.w
		 		fmove.d %fp3,-(%sp)
		 		jsr (%a5)
			.LVL168:
			.LBE222:
			.LBE221:
			.LBB223:
			.LBB224:
				.loc 2 661 0
		 		jsr (%a4)
			.LVL169:
			.LBE224:
			.LBE223:
			.LBB225:
  193     print(aberr lchrom, 5, 11); newline
  194     print string("    (Maximum permissible): ")
				.loc 1 194 0
		 		add.l #-256,%d3
			.LVL170:
		 		move.l %d2,-(%sp)
		 		move.l %d4,-(%sp)
		 		move.l %d3,-(%sp)
		 		jsr (%a2)
			.LVL171:
		 		move.l %fp,%d4
			.LVL172:
		 		add.l #-3132,%d4
			.LVL173:
		 		move.l %d2,-(%sp)
		 		move.l %d3,-(%sp)
		 		move.l %d4,-(%sp)
		 		jsr (%a2)
			.LVL174:
		 		lea (40,%sp),%sp
		 		move.l %d2,-(%sp)
		 		move.l %d4,-(%sp)
		 		move.l %d3,-(%sp)
		 		jsr (%a2)
			.LVL175:
			.LBE225:
			.LBB226:
			.LBB227:
				.loc 2 589 0
		 		lea (-256,%sp),%sp
		 		move.l %sp,%d0
		 		move.l %d2,-(%sp)
		 		move.l %d3,-(%sp)
		 		move.l %d0,-(%sp)
		 		jsr (%a2)
			.LVL176:
		 		lea (12,%sp),%sp
		 		jsr (%a3)
			.LVL177:
			.LBE227:
			.LBE226:
			.LBB228:
			.LBB229:
				.loc 2 663 0
		 		lea (268,%sp),%sp
		 		pea 11.w
		 		pea 5.w
		 		fmove.d %fp2,-(%sp)
		 		jsr (%a5)
			.LVL178:
			.LBE229:
			.LBE228:
			.LBB230:
			.LBB231:
				.loc 2 661 0
		 		jsr (%a4)
			.LVL179:
			.LBE231:
			.LBE230:
			.LBB232:
			.LBB233:
				.loc 2 862 0
		 		clr.l -(%sp)
		 		jsr exit
			.LVL180:
			.LBE233:
			.LBE232:
				.cfi_endproc
			.LFE185:
			.Letext0:
				.file 3 "/home/gtoal/src/i2c/perms/imptypes.h"
				.file 4 "/usr/m68k-linux-gnu/include/bits/types.h"
				.file 5 "/usr/m68k-linux-gnu/include/bits/types/sig_atomic_t.h"
				.file 6 "/usr/m68k-linux-gnu/include/bits/types/__sigset_t.h"
				.file 7 "/usr/m68k-linux-gnu/include/bits/setjmp.h"
				.file 8 "/usr/m68k-linux-gnu/include/setjmp.h"
				.file 9 "/home/gtoal/src/i2c/perms/psignal.h"
				.file 10 "/home/gtoal/src/i2c/perms/externalfile.h"
				.file 11 "<built-in>"
				.file 12 "/home/gtoal/src/i2c/perms/internal/internal.h"
  195     print(max lchrom, 5, 11); newline
  196 %end %of %program
  163 Statements compiled
