         Edinburgh IMP77 Compiler - Version 8.4
    1 %begin
		.Ltext0:
		_imp_REXP:
		.LFB61:
				pushl	%ebp
				movl	%esp, %ebp
				pushl	%ebx
				subl	$20, %esp
				call	__x86.get_pc_thunk.ax
				addl	$_GLOBAL_OFFSET_TABLE_, %eax
				movl	8(%ebp), %edx
				movl	%edx, -16(%ebp)
				movl	12(%ebp), %edx
				movl	%edx, -12(%ebp)
				movl	16(%ebp), %edx
				movl	%edx, -24(%ebp)
				movl	20(%ebp), %edx
				movl	%edx, -20(%ebp)
				fldl	-24(%ebp)
				fldl	.LC0@GOTOFF(%eax)
				fucomip	%st(1), %st
				fstp	%st(0)
				jp	.L2
				fldl	-24(%ebp)
				fldl	.LC0@GOTOFF(%eax)
				fucomip	%st(1), %st
				fstp	%st(0)
				jne	.L2
				fldl	-16(%ebp)
				fmull	-16(%ebp)
				jmp	.L5
		.L2:
				pushl	-20(%ebp)
				pushl	-24(%ebp)
				pushl	-12(%ebp)
				pushl	-16(%ebp)
				movl	%eax, %ebx
				call	pow@PLT
				addl	$16, %esp
		.L5:
				movl	-4(%ebp), %ebx
				leave
				ret
		.LFE61:
		F.6028:
		.LFB191:
				leal	4(%esp), %ecx
				andl	$-16, %esp
				pushl	-4(%ecx)
				pushl	%ebp
				movl	%esp, %ebp
				pushl	%edi
				pushl	%ebx
				pushl	%ecx
				subl	$316, %esp
				call	__x86.get_pc_thunk.bx
				addl	$_GLOBAL_OFFSET_TABLE_, %ebx
				movl	%ecx, %eax
				movl	4(%eax), %edx
				movl	%edx, -316(%ebp)
				movl	%gs:20, %edi
				movl	%edi, -28(%ebp)
				xorl	%edi, %edi
				leal	8(%ebp), %edx
				movl	%edx, -304(%ebp)
				subl	$8, %esp
				pushl	-316(%ebp)
				pushl	(%eax)
				call	_imp_initialise@PLT
				addl	$16, %esp
    2   %external %real %fn %spec floaty sqrt %alias "sqrtf" (%real n)  {should be in prims. Using Linux/C's external here.}
    3
    4   %routine TPK(%real %array %name a, b)
				pushl	%ebp
				movl	%esp, %ebp
				pushl	%ebx
				subl	$36, %esp
				call	__x86.get_pc_thunk.bx
				addl	$_GLOBAL_OFFSET_TABLE_, %ebx
				movl	8(%ebp), %eax
				movl	%eax, -28(%ebp)
				movl	12(%ebp), %eax
				movl	%eax, -32(%ebp)
				movl	%ecx, -36(%ebp)
				movl	%gs:20, %eax
				movl	%eax, -12(%ebp)
				xorl	%eax, %eax
				leal	8(%ebp), %eax
				movl	%eax, -24(%ebp)
    5     ! given 11 input values a(0),...,a(10), this routine
    6     ! produces 22 output values b(0),...b(21), according
    7     ! to the classical TPK algorithm
    8     %real %fn f(%real t)
				pushl	%ebp
				movl	%esp, %ebp
				pushl	%ebx
				subl	$36, %esp
				call	__x86.get_pc_thunk.bx
				addl	$_GLOBAL_OFFSET_TABLE_, %ebx
				movl	%ecx, -28(%ebp)
    9       %result = floaty sqrt(|t|) + 5 * t^3
				flds	8(%ebp)
				fstpl	-16(%ebp)
		.LBB6:
		.LBB7:
				fldl	-16(%ebp)
				fabs
		.LBE7:
		.LBE6:
				fstps	-32(%ebp)
				flds	-32(%ebp)
				subl	$12, %esp
				leal	-4(%esp), %esp
				fstps	(%esp)
				call	sqrtf@PLT
				addl	$16, %esp
				fstpl	-40(%ebp)
				flds	8(%ebp)
				fldl	.LC1@GOTOFF(%ebx)
				leal	-8(%esp), %esp
				fstpl	(%esp)
				leal	-8(%esp), %esp
				fstpl	(%esp)
				call	_imp_REXP
				addl	$16, %esp
				fldl	.LC2@GOTOFF(%ebx)
				fmulp	%st, %st(1)
				faddl	-40(%ebp)
				fstps	-32(%ebp)
				flds	-32(%ebp)
   10     %end
				movl	-4(%ebp), %ebx
				leave
				ret
		.LFE191:
		TPK.6025:
		.LFB190:
   11     %real y
   12     %integer i
   13     %cycle i = 10, -1, 0
				movl	$11, -16(%ebp)
		.L11:
				cmpl	$0, -16(%ebp)
				je	.L20
				subl	$1, -16(%ebp)
				nop
		.L13:
   14       y = f(a(i))
				movl	-16(%ebp), %eax
				leal	0(,%eax,4), %edx
				movl	-28(%ebp), %eax
				addl	%edx, %eax
				flds	(%eax)
				subl	$12, %esp
				leal	-24(%ebp), %eax
				leal	-4(%esp), %esp
				fstps	(%esp)
				movl	%eax, %ecx
				call	F.6028
				addl	$16, %esp
				fstps	-40(%ebp)
				movl	-40(%ebp), %eax
				movl	%eax, -20(%ebp)
   15       y = 999 %if y > 400
				flds	-20(%ebp)
				flds	.LC3@GOTOFF(%ebx)
				fucomip	%st(1), %st
				fstp	%st(0)
				jnb	.L21
				flds	.LC4@GOTOFF(%ebx)
				fstps	-20(%ebp)
				jmp	.L16
		.L21:
				nop
		.L16:
   16       b(20-2*i) = i
				movl	$10, %eax
				subl	-16(%ebp), %eax
				sall	$3, %eax
				movl	%eax, %edx
				movl	-32(%ebp), %eax
				addl	%edx, %eax
				fildl	-16(%ebp)
				fstps	(%eax)
   17       b(21-2*i) = y
				movl	-16(%ebp), %eax
				addl	%eax, %eax
				movl	$21, %edx
				subl	%eax, %edx
				movl	%edx, %eax
				leal	0(,%eax,4), %edx
				movl	-32(%ebp), %eax
				addl	%edx, %eax
				flds	-20(%ebp)
				fstps	(%eax)
   18     %repeat
				jmp	.L11
		.L20:
   19   %end; ! TPK
				nop
				movl	-12(%ebp), %eax
				xorl	%gs:20, %eax
				je	.L18
				call	__stack_chk_fail_local
		.L18:
				movl	-4(%ebp), %ebx
				leave
				ret
		.LFE190:
				.globl	main
		main:
		.LFB189:
   20
   21   %real %array a(0:10), b(0:21)
				leal	-252(%ebp), %edx
				movl	$0, %eax
				movl	$17, %ecx
				movl	%edx, %edi
				rep stosl
				leal	-296(%ebp), %eax
				movl	%eax, -252(%ebp)
				movl	$4, -248(%ebp)
				leal	-184(%ebp), %edx
				movl	$0, %eax
				movl	$17, %ecx
				movl	%edx, %edi
				rep stosl
				leal	-116(%ebp), %eax
				movl	%eax, -184(%ebp)
				movl	$4, -180(%ebp)
   22
   23   TPK(a,b)
				subl	$8, %esp
				leal	-304(%ebp), %eax
				leal	-116(%ebp), %edx
				pushl	%edx
				leal	-296(%ebp), %edx
				pushl	%edx
				movl	%eax, %ecx
				call	TPK.6025
				addl	$16, %esp
				movl	$0, -300(%ebp)
		.LBB8:
		.LBB9:
				subl	$12, %esp
				pushl	-300(%ebp)
				call	exit@PLT
		.LBE9:
		.LBE8:
		.LFE189:
				.section	.rodata
				.align 8
		.LC0:
				.long	0
				.long	1073741824
				.align 8
		.LC1:
				.long	0
				.long	1074266112
				.align 8
		.LC2:
				.long	0
				.long	1075052544
				.align 4
		.LC3:
				.long	1137180672
				.align 4
		.LC4:
				.long	1148829696
				.section	.text.__x86.get_pc_thunk.ax,"axG",@progbits,__x86.get_pc_thunk.ax,comdat
				.globl	__x86.get_pc_thunk.ax
				.hidden	__x86.get_pc_thunk.ax
		__x86.get_pc_thunk.ax:
		.LFB192:
				movl	(%esp), %eax
				ret
		.LFE192:
				.section	.text.__x86.get_pc_thunk.bx,"axG",@progbits,__x86.get_pc_thunk.bx,comdat
				.globl	__x86.get_pc_thunk.bx
				.hidden	__x86.get_pc_thunk.bx
		__x86.get_pc_thunk.bx:
		.LFB193:
				movl	(%esp), %ebx
				ret
		.LFE193:
		.Letext0:
   24
   25 %endofprogram
   18 Statements compiled
