File: EXPII.RA of Tape: Sources/Fortran/os8-f4-3
(Source file text)
/R=R**I INTERNAL FUNCTION (EXPONENT INTEGER) / / / VERSION 40A 27-MAY-80 WVDM / / SECT #EXPII BASE 0 JA . FSTA SIGN /SAVE SIGN OF EXPONENT JGE POSINT /ITS POSITIVE FNEG POSINT, FSTA 3 /PUT IT INTO 3 XTA 1 /SAVE XR 1 FSTA XR1 LDX -27,1 /BIT COUNT FLDA ONE /START WITH ONE FSTA PROD FLDA 3 /GET EXPONENT LOOP, JEQ YES /DONE IF ITS ZERO FDIV TWO /DIVIDE BY TWO ALN 0 /INTEGERIZE FNORM FSTA TEMP /SAVE AT FMUL TWO /IS EXPONENT ODD ? FSUB 3 JLT ODD /YES, JUMP SQUARE, FLDA 0 /SQUARE BASE FMUL 0 FSTA 0 FLDA TEMP /EXPONENT OVER 2 FSTA 3 JXN LOOP,1+ /LOOP IF MORE BITS YES, FLDA XR1 /DONE, RESTORE XR 1 ATX 1 FLDA SIGN /CHECK SIGN OF EXPONENT JLT INVERT /IT WAS NEGATIVE, INVERT RESULT FLDA PROD /RETURN ANSWER JA #EXPII / INVERT, FLDA ONE /RETURN 1/PROD FDIV PROD JA #EXPII / ODD, FLDA 0 /MULT PROD BY BASE FMUL PROD FSTA PROD JA SQUARE /GO SQUARE THE BASE / ONE, F 1.0 TWO, F 2.0 PROD, F 0.0 SIGN, F 0.0 TEMP, F 0.0 XR1, F 0.0 END