         Edinburgh IMP77 Compiler - Version 8.4
    1 %SYSTEMREALFN SQRT(%REAL ARG)
		.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	.LC1@GOTOFF(%eax)
				fucomip	%st(1), %st
				fstp	%st(0)
				jp	.L2
				fldl	-24(%ebp)
				fldl	.LC1@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:
				.section	.rodata
				.align 32
		.LC0:
				.byte	13
				.string	"SQRT ARG NEG\n"
				.zero	241
				.globl	SQRT
		SQRT:
		.LFB189:
				pushl	%ebp
				movl	%esp, %ebp
				pushl	%edi
				pushl	%esi
				pushl	%ebx
				subl	$700, %esp
				call	__x86.get_pc_thunk.bx
				addl	$_GLOBAL_OFFSET_TABLE_, %ebx
				movl	%gs:20, %eax
				movl	%eax, -28(%ebp)
				xorl	%eax, %eax
    2 %INTEGER I,J
    3 %REAL Y,OLD
    4 %REALARRAY A(0:15)
				leal	-608(%ebp), %edx
				movl	$0, %eax
				movl	$17, %ecx
				movl	%edx, %edi
				rep stosl
				leal	-672(%ebp), %eax
				movl	%eax, -608(%ebp)
				movl	$4, -604(%ebp)
    5 !      %IF ARG<0.0 %THEN MLIBERR(50) %AND ARG=-ARG
    6       %IF ARG<0.0 %THEN PRINTSTRING("SQRT ARG NEG
				fldz
				flds	8(%ebp)
				fucomip	%st(1), %st
				fstp	%st(0)
				jnb	.L39
		.LBB7:
				leal	-284(%ebp), %eax
				leal	.LC0@GOTOFF(%ebx), %edx
				movl	$64, %ecx
				movl	%eax, %edi
				movl	%edx, %esi
				rep movsl
				leal	-540(%ebp), %eax
				leal	-284(%ebp), %edx
				movl	$64, %ecx
				movl	%eax, %edi
				movl	%edx, %esi
				rep movsl
				leal	-284(%ebp), %eax
				leal	-540(%ebp), %edx
				movl	$64, %ecx
				movl	%eax, %edi
				movl	%edx, %esi
				rep movsl
		.LBE7:
		.LBB8:
		.LBB9:
				subl	$256, %esp
				movl	%esp, %eax
				movl	%eax, %edi
				leal	-284(%ebp), %eax
				movl	$64, %edx
				movl	%eax, %esi
				movl	%edx, %ecx
				rep movsl
				call	_imp_printstring@PLT
				addl	$256, %esp
		.LBE9:
		.LBE8:
				fld1
				fchs
				jmp	.L37
		.L39:
				nop
		.L10:
    7 ") %AND %RESULT=-1
    8       %IF ARG=0 %THEN %RESULT=0.0
				flds	8(%ebp)
				fldz
				fucomip	%st(1), %st
				fstp	%st(0)
				jp	.L40
				flds	8(%ebp)
				fldz
				fucomip	%st(1), %st
				fstp	%st(0)
				jne	.L40
				fldz
				jmp	.L37
		.L40:
				nop
		.L14:
    9       %CYCLE I=0,1,15
				movl	$-1, -696(%ebp)
		.L15:
				cmpl	$15, -696(%ebp)
				je	.L41
				addl	$1, -696(%ebp)
				nop
		.L21:
   10          Y=ARG/2^I
				flds	8(%ebp)
				fstpl	-712(%ebp)
				fildl	-696(%ebp)
				leal	-8(%esp), %esp
				fstpl	(%esp)
				fldl	.LC1@GOTOFF(%ebx)
				leal	-8(%esp), %esp
				fstpl	(%esp)
				call	_imp_REXP
				addl	$16, %esp
				fdivrl	-712(%ebp)
				fstps	-688(%ebp)
   11          %IF Y<1 %THEN ->OUT
				fld1
				flds	-688(%ebp)
				fucomip	%st(1), %st
				fstp	%st(0)
				jnb	.L42
				jmp	.L21
		.L42:
				nop
		.L20:
   12       %REPEAT
				jmp	.L15
		.L17:
		.L41:
   13 OUT:  %IF Y>1 %THEN I=17 %AND Y=Y/4 %ELSE I=I+1 %AND Y=Y/2
				flds	-688(%ebp)
				fld1
				fucomip	%st(1), %st
				fstp	%st(0)
				jnb	.L43
				movl	$17, -696(%ebp)
				flds	-688(%ebp)
				flds	.LC5@GOTOFF(%ebx)
				fdivrp	%st, %st(1)
				fstps	-688(%ebp)
				jmp	.L25
		.L43:
				nop
		.L24:
				addl	$1, -696(%ebp)
				flds	-688(%ebp)
				flds	.LC6@GOTOFF(%ebx)
				fdivrp	%st, %st(1)
				fstps	-688(%ebp)
		.L25:
   14       %IF Y>0.34375 %THEN A(0)=Y/2 +0.4368 %ELSE A(0)=Y/2+0.381
				flds	-688(%ebp)
				flds	.LC7@GOTOFF(%ebx)
				fucomip	%st(1), %st
				fstp	%st(0)
				jnb	.L44
				flds	-688(%ebp)
				flds	.LC6@GOTOFF(%ebx)
				fdivrp	%st, %st(1)
				fldl	.LC8@GOTOFF(%ebx)
				faddp	%st, %st(1)
				fstps	-700(%ebp)
				flds	-700(%ebp)
				fstps	-672(%ebp)
				jmp	.L29
		.L44:
				nop
		.L28:
				flds	-688(%ebp)
				flds	.LC6@GOTOFF(%ebx)
				fdivrp	%st, %st(1)
				fldl	.LC9@GOTOFF(%ebx)
				faddp	%st, %st(1)
				fstps	-700(%ebp)
				flds	-700(%ebp)
				fstps	-672(%ebp)
		.L29:
   15       %CYCLE J=0,1,14
				movl	$-1, -692(%ebp)
		.L30:
				cmpl	$14, -692(%ebp)
				je	.L45
				addl	$1, -692(%ebp)
				nop
		.L32:
   16          OLD=A(J)
				movl	-692(%ebp), %eax
				flds	-672(%ebp,%eax,4)
				fstps	-684(%ebp)
   17          A(J+1)=(OLD+Y/OLD)/2
				flds	-684(%ebp)
				flds	-688(%ebp)
				fdivs	-684(%ebp)
				faddp	%st, %st(1)
				fldl	.LC1@GOTOFF(%ebx)
				fdivrp	%st, %st(1)
				movl	-692(%ebp), %eax
				addl	$1, %eax
				fstps	-700(%ebp)
				flds	-700(%ebp)
				fstps	-672(%ebp,%eax,4)
   18          %IF MOD(A(J+1)-OLD)<0.000000000000005 %THEN %EXIT
				movl	-692(%ebp), %eax
				addl	$1, %eax
				flds	-672(%ebp,%eax,4)
				fsubs	-684(%ebp)
				fstpl	-680(%ebp)
		.LBB10:
		.LBB11:
				fldl	-680(%ebp)
				fabs
		.LBE11:
		.LBE10:
				fldl	.LC10@GOTOFF(%ebx)
				fxch	%st(1)
				fucomip	%st(1), %st
				fstp	%st(0)
				jnb	.L46
				jmp	.L32
		.L46:
				nop
		.L36:
   19       %REPEAT
				jmp	.L30
		.L45:
   20       %RESULT=A(J+1)*2^(I//2)
				movl	-692(%ebp), %eax
				addl	$1, %eax
				flds	-672(%ebp,%eax,4)
				fstpl	-712(%ebp)
				movl	-696(%ebp), %eax
				movl	%eax, %edx
				shrl	$31, %edx
				addl	%edx, %eax
				sarl	%eax
				movl	%eax, -704(%ebp)
				fildl	-704(%ebp)
				leal	-8(%esp), %esp
				fstpl	(%esp)
				fldl	.LC1@GOTOFF(%ebx)
				leal	-8(%esp), %esp
				fstpl	(%esp)
				call	_imp_REXP
				addl	$16, %esp
				fmull	-712(%ebp)
				fstps	-700(%ebp)
				flds	-700(%ebp)
		.L37:
   21 %END
				movl	-28(%ebp), %eax
				xorl	%gs:20, %eax
				je	.L38
				fstp	%st(0)
				call	__stack_chk_fail_local
		.L38:
				leal	-12(%ebp), %esp
				popl	%ebx
				popl	%esi
				popl	%edi
				popl	%ebp
				ret
		.LFE189:
				.section	.rodata
				.align 8
		.LC1:
				.long	0
				.long	1073741824
				.align 4
		.LC5:
				.long	1082130432
				.align 4
		.LC6:
				.long	1073741824
				.align 4
		.LC7:
				.long	1051721728
				.align 8
		.LC8:
				.long	-54975581
				.long	1071379591
				.align 8
		.LC9:
				.long	-755914244
				.long	1071145549
				.align 8
		.LC10:
				.long	-2036257893
				.long	1022788763
				.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:
		.LFB190:
				movl	(%esp), %eax
				ret
		.LFE190:
				.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:
		.LFB191:
				movl	(%esp), %ebx
				ret
		.LFE191:
		.Letext0:
   22 %ENDOFFILE
   20 Statements compiled
