* * $Id: ctoibmn5.s,v 1.1.1.1 1996/03/08 15:21:56 mclareni Exp $ * * $Log: ctoibmn5.s,v $ * Revision 1.1.1.1 1996/03/08 15:21:56 mclareni * Epio * * #if defined(CERNLIB_ND50)||defined(CERNLIB_ND500) MODULE M_CTOIBM % CALL CTOIBM(ARRAY,NW,MODE) % CONVERTS 32 BIT WORDS IN ARRAY TO IBM FORMATS: % NW: NUMBER OF WORDS TO BE CONVERTED % MODE=1: ZEROES THE LEFT HALF OF EACH WORD % MODE=2: DOES NOTHING TO THE WORDS % MODE=3: CONVERTS REALS FROM ND TO IBM FORMAT % VERSION 811016 EXPORT CTOIBM ROUTINE CTOIBM LIB CTOIBM VBAS: STACK FIXED PAR: W BLOCK 3 MAX: W BLOCK 1 ENDSTACK CTOIBM: 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 CLR LOOP1: H STZ IND(B.PAR)(R3) W3+2 W LOOPI R4,B.MAX,LOOP1 RET REAL: W4 CLR LOOP2: W3:=IND(B.PAR)(R4) W1 GETBF R3,22,9 %EXPND IF >< GO ON1 % TRUE FLOATING IBM ZERO FORCED WHEN EXPND=0: W3 CLR GO STORE ON1: W1 COMP 509 IF < GO ON2 % MAX IBM FLOATING FORCED WHEN EXPND TOO BIG: W3 OR 17777777777B GO STORE ON2: W1+3 W2 DIV4 R1,4,R1 W1 PUTBF R3,24,7 %EXPIBM W1 GETBF R3,0,22 %FRACND W1+20000000B %EXTRA BIT W2-2 W SHL R1,BY2 W1 PUTBF R3,0,24 %FRACIBM STORE: W3=:IND(B.PAR)(R4) W LOOPI R4,B.MAX,LOOP2 BACK: RET ENDROUTINE ENDMODULE #endif