.TITLE P$SQRT - SQUARE ROOT .IDENT /790802/ ; USAGE: ; Y := SQRT(X) ; REAL PARAMETER X ON TOP OF STACK ; ASSUME HIGH PART AT SP+2 AND LOW AT SP+4 ; REAL RESULT RETURNED ON TOP OF STACK ; REGISTER USAGE: ; R0,R1 - SCRATCH ; .PSECT $$$101:: TST 2(SP) ;HIGH ORDER ARG BMI 3$ ;ARGUMENT MUST BE >= 0 BEQ ZERSQR ;ZERO RESULT MOV 4(SP),-(SP) ;COPY THE LOW PART TO TOS MOV 4(SP),-(SP) ;COPY HIGH PART ASR (SP) ADD #020100,(SP) ;INITIAL ESTIMATE OF E MOV #3,R0 ;SET ITERATION COUNTER 2$: MOV 10(SP),-(SP) ;GET WORKING COPY OF THE ARG MOV 10(SP),-(SP) ;HIGH PART MOV 6(SP),-(SP) ;WORKING COPY OF E MOV 6(SP),-(SP) FDIV SP ;X/E FADD SP ;X/E + E CLR -(SP) ; MOV #040400,-(SP) ;LOAD 2.0 FDIV SP ;(X/E+E)/2.0 SOB R0,2$ BR ENDSQT 3$: WARN CLR 2(SP) ;RETURN ZERO CLR 4(SP) ;HIGH PART ZERO RTS PC ENDSQT: MOV (SP)+,4(SP) ;RETURN HIGH PART MOV (SP)+,4(SP) ;RETURN LOW PART ZERSQR: ;SQRT OF 0 IS 0 RTS PC .END