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 * DEF * (A,B) = "06UN" * (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