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-18070 * RELOC: PART OF 24998-12001 * PGMR: BG & JTS * HED ".TTOI" - TRIPLE TO AN INTEGER POWER. NAM .TTOI,7 24998-1X070 REV.2013 791019 * ENT .TTOI EXT .TDIV,.TPWR,.CFER,.4ZRO * A EQU 0 B EQU 1 * * .TTOI RAISES A TRIPLE-PRECISION BASE TO AN INTEGER POWER * PRODUCING A TRIPLE-PRECISION RESULT. * * CALLING SEQUENCE: * * JSB .TTOI * DEF * DEF * DEF * (A,B) = ASCII "12UN" * * * THE ERROR RETURN IS TAKEN IF THE BASE IS ZERO AND THE POWER IS * NEGATIVE OR ZERO. OVERFLOW PRODUCES THE MAXIMUM POSITIVE NUMBER * WITH THE OVERFLOW BIT SET, WHILE UNDERFLOW PRODUCES ZERO WITH THE * OVERFLOW BIT 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 4 * COPY ADDRESSES, GET POWER. * .TTOI NOP STA SAVEA STB SAVEB SAVE A,B BECAUSE ARG ADDRESSES MIGHT BE THERE JSB ENTR1 STA RESLT JSB ENTR1 STA BASE JSB ENTR1 STA POWER LDA SAVEA ARG MIGHT BE IN A OR B LDB SAVEB LDA POWER,I STA POWER LDB BASE CLO JUST IN CASE. LDB B,I BASE = 0 ? SZB,RSS JMP Z$$I YES. SZA,RSS POWER = 0 ? JMP ONE YES, RESULT = 1.0 SKP * SET RESULT = X ** IABS(I). * SSA TAKE ABS VALUE. CMA,INA CPA =D1 X**1 ? JMP X$$1 YES, DONE. JSB .TPWR USE .TPWR TO DO THE WORK. RESLT DEF *-* BASE DEF *-* * * INVERT IF POWER < 0. * FLIP LDA POWER POWER < 0 ? SSA,RSS JMP EXIT NO, DONE. LDA RESLT,I A = FIRST WD RESULT. SOC H YES, DON'T INVERT IF OVERFLOW SZA,RSS (UNDERFLOW SETS OFL BIT) JMP *+2 JMP ZERO JUST RETURN ZERO & OFL=1 JSB .TDIV INVERT FOR NEGATIVE POWERS DEF RESLT,I TONEP DEF TONE DEF RESLT,I EXIT ISZ .TTOI GOOD RETURN JMP .TTOI,I EXIT * * SPECIAL CASES & ERROR PROCESSING. * Z$$I SZA POWER <= 0 ? SSA JMP ERROR YES, ERROR. ZERO LDA ZEROP JMP *+2 ONE LDA TONEP STA BASE SET UP CFER CLB,INB SET POWER = 1 TO FORCE SIMPLE COPY. STB POWER X$$1 JSB .CFER JUST COPY ARG, 0.0 OR 1.0 DEF RESLT,I DEF BASE,I JMP FLIP IF ARG, MIGHT YET INVERT IT. ERROR LDA =A12 RETURN (A,B) = ASCII "12UN" LDB =AUN JMP .TTOI,I * ENTR1 NOP ROUTINE TO GET NEXT ADDR IN PARAM LIST LDA .TTOI ADDR ADDR PARAM ISZ .TTOI LDB SAVEB RESTORE ORIGINAL B ENTR2 STA T2 SAVE ADDR TO INDIRECT THRU LDA SAVEA RESTORE ORIGINAL A LDA T2,I DO THE INDIRECT RAL,CLE,SLA,ERA JMP ENTR2 INDIRECT BIT WAS SET, TRY AGAIN JMP ENTR1,I EXIT SAVEA BSS 1 SAVEB BSS 1 T2 BSS 1 * * LOCALS & CONSTANTS * POWER BSS 1 REMAINING BITS OF IABS(POWER) SUP ZEROP DEF .4ZRO+0 TONE DEY 1.0 UNS END