( BASIC FLOATING POINT LOAD BLOCK) 01 LOAD 02 LOAD 03 LOAD 04 LOAD 05 LOAD 06 LOAD 07 LOAD 08 LOAD 09 LOAD 10 LOAD 11 LOAD 12 LOAD 13 LOAD 14 LOAD 15 LOAD 16 LOAD 17 LOAD 18 LOAD ;S ( FIS INSTRUCTION DEFINITIONS) OCTAL 075000 1OP FADD, 075010 1OP FSUB, 075020 1OP FMUL, 075030 1OP FDIV, DECIMAL ;S ( FLOATING POINT ARITHMETIC ) OCTAL CODE F+ S FADD, NEXT, CODE F- S FSUB, NEXT, CODE F* S FMUL, NEXT, CODE F/ S FDIV, NEXT, CODE FCHS BEGIN, 0 100000 # MOV, S) 0 XOR, NEXT, CODE FLOAT 0 S )+ MOV, 1 S ) MOV, 3 0 MOV, MI IF, 0 NEG, 1 NEG, 0 SBC, THEN, 2 0 MOV, 2 1 BIS, NE IF, 2 241 # MOV, BEGIN, 2 DEC, 1 # 0 ASHC, VS END, -10 # 0 ASHC, 7 # 2 ASH, 0 2 ADD, THEN, S ) 1 MOV, S -) 0 MOV, 3 TST, PL END, NEXT, CODE FIX 0 S )+ MOV, 3 0 MOV, 1 S ) MOV, 0 100000 # BIC, 2 0 MOV, -7 # 2 ASH, 2 \ TST, LT IF, 2 230 # SUB, 0 77600 # BIC, 0 200 # BIS, 2 0 ASHC, ELSE, 0 CLR, 1 CLR, THEN, 3 TST, MI IF, 0 NEG, 1 NEG, 0 SBC, THEN, S ) 1 MOV, S -) 0 MOV, NEXT, DECIMAL ;S ( FLOATING POINT I/O CONTINUED ) CODE FABS S ) 32768 # BIC, NEXT, : F0= OR 0= ; CODE F+! 0 S )+ MOV, S -) 2 0 I) MOV, S -) 0 ) MOV, S FADD, 0 )+ S )+ MOV, 0 )+ S )+ MOV, NEXT, : F-! >R FCHS R> F+! ; ;S ( FLOATING POINT I/O ) ORFAN@ S) TST, NE IF, S -) S) MOV, THEN, NEXT, : P.D >R SWAP OVER DABS BUFFER R> ADOPT@ IF 0 DO DIGIT LOOP THEN 46 !DIGIT DIGITS +- ; : .FR >R P.D R> OVER - SPACES TYPE ; : PF. DUP >R ADOPT@ IF 0 DO 10. F* LOOP THEN FIX R> ; : F. PF. P.D TYPE ; : F.R >R PF. R> .FR ; ;S ( FLOATING POINT LOGICAL / UTILITY OPERATIONS ) : FCON 2CONSTANT ; : FVAR 2INTEGER ; 1E0 FCON 1E0 2E0 FCON 2E0 3E0 FCON 3E0 -1E0 FCON -1E0 CODE F> S FSUB, 2 S I) CLR, S )+ TST, GT IF, S) INC, THEN, NEXT, CODE F< S FSUB, 2 S I) CLR, S )+ TST, LT IF, S) INC, THEN, NEXT, CODE F0> 2 S I) CLR, S )+ TST, GT IF, S) INC, THEN, NEXT, CODE F0< 2 S I) CLR, S )+ TST, LT IF, S) INC, THEN, NEXT, ;S ( FLOATING POINT LOGICAL / UTILITY OPERATIONS ) : 1/X 2DUP F0> IF 1E0 2SWAP F/ ELSE 2DROP 1E8 8 MESSAGE ABORT THEN ; : SGN DUP 0>= IF 1E0 ELSE -1E0 THEN 2SWAP FABS ; ;S ;S ( PI, SQRT, ETC FLOATING POINT ) 3.14159264E0 FCON PI 1.57079633E0 FCON PI/2 6.28318531E0 FCON 2PI : 2ROOT 2DUP 16382 AND 128 + 2/ 16384 OR 1.03 F/ 2OVER 2OVER F/ F+ 2DUP 4E0 F/ 2>R F/ 2R> F+ ; : SQRT FABS 2DUP 1E0 F> IF 2ROOT ELSE 2DUP 0. F> IF 2139095040, F* 2ROOT 1610612736, F/ ELSE 0. THEN THEN ; : FMAX 2OVER 2OVER F< IF 2SWAP THEN 2DROP ; : FMIN 2OVER 2OVER F> IF 2SWAP THEN 2DROP ; ;S ( ATAN, ASIN, ACOS ) : KSET 2DUP 5.4 F* 1.5 F+ FIX ; : F(K,X) 2OVER 2DUP F* 2OVER FLOAT 2E0 1/X F+ F* .42 F* ; : 1ATN 2SWAP DROP 1 SWAP DO I 2 * 1 + 0 FLOAT F+ 2OVER I 0 FLOAT F* 2DUP F* 2SWAP F/ -1 +LOOP 1E0 F+ F/ ; : 2ATN KSET F(K,X) 1ATN ; : ATAN SGN 2DUP 1E0 F> IF 1/X 2ATN PI/2 2SWAP F- F* ELSE 2ATN F* THEN ; : STAN 2DUP 2DUP F* 1E0 2SWAP F- SQRT F/ ; : ASIN STAN ATAN ; : ACOS ASIN PI/2 2SWAP F- ; : CHS -1E0 F* ; : ATAN(Y/X) SGN 2SWAP 2>R F/ ATAN 2R> 0. F< IF CHS PI F+ THEN 2DUP 0. F< IF 2PI F+ THEN ; ;S ( SINX, COSX, TANX ) 0 INTEGER SINX 0 , 1 INTEGER COSX 0 , 0 INTEGER TANX 0 , 1 INTEGER SSIGN 0 , 1 INTEGER CSIGN 0 , : REDUCE 2PI 2OVER 2OVER F/ .5 F+ FIX FLOAT F* F- ; : SIGNS 1E0 SSIGN 2! 1E0 CSIGN 2! 2DUP 0. F< IF -1E0 SSIGN 2! THEN FABS 2DUP PI/2 F> IF -1E0 CSIGN 2! PI 2SWAP F- THEN ; : TANX/2 PI/2 F/ 2DUP 2DUP F* 2DUP 3.9839736E-5 F* 2.5229476E-3 F+ F* 1.9634956E-1 F+ F* 2 0 DO 1E0 2OVER 2DUP F* F- F/ 2DUP F+ LOOP ; ( TANX/2 -- ABT 2.5 MSEC ON LSI-11/2) 12 LOAD : TANX/2 TX2 ; ;S ( SIN, COS, TAN CONTINUED ) : 1SIN 1E0 2OVER 2DUP F* F+ F/ 2DUP F+ SSIGN 2@ F* ; : 1COS 2E0 2SWAP 1E0 2SWAP 2DUP F* F+ F/ 1E0 F- CSIGN 2@ F* ; : 1TAN 1E0 2OVER 2DUP F* F- 2DUP 0. F> IF F/ 2DUP F+ ELSE 2DROP 2DROP 1E8 THEN SSIGN 2@ F* CSIGN 2@ F* ; : 3TRIG REDUCE SIGNS TANX/2 2DUP 1SIN SINX 2! 2DUP 1COS COSX 2! 1TAN TANX 2! ; : SIN REDUCE SIGNS TANX/2 1SIN ; : COS REDUCE SIGNS TANX/2 1COS ; : TAN REDUCE SIGNS TANX/2 1TAN ; ;S ( TX2 == CODED TANX/2) MK! 2E0 PI F/ SWAP , , 3.9839736E-5 SWAP , , 2.5229476E-3 SWAP , , 1.9634956E-1 SWAP , , CODE TX2 0 MK@ # MOV, S -) 0 )+ MOV, S -) 0 )+ MOV, S FMUL, 1 S MOV, 1 )+ 1 )+ CMP, S -) 1 -) MOV, S -) 1 -) MOV, S -) 1 -) MOV, S -) 1 -) MOV, S FMUL, S -) 2 S I) MOV, S -) 2 S I) MOV, S -) 0 )+ MOV, S -) 0 )+ MOV, S FMUL, S -) 0 )+ MOV, S -) 0 )+ MOV, S FADD, S FMUL, S -) 0 )+ MOV, S -) 0 )+ MOV, S FADD, S FMUL, 2 2 # MOV, BEGIN, S -) CLR, S -) 16512 # MOV, ( 1E0) S -) 6 S I) MOV, S -) 6 S I) MOV, S -) 2 S I) MOV, S -) 2 S I) MOV, S FMUL, S FSUB, S FDIV, S -) 2 S I) MOV, S -) 2 S I) MOV, S FADD, 2 SOB, NEXT, ;S ( ABT 1.7 MSEC ON LSI-11/2) ;S ;S ;S ;S ;S ;S ( FLOATING POINT ARITHMETIC ) OCTAL CODE F+ S FADD, NEXT, CODE F- S FSUB, NEXT, CODE F* S FMUL, NEXT, CODE F/ S FDIV, NEXT, CODE FCHS BEGIN, 0 100000 # MOV, S) 0 XOR, NEXT, CODE FLOAT 0 S )+ MOV, 1 S ) MOV, 3 0 MOV, MI IF, 0 NEG, 1 NEG, 0 SBC, THEN, 2 0 MOV, 2 1 BIS, NE IF, 2 241 # MOV, 0 TST, EQ IF, 0 1 MOV, 1 CLR, 2 20 # SUB, 0 177400 # BIT, EQ IF, 0 SWAB, 2 10 # SUB, THEN, THEN, 0 TST, PL IF, BEGIN, 2 DEC, 1 # 0 ASHC, VS END, THEN, -10 # 0 ASHC, 7 # 2 ASH, 0 2 ADD, THEN, S ) 1 MOV, S -) 0 MOV, 3 TST, PL END, NEXT, CODE FIX 0 S )+ MOV, 3 0 MOV, 1 S ) MOV, 0 100000 # BIC, 2 0 MOV, -7 # 2 ASH, 2 \ TST, LT IF, 2 230 # SUB, 0 77600 # BIC, 0 200 # BIS, 2 0 ASHC, ELSE, 0 CLR, 1 CLR, THEN, 3 TST, MI IF, 0 NEG, 1 NEG, 0 SBC, THEN, S ) 1 MOV, S -) 0 MOV, NEXT, DECIMAL ;S