X-Git-Url: http://gitweb.hachti.de/?a=blobdiff_plain;f=sw%2Ff4%2FFRTSRC%2Fexpdi.ra;fp=sw%2Ff4%2FFRTSRC%2Fexpdi.ra;h=fb3f8ffb539ad618ad90662102815c2e1d6c0ba4;hb=7af5ad59491ddf2066641aef1e0025a337c0f247;hp=0000000000000000000000000000000000000000;hpb=919757fd611e482003ce51f366f6783cab73dea3;p=pdp8.git diff --git a/sw/f4/FRTSRC/expdi.ra b/sw/f4/FRTSRC/expdi.ra new file mode 100644 index 0000000..fb3f8ff --- /dev/null +++ b/sw/f4/FRTSRC/expdi.ra @@ -0,0 +1,63 @@ + SECT #EXPDI +/ B**E +/ WHERE E IS INTEGER +/ AND B IS DOUBLE PRECISION +/ +/ VERSION 5A 4-26-77 MH +/ + DPCHK + BASE 0 +EXPDI, JA . + FSTA SIGN /SAVE SIGN OF EXPONENT + JGE POSINT /ITS POSITIVE + FNEG +POSINT, FSTA EXP + XTA 1 /SAVE XR 1 + FSTA XR1 + LDX -27,1 /BIT COUNT + STARTE + FLDA ONE /START WITH ONE + FSTA PROD + STARTF + FLDA EXP +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 EXP + STARTE + JLT ODD /YES, JUMP + FLDA 0 /SQUARE BASE +SQUARE, FMULM 0 + STARTF + FLDA TEMP /EXPONENT OVER 2 + FSTA EXP + 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 WS NEGATIVE, INVERT RESULT + STARTE + FLDA PROD /RETURN ANSWER + JA EXPDI +INVERT, STARTE + FLDA ONE /RETURN WITH 1/PROD + FDIV PROD + JA EXPDI +ODD, FLDA 0 + FMULM PROD + JA SQUARE /GO SQUARE THE BASE +ONE, F 1.0 + F 0.0 +TWO, F 2.0 +PROD, F 0.0 + F 0.0 +SIGN, F 0.0 +TEMP, F 0.0 +XR1, F 0.0 +EXP, F 0.0 + F 0.0 + END +