*DECK C$RN2RN 
          IDENT  C$RN2RN
          TITLE  CBRN2RN -  SCALE A REGISTER NUMERIC ITEM 
          MACHINE  ANY
          COMMENT  SCALE A REGISTER NUMERIC ITEM
          SPACE  4
**        CBRN2RN -  SCALE A REGISTER NUMERIC ITEM
* 
*      CALLING FORM:  
*         X1 = MOST SIGNIFICANT 10 DIGITS OF SOURCE 
*         X2 = LEAST SIGNIFICANT 10 DIGITS OF SOURCE
*         B7 = LEFT-SHIFT COUNT 
*                (B7 < 0 MEANS RIGHT-SHIFT COUNT) 
*         B6 = NUMERIC LENGTH OF DESTINATION
*         RJ     =X_C.RN2RN 
* 
*      DOES:  
*         SETS X4 = MOST SIGNIFICANT 10 DIGITS OF RESULT
*         SETS X5 = LEAST SIGNIFICANT 10 DIGITS OF RESULT.
* 
*         USES-  B    * - - 4 5 6 7    *B1=1
*                X  0 1 2 3 4 5 - - 
*                A  - - - 3 4 5 - - 
  
  
 RN2RN0   BX4    X1          SET UP OUTPUT REGISTERS
          SB0    B0+46000B
          LX5    X2 
  
          ENTRY  C.RN2RN
 C.RN2RN  BSS    1           ENTRY/EXIT WORD
          ZR     B7,RN2RN0   IF NO SHIFTING, SET REGISTERS AND EXIT 
  
*      TAKE ABSOLUTE VALUE OF INPUT 
  
          BX6    X1 
          AX6    59          000...000B IF +, 777...777B IF - 
          BX1    X1-X6       ABS. VALUE OF MOST SIGNIFICANT DIGITS
          BX2    X2-X6       ABS. VALUE OF LEAST SIGNIFICANT DIGITS 
          SB5    10          CONSTANT 10
          NG     B7,RN2RN3   IF RIGHT-SHIFT 
          EQ     B7,B5,RN2RN1  IF LEFT-SHIFT 10 
          GT     B7,B5,RN2RN2  IF LEFT-SHIFT > 10 
  
*      0 < LEFT-SHIFT < 10
  
          SB4    B7+B7       2*COUNT
          SB7    B4+B4       4*COUNT
          SB7    B7+B4       6*COUNT
          MX0    1
          SB4    B7-B1
          AX0    X0,B4
          BX4    X0*X2
          BX1    -X0*X1 
          SA3    =X_C.ZEROS 
          BX4    X4+X1
          BX5    X0*X3
          LX4    X4,B7
          BX2    -X0*X2 
          BX5    X2+X5
          LX5    X5,B7
          EQ     DONE 
  
  
*      LEFT-SHIFT = 10
  
 RN2RN1   SA5    =X_C.ZEROS 
          BX4    X2 
          EQ     DONE 
  
  
*      10 < LEFT-SHIFT < 20 
  
 RN2RN2   SB7    B7-B5       COUNT = COUNT - 10 
          SB4    B7+B7       2*COUNT
          SB7    B4+B4       4*COUNT
          SB7    B7+B4       6*COUNT
          MX0    1
          SA5    =X_C.ZEROS 
          SB4    B7-B1
          AX0    X0,B4
          BX4    X0*X5
          BX2    -X0*X2 
          BX4    X4+X2
          LX4    X4,B7
          EQ     DONE 
  
  
*      RIGHT-SHIFT
  
 RN2RN3   SB7    B7+10       COUNT = COUNT + 10 
          ZR     B7,RN2RN4   IF RIGHT-SHIFT = 10
          NG     B7,RN2RN5   IF RIGHT-SHIFT > 10
  
*      0 < RIGHT-SHIFT < 10 
  
          SB4    B7+B7       2*COUNT
          SB7    B4+B4       4*COUNT
          SB7    B7+B4       6*COUNT
          MX0    1
          SB4    B7-B1
          AX0    X0,B4
          BX5    -X0*X1 
          BX2    X0*X2
          SA3    =X_C.ZEROS 
          BX5    X2+X5
          BX4    -X0*X3 
          LX5    X5,B7
          BX1    X0*X1
          BX4    X1+X4
          LX4    X4,B7
          EQ     DONE 
  
  
*      RIGHT-SHIFT = 10 
 RN2RN4   BX5    X1 
          SA4    =X_C.ZEROS 
          EQ     DONE 
  
  
*      10 < RIGHT-SHIFT < 20
  
 RN2RN5   SB7    B7+B5       COUNT = COUNT + 10 
          SB4    B7+B7       2*COUNT
          SB7    B4+B4       4*COUNT
          SB7    B7+B4       6*COUNT
          MX0    1
          SA4    =X_C.ZEROS 
          SB4    B7-B1
          AX0    X0,B4
          BX5    -X0*X4 
          BX1    X0*X1
          BX5    X1+X5
          LX5    X5,B7
  
*      RESTORE SIGN AND EXIT
  
 DONE     BSS    0
          BX4    X4-X6       APPLY SIGN TO MOST SIGNIFICANT DIGITS
          BX5    X5-X6       APPLY SIGN TO LEAST SIGNIFICANT DIGITS 
          EQ     C.RN2RN
          SPACE  4
          END 
