Google
 

Trailing-Edge - PDP-10 Archives - AP-D480B-SB_1978 - fkadar.unv
There are no other files named fkadar.unv in the archive.
x
(4	@P Ih .@~

ENTRY .`DAM.A
	SIXBIT //DAM.A/
DAM.A:	/ $FLADD A
	DMOVE/@M A,(M)		;SAVE I/`N MEMORY
	POPJ P,

A  Ih M@v

ENTRY M`DDM.A
	SIXBIT /NDDM.A/
DDM.A:	N PUSHJ P,DFD.A##
	DMOVEM A,(M)		N`;STORE IN MEMORY
	POPJ P,
I - p

ENTRY -@DFA.A
	SIXBIT /-`DFA.A/
DFA.A:	.$FLADD A
	POPJ P,

 m^EpI  L h

ENTRY L@DFD.A
	SIXBIT /L`DFD.A/
DFD.A:	M$FLDIV(A)
	POPJ P,
I` O F
;	DOUBLEO@ PRECISION FLOAT O`FUNCTION "DFLOAT"P
	ENTRY	DFL.A		P ;ENTRY POINT TO DP@FL.A
	SIXBIT	/DP`FL.A/
DFL.A:
QIFE CPU-KA10,<
	Q HLRE	A+1,A		;COQ@PY HI PART OF INTQ`EGER
	HLL	A,A+R1		;FILL UPPER PAR RT OF A WITH SIGR@N
	FSC	A,233		;R`FLOAT LOW HALF OFS INTEGER
	SKIPGES 	A		;FOR NEGATIVS@E NUMBERS
	AOJE	S`A+1,DFL.XT	;CHANTGE HIGH ORDER FROT M 1 TO 2 COMP
	FT@SC	A+1,255		;FLOT`AT THE HIGH PART
	FADL	A,A+1		;U DOUBLE PRECISION U@RESULT
>
IFE CPU`U-KI10,<
	MOVEI	VA+1,0		;CLEAR LOV W ORDER WORD
	ASV@HC	A,-8		;MAKE RV`OOM FOR EXPONENT WIN HI WORD
	TLC	W A,243000	;SET EXW@P TO 27+8 DECIMALW`
	DFAD	A,[EXP 0X,0]	;NORMALIZE
>X 
DFL.XT:	POPJ	P,X@		;RETURN A=THE X`DOUBLE PRECISION RESULT
Ih @

ENTRY @ DFM.A
	SIXBIT /@@DFM.A/
DFM.A:	@`$FLMUL A
	POPJ P,
I 0 

ENTRY 0@DFS.A
	SIXBIT /0`DFS.A/
DFS.A:	1KADFN A,A+1		;N1 EGATE AC
	PUSHJ 1@P,DFA.A##	;DOUBL1`E PRECISION ADD
2	KADFN A,A+1		;2 NEGATE AC AGAIN
	POPJ P,
I6h A 

ENTRY A@DMM.A
	SIXBIT /A`DMM.A/
DMM.A:	B$FLMUL A
	DMOVEB M A,(M)		;PUT ANB@SWER IN MEMORY
	POPJ P,
INh 2`(

ENTRY 3DSM.A
	SIXBIT /3 DSM.A/
DSM.A:	3@KADFN A,A+1	;NE3`GATE AC
	PUSHJ P4,DFA.A##	;ADD
	4 KADFN A,A+1		;N4@EGATE AC AGAIN
	4`DMOVEM A,(M)		;S5TORE IN MEMORY
	POPJ P,
S0 Y 
;	DOUBLEY@ PRECISION FIX FUY`NCTION "IDINT"
	ZENTRY	IDF.A
	SIZ XBIT	/IDF.A/
IDZ@F.A:
IFIDN	<A>Z`,<14>,<S.==T3>	;D[EFINE A SCRATCH R[ EG
IFDIF	<A>,<1[@4>,<S.==L>
	PUSH[`	P,S.		;SAVE THE \SCRATCH REG
	HLR\ E	S.,A		;GET THE\@ EXPONENT
	ASH	S\`.,-9		;RIGHT 8 BI]TS
	JUMPGE	A,ID] F.XT	;JUMP IF POS]@.
	DFN	A,A+1		]`;NEGATE
	TRC	S.,^-1		;COMPLEMENT T^ HE EXPONENT
IDF.^@XT:	TLZ	A,777000^`	;CLEAR THE EXPON_ENT
IFE CPU-KA10_ ,<
	LSH	A+1,8		_@;WIPE OUT THE LOW_` ORDER EXPONENT
`>
	ASHC	A,-201-` ^D26(S.)	;CHANGE `@FRACTION TO INTEG``ER
	SKIPGE	S.		;aSKIP IF POS.
	MOa VNS	A		;NEGATE
a@	POP	P,S.		;RESTOa`RE THE SCRATCH REbG
	POPJ	P,		;RETb URN A=FIXED NUMBER
Z@ b@ g:8 b`v
;	DOUBLEc PRECISION SINGLEc  FUNCTION
	ENTRYc@	SNG.A
	SIXBIT	c`/SNG.A/
SNG.A:d
IFE CPU-KA10,<
	FADR	A,A+1		;d@ADD IN LOW ORDER d`AND ROUND.
>
IFeE CPU-KI10,<
	JUe MPL	A,SNG3		;NEGe@ATIVE ARGUMENT?
e`	TLNE	A+1,(1B1)	f;POSITIVE. ROUND f REQUIRED?
	TRON	f@A,1		;YES, TRY Tf`O ROUND BY SETTINgG LSB
	JRST	SNG2g 		;WE WON, FINISHg@ED
	MOVE	A+1,Ag`		;COPY HIGH PARTh OF ARG
	AND	A,h [777000,,1]	;MAKEh@ UNNORMALIZED LSBh`, SAME EXPONENT
i	FADR	A,A+1		;Ri OUND & RENORMALIZi@E
	GOODBY

;HEi`RE IF ARG IS NEGAjTIVE
SNG3:	DMOVNj 	A,A		;MAKE POSj@ITIVE
	TLNE	A+1j`,(1B1)	;NEED ROUNkDING?
	TRON	A,1k 		;YES, TRY TO DOk@ IT BY SETTING LSk`B
	JRST	SNG4		;DlONE
	MOVN	A+1,l A		;MAKE RE-NEGATl@ED COPY OF HIGH Pl`ART
	ORCA	A,[77m7,,-1]	;GET UNNORm M NEG LSB WITH SAm@ME EXPONENT
	FADm`R	A,A+1		;ROUNDn & NORMALIZE
	GOn ODBY

SNG4:	MOVn@N	A,A		;RE-NEGAn`TE
>
SNG2:	GOODBY			;EXIT
	d &@f
	PUSH P,&`A+2		;SAVE 3RD A'C
	PUSH P,(M)		;' GET HIGH PART OF '@MEM ARG AWAY FROM'` A+2
	PUSH P,1((M)		;GET LOW ARG ( AWAY FROM A,A+1(@ OR A+2
	UFA A(`+1,(P)		;ADD LOW )ORDER PARTS
	FAD) L A,-1(P)		;ADD )@HIGH ORDER PARTS
	JOV b			;IF OV*ER/UNDERFLOW, FIX*  AND EXIT
	UFA *@A+1,A+2		;ADD LO*`W PART TO SUM OF +LOWER PARTS
	FAD+ L A,A+2		;ADD H+@IGH PART OF SUM T+`O LOW PART
b:	S,UB P,[2,,2]		;GET,  MEMORY ARG OFF S,@TACK
	POP P,A+2,`		;RESTORE A+2
TY%STR
	CAI	dJ; C^
	PUSH P,C A+2		;GET A+2 OC@UT OF WAY
	PUSH C`P,(M)		;GET HIGH DPART OF MEM ARG OD N PDL
	PUSH P,1(D@M)		;DITTO FOR LOD`W
	FDVL A,(M)		E;GET QUOTIENT ANDE  REMAINDER
	JOV E@b		;XFER FOR UNDE`ER/OVERFLOW(NOT QFUITE RIGHT FOR OVF ERFLOW)
	MOVN AF@+2,A		;NEGATE HIF`GH ORDER DIVIDENDG
	FMPR A+2,(P)	G 	;MUL THE LOW ORDG@ER ANSWER
	JFCL G`(2)		;IN CASE OF HUNDERFLOW, UN-NORH MALIZE
	UFA A+1H@,A+2		;ADD LOW PH`ROD. TO -DIVIDENDI
	FDVR A+2,-1(PI )		;DIV THE LOW BI@ITS BY DIVISOR
	I`JFCL			;IN CASE OJF UNDERFLOW
	FADJ L A,A+2		;ADD FJ@INAL RESULT INTO J`A,A+1
b:	SUB KP,[2,,2]		;REMOVEK  MEMORY ARG FROM K@STACK
	POP P,A+K`2		;RESTORE A+2
	e]6 5@|
	PUSH P,5`A+2		;SAVE A+2
	PUSH P,(M)		;GE6 T HIGH PART OF ME6@M ARG OUT OF WAY 6`OF A+2
	PUSH P,71(M)		;DITTO FOT 7 LOW PART
	MOVEM 7@A,A+2		;COPY HI7`GH PART OF AC ARG8
	FMPR A+2,(P)	8 	;FORM 1 CROSS PR8@ODUCT
	JFCL (2)	8`	;IN CASE OF UNDE9RFLOW, UN-NORMALI9 ZE
	FMPR A+1,-19@(P)		;FORM OTHER 9`CROSS PRODUCT
	J:FCL (2)		;IN CASE:  OF UNDERFLOW, UN:@-NORMALIZE
	UFA :`A+1,A+2		;ADD C;ROSS PRODUCTS
	J; FCL			;OVERFLOW O;@NLY IF NEXT INSTR;`UCTION ALSO
	FMP<L A,-1(P)		;FORM<  PRODUCT OF HIGH <@ORDER PARTS
	JOV<` b			;FIX AND XF=ER IN CASE OF OVE= R/UNDERFLOW
	UFA=@ A+1,A+2		;ADD =`XROSS PRODUCT SUM> INTO LOW WORD
	> FADL A,A+2		;AD>@D HIGH AND LOW WO>`RDS
b:	SUB P,[2?,,2]		;GET MEMORY?  ARG OFF STACK
	?@POP P,A+2		;RESTORE A+2
S@P >}{woP