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