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 * (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