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

/R=R**I INTERNAL FUNCTION (EXPONENT INTEGER)
/
/
/ VERSION 40A 27-MAY-80 WVDM
/
/
	SECT	#EXPII
	BASE	0
	JA	.
	FSTA	SIGN		/SAVE SIGN OF EXPONENT
	JGE	POSINT		/ITS POSITIVE
	FNEG
POSINT,	FSTA	3		/PUT IT INTO 3
	XTA	1		/SAVE XR 1
	FSTA	XR1
	LDX	-27,1		/BIT COUNT
	FLDA	ONE		/START WITH ONE
	FSTA	PROD
	FLDA	3		/GET EXPONENT
LOOP,	JEQ	YES		/DONE IF ITS ZERO
	FDIV	TWO		/DIVIDE BY TWO
	ALN	0		/INTEGERIZE
	FNORM
	FSTA	TEMP		/SAVE AT
	FMUL	TWO		/IS EXPONENT ODD ?
	FSUB	3
	JLT	ODD		/YES, JUMP
SQUARE,	FLDA	0		/SQUARE BASE
	FMUL	0
	FSTA	0
	FLDA	TEMP		/EXPONENT OVER 2
	FSTA	3
	JXN	LOOP,1+		/LOOP IF MORE BITS
YES,	FLDA	XR1		/DONE, RESTORE XR 1
	ATX	1
	FLDA	SIGN		/CHECK SIGN OF EXPONENT
	JLT	INVERT		/IT WAS NEGATIVE, INVERT RESULT
	FLDA	PROD		/RETURN ANSWER
	JA	#EXPII
/
INVERT,	FLDA	ONE		/RETURN 1/PROD
	FDIV	PROD
	JA	#EXPII
/
ODD,	FLDA	0		/MULT PROD BY BASE
	FMUL	PROD
	FSTA	PROD
	JA	SQUARE		/GO SQUARE THE BASE
/
ONE,	F	1.0
TWO,	F	2.0
PROD,	F	0.0
SIGN,	F	0.0
TEMP,	F	0.0
XR1,	F	0.0
	END