File: DMOD.RA of Tape: Sources/Fortran/os8-f4-3
(Source file text) 

/D=DMOD(D1,D2) DOUBLE PREC. D1 MODULO D2
/
/
/ VERSION 40A 27-MAY-80
/
/
	SECT	DMOD
	JA	#DMOD
	DPCHK
	EXTERN	#ARGER
AMODER,	TRAP4	#ARGER
	TEXT	+DMOD  +
AMODXR,	SETX	XRAMOD
	SETB	BPAMOD
BPAMOD,	F 0.0
	F 0.0
XRAMOD,	0;1;73			/73 FOR ALIGNING ON 59
XSTOR,	F 0.0
	F 0.0
AMODX,	F 0.0
	F 0.0
	ORG	10*3+BPAMOD
	FNOP
	JA	AMODXR
	0
AMDRTN,	JA	.
DMLIM,	0066			/2^65 LIMIT FOR M&S CHIP
	2000
	0000
	0000
	0000
	0000
/
	BASE	0
#DMOD,	STARTD
	FLDA	10*3
	FSTA	AMDRTN
	FLDA	0
	SETX	XRAMOD
	SETB	BPAMOD
	BASE	BPAMOD
	FSTA	BPAMOD
	LDX 	1,1
	FLDA%	BPAMOD,1   	/ADDR OF X
	FSTA	AMODX
	FLDA%	BPAMOD,1+  	/ADDR OF Y
	FSTA	BPAMOD
	STARTE
	FLDA%	BPAMOD		/GET Y
	JEQ	AMODER		/Y=0 IS ERROR
	JGT	.+3		/GET ABS VALUE
	FNEG
	FSTA	BPAMOD
	FLDA%	AMODX		/GET X
	JGT	.+5
	FNEG			/GET ABS VALUE OF X
	LDX	0,1		/NOTE THE SIGN
	FSTA	AMODX		/SAVE IN A TEMPORARY
	FSUB	DMLIM		/TOO LARGE FOR REMULTIPLY ?
	JGE	AMODER		/YES, ERROR
	FLDA	AMODX		/GET AGAIN
	FDIV	BPAMOD		/DIVIDE BY Y
	FSTA	XSTOR		/SAVE X/Y
	FSUB	DMLIM		/CHECK SIZE
	JGE	AMODER		/TOO BIG
	FLDA	XSTOR		/ABS VALUE X/Y
	ALN	2		/FIX IT UP NOW.
	FNORM
	FMUL	BPAMOD		/MULTIPLY IT.
	FNEG			/NEGATE IT.
	FADD	AMODX		/AND ADD IN X.
	JXN	AMR,1
	FNEG			/RESTORE SIGN
AMR,	JA	AMDRTN