* * $Id: cfribmn5.s,v 1.1.1.1 1996/03/08 15:21:55 mclareni Exp $ * * $Log: cfribmn5.s,v $ * Revision 1.1.1.1 1996/03/08 15:21:55 mclareni * Epio * * #if defined(CERNLIB_ND50)||defined(CERNLIB_ND500) MODULE M_CFRIBM % CALL CFRIBM(ARRAY,NW,MODE) % CONVERTS 32 BIT WORDS IN ARRAY FROM IBM FORMATS: % NW: NUMBER OF WORDS TO BE CONVERTED % MODE=1: SIGN EXTENSION IS DONE INTO LEFT HALF % MODE=2: NOTHING IS DONE % MODE=3: CONVERTS REALS FROM IBM TO ND FORMAT % VERSION 811113 EXPORT CFRIBM ROUTINE CFRIBM LIB CFRIBM VBAS: STACK FIXED PAR: W BLOCK 3 MAX: W BLOCK 1 ENDSTACK CFRIBM: ENTF VBAS W1:=IND(B.PAR+4) IF <= GO BACK W1-1 W1=:B.MAX W1:=IND(B.PAR+8) W1 COMP 1 IF = GO HALF W1 COMP 3 IF = GO REAL RET HALF: W4 CLR W3:=1 LOOP1: H WCONV IND(B.PAR)(R3),IND(B.PAR)(R4) W3+2 W LOOPI R4,B.MAX,LOOP1 RET REAL: W4 CLR LOOP2: W3:=IND(B.PAR)(R4) W1 GETBF R3,24,7 %EXPIBM IF >< GO ON % TRUE FLOATING ND ZERO FORCED WHEN EXPIBM=0: W3 CLR GO STORE % EXPIBM CANNOT BE TOO BIG FOR EXPND! ON: W1*4 W2 GETBF R3,0,24 %FRACIBM W SHL R2,8 %LEFT JUSTIFY % REMOVE LEADING ZEROS IN FRACIBM: IF < GO MRG1 W1-1 W SHL R2,1 IF < GO MRG1 W1-1 W SHL R2,1 IF < GO MRG1 W1-1 W SHL R2,1 IF < GO MRG1 GO BACK MRG1: W SHL R2,-9 W2 PUTBF R3,0,22 %FRACND, EXTRA BIT REMOVED W1 PUTBF R3,22,9 %EXPND IN PLACE STORE: W3=:IND(B.PAR)(R4) %STORE CONVERTED WRD W LOOPI R4,B.MAX,LOOP2 BACK: RET ENDROUTINE ENDMODULE #endif