.TITLE IBMFLT ;CONVERT FLOATING TO IBM FLOATING ;POINT 32 BIT NUMBER ;VAX VERSION ;9/16/1981 GCE ; ;CALL: ; R=IBMFLT(X) ; WHERE X IS PDP11/VAX SINGLE PRECISION ; FLOATING POINT NUMBER ;RESULT IS IBM HEX-NORMALIZED FLOATING POINT NUMBER. ; REGISTERS CLOBBERED ON RETURN ; RESULT RETURNS IN R0 IBMFLT:: .WORD ^M MOVL @4(AP),R0 ;OBTAIN ARGUMENT ROTL #16.,R0,R0 ;SWAP 16 BIT WORDS FOR EXP IN H.O. BEQL 99$ ;EXACT 0 IS OK AS IS EXTZV #23.,#8.,R0,R4 ;GET DEC EXPONENT SUBL2 #128.,R4 ;MAKE IT SIGNED BICL2 #^C255.,R4 ;REMOVE ALL BUT WHAT WE NEED ;NOW SHIFT THE MANTISSA RIGHT BY COUNT=(LO 2 BITS OF EXP) EXTZV #0,#23.,R0,R1 ;COPY MANTISSA 0 EXTENDED TO R1 BISL2 #^X800000,R1 ;SET THE HIDDEN BIT IN EXTZV #0,#2,R4,R2 ;GET LOW 2 BITS OF DEC EXPONENT AS ADJUSTED MNEGL R2,R2 ;MAKE SHIFT COUNT BEQL 165$ ;IF 0, OK NOW ADDL2 #4,R2 ;ELSE SUBT FROM 4 MNEGL R2,R2 ADDL2 #4,R4 ;ADJUST EXPONENT TOO 165$: ASHL R2,R1,R1 ;MAKE PROTOTYPE MANTISSA ASHL #-2,R4,R4 ;MAKE A HEX EXPONENT ADDL2 #64.,R4 ;MAKE IT EXCESS 64 NEXT ;NOW WE HAVE EXPONENT AND MANTISSA. ASSEBMLE IN R0 FOR IBM F.P. NUMBER INSV R4,#24.,#7.,R0 ;FILL IN IBM EXPONENT INSV R1,#0,#24.,R0 ;AND MANTISSA ;NOW DONE. 99$: RET ;RETURN TO CALLER .END