ASMB,R,L,C
      NAM CSQRT,6 24998-1X090 REV.2013 791016 
      ENT CSQRT 
      EXT .ZRNT,.ENTP,CABS,SQRT,..FCM,.CFER 
*********************************************************************** 
*                                                                     * 
*     NAME: CSQRT                                                     * 
*   SOURCE: 24998-18090                                               * 
*    RELOC: PART OF 24998-12002                                       * 
*     PGMR: CRG                                                       * 
*                                                                     * 
*********************************************************************** 
*                                                                     * 
*     (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1979.  ALL RIGHTS         * 
*     RESERVED.  NO PART OF THIS PROGRAM MAY BE PHOTOCOPIED,          * 
*     REPRODUCED OR TRANSLATED TO ANOTHER PROGRAM LANGUAGE WITHOUT    * 
*     THE PRIOR WRITTEN CONSENT OF HEWLETT-PACKARD COMPANY.           * 
*                                                                     * 
*********************************************************************** 
* 
*     COMPLEX SQUARE ROOT 
* 
*     CALLING SEQUENCE:   Y = CSQRT(X)
* 
*                         JSB CSQRT 
*                         DEF *+3 
*                         DEF Y 
*                         DEF X 
* 
*********************************************************************** 
* 
TDB   NOP 
      ABS CSQRT-TDB 
TDBP2 NOP 
ADIX  BSS 1 
ADIY  BSS 1 
SGNRX BSS 1 
TEMP  BSS 2 
Y     BSS 1 
X     BSS 1 
* 
CSQRT NOP           ENTRY POINT 
      JSB .ZRNT 
      DEF LIBX
      JSB .ENTP     GET ADDRESSES 
      DEF Y 
      STA TDBP2     SAVE RTN ADDR 
* 
*********************************************************************** 
      SKP 
*********************************************************************** 
* 
*     CALCULATE CABS(X) AND CHECK FOR X = 0 
* 
      JSB CABS      COMPLEX ABS VALUE OF X
      DEF *+2       RTN ADDR
      DEF X,I 
      DST TEMP      TEMP = CABS(X)
* 
      SZA,RSS       SKIP IF NOT ZERO
      JMP ZERO      ZERO, FINISH UP 
* 
*********************************************************************** 
* 
*     CALCULATE REAL(Y) 
* 
      DLD X,I       GET RX
      STA SGNRX     SGNRX = SIGN(RX)
* 
      SSA           SKIP IF RX > 0
      JSB ..FCM     ABS(RX) 
* 
      FAD TEMP      ABS(RX) + CABS(X) 
      FDV F2.0      (ABS(RX)+CABS(X))/2.0 
      JSB SQRT      TAKE SQUARE ROOT
      HLT 33B       NEVER ERROR RETURN
      DST Y,I       RY = SQRT((ABS(RX)+CABS(X))/2.0)
* 
      FAD A         TEMP = 2.0 * RY 
      DST TEMP
* 
*********************************************************************** 
* 
*     CALCULATE ADDRESSES OF IMAG(X) AND IMAG(Y)
* 
      LDA X 
      ADA .2
      STA ADIX      ADIX = ADDR(IX) 
* 
      LDB Y 
      ADB .2
      STB ADIY      ADIY = ADDR(IY) 
* 
*********************************************************************** 
      SKP 
*********************************************************************** 
* 
*     CALCULATE IMAG(Y) 
* 
      DLD ADIX,I    GET IX
      FDV TEMP
      DST ADIY,I    IY = IX / (2.0 * RY)
      DST TEMP      TEMP = IY 
* 
*********************************************************************** 
* 
*     TEST FOR REAL(X) > 0
* 
      LDB SGNRX     RX < 0 ?
      SSB,RSS       SKIP IF RX < 0
      JMP LIBX      RX > 0, DONE
* 
************************************************************************
* 
*     REAL(X) < 0, SO SWAP REAL(Y) AND IMAG(Y)
* 
*     ALSO, IF IMAG(X) < 0, COMPLEMENT Y
* 
      SSA           IX < 0 ?
      JMP NEG       JUMP IF IX < 0
* 
      DLD Y,I       SWAP RY AND IY
      DST ADIY,I
      DLD TEMP
      DST Y,I 
      JMP LIBX      DONE
* 
************************************************************************* 
      SKP 
************************************************************************* 
* 
*     COMPLEMENT AND SWAP REAL(Y) AND IMAG(Y) 
* 
NEG   DLD Y,I 
      JSB ..FCM     -RY 
      DST ADIY,I
      DLD TEMP
      JSB ..FCM     -IY 
      DST Y,I 
* 
************************************************************************* 
* 
LIBX  JMP TDBP2,I   RETURN
      DEF TDB 
      DEC 0 
* 
************************************************************************* 
* 
ZERO  JSB .CFER 
      DEF Y,I 
      DEF X,I 
      JMP LIBX      EXIT
* 
************************************************************************
* 
A     EQU 0 
F2.0  DEC 2.0 
.2    DEC 2 
* 
*********************************************************************** 
      END 
                                                                