*DECK     GMOVSCA 
          IDENT  GMOVSCA
          TITLE  GMOVSCA -  GENERATE MOVE = SCALE REGISTER NUMERIC
          MACHINE  ANY,I
          SST 
          COMMENT  GENERATE MOVE = SCALE REGISTER NUMERIC 
  
          SPACE  4
**        GMOVSCA -  GENERATE MOVE = SCALE REGISTER NUMERIC 
*                    (UNROUNDED)
* 
* RN2ND   LINK   CGRN2RN
* 
*         REGB = DNAT POINTER TO SOURCE REGISTER. 
*         REGC = DNAT POINTER TO DESTINATION REGISTER.
* 
*         CALLZ  RN2RN
* 
*         GENERATES CODE TO PERFORM THE INDICATED SCALING AND MOVE. 
          TITLE  RN2RN
  
*      COMDECKS 
  
  
  
  
 CONTROL  OPSYN  NIL
  
  
  
  
  
*      MODULE DECLARATION 
  
 GMOVSCA  MODULE
  
  
*      LINKAGE FROM CALLING ROUTINES IN OTHER MODULES 
  
 RN2RN    KNIL   CGRN2RN     * FROM GMOVE 
  
  
*      FIXED TABLE EQUATES
  
COMPRESS  IF     -DEF,/COMPRESS/RN2RN 
 ALIGNER  EQU    T4 
 LSHIFTCT EQU    T10
 SIZECODE EQU    T13         =1 IFF SIZE ERROR CHECK WAS GENERATED
 LABEL2   EQU    P8          LABEL NUMBER FOR LABEL *LOCLAB2* 
 LABEL1   EQU    P9          LABEL NUMBER FOR LABEL *LOCLAB1* 
COMPRESS  ELSE
 NUMLENB  EQU    T3 
 NUMLENC  EQU    T4 
 POINTB   EQU    T5 
 POINTC   EQU    T6 
 SIGNB    EQU    T7 
 SIGNC    EQU    T8 
COMPRESS  ENDIF 
  
  
*      MISCELLANEOUS EQUATES
  
  
COMPRESS  IF     -DEF,/COMPRESS/RN2RN 
  
*      SYMBOLIC PARAMETER DEFINITIONS 
  
 CBSIZER  SETSY  (EXT$OF,C.SIZER) 
 CBZEROS  SETSY  (EXT$OF,C.ZEROS) 
 LOCLAB1  SETSY  (LOCAL$OF,LABEL1)
 LOCLAB2  SETSY  (LOCAL$OF,LABEL2)
  
COMPRESS  ENDIF 
          EJECT 
**        RN2RN -  REGISTER NUMERIC TO REGISTER NUMERIC 
* 
*         REGB = DNAT POINTER TO SOURCE REGISTER. 
*         (TREGOF,REGB) = VIRTUAL REGISTER NUMBER OF REGISTER WITH
*           (MOST) SIGNFICANT DIGITS. 
*         (TREGP1OF,REGB) = VIRTUAL REGISTER NUMBER OF REGISTER WITH
*         LEAST SIGNIFICANT DIGITS, IF TWO REGISTERS ARE NEEDED.
*         (NUMLENOF,REGB) = NUMBER OF DIGITS IN SOURCE. 
*         (POINTOF,REGB) = POWER OF TEN BY WHICH THE SOURCE DIGITS ARE
*           DIVIDED TO GET MATHEMATICAL VALUE. (PIC 999PP --> -2) 
*         (SIGNOF,REGB) = 1 IFF SOURCE IS SIGNED. 
*         REGC = DNAT POINTER TO DESTINATION FIELD. 
*         (TREGOF,REGC) = VIRTUAL REGISTER NUMBER OF OF REGISTER WITH 
*           (MOST) SIGNIFICANT DIGITS.
*         (TREGP1OF,REGC) = VIRTUAL REGISTER NUMBER OF REGISTER WITH
*           LEAST SIGNIFICANT DIGITS,  IF TWO REGISTERS ARE NEEDED. 
*         (NUMLENOF,REGC) = NUMBER OF DIGITS IN DESTINATION.
*         (POINTOF,REGC) = POWER OF TEN BY WHICH THE DESTINATION DIGITS 
*           ARE DIVIDED TO GET MATHEMATICAL VALUE. CONVERSELY, THE
*           POWER OF TEN BY WHICH THE MATHEMATICAL VALUE IS MULTIPLIED
*           TO GET THE DESTINATION DIGITS. (PIC 999V9999 --> 4) 
*         (SIGNOF,REGC) = 1 IFF DESTINATION IS SIGNED.
*         MOVESIZE = 1 IFF SIZE ERROR TESTING IS TO BE GENERATED. 
* 
*         CALLZ  RN2RN
* 
*         SETS (TREGOF,REGC) = VIRTUAL REGISTER NUMBER OF REGISTER
*           WITH (MOST) SIGNIFICANT DIGITS. 
*         (TREGP1OF,REGC) WILL BE VIRTUAL REGISTER NUMBER OF REGISTER 
*           WITH LEAST SIGNIFICANT DIGITS,  IF TWO REGISTERS NEEDED.
* 
*         NOTE-  TRUNCATION IS DONE ONLY IF MOVESIZE = 1. 
* 
*         NOTE-  THIS ROUTINE REFERS TO *SCALE* AND *ALIGNER*.
*         THE SOURCE REGISTER NUMERIC ITEM IS SHIFTED LEFT *SCALE*
*         DECIMAL DIGITS TO GET THE PROPER ALIGNMENT FOR THE
*         DESTINATION REGISTER NUMERIC ITEM.
*         *SCALE* IS (POINTOF,REGC) - (POINTOF,REGB). 
*         SO IF THE SOURCE IS PIC 999V99 AND THE DESTINATION IS PIC 999 
*         THEN *SCALE* IS 0 - 2 OR -2, AND THE SOURCE IS SHIFTED RIGHT
*         2 DECIMAL DIGITS. 
* 
*         *ALIGNER* IS USED IN THE CODE BECAUSE THE CGEN INTERPRETER
*         HAS DIFFICULTY WORKING WITH NEGATIVE LITERALS.
*         *ALIGNER* IS *SCALE* + 18.
  
COMPRESS  IF     DEF,/COMPRESS/RN2RN
 RN2RN    EGO    2
  
          MOVEZ  (NUMLENOF,REGB),NUMLENB
          MOVEZ  (NUMLENOF,REGC),NUMLENC
          MOVEZ  (SIGNOF,REGB),SIGNB
          MOVEZ  (SIGNOF,REGC),SIGNC
          MOVEZ  (POINTOF,REGB),POINTB
          MOVEZ  (POINTOF,REGC),POINTC
  
          IFZ    (POINTB,NE,POINTC),RN2RN2       IF SCALING 
          ADDZ   NUMLENB,SIGNB,T1 
          QUOTZ  T1,11,T1                        0 IFF 1-REG. SOURCE
          ADDZ   NUMLENC,SIGNC,T2 
          QUOTZ  T2,11,T2                        0 IFF 1-REG. DEST. 
          IFZ    (T1,NE,T2),RN2RN2               IF DIFFERENT SIZES 
  
*      NO SCALING,  SAME NO. OF REGISTERS 
  
          NOTE   RN2RN
  
          IFZ    (T1,EQ,1),RN2RN1                IF 2 REGISTERS 
  
          IFTHEN (SIGNB,EQ,1)                    IF SOURCE SIGNED 
           ANDIF (SIGNC,EQ,0)                      AND DEST. UNSIGNED 
            GEN    XMIT,(VREGOF,VREG3),(TREGOF,REGB)
            GEN    SHR,VREG3,59 
            GEN    LXOR,(VREGOF,VREG1),(TREGOF,REGB),VREG3
          ELSEZ                                  IF KEEP SIGN 
            GEN    XMIT,(VREGOF,VREG1),(TREGOF,REGB)
            ENDIFZ
          MOVEZ  VREG1,(TREGOF,REGC)
          RETURN
  
  
 RN2RN1   LABEL                                  MOVE 2 REGISTERS 
          NOTE   RN2RN1 
          IFTHEN (SIGNB,EQ,1)                    IF SOURCE SIGNED 
           ANDIF (SIGNC,EQ,0)                      AND DEST. UNSIGNED 
            GEN    XMIT,(VREGOF,VREG3),(TREGOF,REGB)
            GEN    SHR,VREG3,59 
            GEN    LXOR,(VREGOF,VREG1),(TREGOF,REGB),VREG3
            GEN    LXOR,(VREGOF,VREG2),(TREGP1OF,REGB),VREG3
          ELSEZ                                  IF KEEP SIGN 
            GEN    XMIT,(VREGOF,VREG1),(TREGOF,REGB)
            GEN    XMIT,(VREGOF,VREG2),(TREGP1OF,REGB)
            ENDIFZ
          MOVEZ  VREG1,(TREGOF,REGC)
          RETURN
  
  
  
*      SCALING,  CALL OBJECT ROUTINE
  
 RN2RN2   LABEL 
          NOTE   RN2RN2 
          ADDZ   NUMLENB,SIGNB,T1 
          IFTHEN (T1,LE,10)                      IF 1-REGISTER SOURCE 
            GEN    SLRBPK,(VREGOF,VREG1),,((EXT$OF,C.ZEROS))
            GEN    XMIT,(VREGOF,VREG2),(TREGOF,REGB)
            GEN    XMIT,(VREGOF,VREG3),VREG2
            GEN    SHR,VREG3,59 
            GEN    LXOR,(VREGOF,VREG1),VREG1,VREG3
          ELSEZ                                  IF 2-REGISTER SOURCE 
            GEN    XMIT,(VREGOF,VREG1),(TREGOF,REGB)
            GEN    XMIT,(VREGOF,VREG2),(TREGP1OF,REGB)
            ENDIFZ
  
          IFTHEN (SIGNB,EQ,1)                    IF SOURCE SIGNED 
           ANDIF (SIGNC,EQ,0)                      AND DEST. UNSIGNED 
            GEN    XMIT,(VREGOF,VREG3),VREG1
            GEN    SHR,VREG3,59 
            GEN    LXOR,(VREGOF,VREG1),VREG1,VREG3
            GEN    LXOR,(VREGOF,VREG2),VREG2,VREG3
            ENDIFZ
  
          GEN    SBBPK,(VREGOF,VREG3),,NUMLENC
          SUBZ   POINTC,POINTB,T1 
          GEN    SBBPK,(VREGOF,VREG4),T1
  
          GENOBJ N=C.RN2RN,I=(VREG1,VREG2,VREG3,VREG4),O=((VREGOF,VREG4)
,,(VREGOF,VREG5)) 
  
          ADDZ   NUMLENC,SIGNC,T1 
          IFTHEN (T1,LE,10)                      IF 1-REG. DESTINATION
            MOVEZ  VREG5,(TREGOF,REGC)
          ELSEZ                                  IF 2-REG. DESTINATION
            MOVEZ  VREG4,(TREGOF,REGC)
            ENDIFZ
  
          RETURN
  
  
COMPRESS  ELSE
  
 RN2RN    EGO    2
          SUBZ   (POINTOF,REGC),(POINTOF,REGB),ALIGNER
          ADDZ   ALIGNER,18,ALIGNER 
          IFZ    ((NUMLENOF,REGB),LT,10),RN2RN1  1-9 DIGITS (SIGNED)
          IFZ    ((NUMLENOF,REGB),GT,10),RN2RN9  11-18 DIGITS (SIGNED)
          IFZ    ((SIGNOF,REGB),EQ,1),RN2RN9     10 DIGITS, SIGNED
          BRANCH RN2RN5                          10 DIGITS, UNSIGNED
  
  
*                            SOURCE IS 1-9  DIGITS (SIGNED) 
 RN2RN1   LABEL 
          IFZ    ((NUMLENOF,REGC),LT,10),RN2RN2  1-9 DIGITS (SIGNED)
          IFZ    ((NUMLENOF,REGC),GT,10),RN2RN4  11-18 DIGITS (SIGNED)
          IFZ    ((SIGNOF,REGC),EQ,1),RN2RN4     10 DIGITS, SIGNED
          BRANCH RN2RN3                          10 DIGITS, UNSIGNED
  
  
*                            SOURCE IS 1-9 DIGITS (SIGNED)
*                            DESTINATION IS 1-9 DIGITS (SIGNED) 
 RN2RN2   LABEL 
          CALLZ  RN2RNA 
          RETURN
  
  
*                            SOURCE IS 1-9 DIGITS (SIGNED)
*                            DESTINATION IS 10 DIGITS, UNSIGNED 
 RN2RN3   LABEL 
          CALLZ  RN2RNB 
          RETURN
  
  
*                            SOURCE IS 1-9 DIGITS (SIGNED)
*                            DESTINATION IS 10-18  DIGITS (SIGNED)
 RN2RN4   LABEL 
          CALLZ  RN2RNC 
          RETURN
  
  
*                            SOURCE IS 10 DIGITS, UNSIGNED
 RN2RN5   LABEL 
          NOTE   RN2RN5 
          IFZ    ((NUMLENOF,REGC),LT,10),RN2RN6  1-9 DIGITS (SIGNED)
          IFZ    ((NUMLENOF,REGC),GT,10),RN2RN8  11-18 DIGITS (SIGNED)
          IFZ    ((SIGNOF,REGC),EQ,1),RN2RN8     10 DIGITS, SIGNED
          BRANCH RN2RN7                          10 DIGITS, UNSIGNED
  
  
*                            SOURCE IS 10 DIGITS, UNSIGNED
*                            DESTINATION IS 1-9 DIGITS (SIGNED) 
 RN2RN6   LABEL 
          CALLZ  RN2RNE 
          RETURN
  
  
*                            SOURCE IS 10 DIGITS, UNSIGNED
*                            DESTINATION IS 10 DIGITS, UNSIGNED 
 RN2RN7   LABEL 
          CALLZ  RN2RNE 
          RETURN
  
  
*                            SOURCE IS 10 DIGITS, UNSIGNED
*                            DESTINATION IS 10-18 DIGITS (SIGNED) 
 RN2RN8   LABEL 
          CALLZ  RN2RNF 
          RETURN
  
  
*                            SOURCE IS 10-18 DIGITS (SIGNED)
 RN2RN9   LABEL 
          IFZ    ((NUMLENOF,REGC),LT,10),RN2RN10 1-9 DIGITS (SIGNED)
          IFZ    ((NUMLENOF,REGC),GT,10),RN2RN12 11-18 DIGITS (SIGNED)
          IFZ    ((SIGNOF,REGC),EQ,1),RN2RN12    10 DIGITS, SIGNED
          BRANCH RN2RN11                         10 DIGITS, UNSIGNED
  
  
*                            SOURCE IS 10-18 DIGITS (SIGNED)
*                            DESTINATION IS 1-9 DIGITS (SIGNED) 
 RN2RN10  LABEL 
          CALLZ  RN2RNG 
          RETURN
  
  
*                            SOURCE IS 10-18 DIGITS (SIGNED)
*                            DESTINATION IS 10 DIGITS, UNSIGNED 
 RN2RN11  LABEL 
          CALLZ  RN2RNH 
          RETURN
  
  
*                            SOURCE IS 10-18 DIGITS (SIGNED)
*                            DESTINATION IS 10-18 DIGITS (SIGNED) 
 RN2RN12  LABEL 
          CALLZ  RN2RNI 
          RETURN
RN2RNA    EJECT 
**        RN2RNA -  SOURCE IS 1-9 DIGITS (SIGNED) 
*                   DESTINATION IS 1-9 DIGITS (SIGNED)
* 
*         REGB = DNAT POINTER TO SOURCE REGISTER. 
*         (TREGOF,REGB) = VIRTUAL REGISTER NUMBER OF SOURCE REGISTER. 
*         (NUMLENOF,REGB) = NUMBER OF DIGITS. 
*         (SIGNOF,REGB) = 1 IFF SOURCE IS SIGNED. 
*         REGC = DNAT POINTER TO DESTINATION REGISTER.
*         (NUMLENOF,REGC) = NUMBER OF DIGITS IN DESINATION. 
*         (SIGNOF,REGC) = 1 IFF DESTINATION IS SIGNED.
*         ALIGNER = SCALE + 18.  (SEE BEGINNING FOR SCALE)
* 
*         CALLZ  RN2RNA 
* 
*         SETS (TREGOF,REGC) = VIRTUAL REGISTER NUMBER OF RESULT. 
  
  
 RN2RNA   LABEL 
          IFZ    (ALIGNER,LT,0),RN2RNA8          SCALE < -18
          SUBZ   18,(NUMLENOF,REGB),T1
          IFZ    (ALIGNER,LE,T1),RN2RNA1         -18 @ SCALE @ -LEN B 
          IFZ    (ALIGNER,LT,18),RN2RNA2         -LEN B < SCALE < 0 
          IFZ    (ALIGNER,EQ,18),RN2RNA4         SCALE = 0
          ADDZ   18,(NUMLENOF,REGC),T1
          IFZ    (ALIGNER,LT,T1),RN2RNA6         0 < SCALE < LEN C
          IFZ    (ALIGNER,LE,36),RN2RNA1         LEN C @ SCALE @ 18 
          BRANCH RN2RNA8                         18 < SCALE 
  
  
*                            -18 @ SCALE @ -LEN B,  OR
*                            LEN C @ SCALE @ 18 
 RN2RNA1  LABEL 
          NOTE   RN2RNA1
          GEN    SLRBPK,(VREGOF,VREG1),,CBZEROS 
          MOVEZ  VREG1,(TREGOF,REGC)
          RETURN
  
  
*                            -LEN B < SCALE < 0 
 RN2RNA2  LABEL 
          NOTE   RN2RNA2
          GEN    SLRBPK,(VREGOF,VREG2),,CBZEROS 
  
          IFZ    ((SIGNOF,REGB),EQ,0),RN2RNA3    IF SOURCE UNSIGNED 
          IFZ    ((SIGNOF,REGC),EQ,0),RN2RNA3    IF DESTINATION UNSIGNED
*                            SOURCE IS SIGNED, DESTINATION IS SIGNED
            GEN    XMIT,(VREGOF,VREG3),(TREGOF,REGB)
            GEN    SHR,VREG3,59 
            GEN    LXOR,(VREGOF,VREG2),VREG2,VREG3
 RN2RNA3  LABEL 
  
          MOVEZ  (TREGOF,REGB),VREG1
          IFTHEN ((SIGNOF,REGC),EQ,0)            IF DESTINATION UNSIGNED
            NOTE   RN2RNA3
            GEN    XMIT,(VREGOF,VREG3),VREG1
            GEN    SHR,VREG3,59 
            GEN    LXOR,(VREGOF,VREG1),VREG1,VREG3
            ENDIFZ
  
          SUBZ   18,ALIGNER,T1
          GEN    MASK,(VREGOF,VREG3),(ARITH7,T1)           60-6*T1
          GEN    LAND,(VREGOF,VREG1),VREG1,VREG3
          GEN    LIMP,(VREGOF,VREG2),VREG2,VREG3
          GEN    IADD,(VREGOF,VREG1),VREG1,VREG2
          GEN    SHL,VREG1,(ARITH7,T1)                     60-6*T1
          MOVEZ  VREG1,(TREGOF,REGC)
          RETURN
  
  
*                            SCALE = 0
*                            (SOURCE IS SIGNED) 
*                            (DESTINATION IS UNSIGNED)
 RN2RNA4  LABEL 
          IFZ    ((SIGNOF,REGB),EQ,0),RN2RNA5    IF SOURCE UNSIGNED 
          IFZ    ((SIGNOF,REGC),EQ,1),RN2RNA5    IF DESINATION SIGNED 
          NOTE   RN2RNA4
          GEN    XMIT,(VREGOF,VREG1),(TREGOF,REGB)
          GEN    SHR,VREG1,59 
          GEN    LXOR,(VREGOF,VREG1),(TREGOF,REGB),VREG1
          MOVEZ  VREG1,(TREGOF,REGC)
          RETURN
  
  
*                            SCALE = 0
*                            SOURCE IS UNSIGNED,  AND/OR
*                            DESTINATION IS SIGNED
 RN2RNA5  LABEL 
          NOTE   RN2RNA5
          GEN    XMIT,(VREGOF,VREG1),(TREGOF,REGB)
          MOVEZ  VREG1,(TREGOF,REGC)
          RETURN
  
  
*                            0 < SCALE < LEN C
 RN2RNA6  LABEL 
          NOTE   RN2RNA6
          GEN    SLRBPK,(VREGOF,VREG2),,CBZEROS 
  
          IFZ    ((SIGNOF,REGB),EQ,0),RN2RNA7    IF SOURCE UNSIGNED 
          IFZ    ((SIGNOF,REGC),EQ,0),RN2RNA7    IF DESTINATION UNSIGNED
*                            SOURCE IS SIGNED, DESTINATION IS SIGNED
            GEN    XMIT,(VREGOF,VREG3),(TREGOF,REGB)
            GEN    SHR,VREG3,59 
            GEN    LXOR,(VREGOF,VREG2),VREG2,VREG3
 RN2RNA7  LABEL 
  
          MOVEZ  (TREGOF,REGB),VREG1
          IFTHEN ((SIGNOF,REGC),EQ,0)            IF DESTINATION UNSIGNED
            NOTE   RN2RNA7
            GEN    XMIT,(VREGOF,VREG3),VREG1
            GEN    SHR,VREG3,59 
            GEN    LXOR,(VREGOF,VREG1),VREG1,VREG3
            ENDIFZ
  
          SUBZ   ALIGNER,18,T1
          GEN    MASK,(VREGOF,VREG3),(ARITH8,T1)           6*T1 
          GEN    LIMP,(VREGOF,VREG1),VREG1,VREG3
          GEN    LAND,(VREGOF,VREG2),VREG2,VREG3
          GEN    IADD,(VREGOF,VREG1),VREG1,VREG2
          GEN    SHL,VREG1,(ARITH8,T1)                     6*T1 
          MOVEZ  VREG1,(TREGOF,REGC)
          RETURN
  
  
*                            SCALE TOO BIG OR SMALL 
 RN2RNA8  LABEL 
          NOTE   RN2RNA8
          ERROR  70003B 
          BRANCH RN2RNA1
RN2RNB    EJECT 
**        RN2RNB -  SOURCE IS 1-9 DIGITS (SIGNED) 
*                   DESTINATION IS 10 DIGITS, UNSIGNED
* 
*         REGB = DNAT POINTER TO SOURCE REGISTER. 
*         (TREGOF,REGB) = VIRTUAL REGISTER NUMBER OF SOURCE REGISTER. 
*         (NUMLENOF$REGB) = NUMBER OF DIGITS. 
*         (SIGNOF,REGB) = 1 IFF SOURCE IS SIGNED. 
*         REGC = DNAT POINTER TO DESTINATION REGISTER.
*         (TREGOF,REGC) = VIRTUAL REGISTER NUMBER OF DESTINATION REG. 
*         ALIGNER = SCALE + 18.  (SEE BEGINNING FOR SCALE)
* 
*         CALLZ  RN2RNB 
* 
*         SETS (TREGOF,REGC) = VIRTUAL REGISTER NUMBER OF RESULT. 
  
  
 RN2RNB   LABEL 
          IFZ    (ALIGNER,LT,0),RN2RNB5          SCALE < -18
          SUBZ   18,(NUMLENOF,REGB),T1
          IFZ    (ALIGNER,LE,T1),RN2RNB1         -18 @ SCALE @ LEN B
          IFZ    (ALIGNER,LT,18),RN2RNB2         -LEN B < SCALE < 0 
          IFZ    (ALIGNER,EQ,18),RN2RNB3         SCALE = 0
          IFZ    (ALIGNER,LT,28),RN2RNB4         0 < SCALE < 10 
          IFZ    (ALIGNER,LE,36),RN2RNB1         10 @ SCALE @ 18
          BRANCH RN2RNB5                         18 < SCALE 
  
  
*                            -18 @ SCALE @ -LEN B 
*                            10 @ SCALE @ 18
 RN2RNB1  LABEL 
          NOTE   RN2RNB1
          GEN    SLRBPK,(VREGOF,VREG1),,CBZEROS 
          MOVEZ  VREG1,(TREGOF,REGC)
          RETURN
  
  
*                            - LEN B < SCALE < 0
 RN2RNB2  LABEL 
          NOTE   RN2RNB2
          GEN    XMIT,(VREGOF,VREG1),(TREGOF,REGB)
          GEN    SHR,VREG1,59 
          GEN    LXOR,(VREGOF,VREG1),(TREGOF,REGB),VREG1
          GEN    SLRBPK,(VREGOF,VREG2),,CBZEROS 
          SUBZ   18,ALIGNER,T1
          GEN    MASK,(VREGOF,VREG3),(ARITH7,T1)           60-6*T1
          GEN    LAND,(VREGOF,VREG1),VREG1,VREG3
          GEN    LIMP,(VREGOF,VREG2),VREG2,VREG3
          GEN    IADD,(VREGOF,VREG1),VREG1,VREG2
          GEN    SHL,VREG1,(ARITH7,T1)                     60-6*T1
          MOVEZ  VREG1,(TREGOF,REGC)
          RETURN
  
  
*                            SCALE = 0
 RN2RNB3  LABEL 
          NOTE   RN2RNB3
          GEN    XMIT,(VREGOF,VREG1),(TREGOF,REGB)
          GEN    SHR,VREG1,59 
          GEN    LXOR,(VREGOF,VREG1),(TREGOF,REGB),VREG1
          MOVEZ  VREG1,(TREGOF,REGC)
          RETURN
  
  
*                            0 < SCALE < 10 
 RN2RNB4  LABEL 
          NOTE   RN2RNB4
          GEN    XMIT,(VREGOF,VREG1),(TREGOF,REGB)
          GEN    SHR,VREG1,59 
          GEN    LXOR,(VREGOF,VREG1),(TREGOF,REGB),VREG1
          GEN    SLRBPK,(VREGOF,VREG2),,CBZEROS 
          SUBZ   ALIGNER,18,T1
          GEN    MASK,(VREGOF,VREG3),(ARITH8,T1)           6*T1 
          GEN    LIMP,(VREGOF,VREG1),VREG1,VREG3
          GEN    LAND,(VREGOF,VREG2),VREG2,VREG3
          GEN    IADD,(VREGOF,VREG1),VREG1,VREG2
          GEN    SHL,VREG1,(ARITH8,T1)                     6*T1 
          MOVEZ  VREG1,(TREGOF,REGC)
          RETURN
  
  
*                            SCALE < -18
*                            18 < SCALE 
 RN2RNB5  LABEL 
          NOTE   RN2RNB5
          ERROR  70003B 
          BRANCH RN2RNB1                         LOAD ZEROS 
RN2RNC    EJECT 
**        RN2RNC -  SOURCE IS 1-9 DIGITS (SIGNED) 
*                   DESTINATION IS 10-18 DIGITS (SIGNED)
* 
*         REGB = DNAT POINTER TO SOURCE REGISTER. 
*         (TREGOF,REGB) = VIRTUAL REGISTER NUMBER OF SOURCE.
*         (NUMLENOF,REGB) = NUMBER OF DIGITS OF SOURCE. 
*         (SIGNOF,REGB) = 1 IFF SOURCE IS SIGNED. 
*         REGC = DNAT POINTER TO DESTINATION REGISTER.
*         (NUMLENOF,REGC) = NUMBER OF DIGITS IN DESTINATION FIELD.
*         (SIGNOF,REGC) = 1 IFF DESTINATION IS SIGNED.
*         ALIGNER = (POINTOF,REGB) - (POINTOF,REGC) + 18
* 
*         CALLZ  RN2RNC 
* 
*         SETS (TREGOF,REGC) = VIRTUAL REGISTER NUMBER OF REGISTER
*           WITH MOST SIGNIFICANT DIGITS. 
*         (TREGP1OF,REGC) WILL BE VIRTUAL REGISTER NUMBER OF REGISTER 
*           WITH LEAST SIGNIFICANT DIGITS.
  
  
 RN2RNC   LABEL 
          IFZ    (ALIGNER,LT,0),RN2RNC10         SCALE < -18
          SUBZ   18,(NUMLENOF,REGB),T1
          IFZ    (ALIGNER,LE,T1),RN2RNC1         -18 @ SCALE @ -LEN B 
          IFZ    (ALIGNER,LT,18),RN2RNC2         -LEN B < SCALE < 0 
          IFZ    (ALIGNER,EQ,18),RN2RNC3         SCALE = 0
          ADDZ   18,(NUMLENOF,REGC),T1
          IFZ    (ALIGNER,LT,T1),RN2RNC5         0 < SCALE < LEN C
          IFZ    (ALIGNER,LE,36),RN2RNC1         LEN C @ SCALE @ 18 
          BRANCH RN2RNC10                        18 < SCALE 
  
  
*                            -18 @ SCALE @ -LEN B,  OR
*                            LEN C @ SCALE @ 18 
 RN2RNC1  LABEL 
          NOTE   RN2RNC1
          GEN    SLRBPK,(VREGOF,VREG1),,CBZEROS 
          GEN    XMIT,(VREGOF,VREG2),VREG1
          MOVEZ  VREG1,(TREGOF,REGC)
          RETURN
  
  
*                            -LEN B < SCALE < 0 
 RN2RNC2  LABEL 
          NOTE   RN2RNC2
  
          IFTHEN ((SIGNOF,REGB),EQ,1)            IF SOURCE SIGNED 
           ANDIF ((SIGNOF,REGC),EQ,1)             AND DESTINATION SIGNED
            GEN    SLRBPK,(VREGOF,VREG6),,CBZEROS 
            GEN    XMIT,(VREGOF,VREG3),(TREGOF,REGB)
            GEN    SHR,VREG3,59 
            GEN    LXOR,(VREGOF,VREG1),VREG6,VREG3
          ELSEZ 
            GEN    SLRBPK,(VREGOF,VREG1),,CBZEROS 
            ENDIFZ
  
          MOVEZ  (VREGOF,VREG2),VREG2            VREG2 = VREG1 + 1
  
          MOVEZ  (TREGOF,REGB),VREG7
  
          IFTHEN ((SIGNOF,REGB),EQ,1)            IF SOURCE SIGNED 
           ANDIF ((SIGNOF,REGC),EQ,0)             AND DESTINATION UNSIGN
            GEN    XMIT,(VREGOF,VREG3),(TREGOF,REGB)
            GEN    SHR,VREG3,59 
            GEN    LXOR,(VREGOF,VREG7),VREG7,VREG3
            ENDIFZ
  
  
          SUBZ   18,ALIGNER,T1
          GEN    MASK,(VREGOF,VREG3),(ARITH7,T1)           60-6*T1
          GEN    LAND,(VREGOF,VREG7),VREG7,VREG3
          GEN    LIMP,(VREGOF,VREG4),VREG1,VREG3
          GEN    IADD,VREG2,VREG7,VREG4 
          GEN    SHL,VREG2,(ARITH7,T1)                     60-6*T1
          MOVEZ  VREG1,(TREGOF,REGC)
          RETURN
  
  
*                            SCALE = 0
 RN2RNC3  LABEL 
          NOTE   RN2RNC3
  
          IFTHEN ((SIGNOF,REGB),EQ,1) 
           ANDIF ((SIGNOF,REGC),EQ,1) 
            GEN    SLRBPK,(VREGOF,VREG4),,CBZEROS 
            GEN    XMIT,(VREGOF,VREG3),(TREGOF,REGB)
            GEN    SHR,VREG3,59 
            GEN    LXOR,(VREGOF,VREG1),VREG4,VREG3         VREG1
          ELSEZ 
            GEN    SLRBPK,(VREGOF,VREG1),,CBZEROS          VREG1
            ENDIFZ
          MOVEZ  (VREGOF,VREG2),VREG2                      VREG2=VREG1+1
  
          IFTHEN ((SIGNOF,REGB),EQ,1)            IF SOURCE SIGNED 
           ANDIF ((SIGNOF,REGC),EQ,0)             AND DESTINATION UNSIGN
            GEN    XMIT,(VREGOF,VREG3),(TREGOF,REGB)
            GEN    SHR,VREG3,59 
            GEN    LXOR,VREG2,(TREGOF,REGB),VREG3 
          ELSEZ 
            GEN    XMIT,VREG2,(TREGOF,REGB) 
            ENDIFZ
  
          MOVEZ  VREG1,(TREGOF,REGC)
          RETURN
  
  
*                            0 < SCALE < LEN C
 RN2RNC5  LABEL 
          SUBZ   ALIGNER,18,T1
          IFZ    (T1,GE,10),RN2RNC7              IF LEAST SIG. = ZEROS
          ADDZ   T1,(NUMLENOF,REGB),T2
          IFZ    (T2,LE,10),RN2RNC6              IF MOST SIG. = ZEROS 
          NOTE   RN2RNC5
  
          GEN    SLRBPK,(VREGOF,VREG6),,CBZEROS 
  
          IFTHEN ((SIGNOF,REGB),EQ,1)            IF SOURCE SIGNED 
           ANDIF ((SIGNOF,REGC),EQ,1)             AND DESTINATION SIGNED
            GEN    XMIT,(VREGOF,VREG3),(TREGOF,REGB)
            GEN    SHR,VREG3,59 
            GEN    LXOR,(VREGOF,VREG6),VREG6,VREG3
            ENDIFZ
  
          IFTHEN ((SIGNOF,REGB),EQ,1)            IF SOURCE SIGNED 
           ANDIF ((SIGNOF,REGC),EQ,0)             AND DESTINATION UNSIGN
            GEN    XMIT,(VREGOF,VREG3),(TREGOF,REGB)
            GEN    SHR,VREG3,59 
            GEN    LXOR,(VREGOF,VREG7),(TREGOF,REGB),VREG3
          ELSEZ 
            GEN    XMIT,(VREGOF,VREG7),(TREGOF,REGB)
            ENDIFZ
  
          GEN    MASK,(VREGOF,VREG3),(ARITH7,T1)           60-6*T1
          GEN    LIMP,(VREGOF,VREG4),VREG6,VREG3
          GEN    SHL,VREG7,(ARITH8,T1)                     6*T1 
          GEN    LAND,(VREGOF,VREG6),VREG6,VREG3
          GEN    LIMP,(VREGOF,VREG5),VREG7,VREG3
          GEN    IADD,(VREGOF,VREG1),VREG6,VREG5
          MOVEZ  (VREGOF,VREG2),VREG2            VREG2 = VREG1 + 1
          GEN    LAND,(VREGOF,VREG7),VREG7,VREG3
          GEN    IADD,VREG2,VREG7,VREG4 
          MOVEZ  VREG1,(TREGOF,REGC)
          RETURN
  
  
*                            0 < SCALE < LEN C
*                            MOST SIGNIFICANT REGISTER = ZEROS
 RN2RNC6  LABEL 
          NOTE   RN2RNC6
  
          IFTHEN ((SIGNOF,REGB),EQ,1)            IF SOURCE SIGNED 
           ANDIF ((SIGNOF,REGC),EQ,1)             AND DESTINATION SIGNED
            GEN    SLRBPK,(VREGOF,VREG6),,CBZEROS 
            GEN    XMIT,(VREGOF,VREG3),(TREGOF,REGB)
            GEN    SHR,VREG3,59 
            GEN    LXOR,(VREGOF,VREG1),VREG6,VREG3
            MOVEZ  (VREGOF,VREG2),VREG2          VREG2 = VREG1 + 1
          ELSEZ 
            GEN    SLRBPK,(VREGOF,VREG1),,CBZEROS 
            MOVEZ  (VREGOF,VREG2),VREG2          VREG2 = VREG1  + 1 
            ENDIFZ
  
          IFTHEN ((SIGNOF,REGB),EQ,1)            IF SOURCE SIGNED 
           ANDIF ((SIGNOF,REGC),EQ,0)             AND DESTINATION UNSIGN
            GEN    XMIT,(VREGOF,VREG3),(TREGOF,REGB)
            GEN    SHR,VREG3,59 
            GEN    LXOR,(VREGOF,VREG7),(TREGOF,REGB),VREG3
          ELSEZ 
            GEN    XMIT,(VREGOF,VREG7),(TREGOF,REGB)
            ENDIFZ
  
          GEN    MASK,(VREGOF,VREG3),(ARITH8,T1)           6*T1 
          GEN    LIMP,(VREGOF,VREG7),VREG7,VREG3
          GEN    LAND,(VREGOF,VREG4),VREG1,VREG3
          GEN    IADD,VREG2,VREG4,VREG7 
          GEN    SHL,VREG2,(ARITH8,T1)                     6*T1 
          MOVEZ  VREG1,(TREGOF,REGC)
          RETURN
  
  
*                            0 < SCALE < LEN C
*                            LEAST SIGNIFCANT DIGITS = ZEROS
 RN2RNC7  LABEL 
          SUBZ   T1,10,T1 
          IFZ    (T1,EQ,0),RN2RNC8               IF ALIGNED 
          NOTE   RN2RNC7
  
          IFTHEN ((SIGNOF,REGB),EQ,1)            IF SOURCE SIGNED 
           ANDIF ((SIGNOF,REGC),EQ,1)             AND DESTINATION SIGNED
            GEN    SLRBPK,(VREGOF,VREG7),,CBZEROS 
            GEN    XMIT,(VREGOF,VREG3),(TREGOF,REGB)
            GEN    SHR,VREG3,59 
            MOVEZ  (VREGOF,VREG1),VREG1          RESERVE VREG1
            GEN    LXOR,(VREGOF,VREG2),VREG7,VREG3  VREG2 = VREG1 + 1 
          ELSEZ 
            MOVEZ  (VREGOF,VREG1),VREG1          RESERVE VREG1
            GEN    SLRBPK,(VREGOF,VREG2),,CBZEROS  VREG2 = VREG1 + 1
            ENDIFZ
  
          IFTHEN ((SIGNOF,REGB),EQ,1)            IF SOURCE SIGNED 
           ANDIF ((SIGNOF,REGC),EQ,0)             AND DESTINATION UNSIGN
            GEN    XMIT,(VREGOF,VREG3),(TREGOF,REGB)
            GEN    SHR,VREG3,59 
            GEN    LXOR,(VREGOF,VREG6),(TREGOF,REGB),VREG3
          ELSEZ 
            GEN    XMIT,(VREGOF,VREG6),(TREGOF,REGB)
            ENDIFZ
  
          GEN    MASK,(VREGOF,VREG3),(ARITH8,T1)           6*T1 
          GEN    LIMP,(VREGOF,VREG6),VREG6,VREG3
          GEN    LAND,(VREGOF,VREG4),VREG2,VREG3
          GEN    IADD,VREG1,VREG4,VREG6 
          GEN    SHL,VREG1,(ARITH8,T1)           6*T1 
          MOVEZ  VREG1,(TREGOF,REGC)
          RETURN
*                            0 < SCALE < LEN C
*                            LEAST SIGNIFICANT DIGITS = ZEROS 
*                            MOST SIGNIFICANT DIGITS ALREADY ALIGNED
 RN2RNC8  LABEL 
          NOTE   RN2RNC8
          IFTHEN ((SIGNOF,REGB),EQ,1)            IF SOURCE SIGNED 
           ANDIF ((SIGNOF,REGC),EQ,1)             AND DESTINATION SIGNED
            GEN    SLRBPK,(VREGOF,VREG7),,CBZEROS 
            GEN    XMIT,(VREGOF,VREG3),(TREGOF,REGB)
            GEN    SHR,VREG3,59 
            MOVEZ  (VREGOF,VREG1),VREG1          RESERVE VREG1
            GEN    LXOR,(VREGOF,VREG2),VREG7,VREG3  VREG2 = VREG1 + 1 
          ELSEZ 
            MOVEZ  (VREGOF,VREG1),VREG1          RESERVE VREG1
            GEN    SLRBPK,(VREGOF,VREG2),,CBZEROS  VREG2 = VREG1 + 1
            ENDIFZ
  
          GEN    XMIT,VREG1,(TREGOF,REGB) 
          MOVEZ  VREG1,(TREGOF,REGC)
          RETURN
  
  
*                            SCALE < -18,  OR 
*                            18 < SCALE 
 RN2RNC10 LABEL 
          NOTE   RN2RNC10 
          ERROR  70003B 
          BRANCH RN2RNC1
RN2RNE    EJECT 
**        RN2RNE -  SOURCE IS 10 DIGITS, UNSIGNED 
*                   DESTINATION IS 1 - 10 DIGITS
* 
*         REGB = DNAT POINTER TO SOURCE REGISTER. 
*         (TREGOF,REGB) = VIRTUAL REGISTER NUMBER OF SOURCE REGISTER. 
*         REGC = DNAT POINTER TO DESTINATION REGISTER.
* 
*         CALLZ  RN2RNE 
* 
*         SETS (TREGOF,REGC) = VIRTUAL REGISTER NUMBER OF RESULT. 
  
  
 RN2RNE   LABEL 
          IFZ    (ALIGNER,LT,0),RN2RNE5          SCALE < -18
          IFZ    (ALIGNER,LE,8),RN2RNE1          -18 @ SCALE @ -LEN B 
          IFZ    (ALIGNER,LT,18),RN2RNE2         -LEN B < SCALE < 0 
          IFZ    (ALIGNER,EQ,18),RN2RNE3         SCALE = 0
          IFZ    (ALIGNER,LT,28),RN2RNE4         0 < SCALE < LEN C
          IFZ    (ALIGNER,LE,36),RN2RNE1         LEN C @ SCALE @ 18 
          BRANCH RN2RNE5                         18 < SCALE 
  
  
*                            -18 @ SCALE @ -LEN B,  OR
*                            LEN C @ SCALE @ 18 
 RN2RNE1  LABEL 
          NOTE   RN2RNE1
          GEN    SLRBPK,(VREGOF,VREG1),,CBZEROS 
          MOVEZ  VREG1,(TREGOF,REGC)
          RETURN
  
  
*                            -LEN B < SCALE < 0 
 RN2RNE2  LABEL 
          NOTE   RN2RNE2
          SUBZ   18,ALIGNER,T1
          GEN    MASK,(VREGOF,VREG3),(ARITH7,T1)
          GEN    LAND,(VREGOF,VREG1),(TREGOF,REGB),VREG3
          GEN    SLRBPK,(VREGOF,VREG2),,CBZEROS 
          GEN    LIMP,(VREGOF,VREG2),VREG2,VREG3
          GEN    IADD,(VREGOF,VREG1),VREG1,VREG2
          GEN    SHL,VREG1,(ARITH7,T1)
          MOVEZ  VREG1,(TREGOF,REGC)
          RETURN
  
  
*                            SCALE = 0
 RN2RNE3  LABEL 
          NOTE   RN2RNE3
          GEN    XMIT,(VREGOF,VREG1),(TREGOF,REGB)
          MOVEZ  VREG1,(TREGOF,REGC)
          RETURN
  
  
*                            0 < SCALE < LEN C
 RN2RNE4  LABEL 
          NOTE   RN2RNE4
          SUBZ   ALIGNER,18,T1
          GEN    MASK,(VREGOF,VREG3),(ARITH7,T1)
          GEN    XMIT,(VREGOF,VREG2),(TREGOF,REGB)
          GEN    SHL,VREG2,(ARITH8,T1)
          GEN    SLRBPK,(VREGOF,VREG5),,CBZEROS 
          GEN    LAND,(VREGOF,VREG2),VREG2,VREG3
          GEN    LIMP,(VREGOF,VREG5),VREG5,VREG3
          GEN    IADD,(VREGOF,VREG2),VREG2,VREG5
          MOVEZ  VREG2,(TREGOF,REGC)
          RETURN
  
  
*                            SCALE < -18,  OR 
*                            18 < SCALE 
 RN2RNE5  LABEL 
          NOTE   RN2RNE5
          ERROR  70003B 
          BRANCH RN2RNE1
RN2RNF    EJECT 
**        RN2RNF -  SOURCE IS 10 DIGITS, UNSIGNED 
*                   DESTINATION IS 10-18 DIGITS (SIGNED)
* 
*         REGB = DNAT POINTER TO SOURCE REGISTER. 
*         (TREGOF,REGB) = VIRTUAL REGISTER NUMBER OF SOURCE REGISTER. 
*         REGC = DNAT POINTER TO DESTINATION REGISTER.
*         (NUMLENOF,REGC) = NUMBER OF DIGITS IN DESTINATION.
*         (SIGNOF,REGC) = 1 IFF DESTINATION IS SIGNED.
*         ALIGNER = SCALE + 18.  (SEE BEGINNING FOR SCALE)
* 
*         CALLZ  RN2RNF 
* 
*         SETS (TREGOF,REGC) = VIRTUAL REGISTER NUMBER OF REGISTER
*           WITH MOST SIGNIFICANT DIGITS. 
*         (TREGP1OF,REGC) WILL BE VIRTUAL REGISTER NUMBER OF REGISTER 
*           WITH LEAST SIGNIFICANT DIGITS.
  
  
 RN2RNF   LABEL 
          IFZ    (ALIGNER,LT,0),RN2RNF5          SCALE < -18
          IFZ    (ALIGNER,LE,8),RN2RNF1          -18 @ SCALE @ -LEN B 
          IFZ    (ALIGNER,LT,18),RN2RNF2         -LEN B < SCALE < 0 
          IFZ    (ALIGNER,EQ,18),RN2RNF3         SCALE = 0
          ADDZ   18,(NUMLENOF,REGC),T1
          IFZ    (ALIGNER,LT,T1),RN2RNF4         0 < SCALE < LEN C
          IFZ    (ALIGNER,LE,36),RN2RNF1         LEN C @ SCALE @ 18 
          BRANCH RN2RNF5                         18 < SCALE 
  
  
*                            -18 @ SCALE @ -LEN B,  OR
*                            LEN C @ SCALE @ 18 
 RN2RNF1  LABEL 
          NOTE   RN2RNF1
          GEN    SLRBPK,(VREGOF,VREG1),,CBZEROS 
          GEN    XMIT,(VREGOF,VREG2),VREG1
          MOVEZ  VREG1,(TREGOF,REGC)
          RETURN
  
  
*                            -LEN B < SCALE < 0 
 RN2RNF2  LABEL 
          NOTE   RN2RNF2
          SUBZ   18,ALIGNER,T1
          GEN    MASK,(VREGOF,VREG3),(ARITH7,T1)           60-6*T1
          GEN    LAND,(VREGOF,VREG7),(TREGOF,REGB),VREG3
          GEN    SLRBPK,(VREGOF,VREG1),,CBZEROS 
          MOVEZ  (VREGOF,VREG2),VREG2            VREG2 = VREG1 + 1
          GEN    LIMP,(VREGOF,VREG4),VREG1,VREG3
          GEN    IADD,VREG2,VREG7,VREG4 
          GEN    SHL,VREG2,(ARITH7,T1)                     60-6*T1
          MOVEZ  VREG1,(TREGOF,REGC)
          RETURN
  
  
*                            SCALE = 0
 RN2RNF3  LABEL 
          NOTE   RN2RNF3
          GEN    SLRBPK,(VREGOF,VREG1),,CBZEROS 
          GEN    XMIT,(VREGOF,VREG2),(TREGOF,REGB)
          MOVEZ  VREG1,(TREGOF,REGC)
          RETURN
  
  
*                            0 < SCALE < LEN C
 RN2RNF4  LABEL 
          NOTE   RN2RNF4
          SUBZ   ALIGNER,18,T1
          GEN    MASK,(VREGOF,VREG3),(ARITH8,T1)           6*T1 
          GEN    LIMP,(VREGOF,VREG6),(TREGOF,REGB),VREG3
          GEN    LAND,(VREGOF,VREG7),(TREGOF,REGB),VREG3
          GEN    SLRBPK,(VREGOF,VREG2),,CBZEROS 
          GEN    LIMP,(VREGOF,VREG5),VREG2,VREG3
          GEN    LAND,(VREGOF,VREG4),VREG2,VREG3
          GEN    LOR,(VREGOF,VREG1),VREG7,VREG5 
          GEN    IADD,(VREGOF,VREG2),VREG6,VREG4
          GEN    SHL,VREG2,(ARITH8,T1)
          GEN    SHL,VREG1,(ARITH8,T1)                     6*T1 
          MOVEZ  VREG1,(TREGOF,REGC)
          RETURN
  
  
*                            SCALE < -18,  OR 
*                            18 < SCALE 
 RN2RNF5  LABEL 
          NOTE   RN2RNF5
          ERROR  70003B 
          BRANCH RN2RNF1
RN2RNG    EJECT 
**        RN2RNG -  SOURCE IS 10-18 DIGITS (SIGNED) 
*                   DESTINATION IS 1-9 DIGITS (SIGNED)
* 
*         REGB = DNAT POINTER TO SOURCE REGISTERS.
*         (TREGOF,REGB) = VIRTUAL REGISTER NUMBER OF REGISTER 
*           WITH MOST SIGNIFICANT DIGITS. 
*         (TREGP1OF,REGB) = VIRTUAL REGISTER NUMBER OF REGISTER 
*           WITH LEAST SIGNIFICANT DIGITS.
*         (NUMLENOF,REGB) = NUMBER OF DIGITS IN SOURCE. 
*         (SIGNOF,REGB) = 1 IFF SOURCE IS SIGNED. 
*         REGC = DNAT POINTER TO DESTINATION REGISTER.
*         (NUMLENOF,REGC) = NUMBER OF DIGITS IN DESTINATION.
*         (SIGNOF,REGC) = 1 IFF DESTINATION IS SIGNED.
*         ALIGNER = SCALE + 18.  (SEE BEGINNING FOR SCALE)
* 
*         CALLZ  RN2RNH 
* 
*         SETS (TREGOF,REGC) = VIRTUAL REGISTER NUMBER OF RESULT. 
  
  
 RN2RNG   LABEL 
          IFZ    (ALIGNER,LT,0),RN2RNG9          SCALE < -18
          SUBZ   18,(NUMLENOF,REGB),T1
          IFZ    (ALIGNER,LE,T1),RN2RNG1         -18 @ SCALE @ -LEN B 
          IFZ    (ALIGNER,LT,18),RN2RNG2         -LEN B < SCALE < 0 
          IFZ    (ALIGNER,EQ,18),RN2RNG6         SCALE = 0
          ADDZ   18,(NUMLENOF,REGC),T1
          IFZ    (ALIGNER,LT,T1),RN2RNG7
          IFZ    (ALIGNER,LE,36),RN2RNG1         LEN C @ SCALE @ 18 
          BRANCH RN2RNG9                         18 < SCALE 
  
  
*                            -18 @ SCALE @ -LEN B,  OR
*                            LEN C @ SCALE @ 18 
 RN2RNG1  LABEL 
          NOTE   RN2RNG1
          GEN    SLRBPK,(VREGOF,VREG1),,CBZEROS 
          GEN    XMIT,(VREGOF,VREG2),VREG1
          MOVEZ  VREG1,(TREGOF,REGC)
          RETURN
  
  
*                            -LEN B < SCALE < 0 
 RN2RNG2  LABEL 
          SUBZ   18,ALIGNER,T1
          IFZ    (T1,GE,10),RN2RNG3              IF LEAST SIG. NOT USED 
          NOTE   RN2RNG2
          GEN    MASK,(VREGOF,VREG3),(ARITH7,T1)           60-6*T1
          GEN    LAND,(VREGOF,VREG1),(TREGP1OF,REGB),VREG3
          GEN    LIMP,(VREGOF,VREG2),(TREGOF,REGB),VREG3
          GEN    IADD,(VREGOF,VREG1),VREG1,VREG2
          GEN    SHL,VREG1,(ARITH7,T1)                     60-6*T1
  
          IFTHEN ((SIGNOF,REGB),EQ,1)            IF SOURCE IS SIGNED
           ANDIF ((SIGNOF,REGC),EQ,0)             AND DESTINATION UNSIGN
            GEN    XMIT,(VREGOF,VREG2),(TREGOF,REGB)
            GEN    SHR,VREG2,59 
            GEN    LXOR,(VREGOF,VREG1),VREG1,VREG2
            ENDIFZ
  
          MOVEZ  VREG1,(TREGOF,REGC)
          RETURN
  
  
*                            -LEN B < SCALE < 0 
*                            LEAST SIGNIFICANT DIGITS NOT USED
*                            T1 = 18 - ALIGNER
 RN2RNG3  LABEL 
          IFZ    (T1,EQ,10),RN2RNG5              IF ALIGNED 
          SUBZ   T1,10,T1 
          IFZ    ((SIGNOF,REGC),EQ,0),RN2RNG4    IF DESTINATION UNSIGED 
  
          NOTE   RN2RNG3
  
          GEN    SLRBPK,(VREGOF,VREG2),,CBZEROS 
          IFTHEN ((SIGNOF,REGB),EQ,1) 
            GEN    XMIT,(VREGOF,VREG3),(TREGOF,REGB)
            GEN    SHR,VREG3,59 
            GEN    LXOR,(VREGOF,VREG2),VREG2,VREG3
            ENDIFZ
  
          GEN    MASK,(VREGOF,VREG3),(ARITH7,T1)           60-6*T1
          GEN    LAND,(VREGOF,VREG1),(TREGOF,REGB),VREG3
          GEN    LIMP,(VREGOF,VREG2),VREG2,VREG3
          GEN    IADD,(VREGOF,VREG1),VREG1,VREG2
          GEN    SHL,VREG1,(ARITH7,T1)                     60-6*T1
          MOVEZ  VREG1,(TREGOF,REGC)
          RETURN
  
  
*                            -LEN B < SCALE < 0 
*                            LEAST SIGNIFICANT DIGITS NOT USED
*                            T1 = 8 - ALIGNER 
*                            DESTINATION IS UNSIGNED
 RN2RNG4  LABEL 
          NOTE   RN2RNG4
          IFTHEN ((SIGNOF,REGB),EQ,1)            IF SOURCE SIGNED 
            GEN    XMIT,(VREGOF,VREG3),(TREGOF,REGB)
            GEN    SHR,VREG3,59 
            GEN    LXOR,(VREGOF,VREG1),(TREGOF,REGB),VREG3
          ELSEZ                                  IF SOURCE UNSIGNED 
            MOVEZ  (TREGOF,REGB),VREG1
            ENDIFZ
  
          GEN    SLRBPK,(VREGOF,VREG2),,CBZEROS 
          GEN    MASK,(VREGOF,VREG3),(ARITH7,T1)           60-6*T1
          GEN    LAND,(VREGOF,VREG1),VREG1,VREG3
          GEN    LIMP,(VREGOF,VREG2),VREG2,VREG3
          GEN    IADD,(VREGOF,VREG1),VREG1,VREG2
          GEN    SHL,VREG1,(ARITH7,T1)                     60-6*T1
          MOVEZ  VREG1,(TREGOF,REGC)
          RETURN
  
  
*                            -LEN B < SCALE < 0 
*                            MOST SIGNIFICANT REGISTER ALIGNED
 RN2RNG5  LABEL 
          NOTE   RN2RNG5
          IFTHEN ((SIGNOF,REGB),EQ,1)            IF SOURCE SIGNED 
           ANDIF ((SIGNOF,REGC),EQ,0)             AND DESTINATION UNSIGN
            GEN    XMIT,(VREGOF,VREG3),(TREGOF,REGB)
            GEN    SHR,VREG3,59 
            GEN    LXOR,(VREGOF,VREG1),(TREGOF,REGB),VREG3
          ELSEZ 
            GEN    XMIT,(VREGOF,VREG1),(TREGOF,REGB)
            ENDIFZ
          MOVEZ  VREG1,(TREGOF,REGC)
          RETURN
  
  
*                            SCALE = 0
 RN2RNG6  LABEL 
          NOTE   RN2RNG6
          SUBZ   10,(NUMLENOF,REGC),T1
          GEN    MASK,(VREGOF,VREG6),(ARITH8,T1)           6*T1 
          GEN    SLRBPK,(VREGOF,VREG2),,CBZEROS 
          IFTHEN ((SIGNOF,REGB),EQ,1) 
          ANDIF  ((SIGNOF,REGC),EQ,1) 
            GEN    XMIT,(VREGOF,VREG1),(TREGOF,REGB)
            GEN    SHR,VREG1,59 
          GEN    LXOR,(VREGOF,VREG3),VREG1,VREG2
            GEN    LAND,(VREGOF,VREG4),VREG3,VREG6
            GEN    LIMP,(VREGOF,VREG5),(TREGP1OF,REGB),VREG6
          ENDIFZ
          IFTHEN ((SIGNOF,REGB),EQ,1) 
          ANDIF  ((SIGNOF,REGC),EQ,0) 
            GEN    XMIT,(VREGOF,VREG1),(TREGOF,REGB)
            GEN    SHR,VREG1,59 
            GEN    LXOR,(VREGOF,VREG3),VREG1,(TREGP1OF,REGB)
            GEN    LAND,(VREGOF,VREG4),VREG6,VREG2
            GEN    LIMP,(VREGOF,VREG5),VREG3,VREG6
          ENDIFZ
          IFTHEN ((SIGNOF,REGB),EQ,0) 
            GEN    LAND,(VREGOF,VREG4),VREG6,VREG2
            GEN    LIMP,(VREGOF,VREG5),(TREGP1OF,REGB),VREG6
          ENDIFZ
          GEN    LOR,(VREGOF,VREG1),VREG4,VREG5 
          MOVEZ  VREG1,(TREGOF,REGC)
          RETURN
  
  
*                            0 < SCALE < LEN C
 RN2RNG7  LABEL 
          SUBZ   ALIGNER,18,T1
          SUBZ   20,(NUMLENOF,REGB),T2
          IFZ    (T1,GE,T2),RN2RNG8              IF ZEROS IN (TREGOF...)
  
          NOTE   RN2RNG7
          GEN    SLRBPK,(VREGOF,VREG2),,CBZEROS 
          IFTHEN ((SIGNOF,REGB),EQ,1)            IF SOURCE SIGNED 
           ANDIF ((SIGNOF,REGC),EQ,1)             AND DESTINATIO SIGNED 
            GEN    XMIT,(VREGOF,VREG3),(TREGOF,REGB)
            GEN    SHR,VREG3,59 
            GEN    LXOR,(VREGOF,VREG2),VREG2,VREG3
            ENDIFZ
  
          IFTHEN ((SIGNOF,REGB),EQ,1)            IF SOURCE SIGNED 
           ANDIF ((SIGNOF,REGC),EQ,0)             AND DESTINATION UNSIGN
            GEN    XMIT,(VREGOF,VREG3),(TREGOF,REGB)
            GEN    SHR,VREG3,59 
            GEN    LXOR,(VREGOF,VREG1),(TREGP1OF,REGB),VREG3
          ELSEZ 
            MOVEZ  (TREGP1OF,REGB),VREG1
            ENDIFZ
  
          GEN    MASK,(VREGOF,VREG3),(ARITH8,T1)           6*T1 
          GEN    LIMP,(VREGOF,VREG1),VREG1,VREG3
          GEN    LAND,(VREGOF,VREG2),VREG2,VREG3
          GEN    IADD,(VREGOF,VREG1),VREG2,VREG1
          GEN    SHL,VREG1,(ARITH8,T1)                     6*T1 
          MOVEZ  VREG1,(TREGOF,REGC)
          RETURN
  
  
*                            0 < SCALE < LEN C
*                            ENOUGH (SIGNED) ZEROS FOR PADDING
*                              IN (TREGOF,REGB) 
*                            T1 = ALINGER - 18
 RN2RNG8  LABEL 
          NOTE   RN2RNG8
          GEN    MASK,(VREGOF,VREG3),(ARITH8,T1)           6*T1 
          GEN    LIMP,(VREGOF,VREG1),(TREGP1OF,REGB),VREG3
          GEN    LAND,(VREGOF,VREG2),(TREGOF,REGB),VREG3
          GEN    IADD,(VREGOF,VREG1),VREG2,VREG1
          GEN    SHL,VREG1,(ARITH8,T1)                     6*T1 
          MOVEZ  VREG1,(TREGOF,REGC)
          RETURN
  
  
*                            SCALE < -18,  OR 
*                            18 < SCALE 
 RN2RNG9  LABEL 
          NOTE   RN2RNG9
          ERROR  70003B 
          BRANCH RN2RNG1
RN2RNH    EJECT 
**        RN2RNH -  SOURCE IS 10-18 DIGITS (SIGNED) 
*                   DESTINATION IS 10 DIGITS, UNSIGNED
* 
*         REGB = DNAT POINTER TO SOURCE REGISTERS.
*         (TREGOF,REGB) = VIRTUAL REGISTER NUMBER OF REGISTER 
*           WITH MOST SIGNIFICANT DIGITS. 
*         (TREGP1OF,REGB) = VIRTUAL REGISTER NUMBER OF REGISTER 
*           WITH LEAST SIGNIFICANT DIGITS.
*         (NUMLENOF,REGB) = NUMBER OF DIGITS. 
*         (SIGNOF,REGB) = 1 IFF SOURCE IS SIGNED. 
*         REGC = DNAT POINTER TO DESTINATION REGISTER.
*         ALIGNER = SCALE + 18.  (SEE BEGINNING FOR SCALE)
* 
*         CALLZ  RN2RNH 
* 
*         SETS (TREGOF,REGC) = VIRTUAL REGISTER NUMBER OF RESULT. 
  
  
 RN2RNH   LABEL 
          IFZ    (ALIGNER,LT,0),RN2RNH8          SCALE < -18
          SUBZ   18,(NUMLENOF,REGB),T1
          IFZ    (ALIGNER,LE,T1),RN2RNH1         -18 @ SCALE @ -LEN B 
          IFZ    (ALIGNER,LT,18),RN2RNH2         -LEN B < SCALE < 0 
          IFZ    (ALIGNER,EQ,18),RN2RNH6         SCALE = 0
          IFZ    (ALIGNER,LT,28),RN2RNH7         0 < SCALE < LEN C
          IFZ    (ALIGNER,LE,36),RN2RNH1         LEN C @ SCALE @ 18 
          BRANCH RN2RNH8                         18 < SCALE 
  
  
*                            -18 @ SCALE @ -LEN B,  OR
*                            LEN C @ SCALE @ 18 
 RN2RNH1  LABEL 
          NOTE   RN2RNH1
          GEN    SLRBPK,(VREGOF,VREG1),,CBZEROS 
          MOVEZ  VREG1,(TREGOF,REGC)
          RETURN
  
  
*                            -LEN B < SCALE < 0 
 RN2RNH2  LABEL 
          SUBZ   18,ALIGNER,T1
          IFZ    (T1,GE,10),RN2RNH4              IF LEAST SIG. NOT USED 
          NOTE   RN2RNH2
          IFTHEN ((SIGNOF,REGB),EQ,1)            IF SOURCE SIGNED 
            GEN    XMIT,(VREGOF,VREG3),(TREGOF,REGB)
            GEN    SHR,VREG3,59 
            GEN    LXOR,(VREGOF,VREG2),(TREGP1OF,REGB),VREG3
           IFZ    ((NUMLENOF,REGB),EQ,10),RN2RNH3  IF 10 DIGIT SIGNED 
            GEN    LXOR,(VREGOF,VREG1),(TREGOF,REGB),VREG3
          ELSEZ                                  IF SOURCE UNSIGNED 
            MOVEZ  (TREGOF,REGB),VREG1
            MOVEZ  (TREGP1OF,REGB),VREG2
            ENDIFZ
*                            SOURCE IS NOW 11-18 DIGITS, UNSIGNED 
*                            BOTH SOURCE REGISTERS NEEDED 
          GEN    MASK,(VREGOF,VREG3),(ARITH7,T1)           60-6*T1
          GEN    LAND,(VREGOF,VREG2),VREG2,VREG3
          GEN    LIMP,(VREGOF,VREG1),VREG1,VREG3
          GEN    IADD,(VREGOF,VREG1),VREG2,VREG1
          GEN    SHL,VREG1,(ARITH7,T1)
          MOVEZ  VREG1,(TREGOF,REGC)
          RETURN
  
  
*                            -LEN B < SCALE < 0 
*                            SOURCE IS NOW 10 DIGITS,  UNSIGNED IN VREG2
*                            T1 = ALIGNER - 18
 RN2RNH3  LABEL 
          NOTE   RN2RNH3
          GEN    MASK,(VREGOF,VREG3),(ARITH7,T1)           60-6*T1
          GEN    LAND,(VREGOF,VREG1),VREG2,VREG3
          GEN    SLRBPK,(VREGOF,VREG4),,CBZEROS 
          GEN    LIMP,(VREGOF,VREG4),VREG4,VREG3
          GEN    IADD,(VREGOF,VREG1),VREG1,VREG4
          GEN    SHL,VREG1,(ARITH7,T1)
          MOVEZ  VREG1,(TREGOF,REGC)
          RETURN
  
  
*                            -LEN B < SCALE < 0 
*                            LEAST SIGNIFICANT DIGITS NOT USED
*                            T1 = 18 - ALIGNER
 RN2RNH4  LABEL 
          IFZ    (T1,EQ,10),RN2RNH5              IF ALIGNED ON REGISTER 
          NOTE   RN2RNH4
          SUBZ   T1,10,T1 
  
          IFTHEN ((SIGNOF,REGB),EQ,1)            IF SOURCE SIGNED 
            GEN    XMIT,(VREGOF,VREG3),(TREGOF,REGB)
            GEN    SHR,VREG3,59 
            GEN    LXOR,(VREGOF,VREG1),(TREGOF,REGB),VREG3
          ELSEZ                                  IF SOURCE UNSIGNED 
            MOVEZ  (TREGOF,REGB),VREG1
          ENDIFZ
  
          GEN    MASK,(VREGOF,VREG3),(ARITH7,T1)           60-6*T1
          GEN    LAND,(VREGOF,VREG1),VREG1,VREG3
          GEN    SLRBPK,(VREGOF,VREG4),,CBZEROS 
          GEN    LIMP,(VREGOF,VREG4),VREG4,VREG3
          GEN    IADD,(VREGOF,VREG1),VREG1,VREG4
          GEN    SHL,VREG1,(ARITH7,T1)                     60-6*T1
          MOVEZ  VREG1,(TREGOF,REGC)
          RETURN
  
  
*                            -LEN B < SCALE < 0 
*                            ALIGNED ON MOST SIGNIFICANT DIGITS 
 RN2RNH5  LABEL 
          NOTE   RN2RNH5
          IFTHEN ((SIGNOF,REGB),EQ,1)            IF SOURCE SIGNED 
            GEN    XMIT,(VREGOF,VREG3),(TREGOF,REGB)
          GEN    SHR,VREG3,59 
            GEN    LXOR,(VREGOF,VREG1),(TREGOF,REGB),VREG3
          ELSEZ                                  IF SOURCE UNSIGNED 
            GEN    XMIT,(VREGOF,VREG1),(TREGOF,REGB)
            ENDIFZ
          MOVEZ  VREG1,(TREGOF,REGC)
          RETURN
  
  
*                            SCALE = 0
 RN2RNH6  LABEL 
          NOTE   RN2RNH6
          IFTHEN ((SIGNOF,REGB),EQ,1)            IF SOURCE SIGNED 
            GEN    XMIT,(VREGOF,VREG3),(TREGOF,REGB)
            GEN    SHR,VREG3,59 
            GEN    LXOR,(VREGOF,VREG1),(TREGP1OF,REGB),VREG3
          ELSEZ                                  IF SOURCE UNSIGNED 
            GEN    XMIT,(VREGOF,VREG1),(TREGP1OF,REGB)
            ENDIFZ
          MOVEZ  VREG1,(TREGOF,REGC)
          RETURN
  
  
*                            0 < SCALE < LEN C
 RN2RNH7  LABEL 
          NOTE   RN2RNH7
          IFTHEN ((SIGNOF,REGB),EQ,1) 
            GEN    XMIT,(VREGOF,VREG3),(TREGOF,REGB)
            GEN    SHR,VREG3,59 
            GEN    LXOR,(VREGOF,VREG1),(TREGP1OF,REGB),VREG3
          ELSEZ                                  IF SOURCE UNSIGNED 
            MOVEZ  (TREGP1OF,REGB),VREG1
            ENDIFZ
  
          SUBZ   ALIGNER,18,T1
          GEN    MASK,(VREGOF,VREG3),(ARITH8,T1)           6*T1 
          GEN    LIMP,(VREGOF,VREG1),VREG1,VREG3
          GEN    SLRBPK,(VREGOF,VREG2),,CBZEROS 
          GEN    LAND,(VREGOF,VREG2),VREG2,VREG3
          GEN    IADD,(VREGOF,VREG1),VREG2,VREG1
          GEN    SHL,VREG1,(ARITH8,T1)                     6*T1 
          MOVEZ  VREG1,(TREGOF,REGC)
          RETURN
  
  
*                            SCALE < -18,  OR 
*                            18 < SCALE 
 RN2RNH8  LABEL 
          NOTE   RN2RNH8
          ERROR  70003B 
          BRANCH RN2RNH1
RN2RNI   EJECT
**       RN2RNI -  SOURCE IS 10-18 DIGITS (SIGNED)
*                   DESTINATION IS 10-18 DIGITS (SIGNED)
*         REGB = DNAT POINTER TO SOURCE REGISTERS.
*         (TREGOF,REGB) = VIRTUAL REGISTER NUMBER OF REGISTER 
*           WITH MOST SIGNIFICANT DIGITS. 
*         (TREGP1OF,REGB) = VIRTUAL REGISTER NUMBER OF REGISTER 
*           WITH LEAST SIGNIFICANT DIGITS.
*         (NUMLENOF,REGB) = NUMBER OF DIGITS. 
*         (SIGNOF,REGB) = 1 IFF SOURCE IS SIGNED. 
*         REGC = DNAT POINTER TO DESTINATION REGISTERS. 
*         (NUMLENOF,REGC) = NUMBER OF DIGITS IN DESTINATION.
*         (SIGNOF,REGC) = 1 IFF DESTINATION IS SIGNED.
*         ALIGNER = SCALE + 18.  (SEE BEGINNING FOR SCALE)
* 
*         CALLZ  RN2RNI 
* 
*         SETS (TREGOF,REGC) = VIRTUAL REGISTER NUMBER OF REGISTER
*           WITH MOST SIGNIFICANT RESULTS.
*         (TREGP1OF,REGC) WILL BE VIRTUAL REGISTER NUMBER OF REGISTER 
*           WITH LEAST SIGNIFICANT RESULTS. 
  
  
 RN2RNI   LABEL 
          IFZ    (ALIGNER,LT,0),RN2RNI9          SCALE < -18
          SUBZ   18,(NUMLENOF,REGB),T1
          IFZ    (ALIGNER,LE,T1),RN2RNI1         -18 <= SCALE <= -LEN(B)
          IFZ    (ALIGNER,LE,8),RN2RNI3          -LEN(B) < SCALE <= -10 
          IFZ    (ALIGNER,LT,18),RN2RNI2         -10 < SCALE < 0
          IFZ    (ALIGNER,EQ,18),RN2RNI4         SCALE = 0
          ADDZ   18,(NUMLENOF,REGC),T1
          IFZ    (ALIGNER,LT,T1),RN2RNI5         0 < SCALE < LEN C
          IFZ    (ALIGNER,LE,36),RN2RNI1         LEN C @ SCALE @ 18 
          BRANCH RN2RNI9                         18 < SCALE 
  
  
*                               -18 <= SCALE <= -LEN(B),  OR
*                            LEN(C) <= SCALE <= 18
 RN2RNI1  LABEL 
          NOTE   RN2RNI1
          GEN    SLRBPK,(VREGOF,VREG1),,CBZEROS 
          GEN    XMIT,(VREGOF,VREG2),VREG1
          MOVEZ  VREG2,(TREGOF,REGC)
          RETURN
  
  
*                                -10 < SCALE < 0,  AND
*                            -LEN(B) < SCALE < 0
 RN2RNI2  LABEL 
  
          NOTE   RN2RNI2
*         SET X.VREG3 TO WORD OF DISPLAY ZEROS, WITH SIGN APPLIED 
          GEN    SLRBPK,(VREGOF,VREG3),,CBZEROS 
          IFTHEN ((SIGNOF,REGB),EQ,1)            IF SOURCE SIGNED 
           ANDIF ((SIGNOF,REGC),EQ,1)             AND DESTINATION SIGNED
            GEN    XMIT,(VREGOF,VREG4),(TREGOF,REGB)  THEN APPLY SOURCE 
            GEN    SHR,VREG4,59                       SIGN TO ZERO FILL 
            GEN    LXOR,(VREGOF,VREG3),VREG3,VREG4
            ENDIFZ
  
          IFTHEN ((SIGNOF,REGB),EQ,1)            IF SOURCE SIGNED 
           ANDIF ((SIGNOF,REGC),EQ,0)             AND DESTINATION UNSIGN
            GEN    XMIT,(VREGOF,VREG4),(TREGOF,REGB)
            GEN    SHR,VREG4,59 
            GEN    LXOR,(VREGOF,VREG6),(TREGOF,REGB),VREG4
            GEN    LXOR,(VREGOF,VREG7),(TREGP1OF,REGB),VREG4
          ELSEZ 
            MOVEZ  (TREGOF,REGB),VREG6
            MOVEZ  (TREGP1OF,REGB),VREG7
            ENDIFZ
  
          SUBZ   18,ALIGNER,T1                   POINTOFB - POINTOFC
          GEN    MASK,(VREGOF,VREG4),(ARITH7,T1)           60-6*T1
          GEN    LIMP,(VREGOF,VREG3),VREG3,VREG4
          GEN    LAND,(VREGOF,VREG5),VREG6,VREG4
          GEN    IADD,(VREGOF,VREG1),VREG5,VREG3
          MOVEZ  (VREGOF,VREG2),VREG2            VREG2 = VREG1 + 1
          GEN    LIMP,(VREGOF,VREG6),VREG6,VREG4
          GEN    SHL,VREG1,(ARITH7,T1)                     60-6*T1
          GEN    LAND,(VREGOF,VREG7),VREG7,VREG4
          GEN    IADD,VREG2,VREG7,VREG6 
          GEN    SHL,VREG2,(ARITH7,T1)                     60-6*T1
          MOVEZ  VREG1,(TREGOF,REGC)
          RETURN
  
  
*                            -LEN(B) < SCALE <= -10 
*                            SO ONLY MOST SIG. SOURCE REGISTER IS USED
 RN2RNI3  LABEL 
          NOTE   RN2RNI3
          SUBZ   18,ALIGNER,T1                   POINTOFB - POINTOFC
  
          IFTHEN ((SIGNOF,REGB),EQ,1) 
           ANDIF ((SIGNOF,REGC),EQ,1) 
            GEN    SLRBPK,(VREGOF,VREG6),,CBZEROS 
            GEN    XMIT,(VREGOF,VREG4),(TREGOF,REGB)
            GEN    SHR,VREG4,59 
            GEN    LXOR,(VREGOF,VREG1),VREG6,VREG4
            MOVEZ  (VREGOF,VREG2),VREG2          VREG2 = VREG1 + 1
          ELSEZ 
            GEN    SLRBPK,(VREGOF,VREG1),,CBZEROS 
            MOVEZ  (VREGOF,VREG2),VREG2          VREG2 = VREG1 + 1
            ENDIFZ
  
          IFTHEN ((SIGNOF,REGB),EQ,1)            IF SOURCE SIGNED 
          ANDIF  ((SIGNOF,REGC),EQ,0) 
            GEN    XMIT,(VREGOF,VREG4),(TREGOF,REGB)
            GEN    SHR,VREG4,59 
            GEN    LXOR,(VREGOF,VREG7),(TREGOF,REGB),VREG4
          ELSEZ 
            MOVEZ  (TREGOF,REGB),VREG7
            ENDIFZ
  
          GEN    MASK,(VREGOF,VREG4),(ARITH7,T1)           60-6*T1
          GEN    LIMP,(VREGOF,VREG6),VREG7,VREG4
          GEN    LAND,(VREGOF,VREG7),(TREGP1OF,REGB),VREG4
          GEN    IADD,VREG2,VREG7,VREG6 
          GEN    SHL,VREG2,(ARITH7,T1)                     60-6*T1
          MOVEZ  VREG1,(TREGOF,REGC)
          RETURN
  
  
*                            SCALE = 0
 RN2RNI4  LABEL 
          NOTE   RN2RNI4
  
          IFTHEN ((SIGNOF,REGB),EQ,1)            IF SOURCE SIGNED 
           ANDIF ((SIGNOF,REGC),EQ,0)             AND DESTINATION UNSIGN
            GEN    XMIT,(VREGOF,VREG3),(TREGOF,REGB)
            GEN    SHR,VREG3,59 
            GEN    LXOR,(VREGOF,VREG1),(TREGOF,REGB),VREG3
            GEN    LXOR,(VREGOF,VREG2),(TREGP1OF,REGB),VREG3 VREG2=*+1
          ELSEZ 
            GEN    XMIT,(VREGOF,VREG1),(TREGOF,REGB)
            GEN    SHLB,(VREGOF,VREG2),,(TREGP1OF,REGB)    VREG2=VREG1+1
            ENDIFZ
  
          MOVEZ  VREG1,(TREGOF,REGC)
          RETURN
  
  
*                            0 < SCALE < LEN C
 RN2RNI5  LABEL 
          SUBZ   ALIGNER,18,T1
          IFZ    (T1,GE,10),RN2RNI7              IF ONLY LEAST SIG. USED
          SUBZ   20,(NUMLENOF,REGB),T2
          IFZ    (T2,GE,T1),RN2RNI6              IF ENOUGH SIGNED ZEROS 
  
          GEN    SLRBPK,(VREGOF,VREG3),,CBZEROS 
          IFTHEN ((SIGNOF,REGB),EQ,1)            IF SOURCE SIGNED 
           ANDIF ((SIGNOF,REGC),EQ,1)             AND DESTINATION SIGNED
            GEN    XMIT,(VREGOF,VREG4),(TREGOF,REGB)
            GEN    SHR,VREG4,59 
            GEN    LXOR,(VREGOF,VREG3),VREG3,VREG4
            ENDIFZ
  
          IFTHEN ((SIGNOF,REGB),EQ,1)            IF SOURCE SIGNED 
           ANDIF ((SIGNOF,REGC),EQ,0)             AND DESTINATION UNSIGN
            GEN    XMIT,(VREGOF,VREG4),(TREGOF,REGB)
            GEN    SHR,VREG4,59 
            GEN    LXOR,(VREGOF,VREG6),(TREGOF,REGB),VREG4
            GEN    LXOR,(VREGOF,VREG7),(TREGP1OF,REGB),VREG4
          ELSEZ 
            MOVEZ  (TREGOF,REGB),VREG6
            MOVEZ  (TREGP1OF,REGB),VREG7
            ENDIFZ
  
          GEN    MASK,(VREGOF,VREG4),(ARITH8,T1)           6*T1 
          GEN    LAND,(VREGOF,VREG3),VREG3,VREG4
          GEN    LIMP,(VREGOF,VREG5),VREG7,VREG4
          MOVEZ  (VREGOF,VREG1),VREG1            RESERVE VREG1
          GEN    IADD,(VREGOF,VREG2),VREG3,VREG5 VREG2 = VREG1 + 1
          GEN    LAND,(VREGOF,VREG7),VREG7,VREG4
          GEN    SHL,VREG2,(ARITH8,T1)                     6*T1 
          GEN    LIMP,(VREGOF,VREG6),VREG6,VREG4
          GEN    IADD,VREG1,VREG7,VREG6 
          GEN    SHL,VREG1,(ARITH8,T1)                     6*T1 
          MOVEZ  VREG1,(TREGOF,REGC)
          RETURN
  
  
*                            0 < SCALE < LEN C
*                            BOTH SOURCE REGISTERS USED 
*                            (TREGOF,REGB) HAS ENOUGH SIGNED ZEROS
 RN2RNI6  LABEL 
          NOTE   RN2RNI6
  
          IFTHEN ((SIGNOF,REGB),EQ,1)            IF SOURCE SIGNED 
           ANDIF ((SIGNOF,REGC),EQ,0)             AND DESTINATION UNSIGN
            GEN    XMIT,(VREGOF,VREG4),(TREGOF,REGB)
            GEN    SHR,VREG4,59 
            GEN    LXOR,(VREGOF,VREG6),(TREGOF,REGB),VREG4
            GEN    LXOR,(VREGOF,VREG7),(TREGP1OF,REGB),VREG4
          ELSEZ 
            MOVEZ  (TREGOF,REGB),VREG6
            MOVEZ  (TREGP1OF,REGB),VREG7
            ENDIFZ
  
          GEN    MASK,(VREGOF,VREG4),(ARITH8,T1)
          GEN    LAND,(VREGOF,VREG3),(TREGOF,REGB),VREG4
          GEN    LIMP,(VREGOF,VREG5),VREG7,VREG4
          MOVEZ  (VREGOF,VREG1),VREG1            RESERVE VREG1
          GEN    IADD,(VREGOF,VREG2),VREG3,VREG5 VREG2 = VREG1 + 1
          GEN    LAND,(VREGOF,VREG7),VREG7,VREG4
          GEN    SHL,VREG2,(ARITH8,T1)                     6*T1 
          GEN    LIMP,(VREGOF,VREG6),VREG6,VREG4
          GEN    IADD,VREG1,VREG7,VREG6 
          GEN    SHL,VREG1,(ARITH8,T1)                     6*T1 
          MOVEZ  VREG1,(TREGOF,REGC)
          RETURN
  
  
*                            0 < SCALE < LEN C
*                            ONLY LEAST SIGNIFICANT REGISTER IS USED
*                            T1 = ALIGNER - 18
 RN2RNI7  LABEL 
          IFZ    (T1,EQ,10),RN2RNI8              IF ALIGNED 
          NOTE   RN2RNI7
          SUBZ   T1,10,T1 
  
          IFTHEN ((SIGNOF,REGB),EQ,1)            IF SOURCE SIGNED 
           ANDIF ((SIGNOF,REGC),EQ,1)             AND DESTINATION SIGNED
            GEN    SLRBPK,(VREGOF,VREG7),,CBZEROS 
            GEN    XMIT,(VREGOF,VREG4),(TREGOF,REGB)
            GEN    SHR,VREG4,59 
            MOVEZ  (VREGOF,VREG1),VREG1          RESERVE VREG1
            GEN    LXOR,(VREGOF,VREG2),VREG7,VREG4  VREG2 = VREG1 + 1 
          ELSEZ 
            MOVEZ  (VREGOF,VREG1),VREG1          RESERVE VREG1
            GEN    SLRBPK,(VREGOF,VREG2),,CBZEROS  VREG2 = VREG1 + 1
            ENDIFZ
  
          IFTHEN ((SIGNOF,REGB),EQ,1)            IF SOURCE SIGNED 
           ANDIF ((SIGNOF,REGC),EQ,0)             AND DESTINATION UNSIGN
            GEN    XMIT,(VREGOF,VREG4),(TREGOF,REGB)
            GEN    SHR,VREG4,59 
            GEN    LXOR,(VREGOF,VREG6),(TREGP1OF,REGB),VREG4
          ELSEZ 
            MOVEZ  (TREGP1OF,REGB),VREG6
            ENDIFZ
  
          GEN    MASK,(VREGOF,VREG4),(ARITH8,T1)           6*T1 
          GEN    LAND,(VREGOF,VREG3),VREG2,VREG4
          GEN    LIMP,(VREGOF,VREG6),VREG6,VREG4
          GEN    IADD,VREG1,VREG2,VREG6 
          GEN    SHL,VREG1,(ARITH8,T1)                     6*T1 
          MOVEZ  VREG1,(TREGOF,REGC)
          RETURN
  
  
*                            0 < SCALE < LEN C
*                            ALIGNED ON UPPER REGISTER
 RN2RNI8  LABEL 
          NOTE   RN2RNI8
  
          IFTHEN ((SIGNOF,REGB),EQ,1)            IF SOURCE SIGNED 
           ANDIF ((SIGNOF,REGC),EQ,0)             AND DESTINATION UNSIGN
            GEN    XMIT,(VREGOF,VREG3),(TREGOF,REGB)
            GEN    SHR,VREG3,59 
            GEN    LXOR,(VREGOF,VREG1),(TREGP1OF,REGB),VREG3
          ELSEZ 
            GEN    XMIT,(VREGOF,VREG1),(TREGP1OF,REGB)
            ENDIFZ
  
          GEN    SLRBPK,(VREGOF,VREG2),,CBZEROS  VREG2 = VREG1 + 1
          MOVEZ  VREG1,(TREGOF,REGC)
          RETURN
  
  
*                            SCALE < -18,  OR 
*                            18 < SCALE 
 RN2RNI9  LABEL 
          NOTE   RN2RNI9
          ERROR  70003B 
          RETURN
RN2RNJ    EJECT 
  
  
COMPRESS  ENDIF 
  
  
  
          SPACE  4
          END 
