File: FLOAT.SB of Tape: OS8/OS8-V3D/al-4691c-sa-os8-v3d-1
(Source file text) 

/ FLOATING POINT MATH PACKAGE
/
/
/
/
/
/
/
/
/
/COPYRIGHT  (C)  1974,1977 BY DIGITAL EQUIPMENT CORPORATION
/
/
/
/
/
/
/
/
/
/
/THE INFORMATION IN THIS DOCUMENT IS SUBJECT TO CHANGE WITHOUT NOTICE
/AND SHOULD NOT BE CONSTRUED AS A COMMITMENT BY DIGITAL EQUIPMENT
/CORPORATION.  DIGITAL EQUIPMENT CORPORATION ASSUMES NO RESPONSIBILITY
/FOR ANY ERRORS THAT MAY APPEAR IN THIS MANUAL.
/
/THE SOFTWARE DESCRIBED IN THIS DOCUMENT IS FURNISHED TO THE PURCHASER
/UNDER A LICENSE FOR USE ON A SINGLE COMPUTER SYSTEM AND CAN BE COPIED
/(WITH INCLUSION OF DIGITAL'S COPYRIGHT NOTICE) ONLY FOR USE IN SUCH
/SYSTEM, EXCEPT AS MAY OTHERWISE BE PROVIDED IN WRITING BY DIGITAL.
/
/DIGITAL EQUIPMENT CORPORATION ASSUMES NO RESPONSIBILITY FOR THE USE
/OR RELIABILITY OF ITS SOFTWARE ON EQUIPMENT THAT IS NOT SUPPLIED BY
/DIGITAL.
/
/
/
/
/
/
/
/
/
/
/	VERSION 5A
/	APRIL 28, 1977
/	VERSION NUMBER IS AVAILABLE AT ENTRY POINTS
/	ENTRIES
/
	ENTRY	FAD
	ENTRY	FSB
	ENTRY	FMP
	ENTRY	FDV
	ENTRY	STO
	ENTRY	FLOT
	ENTRY	FLOAT
	ENTRY	FIX
	ENTRY	IFIX
	ENTRY	IFAD
	ENTRY	ISTO
	ENTRY	ABS
	ENTRY	CHS

/THE FOLLOWING DEFINITIONS ENABLE LIBRARY OPTIMIZATIONS
/WHERE CRITICAL TIMING CONSIDERATIONS EXIST.
/THEY SHOULD BE USED WITH EXTREME CAUTION, AND MUST
/REFERENCE CURRENT PAGE AND PAGE ZERO SYMBOLS ONLY.

OPDEF	TADI	1400
OPDEF	DCAI	3400
OPDEF	JMSI	4400
OPDEF	JMPI	5400
SKPDF	JMSKP	4000
/
/
ABSYM	HAC	20
ABSYM	MAC	21
ABSYM	LAC	22
ABSYM	SRH	23
ABSYM	SRM	24
ABSYM	SRL	25
ABSYM	ACS	26
ABSYM	ACX	27
ABSYM	SRS	30
ABSYM	SRX	31
ABSYM	MQH	30
ABSYM	MQM	31
ABSYM	MQL	32

//	ADDITION AND SUBTRACTION ROUTINE
//

	LAP		/LEAVE AUTO PAGING

ADSRAD,	ADSRAC		/SOME INDIRECTS TO SAVE CORE...
ARSAB,	ARS
GTSPLA,	GTSPLT
NORMAD,	NORMAC
COMAD,	COM

FSB,	BLOCK	1
	5	/FLOATING POINT SUBTRACT
	TAD	FSB	/ CALL 1,FSB
	DCA	FAD	/ ARG <F.P. VARIABLE>
	TAD	FSB#
	DCA	FAD#
	CLA CLL CML RAR
	JMP	ED1
/
ER1,	FAD
FAD,	BLOCK	1
	5		/FLOATING POINT ADD SUBROUTINE
ED1,	DCA	FSB	/ CALL 1,FAD
	TAD	FAD	/ ARG <VARIABLE>
	DCA	FAD1
FAD1,	NOP		/CDF TO PICK UP ARGUMENT
	TADI	FAD#
	INC	FAD#
	DCA	7
	CLA CMA
	TADI	FAD#
	INC	FAD#
	DCA	10
FADENT,	TAD	ER1
	DCA	ER0
	TAD	ACH	/EXAMINE THE FLOATING AC
	SNA CLA
	JMP	FADLD	/IT'S ZERO, DO A LOAD...
	JMSI	GTSPLA
	JMP	FADEND
	TAD	SRS
	TAD	FSB
	DCA	SRS
	TAD	ACX
	SNA
	JMP	SHFAC
	CIA
	TAD	SRX
	SMA
	JMP	SHFAC
	DCA	FSB
SHFSR,	TAD	SRH
	CLL RAR
	DCA	SRH
	TAD	SRM
	RAR
	DCA	SRM
	TAD	SRL
	RAR
	DCA	SRL
	ISZ	FSB
	JMP	SHFSR
	JMP	JD1
/
SHFAC,	CMA
	DCA	FSB
	TAD	SRX
	DCA	ACX
	JMP	ED3A
ED3,	JMSI	ARSAB
ED3A,	ISZ	FSB
	JMP	ED3
/
JD1,	TAD	ACS
	SMA CLA
	JMP	ED4
	CLA CLL CMA RTL	/ GENERATE -3
	JMSI	COMAD
ED4,	TAD	SRS
	SPA CLA
	JMSI	COMAD
	JMSI	ADSRAD
	TAD	HAC
	SMA CLA
	JMP	ED5
	CLA CLL CMA RTL
	JMSI	COMAD
	CLA CLL CML RAR
ED5,	DCA	ACS
	DCA	RSW
FADEND, JMSI	NORMAD
	JMP	FADEX


FADLD,	TAD	7	/FLOATING LOAD WHEN AC=0
	DCA	FADSB#
	JMS	FADSB
	SZA		/CHECK FOR 0.-0. DON'T GIVE -0.
	TAD	FSB
	AND	ABSSW
	DCA	ACH
	JMS	FADSB
	DCA	ACM
	JMS	FADSB
	DCA	ACL
FADEX,	CLA CMA
	DCA	ABSSW
	DCA	FSB	/FOR IFAD AFTER SUBTRACT
	CLA STL RTL	/=0002
	TAD	FAD	/HIGH SPEED RETURN
	DCA	FAD3
FAD3,	NOP
	JMPI	FAD#

ABSSW,	7777		/ABSOLUTE VALUE SWITCH

FADSB,	0		/TIME SAVING SUBROUTINE
	NOP		/CHANGED TO CDF
	TADI	10
	JMPI	FADSB

/	FLOATING POINT ABSOLUTE VALUE FUNCTION

ABS,	BLOCK	1
	5		/ CALL 1,ABS
	TAD	ABS	/ ARG <F.P. VARIABLE>
	DCA	FAD
	TAD	ABS#
	DCA	FAD#
	CLL STA RAR	/=3777
	DCA	ABSSW
	JMP	ED1	/GO INTO ADD ROUTINE...

	PAGE


/	ROUTINE TO GET OPERAND INTO SR, SEPARATE SIGNS AND
/	EXPONENTS OF AC AND SR, AND MOVE GLOBAL AC TO LOCAL AC.
/

GTSPLT, 0
	TAD	7
	DCA	GTS1
GTS1,	NOP
	TADI	10	/PICK UP HIGH ORDER WORD
	JMS	SPLIT	/MUST NOT CHANGE DATA FIELD****
	DCA	SRH
	TAD	ACX
	SZA
	INC	GTSPLT
	DCA	SRX
	TAD	ACS
	DCA	SRS
	TADI	10	/PICK UP WORD 2
	DCA	SRM
	TADI	10	/PICK UP WORD 3
	DCA	SRL
	TAD	ACH
	JMS	SPLIT	/EXPAND THE FLOATING AC...
	DCA	HAC
	DCA	RSW
GTS2,	TAD	ACM	/NEEDS LABEL TO FORCE CDF!
	DCA	MAC
	TAD	ACL
	DCA	LAC
	JMPI	GTSPLT
/

SPLIT,	0		/BREAK UP SIGN, EXPON, AND HI-ORD BITS
	DCA	TMP	/ROUTINE MUST NOT CHANGE DATA FIELD****
	TAD	TMP
	RAR
	RTR
	AND	(377
	DCA	ACX
	CLA CLL CML RAR	/ = 4000
	AND	TMP
	DCA	ACS
	TAD	TMP
	AND	(7
	JMPI	SPLIT
TMP,	0
/
/

ALS,	0		/LOCAL AC SHIFT LEFT SUBROUTINE
	TAD	LAC
	CLL RAL
	DCA	LAC
	TAD	MAC
	RAL
	DCA	MAC
	TAD	HAC
	RAL
	DCA	HAC
	JMPI	ALS
/
/	ADD SR TO AC
/

ADSRAC, 0		/ADD LOCAL SR TO LOCAL AC
	CLL
	TAD	LAC
	TAD	SRL
	DCA	LAC
	CLA RAL
	TAD	MAC
	TAD	SRM
	DCA	MAC
	CLA RAL
	TAD	HAC
	TAD	SRH
	DCA	HAC
	JMPI	ADSRAC
/
/	ROUTINE TO NORMALIZE AND RECOMBINE ACCUMULATOR,
/	  AND PLACE LOCAL ACC. IN GLOBAL ACC.
/
ARSAD,	ARS		/SOME CORE SAVING INDIRECTS
ERRAD,	ERR
RSW,	0		/ROUNDING BIT

NORMAC, 0		/NORMALIZE AND PACKING SUBROUTINE
ED6,	TAD	HAC
	TAD	(7770
	SPA CLA
	JMP	RUND
	JMSI	ARSAD
	ISZ	ACX
	JMP	ED6
/
/		ROUNDOFF ROUTINE
/
RUND,	TAD	RSW
	SNA CLA
	JMP	LEFTST
	ISZ	LAC
	JMP	LEFTST
	ISZ	MAC
	JMP	LEFTST
	ISZ	HAC
	DCA	RSW
	JMP	ED6
/
LEFTST, TAD	ACX
	SNA SPA
	JMP	ZEROUT
	DCA	ACX
	CLA CLL CMA RTL	/ = -3
	TAD	HAC
	SMA SZA CLA
	JMP	COMBIN
	JMS	ALS
	CLA CMA
	JMP	LEFTST
/
COMBIN, TAD	ACX
	CLL RAL
	RTL
	SPA
	JMPI	ERRAD
	TAD	HAC
	TAD	ACS
ED7,	DCA	ACH
	TAD	MAC
	DCA	ACM
	TAD	LAC
	DCA	ACL
	JMPI	NORMAC

ZEROUT, CLA
	DCA	LAC
	DCA	MAC
	JMP	ED7

	PAGE
/
/	INDIRECT STORE
/

ISTO,	BLOCK	1
	5		/FLOATING POINT INDIRECT STORE
	TAD	ISTO	/ CALL 1,ISTO
	DCA	IST1	/ ARG <2WORD ADDRESS>
IST1,	NOP
	TADI	ISTO#
	INC	ISTO#
	DCA	IST2
	TADI	ISTO#
	DCA	7
	TAD	ISTO
	DCA	STO
	TAD	ISTO#
	DCA	STO#
IST2,	NOP
	TADI	7
	INC	7
	DCA	ISTO
	CLA CMA
	TADI	7
	DCA	10
	TAD	ISTO
	DCA	STOSB#
	JMP	STOX
/
/
/	ROUTINE TO STORE CONTENTS OF FL. PT. ACC AND CLEAR IT
/
STO,	BLOCK	1
	5		/ CALL 1,STO
	TAD	STO	/ ARG <F.P. VARIABLE>
	DCA	STO1
STO1,	NOP		/REPLACED BY CDF
	TADI	STO#
	INC	STO#
	DCA	STOSB#
	CLA CMA
	TADI	STO#
	DCA	10
STOX,	TAD	ACH
	JMS	STOSB
	DCA	ACH
	TAD	ACM
	JMS	STOSB
	DCA	ACM
	TAD	ACL
	JMS	STOSB
	DCA	ACL
	INC	STO#
	CLA STL RTL	/=0002
	TAD	STO	/SOME TIME SAVING CODE...
	DCA	STO3
STO3,	NOP		/REPLACED BY CIF CDF
	JMPI	STO#

STOSB,	0		/TIME SAVING SUBROUTINE
	NOP		/CHANGED TO A CDF DESTINATION
	DCAI	10
	JMPI	STOSB
/
/	FLOATING POINT TO FIXED POINT CONVERSION
/
FXER,	4611
	3040	/"FIX" ERROR
FIX,	BLOCK	1
	5	
FIXX,	TAD	ACH
	JMS	SPLIT
	DCA	HAC
	TAD	ACM
	DCA	MAC
	TAD	ACX
	TAD	(-214
	SMA
	JMP	FIXERR
	TAD	(-3
	DCA	SRM
RSH,	JMS	ARS
	ISZ	SRM
	JMP	RSH
	TAD	ACS
	RAL
	TAD	MAC
	SZL
	CIA
FIXRTN,	DCA	ACS
	DCA	ACH
	DCA	ACM
	DCA	ACL
	TAD	ACS
	RETRN	FIX
/
IFIX,	BLOCK	1
	5
	TAD	IFIX
	DCA	ADDR
	TAD	IFIX#
	DCA	ADDR#
	CALL	1,IFAD
ADDR,	ARG	0
	TAD	IFIX
	DCA	FIX
	CLA CLL CML RTL	/ = 2
	TAD	IFIX#
	DCA	FIX#
	JMP	FIXX

FIXERR,	CALL	1,ERROR
	ARG	FXER
	CLA CLL CMA RAR
	JMP	FIXRTN	/RETURN WITH 2047 IN FIXED AC

	PAGE

/
/		FLOATING POINT MULTIPLICATION
/

ADSRAE,	ADSRAC		/SOME TIME SAVING INDIRECTS
ARSAE,	ARS
COMAF,	COM
GTSPLB,	GTSPLT
NORMAG,	NORMAC
ER4,	FDV
ER01,	ER0
ER3,	FMP
FMP,	BLOCK	1
	5
	TAD	ER3
	DCAI	ER01
	TAD	FMP
	DCA	FMP1
FMP1,	NOP		/CDF TO FIELD OF CALLING PROGRAM
	TADI	FMP#
	INC	FMP#
	DCA	7
	CLA CMA
	TADI	FMP#
	INC	FMP#
	DCA	10
	JMSI	GTSPLB	/WARNING ***THIS INSTRUCTION SKIPS***
	JMP	MULZRO
	TAD	ACS
	TAD	SRS
	DCA	ACS
	TAD	ACX
	TAD	SRX
MULZRO, TAD	(-201
	DCA	ACX
	TAD	HAC
	DCA	MQH
	TAD	MAC
	DCA	MQM
	TAD	LAC
	DCA	MQL
	DCA	HAC
	TAD	(-33
	DCA	FMP1
/
MULT,	JMSI	ARSAE
	TAD	MQH
	RAR
	DCA	MQH
	TAD	MQM
	RAR
	DCA	MQM
	TAD	MQL
	RAR
	DCA	MQL
	SZL
	JMSI	ADSRAE
	ISZ	FMP1
	JMP	MULT
	JMSI	NORMAG
	RETRN	FMP
/
/
/		FLOATING POINT DIVISION
/
DIVZ,	4411
	2632
FDV,	BLOCK	1
	5
	TAD	ER4
	DCAI	ER01
	TAD	FDV
	DCA	FDV0
FDV0,	NOP		/CDF TO FIELD OF CALLING PROGRAM
	TADI	FDV#
	INC	FDV#
	DCA	7
	CLA CMA
	TADI	FDV#
	INC	FDV#
	DCA	10
	JMSI	GTSPLB
	JMP	DIVERR
	TAD	ACS
	TAD	SRS
	DCA	ACS
	TAD	SRX
	CIA
	TAD	ACX
	TAD	(177
	DCA	ACX
	DCA	MQL
	TAD	(-35
	DCA	FDV0
DVID,	CLA CLL CML RAR	/ = 4000
	AND	SRH
	TAD	HAC
	SPA CLA
	JMP	FDV1
	JMSI	COMAF
FDV1,	JMSI	ADSRAE
	TAD	MQL
	RAL
	DCA	MQL
	TAD	MQM
	RAL
	DCA	MQM
	TAD	MQH
	RAL
	DCA	MQH
	JMS	ALS
	ISZ	FDV0
	JMP	DVID
/
	TAD	MQH
	DCA	HAC
	TAD	MQM
	DCA	MAC
	TAD	MQL
	DCA	LAC
	JMSI	NORMAG
FDVRET,	RETRN	FDV

DIVERR,	CALL	1,ERROR
	ARG	DIVZ
	CLA CLL CMA RAR
	DCA	ACH
	JMP	FDVRET

	PAGE
/
/	ROUTINE TO GET TWO'S COMPLEMENT OF TRIPLE WORD NUMBER
/	IF NO ADDRESS IN AC UPON ENTRY, SR IS ASSUMED.
/
COM,	0
	TAD	(25		/ADDRESS OF SRL
	DCA	PTR2
	CLA CLL CMA RTL	/ = -3
	DCA	CTR2
ED8,	TAD I 	PTR2
	CMA
	SZL
	CLL IAC
	DCA I	PTR2
	CLA CMA CML
	TAD	PTR2
	DCA	PTR2
	ISZ	CTR2
	JMP	ED8
	JMP I	COM
PTR2,	0
CTR2,	0
/
/	CONVERT FIXED POINT TO FLOATING POINT
/
	CPAGE	14

FLOAT,	BLOCK	1
	5		/FLOAT FUNCTION
	TAD	FLOAT	/ CALL 1,FLOAT
	DCA	FLO1	/ ARG <INT. VARIABLE>
FLO1,	NOP
	TADI	FLOAT#
	INC	FLOAT#
	DCA	FLO2
	TADI	FLOAT#
	INC	FLOAT#
	DCA	7
	TAD	FLOAT
	DCA	FLOT
	TAD	FLOAT#
	DCA	FLOT#
FLO2,	NOP		/CDF TO FIELD OF ARGUMENT
	TADI	7
	JMP	FLOTX
/
/	INTEGER TO FLOATING POINT CONVERSION
/
FLOT,	BLOCK	1
	5		/ CALL 0,FLOT
FLOTX,	CLL		/ASSUMES INTEGER VARIABLE IN AC
	SPA
	CIA CML
	DCA	MAC
	DCA	HAC
	DCA	LAC
	RAR
	DCA	ACS
	TAD	(217
	DCA	ACX
	DCA	RSW
	JMS	NORMAC
	RETRN	FLOT

/	INDIRECT FLOATING POINT ADD

	CPAGE	36
IFAD,	BLOCK	1
	5		/ CALL 1,IFAD
	TAD	IFAD	/ ARG <2WORD ADDRESS>
	DCA	IFA1
IFA1,	NOP
	TADI	IFAD#
	INC	IFAD#
	DCA	IFA2
	CLA CMA
	TADI	IFAD#
	INC	IFAD#
	DCA	10
IFA2,	NOP
	TADI	10
	DCA	7
	CLA CMA
	TADI	10
	DCA	10
	TAD	IFAD
	DCA	FAD
	TAD	IFAD#
	DCA	FAD#
	JMP	FADENT


ARS,	0		/LOCAL AC SHIFT RIGHT SUBROUTINE
	TAD	HAC
	CLL RAR
	DCA	HAC
	TAD	MAC
	RAR
	DCA	MAC
	TAD	LAC
	RAR
	DCA	LAC
	CLA RAL
	DCA	RSW
	JMPI	ARS

FPER,	5726
	0614		/"OVFL" ERROR
CHS,	BLOCK	1
	5		/FLOATING POINT NEGATION
	TAD	ACH	/ CALL 0,CHS
	SZA
	TAD	(4000
CHSRET,	DCA	ACH
	RETRN	CHS
/
/	ERROR ROUTINES
/
ER0,	0		/CONTAINS ADDRESS OF CURRENT ENTRY PT
ERR,	CLA
	TAD I	ER0	/BANK CALL IS FROM
	DCA	CHS
	ISZ	ER0	/INDEX TO ADDRESS
	TAD I	ER0	/ADDRESS
	DCA	CHS#
	CALL	1,ERROR
	ARG	FPER
	CLA CLL CMA RAR
	JMP	CHSRET

	END