A large commit.
[pdp8.git] / sw / os8 / v3d / sources / fortran / dectapes / dectape2 / expii.ra
diff --git a/sw/os8/v3d/sources/fortran/dectapes/dectape2/expii.ra b/sw/os8/v3d/sources/fortran/dectapes/dectape2/expii.ra
new file mode 100644 (file)
index 0000000..02a5e33
--- /dev/null
@@ -0,0 +1,52 @@
+       SECT    #EXPII
+/      B**E
+/      WHERE E IS INTEGER
+/      AND B IS REAL OR INTEGER
+/
+/ VERSION 5A 4/26/77 MH
+/
+       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
+       FLDA    0               /SQUARE BASE
+SQUARE,        FMULM   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 WS 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
+       FMULM   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
+\f