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 ".FPWR" - INTERNAL SINGLE ** INTEGER. 
      NAM .FPWR,7 24998-1X124 REV.2001 781106 
* 
      ENT .FPWR 
      EXT FLOAT,.FLUN,.FMP
* 
A     EQU 0 
B     EQU 1 
* 
*     .FPWR TAKES A 32-BIT FLOATING-POINT NUMBER TO A POSITIVE
*     INTEGER POWER IN THE RANGE [2,32768]. 
* 
*     CALLING SEQUENCE: 
* 
*                   LDA POWER 
*                   JSB .FPWR 
*                   DEF <ARG> 
*                   <RETURN>     (A,B) = RESULT.
* 
*     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. 
      SKP 
*                   GET ARG ADDR, LEFT-JUSTIFY POWER. 
* 
.FPWR NOP 
      JSB FLOAT     LEFT-JUSTIFY POWER. 
      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. 
      LDA .FPWR,I   COPY ARG ADDR.
      ISZ .FPWR 
      STA ARG 
* 
*                   FOR EACH BIT, SQUARE.  IF SET, MULTIPLY BY ARG. 
* 
      DLD A,I       GET ARG.
      SZA,RSS       ZERO ?
      JMP .FPWR,I   YES, DONE.
FPWR1 FMP A         SQUARE IT.
      STA TEMP      GET NEXT BIT OF POWER.
      LDA POWER 
      ELA 
      STA POWER 
      LDA TEMP
      SEZ,RSS       IF SET, MULTIPLY BY ARG.
      JMP FPWR2 
      JSB .FMP
ARG   DEF *-* 
FPWR2 ISZ COUNT     COUNT BIT.
      JMP FPWR1     IF MORE.
      SZA,RSS       ZERO ?
      STO           YES, UNDERFLOW. 
      JMP .FPWR,I   ELSE EXIT.
* 
*                   LOCALS. 
* 
COUNT BSS 1         - # BITS LEFT.
POWER BSS 1         POWER.
TEMP  BSS 1 
      END 
                                                                                                                                                                                