	.TITLE	MLI		
; JEFFREY KODOSKY	ARL	MAY76
;
; UTILITY:	INTEGER MULTIPLIER
; ENTRY:	2 ARGS (SP)	<I1>;<I2>
; EXIT:		1 ARG (SP)	<I>=I1*I2  (C=0)
;				<F>=I1*I2  (C=1)
; ERRORS:	NONE
; CALLS:	IDR, DOUBLE INTEGER TO REAL CONVERTER
; R5 PRESERVED
; ASSEMBLY SWITCHES:	EAE,EIS
;(THIS ROUTINE IS A MODIFIED VERSION OF $MLI05 OF FPMP)
	.GLOBL	MLI,QIDR
	SR$29=177311
	MQ=177304
	.IFNDF	EAE&EIS
MLI:	CLR	R0	
	MOV	(SP)+,R1	
	BGT	P1$29	
	BEQ	ZER$29	
	INC	R0	
	NEG	R1
P1$29:	MOV	@SP,R3	
	BGT	P2$29
	BEQ	ZER$29
	INC	R0	
	NEG	R3
P2$29:	MOV	R4,-(SP)	
	MOV	#16.,R4	
	CMP	R1,R3
	BGE	CLR$29	
	MOV	R1,R2	
	MOV	R3,R1
	MOV	R2,R3
CLR$29:	CLR	R2	
MUL$29:	ROR	R2	
	ROR	R3
	BCC	CYC$29	
	ADD	R1,R2	
CYC$29:	DEC	R4	
	BGE	MUL$29
	MOV	(SP)+,R4	
	TST	R2
	BNE	OVFL
	NEG	R3
	BVS	NGM
	BPL	OVR$29
	ROR	R0
	BCS	.+4
	NEG	R3
OUT$I:	MOV	R3,@SP
	CLC
	JMP	@-(R4)
NGM:	ROR	R0
	BCS	OUT$I
	CLR	@SP
	MOV	#^F32768.,-(SP)
OUT$R:	SEC
	JMP	@-(R4)
OVR$29:	NEG	R3
OVFL:	ROR	R0
	BCC	IDR
	NEG	R2
	NEG	R3
	SBC	R2
IDR:	MOV	R3,@SP
	MOV	R2,-(SP)
	QIDR
	BR	OUT$R
ZER$29:	CLR	@SP	
	JMP	@-(R4)
	.ENDC
	.IFDF	EAE
MLI:	MOV	#MQ,R0	
	MOV	(SP)+,(R0)+	
	MOV	(SP)+,@R0	
	MOV	-(R0),-(SP)	
	BITB	#2,SR$29
	BEQ	EAEVFL
	CLC
	JMP	@-(R4)
EAEVFL:	MOV	-(R0),-(SP)
	QIDR
	SEC
	JMP	@-(R4)
	.ENDC
	.IFDF	EIS
MLI:	MOV	(SP)+,R0	
	.WORD	070026	
	MOV	R1,-(SP)	
	BCS	EISVFL
	JMP	@-(R4)
EISVFL:	MOV	R0,-(SP)
	QIDR
	SEC
	JMP	@-(R4)
	.ENDC
	.END
