ASMB,L,R,C
* 
*  **************************************************************** 
*  * (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.        * 
*  **************************************************************** 
* 
*   NAME: PART OF MATH LIBRARY
*   SOURCE:  24998-18XXX  SEE NAM FOR LAST THREE DIGITS 
*   RELOC: PART OF 24998-12001
*   PGMR: BG & JTS
* 
      HED ".TPWR" - INTERNAL TRIPLE ** INTEGER. 
      NAM .TPWR,7 24998-1X130 REV.2001 781106 
* 
      ENT .TPWR 
      EXT .TMPY,FLOAT,.FLUN,.CFER 
* 
*     .TPWR TAKES A 64-BIT FLOATING-POINT NUMBER TO A POSITIVE
*     INTEGER POWER IN THE RANGE [2,32768]. 
* 
*     CALLING SEQUENCE: 
* 
*                   LDA POWER 
*                   JSB .TPWR 
*                   DEF <RESULT>
*                   DEF <ARG> 
* 
*     IF THE RESULT OVERFLOWS, THE MAX POSITIVE NUMBER IS 
*     RETURNED WITH OVERFLOW SET.  IF IT UNDERFLOWS, ZERO IS
*     RETURNED WITH OVERFLOW SET.  FOR OTHER CASES OVERFLOW 
*     IS CLEARED. 
      SPC 4 
*                   GET ADDRESSES, LEFT-JUSTIFY POWER.
* 
.TPWR NOP 
      LDB .TPWR,I   COPY RESULT ADDR. 
      ISZ .TPWR 
      STB RESLT 
      LDB .TPWR,I   COPY ARG ADDR.
      ISZ .TPWR 
      STB ARG 
      JSB FLOAT     LEFT-JUSTIFY NUMBER.
      ELA,RAL       REMEMBER SIGN, DISCARD HIGH BIT.
      STA POWER 
      JSB .FLUN     A = # BITS. 
      CMA,SEZ,INA,RSS  - # BITS.
      INA           1 - # BITS. (WAS O.K. FOR 32768)
      STA COUNT     SAVE COUNT. 
      SKP 
*                   COPY ARG, SET UP INITIAL VALUE. 
* 
      JSB .CFER     SAVE ARG FOR MULTIPLIER.
      DEF TEMP
ARG   DEF *-* 
      JSB .TMPY     SET UP INITIAL VALUE. 
      DEF RESLT,I 
      DEF TEMP
      DEF TEMP
      LDA TEMP      IS ARG ZERO ? 
      SZA,RSS 
      JMP .TPWR,I   YES, DONE.
      LDB POWER     LEFT-JUSTIFIED POWER. 
      CMB           REVERSE SENSE OF SLB BELOW. 
      JMP TPWR2     FIRST SQUARE ALREADY DONE.
* 
*                   FOR EACH BIT, SQUARE. IF SET, MULTIPLY BY ARG.
* 
TPWR1 JSB .TMPY     SQUARE IT.
RESLT DEF *-* 
      DEF RESLT,I 
      DEF RESLT,I 
TPWR2 RBL,SLB       NEXT BIT POWER. MULTIPLY ?
      JMP TPWR3     NO. 
      JSB .TMPY     YES, DO IT. 
      DEF RESLT,I 
      DEF RESLT,I 
      DEF TEMP
TPWR3 ISZ COUNT     OUT OF BITS ? 
      JMP TPWR1     NO, DO AGAIN. 
      LDA RESLT,I   IS RESULT ZERO ?
      SZA,RSS 
      STO           YES, UNDERFLOW. 
      JMP .TPWR,I   DONE. 
* 
*                   LOCALS. 
* 
COUNT BSS 1         COUNTER OF BITS USED. 
POWER BSS 1         LEFT-JUSTIFIED POWER. 
TEMP  BSS 4         MULTIPLIER. 
* 
      END 
                                                                                                                                                                                