;
; Code generated by version NS16000:139
;
	MODULE MULDIV
;
	EXPORTC	MULDIV__MULDIV
	EXPORTC	MULDIV_Muldiv
	IMPORTC	TrapHandler_Trap
; Global data size 12 bytes
;
	AREADEF MULDIV_data_frame, [DATA], DOUBLE
	AREA MULDIV_data_frame
	EXPORT MULDIV__D
MULDIV__D
	DEFSB	MULDIV__D
	ADDRESS	MULDIV__T
	ADDRESS	MULDIV__S
	DCD	#X80000000
MULDIV__S
	AREADEF MULDIV_code_frame, [CODE, READ], DOUBLE
	AREA MULDIV_code_frame
MULDIV__C

; Entry point to PROCEDURE Muldiv
; Parameters: A: 12(FP)  B: 16(FP)  C: 20(FP)
;            
MULDIV_Muldiv
L0	ENTER [R1,R2,R3,R4],0		;    0 (@0000): 

	MovD	12(FP),R0		; r0 := A
	MovD	16(FP),R1		; r1 := B
	MovD	20(FP),R2		; r2 := C

;					Get sign of final result
;					Sign(A) !! Sign(B) !! Sign(C)
	CmpQD	0,R0
	SleD	R3			; R3 := Sign(A)
	CmpQD	0,R1
	SleD	R4			; R4 := Sign(B)
	XorD	R4,R3			; R3 := R3 !! R4

	CmpQD	0,R2
	SleD	R4			; R4 := Sign(C)
	XorD	R4,R3			; R3 := R3 !! R4

	AddD	R3,R3			; Set sign to be -1 or 1, not 0 or 1
	AddQD	-1,R3			; R3 := R3*2-1

	AbsD	R0,R0			; R0 := |A|
	AbsD	R1,R4			; R4 := |B|
	AbsD	R2,R2			; R2 := |C|

	MovQD	0,R1			; R0.R1 := |A|
	MeiD	R4,R0			; R0.R1 := |A|*|B|
	DeiD	R2,R0			; R0.R1 := (|A|*|B|) DIV |C|
	MovD    R1,R0                   ; R1    := ^

	MulD	R3,R0			; R0 := R0 * Sign((|A|*|B|) DIV |C|)

	EXIT [R1,R2,R3,R4]		;    6 (@0006): 
	RXP 12		;    8 (@0008): 

; Entry point to MODULE MULDIV

MULDIV__MULDIV
L10	ENTER [],0		;   10 (@000A): 
	EXIT []		;   13 (@000D): 
	RXP 0		;   15 (@000F): 
MULDIV__T
	CDESC	MULDIV__MULDIV
	CDESC	MULDIV_Muldiv
	END
