	.TITLE	ADR		
; JEFFREY KODOSKY	ARL	MAY76
;
; UTILITY:	FLOATING POINT ADDER
; ENTRY:	2 ARGS (SP)	<F1>;<F2>
; EXIT:		1 ARG (SP)	<F>=+-F1+F2
;		C BIT SET AND +-INF RETURNED IF OVERFLOW
; ERRORS:	NONE
; CALLS:	NONE
; R5 PRESERVED
; ASSEMBLY SWITCHES:	FPU,FIS,EAE,EIS
;(THIS ROUTINE IS A MODIFIED VERSION OF $ADR04 OF FPMP)
	.GLOBL	ADR,SBR
	SIGNS=0
	A1=4
	B1=6
	A2=8.
	B2=10.
	AC=177302
	MQ=177304
	NOR=177312
	ASH=177316
	.IFDF	FPU
SBR:	ADD	#100000,@SP	
ADR:	.WORD	170001	
	.WORD	172426	
	.WORD	172026	
	.WORD	174046	
	.WORD	170000
	BVS	$$INF
	JMP	@-(R4)
	.GLOBL	$$INF
; ENTRY POINT FOR MLR,DVR FPU OVERFLOW
$$INF:	BMI	NONF
	CLR	@SP
	BR	PNINF
NONF:	MOV	#100000,@SP
PNINF:	MOV	#-1,2(SP)
	SEC
	JMP	@-(R4)
	.ENDC
	.IFNDF	FPU
	.IFDF	FIS
SBR:	FSUB	SP
	BVS	UOVFL
	JMP	@-(R4)
ADR:	FADD	SP
	BVS	UOVFL
	JMP	@-(R4)
UOVFL:	BMI	ZERO
	CMP	(SP)+,(SP)+
	BIC	#77777,@SP
	MOV	#-1,2(SP)
	SEC
	JMP	@-(R4)
ZERO:	CMP	(SP)+,(SP)+
	CLR	@SP
	CLR	2(SP)
	JMP	@-(R4)
	.ENDC
	.IFNDF	FIS
SBR:	ADD	#100000,@SP
ADR:	MOV	R4,-(SP)
	CLR	-(SP)	
	CLR	R2	
	CLR	R3
	ASL	B1(SP)	
	ROL	A1(SP)	
	BISB	A1+1(SP),R3	
	BEQ	OUT$2	
	ROLB	@SP	
	ASL	B2(SP)	
	ROL	A2(SP)	
	BISB	A2+1(SP),R2	
	BNE	A2N$2	
	RORB	@SP	
	ROR	A1(SP)
	ROR	B1(SP)
	MOV	A1(SP),A2(SP)	
	MOV	B1(SP),B2(SP)
	BR	OUT$2	
A2N$2:	ROLB	SIGNS+1(SP)   	
	MOVB	#1,A2+1(SP)	
	MOVB	#1,A1+1(SP)	
	SUB	R3,R2	
	BGT	EXA$2	
	MOV	A2(SP),R0	
	MOV	B2(SP),R1	
	BR	SCK$2	
EXA$2:	ADD	R2,R3	
	MOV	A1(SP),R0	
	MOV	B1(SP),R1	
	MOV	A2(SP),A1(SP)
	MOV	B2(SP),B1(SP)
	SWAB	@SP	
	NEG	R2	
SCK$2:	CMPB	SIGNS+1(SP),@SP	
	BEQ	ECK$2	
	NEG	R1	
	ADC	R0
	NEG	R0
ECK$2:	TST	R2
	BEQ	SFD$2	
SFT$2:	CMP	#-25.,R2	
	BLE	SFR$2	
	MOV	A1(SP),R0	
	MOV	B1(SP),R1	
	BR	NOD$2
	.IFDF	EAE
SFR$2:	MOV	R1,@#MQ	
	MOV	R0,@#AC
	MOV	R2,@#ASH	
	MOV	@#MQ,R1	
	MOV	@#AC,R0
	.ENDC
	.IFDF	EIS
SFR$2:	.WORD	073002	
	.ENDC
	.IFNDF	EAE&EIS
SFR$2:	CMP	#-8.,R2	
	BLE	SF0$2	
	CLR	R4	
	TST	R0	
	BPL	NCP$2	
	COM	R4	
NCP$2:	CMP	#-16.,R2
	BLT	SRL$2	
	MOV	R0,R1	
	MOV	R4,R0	
	ADD	#16.,R2	
	BEQ	SFD$2
SRL$2:	CMP	#-8.,R2
	BLE	SF0$2	
	ADD	#16.,R2	
SFL$2:	ASL	R1
	ROL	R0
	ROL	R4
	DEC	R2	
	BGT	SFL$2
	MOV	R0,R1	
	MOV	R4,R0
	BR	SFD$2
SF0$2:	ASR	R0	
	ROR	R1
	INC	R2	
	BLT	SF0$2
	.ENDC
SFD$2:	ADD	A1(SP),R0	
	ADD	B1(SP),R1	
	ADC	R0
	CMPB	SIGNS+1(SP),@SP
	BNE	SUB$2	
	BIT	R0,#1000
	BEQ	NOD$2	
	ASR	R0
	ROR	R1
	INC	R3	
NOD$2:	SWAB	R3	
	BNE	OVFL
	BISB	R0,R3
	ROR	@SP	
	ROR	R3
	ROR	R1
	ADC	R1	
	ADC	R3
	BVS	OVFL
	BCS	OVFL
STR$2:	MOV	R3,A2(SP)	
	MOV	R1,B2(SP)	
OUT$2:	TST	(SP)+	
	MOV	(SP)+,R4
	CMP	(SP)+,(SP)+	
	CLC
	JMP	@-(R4)
OVFL:	MOV	#-1,B2(SP)
	CLR	A2(SP)
	ROL	(SP)+
	ROR	A2-2(SP)
	MOV	(SP)+,R4
	CMP	(SP)+,(SP)+
	SEC
	JMP	@-(R4)
SUB$2:	TST	R0	
	BGT	BT9$2	
	BEQ	ZTS$2	
	NEG	R0	
	NEG	R1
	SBC	R0
	SWAB	@SP	
BT9$2:
	.IFDF	EAE
	BIT	R0,#700
	BNE	B9A$2	
	MOV	R1,@#MQ	
	MOV	R0,@#AC
	CLR	@#NOR	
	SUB	@#NOR,R3	
	MOV	#-6,@#ASH	
	ADD	#6,R3	
	BLE	UNFL
	MOV	@#AC,R0
	MOV	@#MQ,R1	
	BR	NOD$2
	.ENDC
B9A$2:	BIT	R0,#400
	BNE	UTS$2	
	DEC	R3	
	ASL	R1	
	ROL	R0
	BR	B9A$2	
ZTS$2:	TST	R1	
	.IFDF	EAE
	BNE	BT9$2
	BR	ZER$2
	.ENDC
	.IFNDF	EAE
	BEQ	ZER$2
	SWAB	R1	
	BISB	R1,R0	
	CLRB	R1
	SUB	#8.,R3	
	BR	BT9$2
	.ENDC
UTS$2:	TST	R3	
	BGT	NOD$2	
UNFL:	CLR	R1	
ZER$2:	CLR	R3	
	BR	STR$2
	.ENDC
	.ENDC
	.END
