*DECK GMOVR2
          IDENT  GMOVR2 
          TITLE  GMOVR2 - GENERATE R22XX MOVES
  
          MACHINE  ANY,I
          SST 
          COMMENT  GENERATE R22XX MOVES 
          SPACE  4
**        GMOVR2 - GENERATE R22XX MOVES 
* 
* R22C1   LINK   CGR22C1
* R22CI   LINK   CGR22C2
* R22ND   LINK   CGR22ND
* R22NE   LINK   CGR22NE
* R22RN   LINK   CGR22RN
* R22R1   LINK   CGR22R1
* R22R2   LINK   CGR22R2
* R22R4   LINK   CGR22R4
* 
*         GENERATES CODE TO PERFORM THE INDICATED MOVE. 
  
  
  
*      COMDECKS 
  
  
  
  
  
 CONTROL  OPSYN  NIL
  
  
  
  
*CALL CCT 
  
          EJECT 
 GMOVR2   MODULE
  
*      REGTABLE EQUATES 
  
  
 MOVEREGA EQU    REGB 
 MOVEREGB EQU    REGC 
 MOVEREGD EQU    REGQ 
 MOVEREGE EQU    REGR 
 MOVEREGF EQU    REGS 
 MOVEREGM EQU    REGM 
  
*      VIRTUAL REGISTER EQUATES 
  
 VREGA    EQU    VREG1
 VREGB    EQU    VREG2
 VREGC    EQU    VREG3
 VREGD    EQU    VREG9
 VREGE    EQU    VREG5
 VREGF    EQU    VREG6
 VREGG    EQU    VREG7
 VREGH    EQU    VREG8
 VREGI    EQU    VREG9
 VREGJ    EQU    VREG10 
 VREGK    EQU    VREG11 
 VREGL    EQU    VREG12 
 VREGU    EQU    VREG16 
 VREGV    EQU    VREG17 
 VREGW    EQU    VREG18 
 VREGX    EQU    VREG4
 VREGAC   EQU    VREG1
  
*      FIXED TABLE EQUATES
  
  
*      MISCELLANEOUS EQUATES
  
  
*      LINKAGE FROM CALLING ROUTINES IN OTHER MODULES 
  
 R22C1    KNIL   CGR22C1
 R22C2    KNIL   CGR22C2
 R22C4    KNIL   CGR2IC4
 R22C4    KNIL   CGR22C4
 R22ND    KNIL   CGR22ND
 R22NE    KNIL   CGR22NE
 R22RN    KNIL   CGR22RN
 R22R1    KNIL   CGR22R1
 R22R2    KNIL   CGR22R2
 R22R4    KNIL   CGR22R4
  
*      LINKAGE TO CALLED ROUTINES IN OTHER MODULES
  
 ADNAT    LINK   ADNAT       * TO CGSTART 
 RN2ND    LINK   CGRN2ND     * TO GMOVSTO 
 RN2NE    LINK   CGRN2NE     * TO GMOVRN
 R12RN    LINK   CGR12RN     * TO GMOVR1
 STORC1C2 LINK   CGSTORC     * TO GMOVSUB 
 STORC4   LINK   STORC4      *  TO GMOVSUB
 SUBDNAT  LINK   SUBDNAT     * TO CGSTART 
  
*      SYMBOLIC PARAMETER DEFINITIONS 
  
 CBFTENS  SETSY  (EXT$OF,C.FTENS),T1
          SPACE  4
          LISTSEC  R22C1
          TITLE  R22C1 -  REGISTER COMP-2 TO COMP-1 
**        R22C1 -  REGISTER COMP-2 TO COMP-1
* 
*         REGB = DNAT POINTER TO SOURCE REGISTER. 
*         (TREGOF,REGB) = VIRTUAL REGISTER NUMBER OF SOURCE REGISTER. 
*         (POINTOF,REGB) = POSITION OF LEAST SIGNIFICANT DIGIT
*           RELATIVE TO DECIMAL POINT.   (E.G. PIC 99PPPP _ -4) 
*         (NUMLENOF,REGB) = NUMBER OF DECIMAL DIGITS. 
*         REGC = DNAT POINTER TO DESTINATION ITEM.
*         (FWA$OF,REGC) = ADDRESS OF DESTINATION ITEM.
*         (POINTOF,REGC) = POSITION OF LEAST SIGNIFICANT DIGIT
*           RELATIVE TO DECIMAL POINT.
* 
*         CALLZ  R22C1
* 
*         GENERATES CODE TO CONVERT TO COMP-1 FORMAT, SCALE, AND
*           STORE THE RESULT IN MEMORY. 
  
*         USES-  REGU1
  
  
 R22C1    EGO    2
          NOTE   R22C1
  
*      CREATE A DUMMY DESTINATION DNAT
  
          MOVEZ  REGU1,REGT                      ENTRY REGU1 _ DNAT 
          CALLZ  ADNAT                           CREATE DNAT
          MOVEZ  (POINTOF,REGC),(POINTOF,REGU1) 
          MOVEZ  (NUMLENOF,REGC),(NUMLENOF,REGU1) 
          MOVEZ  (SIGNOF,REGC),(SIGNOF,REGU1) 
          MOVEZ  VREG1,(TREGOF,REGU1) 
  
*      CONVERT R2 (IN REGB) TO R1 (IN REGU1)
  
          PUSH   REGC                            SAVE ORIG. DESTINATION 
          MOVEZ  REGU1,REGC                      THIS DEST. IS REGU1
          CALLZ  R22R1                           CONVERT (REGB) _ (REGC)
          POP    REGC                            RESTORE ORIGINAL DEST. 
  
*      CONVERT R1 (IN REGU1) TO C1 (IN REGC)
  
 R22C11   LABEL                                  (CROSS-REF FOR NOTE) 
          NOTE   R22C11 
          MOVEZ  (TREGOF,REGU1),P1
          CALLZ  STORC1C2 
  
          CALLZ  SUBDNAT                         DELETE REGU1 DNAT
  
          RETURN
          SPACE  4
          LISTSEC  R22C2
          TITLE  R22C2 -  REGISTER COMP-2 TO COMP-2 
**        R22C2 -  REGISTER COMP-2 TO COMP-2
* 
*         REGB = DNAT POINTER TO SOURCE REGISTER. 
*         (TREGOF,REGB) = VIRTUAL REGISTER NUMBER OF SOURCE REGISTER. 
*         (POINTOF,REGB) = POSITION OF LEAST SIGNIFICANT DIGIT
*           RELATIVE TO DECIMAL POINT.   (E.G. PIC 999V99 _ 2)
*         REGC = DNAT POINTER TO DESTINATION ITEM.
*         (FWA$OF,REGC) = ADDRESS OF DESTINATION ITEM.
*         (POINTOF,REGC) = POSITION OF LEAST SIGNIFICANT DIGIT
*           RELATIVE TO DECIMAL POINT.
* 
*         CALLZ  R22C2
* 
*         GENERATES CODE TO PERFORM ANY NECESSARY SCALING AND 
*           STORE THE RESULT IN MEMORY. 
* 
*         USES-  (NONE) 
  
  
 R22C2    EGO    2
          NOTE   R22C2
          MOVEZ  (POINTOF,REGB),T1
          IFZ    (T1,EQ,0),R22C22                IF NO SCALING
  
  
*                            MULTIPLYING BY 10'(-POINTOF,REGB)
 R22C21   LABEL 
          NOTE   R22C21 
          GEN    SLRBPK,(VREGOF,VREG4),,CBFTENS  (+T1)
          GEN    FMUL,(VREGOF,VREG1),(TREGOF,REGB),VREG4
  
          MOVEZ  VREG1,P1 
          CALLZ  STORC1C2 
          RETURN
  
  
*                            NO SCALING 
 R22C22   LABEL 
          NOTE   R22C22 
          MOVEZ  (TREGOF,REGB),P1 
          CALLZ  STORC1C2 
          RETURN
          SPACE  4
          LISTSEC  R22C4
          TITLE  R22C4 - COMP-2 REGISTER  TO COMP-4 ITEM
************************************************************************
*         R22C4  REGISTER COMP-2 TO COMP-4 ITEM                        *
*                                                                      *
*         REGB=  DNAT POINTER TO SOURCE REGISTER                       *
*                                                                      *
*         CALLZ  R22C4                                                 *
*                                                                      *
*         GENERATES CODE  TO CONVERT  TO COMP-4 FORMAT , SCALE         *
*                AND STORE THE RESULT IN MEMORY                        *
*                                                                      *
*         USES   REGU1                                                 *
************************************************************************
* 
 R22C4    EGO    2
          NOTE   R22C4
* 
*     CREATE A DUMMY DESTINATION DNAT 
* 
          MOVEZ  REGU1,REGT                      SO REGU1 POINTS TO DNAT
          CALLZ  ADNAT
          MOVEZ  (POINTOF,REGC),(POINTOF,REGU1) 
          MOVEZ  (NUMLENOF,REGC),(NUMLENOF,REGU1) 
          MOVEZ  (SIGNOF,REGC),(SIGNOF,REGU1) 
          MOVEZ  VREG1,(TREGOF,REGU1) 
* 
*      CONVERT R2 (IN REGB) TO R1  (IN REGU1) 
* 
          PUSH   REGC                            SAVE ORIGINAL DESTINAT.
          MOVEZ  REGU1,REGC 
          CALLZ  R22R1                           CONVERT AND SCALE
          POP    REGC                            RESTORE ORIGINAL DEST
* 
*      NOW  STORE  RESULT 
* 
 R22C41  LABEL
          MOVEZ  (TREGOF,REGU1),P1
          CALLZ  STORC4                          STORE
          CALLZ  SUBDNAT                         DELETE REGU1 DNAT
          RETURN
          SPACE  4
          LISTSEC  R22ND
          TITLE  R22ND -  REGISTER COMP-2 TO NUMERIC DISPLAY ITEM 
**        R22ND -  REGISTER COMP-2 TO NUMERIC DISPLAY ITEM
* 
*         REGB = DNAT POINTER TO SOURCE REGISTER
*         (TREGOF,REGB) = VIRTUAL REGISTER NUMBER OF SOURCE REGISTER. 
*         REGC = DNAT POINTER TO DESTINATION ITEM.
*         FWARECV = ADDRESS OF DESTINATION. 
*         (NUMLENOF,REGC) = NUMBER OF DIGITS IN DESTINATION FIELD.
*         (POINTOF,REGC) = POSITION OF LEAST SIGNIFICANT DIGIT
*           RELATIVE TO DECIMAL POINT.   (E.G. PIC 999P _ -1) 
*         (SIGNOF,REGC) = 1 IFF DESTINATION IS SIGNED.
*         (LDSIGNOF,REGC) = 1 IFF DESTINATION HAS LEADING SIGN. 
*         (SCHAROF,REGC) = 1 IFF DESTINATION HAS A SEPARATE SIGN. 
* 
*         CALLZ  R22ND
* 
*         GENERATES CODE TO PERFORM THE INDICATED MOVE. 
* 
*         USES-  REGU2
*                REGU1       (BY R22RN) 
  
  
 R22ND    EGO    2
          NOTE   R22ND
  
*      CREATE A DUMMY DNAT
  
          MOVEZ  REGU2,REGT                      ENTRY REGU2 _ DNAT 
          CALLZ  ADNAT                           CREATE DNAT
          MOVEZ  (NUMLENOF,REGC),(NUMLENOF,REGU2) 
          MOVEZ  (POINTOF,REGC),(POINTOF,REGU2) 
          MOVEZ  (SIGNOF,REGC),(SIGNOF,REGU2) 
  
*      CONVERT R2 (IN REGB) TO RN (IN REGU2)
  
          PUSH   REGC                            SAVE ORIG. DESTINATION 
          MOVEZ  REGU2,REGC                      THIS DEST. IS REGU2
          CALLZ  R22RN                           CONVERT (REGB) _ (REGC)
          POP    REGC                            RESTORE ORIGINAL DEST. 
  
*      CONVERT RN (IN REGU2) TO ND (IN REGC)
  
          PUSH   REGB                            SAVE ORIGINAL SOURCE 
          MOVEZ  REGU2,REGB                      THIS DEST. IS REGU2
          CALLZ  RN2ND                           CONVERT (REGB) _ (REGC)
          POP    REGB                            RESTORE ORIGINAL SOURCE
  
          CALLZ  SUBDNAT                         DELETE REGU2 DNAT
          RETURN
          SPACE  4
          LISTSEC  R22NE
          TITLE  R22NE -  REGISTER COMP-2 TO NUMERIC-EDITED ITEM
**        R22NE -  REGISTER COMP-2 TO NUMERIC-EDITED ITEM 
* 
*         REGB = DNAT POINTER TO SOURCE REGISTER. 
*         (TREGOF,REGB) = VIRTUAL REGISTER NUMBER OF SOURCE REGISTER. 
*         (SIGNOF,REGB) = 1 IFF SOURCE IS SIGNED. 
*         REGC = DNAT POINTER TO DESTINATION ITEM.
* 
*         CALLZ  R22NE
* 
*         GENERATES CODE TO PERFORM THE INDICATED MOVE. 
* 
*         USES-  REGU2
*                REGU1       (BY R12RN (VIA R22RN), AND BY RN2NE) 
  
  
 R22NE    EGO    2
          NOTE   R22NE
  
*      CREATE A DUMMY DNAT
  
          MOVEZ  REGU2,REGT                      ENTRY REGU2 _ DNAT 
          CALLZ  ADNAT                           CREATE DNAT
          MOVEZ  (NUMLENOF,REGC),(NUMLENOF,REGU2) 
          MOVEZ  (POINTOF,REGC),(POINTOF,REGU2) 
          MOVEZ  (SIGNOF,REGC),(SIGNOF,REGU2) 
  
*      CONVERT R2 (IN REGB) TO RN (IN REGU2)
  
          PUSH   REGC                            SAVE ORIG. DESTINATION 
          MOVEZ  REGU2,REGC                      THIS DEST. IS REGU2
          CALLZ  R22RN                           CONVERT (REGB) _ (REGC)
          POP    REGC                            RESTORE ORIGINAL DEST. 
  
*      CONVERT RN (IN REGU2) TO NE (IN REGC)
  
          PUSH   REGB                            SAVE ORIGINAL SOURCE 
          MOVEZ  REGU2,REGB                      THIS SOURCE IS REGU2 
          CALLZ  RN2NE                           CONVERT (REGB) _ (REGC)
          POP    REGB                            RESTORE ORIGINAL SOURCE
  
          CALLZ  SUBDNAT                         DELETE REGU2 DNAT
          RETURN
          SPACE  4
          LISTSEC  R22RN
          TITLE  R22RN -  REGISTER COMP-2 TO REGISTER NUMERIC DISPLAY 
**        R22RN -  REGISTER COMP-2 TO REGISTER NUMERIC DISPLAY
* 
*         REGB = DNAT POINTER TO SOURCE REGISTER. 
*         (TREGOF,REGB) = VIRTUAL REGISTER NUMBER OF SOURCE REGISTER. 
*         REGC = DNAT POINTER TO DESTINATION REGISTER(S). 
*         (NUMLENOF,REGC) = NUMBER OF DIGITS IN DESTINATION.
*         (POINTOF,REGC) = POSITION OF LEAST SIGNIFICANT DIGIT
*           RELATIVE TO DECIMAL POINT.   (E.G. PIC 999V99 _ 2)
*         (SIGNOF,REGC) = 1 IFF DESTINATION IS SIGNED.
* 
*         CALLZ  R22RN
* 
*         GENERATES CODE TO PERFORM THE INDICATED MOVE. 
*         SETS (TREGOF,REGC) = VIRTUAL REGISTER NUMBER OF REGISTER
*           CONATINING (MOST SIGNIFICANT PART OF) RESULT. 
*         IF 2-WORD RESULT, (TREGP1OF,REGC) WILL CONTAIN VIRTUAL
*           REGISTER NUMBER OF LEAST SIGNIFICANT PART.
* 
*         USES-  REGU4
*                REGU1       (BY R12RN) 
* 
*         ALSO CALLED BY- 
*                C22NE
*                R22NE
*                R42RN
  
  
 R22RN    EGO    2
          NOTE   R22RN
  
*      CREATE A DUMMY DNAT
  
          MOVEZ  REGU4,REGT                      REGU4 _ DNAT 
          CALLZ  ADNAT                           CREATE DNAT
          MOVEZ  (NUMLENOF,REGC),(NUMLENOF,REGU4) 
          MOVEZ  (POINTOF,REGC),(POINTOF,REGU4) 
          MOVEZ  (SIGNOF,REGC),(SIGNOF,REGU4) 
  
*      CONVERT R2 (IN REGB) TO R1 (IN REGU4)
  
          PUSH   REGC                            SAVE ORIG. DESTINATION 
          MOVEZ  REGU4,REGC                      THIS DEST. IS REGU4
          CALLZ  R22R1                           CONVERT (REGB) _ (REGC)
          POP    REGC                            RESTORE ORIGINAL DEST. 
  
*      CONVERT R1 (IN REGU4) TO RN (IN REGC)
  
          PUSH   REGB 
          MOVEZ  REGU4,REGB                      THIS SOURCE IS REGU4 
          CALLZ  R12RN                           CONVERT (REGB) _ (REGC)
          POP    REGB 
  
          CALLZ  SUBDNAT                         DELETE REGU4 DNAT
          RETURN
          SPACE  4
          LISTSEC  R22R1
          TITLE  R22R1 -  REGISTER COMP-2 TO REGISTER COMP-1
**        R22R1 -  REGISTER COMP-2 TO REGISTER COMP-1 
* 
*         REGB = DNAT POINTER TO SOURCE REGISTER. 
*         (TREGOF,REGB) = VIRTUAL REGISTER NUMBER OF SOURCE REGISTER. 
*         (SIGNOF,REGB) = 1 IFF SOURCE IS SIGNED. 
*         REGC = DNAT POINTER TO DESTINATION REGISTER.
*         (NUMLENOF,REGC) = NUMBER OF DIGITS IN DESTINATION VALUE.
*         (POINTOF,REGC) = POSITION OF LEAST SIGNIFICANT DIGIT
*           RELATIVE TO DECIMAL POINT.   (E.G. PIC 999V99 _ 2)
*         (SIGNOF,REGC) = 1 IFF DESTINATION IS SIGNED.
* 
*         CALLZ  R22R1
* 
*         GENERATES CODE TO PERFORM THE INDICATED MOVE. 
*         SETS (TREGOF,REGC) = VIRTUAL REGISTER NUMBER OF RESULT. 
  
  
 R22R1    EGO    2
          NOTE   R22R1
  
          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                                  IF SIGN TRANSMITTED
            MOVEZ  (TREGOF,REGB),VREG1
            ENDIFZ
  
          SUBZ   (POINTOF,REGC),(POINTOF,REGB),T1 
          IFTHEN  (T1,NE,0) 
            SUBZ   0,T1,T1
            GEN    SLRBPK,(VREGOF,VREG4),,CBFTENS  (+T1)
            GEN    RMUL,(VREGOF,VREG1),VREG1,VREG4
          ENDIFZ
          GEN    UNP,(VREGOF,VREG1),(VREGOF,VREG4),VREG1
          GEN    XMIT,(VREGOF,VREG2),VREG1
          GEN    SHR,VREG2,59 
          GEN    SXBPB,(VREGOF,VREG3),R0,R1 
          GEN    LXOR,(VREGOF,VREG2),VREG2,VREG3
          GEN    IADD,(VREGOF,VREG1),VREG2,VREG1
          GEN    SHLB,(VREGOF,VREG1),VREG4,VREG1
          MOVEZ  VREG1,(TREGOF,REGC)
          CALLZ  R22R1A                          ENSURE RESULT SIZE OK
          RETURN
A         EJECT 
**        R22R1A -  ENSURE THAT THE RESULT IS NOT TOO BIG 
* 
*         (TREGOF,REGC) = V. R. N. OF COMP1 REGISTER. 
*         CALLZ  R12R1A 
* 
*         IF (NUMLENOF,REGB) = 0  (MEANING REGB IS COMP2 OR DPCOMP2)
*          OR IF (NUMLENOF,REGB) > (NUMLENOF,REGC), 
*           THEN THE RESULT WILL BE SET TO THE BINARY VALUE OF
*           THE LEAST SIGNIFICANT (NUMLENOF,REGC) DECIMAL DIGITS. 
*           (TREGOF,REGC) WILL POINT TO THE RESULT REGISTER.
* 
*         CALLED BY-
*                R22R1
  
  
 R22R1A   LABEL 
          IFZ    ((CCTBIT,CHKCOMP1),EQ,0),RETURN IF NOT ASKED FOR 
          MOVEZ  (NUMLENOF,REGB),T1 
          MOVEZ  (NUMLENOF,REGC),T2 
          IFZ    (T1,EQ,0),R22R1A1               IF COMP2/DPCOMP2 
          IFZ    (T1,LE,T2),RETURN               IF ALREADY OK
  
 R22R1A1  LABEL 
          NOTE   R22R1A 
  
          IFTHEN (T2,LE,5)
            MOVEZ  1,T3 
 R22R1A2    LABEL 
            MULTZ  T3,10,T3 
            SUBZ   T2,1,T2
            IFZ    (T2,NE,0),R22R1A2
            GEN    SXBPK,(VREGOF,VREG2),,T3 
          ELSEZ 
            GEN    SLRBPK,(VREGOF,VREG2),,((EXT$OF,C.ITENS),T2) 
            ENDIFZ
  
          GEN    PACK,(VREGOF,VREG1),,(TREGOF,REGC) 
          GEN    NORM,(VREGOF,VREG1),,VREG1 
          GEN    PACK,(VREGOF,VREG3),,VREG2 
          GEN    NORM,(VREGOF,VREG3),,VREG3 
          GEN    FDIV,(VREGOF,VREG3),VREG1,VREG3
          GEN    UNP,(VREGOF,VREG3),(VREGOF,VREG4),VREG3
          GEN    SHLB,(VREGOF,VREG3),VREG4,VREG3
          GEN    IMUL,(VREGOF,VREG3),VREG2,VREG3
          GEN    ISUB,(VREGOF,VREG1),(TREGOF,REGC),VREG3
          MOVEZ  VREG1,(TREGOF,REGC)
          RETURN
          SPACE  4
          LISTSEC  R22R2
          TITLE  R22R2 -  REGISTER COMP-2 TO REGISTER COMP-2
**        R22R2 -  REGISTER COMP-2 TO REGISTER COMP-2 
* 
*         REGB = DNAT POINTER TO SOURCE REGISTER. 
*         (TREGOF,REGB) = VIRTUAL REGISTER NUMBER OF SOURCE REGISTER. 
*         (SIGNOF,REGB) = 1 IFF SOURCE IS SIGNED. 
*         REGC = DNAT POINTER TO DESTINATION REGISTER.
*         (SIGNOF,REGC) = 1 IFF DESTINATION IS SIGNED.
* 
*         CALLZ  R22R2
* 
*         GENERATES CODE TO PERFORM THE INDICATED MOVE. 
*         SETS (TREGOF,REGC) = VIRTUAL REGISTER NUMBER OF RESULT REG. 
  
  
 R22R2    EGO    2
          NOTE   R22R2
  
          IFTHEN ((SIGNOF,REGB),NE,0)            IF SOURCE SIGNED 
           ANDIF ((SIGNOF,REGC),EQ,0)              AND DEST. UNSIGNED 
            GEN    XMIT,(VREGOF,VREG3),(TREGOF,REGB)
            GEN    SHR,VREG3,59 
            GEN    LXOR,(VREGOF,VREG1),VREG3,(TREGOF,REGB)
          ELSEZ 
            MOVEZ  (TREGOF,REGB),VREG1
            ENDIFZ
  
          SUBZ   (POINTOF,REGB),(POINTOF,REGC),T1 
          IFTHEN (T1,NE,0)
            GEN  SLRBPK,(VREGOF,VREG4),,CBFTENS (+T1) 
            GEN    RMUL,(VREGOF,VREG1),VREG1,VREG4
          ENDIFZ
          MOVEZ  VREG1,(TREGOF,REGC)
          RETURN
          SPACE  4
          LISTSEC  R22R4
          TITLE  R22R4 -  REGISTER COMP-2 TO REGISTER D.P. COMP-2 
**        R22R4 -  REGISTER COMP-2 TO REGISTER D.P. COMP-2
* 
*         REGB = DNAT POINTER TO SOURCE REGISTER. 
*         (TREGOF,REGB) = VIRTUAL REGISTER NUMBER OF SOURCE REGISTER. 
*         (SIGNOF,REGB) = 1 IFF SOURCE IS SIGNED. 
*         REGC = DNAT POINTER TO DESTINATION REGISTER.
*         (SIGNOF,REGC) = 1 IFF DESTINATION IS SIGNED.
* 
*         CALLZ  R22R4
* 
*         GENERATES CODE TO PERFORM THE INDICATED MOVE. 
*         SETS (TREGOF,REGC) = VIRTUAL REGISTER NUMBER OF REGISTER
*           CONTAINING MOST SIGNIFICANT PART OF RESULT. 
*         (TREGP1OF,REGC) WILL CONTAIN VIRTUAL REGISTER NUMBER OF 
*           REGISTER CONTAINING LEAST SIGNIFICANT PART OF RESULT. 
  
  
 R22R4    EGO    2
          NOTE   R22R4
          GEN    XMIT,(VREGOF,VREG1),(TREGOF,REGB)
          SUBZ   (POINTOF,REGB),(POINTOF,REGC),T1 
          IFTHEN (T1,NE,0)
            GEN  SLRBPK,(VREGOF,VREG4),,CBFTENS (+T1) 
            GEN  FMUL,(VREGOF,VREG1),VREG1,VREG4
          ENDIFZ
          IFZ    ((SIGNOF,REGB),EQ,0),R22R41     IF SOURCE UNSIGNED 
          IFZ    ((SIGNOF,REGC),EQ,1),R22R41     IF DESTINATION SIGNED
  
          NOTE   R22R4
  
          GEN    XMIT,(VREGOF,VREG2),VREG1
          GEN    SHR,VREG2,59 
          GEN    LXOR,(VREGOF,VREG1),VREG1,VREG2
          GEN    MASK,(VREGOF,VREG2),0
  
          MOVEZ  VREG1,(TREGOF,REGC)
          RETURN
  
  
*                            SOURCE SIGN IS PRESERVED 
 R22R41   LABEL 
          NOTE   R22R41 
          GEN    XMIT,(VREGOF,VREG2),(TREGOF,REGB)
          GEN    SHR,VREG2,59 
          MOVEZ  VREG1,(TREGOF,REGC)
          RETURN
          SPACE  4
          LISTSEC  *
          END 
