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-18063
*   RELOC: PART OF 24998-12001
*   PGMR: BG & JTS
* 
      HED ".RTOI" - SINGLE TO AN INTEGER POWER. 
      NAM .RTOI,7 24998-1X063 REV.2013 791230 
* 
      ENT .RTOI 
      EXT .FPWR 
      SUP 
* 
A     EQU 0 
B     EQU 1 
* 
*     .RTOI RAISES A SINGLE-PRECISION BASE TO AN INTEGER POWER
*     PRODUCING A SINGLE-PRECISION RESULT.
* 
*     CALLING SEQUENCE: 
* 
*                   JSB .RTOI 
*                   DEF <BASE>
*                   DEF <POWER> 
*                   <ERROR RETURN>    (A,B) = "06UN"
*                   <NORMAL RETURN>   (A,B) = RESULT. 
* 
*     THE ERROR RETURN IS TAKEN IF THE BASE IS ZERO AND THE POWER IS
*     NEGATIVE OR ZERO.  OVERFLOW PRODUCES THE MAXIMUM POSITIVE NUMBER
*     WITH OVERFLOW SET, UNDERFLOW PRODUCES ZERO WITH OVERFLOW SET. 
* 
*     FOR NEGATIVE POWERS, X**(-I) IS COMPUTED AS 1/X**I, SO IF THE 
*     ABSOLUTE VALUE OF THE RESULT IS IN [2**-129,2**-127], UNDERFLOW 
*     WILL OCCUR EVEN THOUGH THE RESULT IS IN RANGE.
      SPC 3 
*                   COPY BASE ADDR, GET & TEST POWER. 
* 
.RTOI NOP 
      STA AREG
      STB BREG
      LDB .RTOI,I   COPY BASE ADDR. 
      STB ARG 
      LDA AREG      RESTORE A AND B 
      LDB BREG        BECAUSE ARGS MIGHT BE IN REGISTERS
      DLD ARG,I 
      DST BASE      SET UP BASE 
      ISZ .RTOI 
      LDA .RTOI,I   GET POWER.
      ISZ .RTOI 
      STA ARG 
      LDA AREG      RESTORE A AND B 
      LDB BREG        BECAUSE POWER MIGHT BE IN THEM
      LDA ARG,I     A = POWER.
      STA POWER 
      CLO           JUST IN CASE. 
      LDB BASE      BASE = 0 ?
      SZB,RSS 
      JMP RTOI2     YES.
      SZA,RSS       POWER = 0 ? 
      JMP ONE       YES, RESULT = 1.0 
      IOR =B77777   SET UP FLAG IF POWER < 0. 
      STA SGNP
      SKP 
*                   FORM X ** IABS(I).
* 
      LDA POWER     TAKE ABS. 
      SSA 
      CMA,INA 
      CPA =D1       POWER = 1 ? 
      JMP IDENT     YES.
      JSB .FPWR     NO. USE ".FPWR" 
      DEF BASE
* 
*                   INVERT IF POWER < 0.
* 
RTOI1 ISZ SGNP      < 0 ? 
      JMP EXIT      NO. 
      SOC H         YES, DON'T INVERT IF OVERFLOW.
      SZA,RSS 
      JMP *+2 
      JMP ZERO      INSTEAD RETURN ZERO.
      DST TEMP      INVERT. 
      DLD =F1.0 
      FDV TEMP
EXIT  ISZ .RTOI     SKIP ERROR EXIT.
      JMP .RTOI,I   EXIT. 
* 
*                   SPECIAL CASES AND ERROR PROCESSING. 
* 
IDENT DLD BASE
      JMP RTOI1 
RTOI2 SZA           POWER <= 0 ?
      SSA 
      JMP ERROR     YES, ERROR. 
ZERO  CLA           NO, RESULT = 0. 
      CLB 
      JMP EXIT
ONE   DLD =F1.0 
      JMP EXIT
ERROR LDA =A06      (A,B) = ASCII "06UN"
      LDB =AUN
      JMP .RTOI,I   TAKE ERROR EXIT.
* 
*                   LOCALS. 
* 
SGNP  BSS 1         SIGN(POWER) 
POWER BSS 1 
BASE  BSS 2 
ARG   EQU SGNP
AREG  BSS 1 
BREG  BSS 1 
TEMP  EQU SGNP      TEMP FOR 1/X**I 
      UNS 
      END 
                                                                                                                