; ; $Id: sxsib.s,v 1.1.1.1 1996/02/15 17:47:47 mclareni Exp $ ; ; $Log: sxsib.s,v $ ; Revision 1.1.1.1 1996/02/15 17:47:47 mclareni ; Kernlib ; ; .TITLE SXSIB ; ; CERN PROGLIB# M231 CVTIB ; ORIG. HYDRA FQT PACKAGE ROUTINE FQTICD ; EXTRACTED AND NAME CHANGED BY H.RENSHALL/DD, 1984-05-11 ; & THEN MODIFIED BY F.CARMINATI/DD TO CONVERT FROM VAX ; TO IBM FLOATING, 1985-11-02 ; ; SUBROUTINE SXSIB (A,NWORDS) ; ; CONVERTS THE FIRST NWORDS OF VECTOR A FROM VAX FLOATING ; POINT NUMBER FORMAT TO IBM FLOATING POINT FORMAT ; .PSECT $CODE,PIC,CON,REL,LCL,SHR,EXE,RD,NOWRT,LONG ;SXSIB:: .ENTRY SXSIB,^M<R8,R9,R10,R11> MOVAL @4(AP),R11 ;GET ADRESS OF VECTOR MOVL @8(AP), R9 ;LOAD COUNT TSTL R9 ;COMPARE 0 WITH THE COUNT BGTR LOOP ;LOOP COUNT GT 0 RET ;LOOP COUNT LE 0 ;--- LOOP: MOVL (R11)+,R0 ;FIELD SHIFTED ALREADY. TSTL R0 ;CHECK IF EXACT ZERO BEQL FIN ;BRANCH ON ZERO EXTZV #7,#8,R0,R8 ;EXTRACT EXPONENT (POWERS OF 2) SUBL2 #^X80,R8 ;TAKE AWAY EXCESS EXTZV #0,#2,R8,R1 ;FIND THE REST ASHL #-2,R8,R8 ;DIVIDE EXPONENT BY FOUR ;SO YOU GET THE POWERS OF 16 TSTB R1 ;COMPARE THE REST WITH ZERO BNEQ LAB1 ;BRANCH ON NOT EQUAL ADDL2 #4,R1 ;NORMALIZE EXPONENT SUBL2 #1,R8 ;NORMALIZE EXPONENT BASE 16 LAB1: ADDL2 #^X94,R1 ;THIS IS THE NEW EXP INSV R1,#7,#8,R0 ;THIS IS THE FLOATING TO CONVERT CLRL R1 ;CLEAR THE SIGN MASK BBCC #15,R0,POS ;BRANCH IF POSITIVE MOVL #^X80000000,R1 ;LOAD R1 WITH THE SIGN POS: CVTFL R0,R10 ;THIS IS THE IBM MANTISSA ADDL2 #65,R8 ;THIS IS THE IBM EXPONENT INSV R8,#24,#7,R10 ;THAT NOW WE HAVE PACKED BISL2 R1,R10 ;INSERT THE SIGN MOVL R10, -4(R11) FIN: SOBGTR R9, LOOP ;LOOP RET .END