mirror of
https://github.com/PDP-10/its.git
synced 2026-03-09 20:38:23 +00:00
Patch out the call to FIXIFY in CC. This subroutine uses the UFA instruction which isn't implemented on a KS10. Make the use of UFA an assembly time conditional in the C library. Replace it with FIX on KS10.
224 lines
3.0 KiB
Plaintext
224 lines
3.0 KiB
Plaintext
;
|
|
; CFLOAT - FLOATING POINT STUFF
|
|
;
|
|
; This file is PDP-10 dependent, system-independent.
|
|
;
|
|
|
|
TITLE CFLOAT
|
|
.INSRT NC
|
|
.INSRT NM
|
|
|
|
IFNDEF KS10,KS10==0
|
|
|
|
; CONTAINS: LOG, EXP, COS, SIN, ATAN, SQRT, DTRUNCATE, DROUND, DABS
|
|
|
|
CENTRY LOG,[V]
|
|
|
|
MOVE B,V
|
|
JUMPLE B,OUTRNG
|
|
LDB D,[331100,,B] ;GRAB EXPONENT
|
|
SUBI D,201 ;REMOVE BIAS
|
|
TLZ B,777000 ;SET EXPONENT
|
|
TLO B,201000 ; TO 1
|
|
MOVE A,B
|
|
FSBR A,SQRT2
|
|
FADR B,SQRT2
|
|
FDVB A,B
|
|
FMPR B,B
|
|
MOVE C,[0.434259751]
|
|
FMPR C,B
|
|
FADR C,[0.576584342]
|
|
FMPR C,B
|
|
FADR C,[0.961800762]
|
|
FMPR C,B
|
|
FADR C,[2.88539007]
|
|
FMPR C,A
|
|
FADR C,[0.5]
|
|
MOVE B,D
|
|
FSC B,233
|
|
FADR B,C
|
|
FMPR B,[0.693147180] ;LOG E OF 2
|
|
MOVE A,B
|
|
RETURN
|
|
|
|
CENTRY EXP,[V]
|
|
|
|
MOVE B,V
|
|
PUSH P,B
|
|
MOVM A,B
|
|
SETZM B
|
|
FMPR A,[0.434294481] ;LOG BASE 10 OF E
|
|
MOVE D,[1.0]
|
|
CAMG A,D
|
|
GO RATEX
|
|
MULI A,400
|
|
ASHC B,-243(A)
|
|
CAILE B,43
|
|
GO OUTRNG
|
|
CAILE B,7
|
|
GO EXPR2
|
|
EXPR1: FMPR D,FLOAP1(B)
|
|
LDB A,[103300,,C]
|
|
SKIPE A
|
|
TLO A,177000
|
|
FADR A,A
|
|
RATEX: MOVEI B,7
|
|
SETZM C
|
|
RATEY: FADR C,COEF2-1(B)
|
|
FMPR C,A
|
|
SOJN B,RATEY
|
|
FADR C,[1.0]
|
|
FMPR C,C
|
|
FMPR D,C
|
|
MOVE B,[1.0]
|
|
SKIPL (P) ;SKIP IF INPUT NEGATIVE
|
|
SKIPN B,D
|
|
FDVR B,D
|
|
MOVE A,B
|
|
SUB P,[1,,1]
|
|
RETURN
|
|
|
|
EXPR2: LDB D,[030300,,B]
|
|
ANDI B,7
|
|
MOVE D,FLOAP1(D)
|
|
FMPR D,D ;TO THE 8TH POWER
|
|
FMPR D,D
|
|
FMPR D,D
|
|
GO EXPR1
|
|
|
|
COEF2: 1.15129278
|
|
0.662730884
|
|
0.254393575
|
|
0.0729517367
|
|
0.0174211199
|
|
2.55491796^-3
|
|
9.3264267^-4
|
|
|
|
FLOAP1: 1.0
|
|
10.0
|
|
100.0
|
|
1000.0
|
|
10000.0
|
|
100000.0
|
|
1000000.0
|
|
10000000.0
|
|
|
|
OUTRNG: CROAK [ARGUMENT OUT OF RANGE]
|
|
GO RTN1
|
|
|
|
CENTRY COS,[V]
|
|
|
|
MOVE B,V
|
|
FADR B,[1.570796326] ;COS(X)=SIN (X+PI/2)
|
|
CALL SIN,[B]
|
|
RTN1: RETURN
|
|
|
|
CENTRY SIN,[V]
|
|
|
|
MOVE B,V
|
|
CL .SIN
|
|
RETURN
|
|
|
|
.SIN: MOVM A,B
|
|
CAMG A,[.0001]
|
|
RTN ;GOSPER'S RECURSIVE SIN.
|
|
FDVR B,[-3.0] ;SIN(X)=4*SIN(X/-3)**3-3*SIN(X/-3)
|
|
CL .SIN
|
|
FSC A,1
|
|
FMPR A,A
|
|
FADR A,[-3.0]
|
|
FMPRB A,B
|
|
RTN
|
|
|
|
CENTRY SQRT,[V]
|
|
|
|
MOVE B,V
|
|
MOVE A,B
|
|
ASH B,-1
|
|
FSC B,100
|
|
SQ2: MOVE C,B ;NEWTON'S METHOD, SPECINER'S HACK.
|
|
FDVRM A,B
|
|
FADRM C,B
|
|
FSC B,-1
|
|
CAME C,B
|
|
GO SQ2
|
|
MOVE A,B
|
|
RETURN
|
|
|
|
CENTRY ATAN,[V],[TEMP]
|
|
|
|
MOVE B,V
|
|
MOVEM B,TEMP
|
|
MOVM D,B
|
|
CAMG D,[0.4^-8] ;SMALL ENOUGH SO ATAN(X)=X?
|
|
GO ATAN3 ;YES
|
|
CAML D,[7.0^7] ;LARGE ENOUGH SO THAT ATAN(X)=PI/2?
|
|
GO ATAN1 ;YES
|
|
MOVN C,[1.0]
|
|
CAMLE D,[1.0] ;IS ABS(X)<1.0?
|
|
FDVM C,D ;NO,SCALE IT DOWN
|
|
MOVE B,D
|
|
FMPR B,B
|
|
MOVE C,[1.44863154]
|
|
FADR C,B
|
|
MOVE A,[-0.264768620]
|
|
FDVM A,C
|
|
FADR C,B
|
|
FADR C,[3.31633543]
|
|
MOVE A,[-7.10676005]
|
|
FDVM A,C
|
|
FADR C,B
|
|
FADR C,[6.76213924]
|
|
MOVE B,[3.70925626]
|
|
FDVR B,C
|
|
FADR B,[0.174655439]
|
|
FMPR B,D
|
|
JUMPG D,ATAN2 ;WAS ARG SCALED?
|
|
FADR B,PI2 ;YES, ATAN(X)=PI/2-ATAN(1/X)
|
|
GO ATAN2
|
|
ATAN1: MOVE B,PI2
|
|
ATAN2: SKIPGE TEMP ;WAS INPUT NEGATIVE?
|
|
MOVNS B ;YES,COMPLEMENT
|
|
ATAN3: MOVE A,B
|
|
RETURN
|
|
|
|
SQRT2: 1.41421356
|
|
PI2: 3.1415926535/2
|
|
|
|
IFE KS10,[
|
|
EXPUNGE FIX
|
|
DEFINE FIX X,Y
|
|
UFA Y,[233000000000']
|
|
TLZ X,777000'
|
|
TERMIN
|
|
]
|
|
|
|
CENTRY DROUND,[V]
|
|
|
|
MOVE A,V
|
|
FADR A,[.499999]
|
|
JUMPL A,ROUND1
|
|
FIX B,A
|
|
GO ROUND2
|
|
ROUND1: FIX B,A
|
|
ROUND2: MOVE A,B
|
|
RETURN
|
|
|
|
CENTRY DTRUNCATE,[V]
|
|
|
|
MOVE A,V
|
|
FIX B,A
|
|
MOVE A,B
|
|
RETURN
|
|
|
|
CENTRY DABS,[V]
|
|
|
|
MOVE A,V
|
|
JUMPGE A,RET
|
|
MOVN A,A
|
|
JUMPGE A,RET
|
|
TLZ A,400000
|
|
RET: RETURN
|
|
|
|
END
|