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

/COMPLEX ARITHMETIC ROUTINES
/ (A+BI)+-*/(C+DI)
/
/ VERSION 40A 23-MAY-80 WVDM
/
/
	DPCHK

	SECT	#CAD
	JA	.
	FSTA	#CARG		/SAVE SECOND ARG
	STARTF
	FLDA	#CARG		/STARTF ROUNDS
	FADD	#CAC		/A:=A+C
	FSTA	#CAC
	FLDA	#CARG+3
	FADD	#CAC+3		/B:=B+D
	FSTA	#CAC+3
	STARTE
	JA	#CAD

	ENTRY	#CSB
#CSB,	JA	.
	FSTA	#CARG
	STARTF
	FLDA	#CAC		/STARTF ROUNDS
	FSUB	#CARG
	FSTA	#CAC		/A:=A-C
	FLDA	#CAC+3
	FSUB	#CARG+3		/B:=B-D
	FSTA	#CAC+3
	STARTE
	JA	#CSB

	ENTRY	#CNG
#CNG,	JA	.
	STARTF
	FLDA	#CAC
	FNEG
	FSTA	#CAC		/A:=-A
	FLDA	#CAC+3
	FNEG
	FSTA	#CAC+3		/B:=-B
	STARTE
	JA	#CNG

	ENTRY	#CEQ
#CEQ,	JA	.
	JSA	#CSB		/CAC:=CAC-CARG
	STARTF
	FLDA	#CAC
	JNE	NOTEQ
	FLDA	#CAC+3
	JNE	NOTEQ
	FLDA	ONE
	JA	#CEQ
NOTEQ,	FCLA
	JA	#CEQ
ONE,	F	1.0

	ENTRY	#CML
#CML,	JA	.
	FSTA	#CARG
	STARTF
	FLDA	#CARG		/STARTF ROUNDS
	FMUL	#CAC		/T1:=A*C
	FSTA	TEMP1
	FLDA	#CARG+3
	FMUL	#CAC+3		/T2:=B*D
	FSTA	TEMP2
	FLDA	#CARG
	FMUL	#CAC+3		/B:=B*C
	FSTA	#CAC+3
	FLDA	#CAC
	FMUL	#CARG+3		/A*D
	FADD	#CAC+3		/B:=A*D+B*C
	FSTA	#CAC+3
	FLDA	TEMP1
	FSUB	TEMP2		/A:=A*C-B*D
	FSTA	#CAC
	STARTE
	JA	#CML

	ENTRY	#CDV
#CDV,	JA	.
	FSTA	#CARG
	STARTF
	FLDA	#CARG		/STARTF ROUNDS
	FMUL	#CAC+3		/T1:=B*C
	FSTA	TEMP1
	FLDA	#CARG+3
	FMUL	#CAC		/T2:=A*D
	FSTA	TEMP2
	FLDA	#CARG
	FMUL	#CAC		/A:=A*C
	FSTA	#CAC
	FLDA	#CAC+3
	FMUL	#CARG+3		/B*D
	FADD	#CAC		/A:=A*C+B*D
	FSTA	#CAC
	FLDA	#CARG
	FMUL	#CARG		/C:=C*C
	FSTA	#CARG
	FLDA	#CARG+3
	FMUL	#CARG+3		/D*D
	FADD	#CARG		/C:=C*C+D*D
	FSTA	#CARG
	FLDA	TEMP1
	FSUB	TEMP2		/B*C-A*D
	FDIV	#CARG		/B:=(B*C-A*D)/(C*C+D*D)
	FSTA	#CAC+3
	FLDA	#CAC
	FDIV	#CARG		/A:=(A*C+B*D)/(C*C+D*D)
	FSTA	#CAC
	STARTE
	JA	#CDV

TEMP1,	0;0;0
TEMP2,	0;0;0

#CARG,	0;0;0
	0;0;0

	ENTRY	#CAC
#CAC,	0;0;0
	0;0;0
	END