*DECK GMOVC1
          IDENT  GMOVC1 
          TITLE  GMOVC1 - GENERATE C12XX MOVES
  
          MACHINE  ANY,I
          SST 
          COMMENT  GENERATE C12XX MOVES 
          SPACE  4
**        GMOVC1 - GENERATE C12XX MOVES 
* 
* C12AE   LINK   CGC12AE
* C12AN   LINK   CGC12AN
* C12C1   LINK   CGC12C1
* C12C2   LINK   CGC12C2
* C12ND   LINK   CGC12ND
* C12NE   LINK   CGC12NE
* C12R1   LINK   CGC12R1
* C12R2   LINK   CGC12R2
* C12R4   LINK   CGC12R4
* 
*         REGB = DNAT POINTER TO SOURCE.
*         REGC = DNAT POINTER TO DESTINATION
* 
*         GENERATES CODE TO PERFORM THE INDICATED MOVE. 
  
  
  
*      COMDECKS 
  
  
  
  
  
 CONTROL  OPSYN  NIL
  
  
  
  
*CALL CCT 
  
          EJECT 
 GMOVC1   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 
  
 C12AE    KNIL   CGC12AE
 C12AN    KNIL   CGC12AN
 C12C1    KNIL   CGC12C1
 C12C2    KNIL   CGC12C2
 C12C4    KNIL   CGC12C4
 C12ND    KNIL   CGC12ND
 C12NE    KNIL   CGC12NE
 C12R1    KNIL   CGC12R1
 C12R2    KNIL   CGC12R2
 C12R4    KNIL   CGC12R4
  
*      LINKAGE TO CALLED ROUTINES IN OTHER MODULES
  
 ADNAT    LINK   ADNAT       * TO CGSTART 
 LOADC1C2 LINK   CGLOADC     * TO GMOVSUB 
 RN2AE    LINK   CGRN2AE     * TO GMOVRN
 RN2ND    LINK   CGRN2ND     * TO GMOVRN
 RN2NE    LINK   CGRN2NE     * TO GMOVRN
 R12RN    LINK   CGR12RN     * TO GMOVR1
 R12R1    LINK   CGR12R1     * TO GMOVR1
 R12R2    LINK   CGR12R2     * TO GMOVR1
 STORC1C2 LINK   CGSTORC     * TO GMOVSUB 
 STORC4   LINK   STORC4      * TO GMOVSUB 
 SUBDNAT  LINK   SUBDNAT     * TO CGSTART 
 SUBLOAD  LINK   SUBLOAD     * TO GSUBSC
 SETBREG  LINK   CGSETB4
 SETXREG  LINK   CGSETXW
 SUBREF   LINK   SUBREF 
  
*      SYMBOLIC PARAMETER DEFINITIONS 
  
 CBFTENS  SETSY  (EXT$OF,C.FTENS),T1
          SPACE  4
          LISTSEC  C12AE
          TITLE  C12AE -  COMP-1 ITEM TO ALPHANUMERIC-EDITED ITEM 
**        C12AE -  COMP-1 ITEM TO ALPHANUMERIC-EDITED ITEM
* 
*         REGB = DNAT POINTER TO SOURCE ITEM. 
*         FWASOURC = ADDRESS OF SOURCE ITEM.
*         (NUMLENOF,REGB) = NUMBER OF DIGITS IN SOURCE ITEM.
*         (POINTOF,REGB) = POSITION OF LEAST SIGNIFICANT DIGIT
*           RELATIVE TO DECIMAL POINT.   (E.G. PIC 999PP _ -2)
*         (SIGNOF,REGB) = 1 IFF SOURCE IS SIGNED. 
*         REGC = DNAT POINTER TO DESTINATION ITEM.
* 
*         CALLZ  C12AE
* 
*         USES-  REGU2
*                REGU1       (BY RN2AE) 
  
  
 C12AE    EGO    2
          NOTE   C12AE
  
*      LOAD THE SOURCE WORD INTO REGISTER VREG1 
  
          CALLZ  LOADC1C2 
  
*      CREATE A DUMMY SOURCE DNAT 
  
          MOVEZ  REGU2,REGT                      ENTRY REGU2 _ DNAT 
          CALLZ  ADNAT                           CREATE DNAT
          MOVEZ  VREG1,(TREGOF,REGU2) 
          MOVEZ  (NUMLENOF,REGB),(NUMLENOF,REGU2) 
          MOVEZ  (POINTOF,REGB),(POINTOF,REGU2) 
          MOVEZ  0,(SIGNOF,REGU2) 
  
*      CREATE A DUMMY DESTINATION DNAT
  
          MOVEZ  REGU3,REGT                      ENTRY REGU3 _ DNAT 
          CALLZ  ADNAT                           CREATE DNAT
          SUBZ   (NUMLENOF,REGB),(POINTOF,REGB),(NUMLENOF,REGU3)
          MOVEZ  0,(POINTOF,REGU3)
          MOVEZ  0,(SIGNOF,REGU3) 
  
*      CONVERT R1 (IN REGU2) TO RN (IN REGU3) 
  
          PUSH   REGB,REGC
          MOVEZ  REGU2,REGB 
          MOVEZ  REGU3,REGC                      THIS DEST. IS REGU3
          CALLZ  R12RN                           MOVE (REGB) TO (REGC)
          POP    REGB,REGC                       RESTORE
  
*      CONVERT RN (IN REGU3) TO AE (IN REGC)
  
          PUSH   REGB                            SAVE ORIGINAL SOURCE 
          MOVEZ  REGU3,REGB                      THIS SOURCE IS REGU3 
          CALLZ  RN2AE                           MOVE (REGB) TO (REGC)
          POP    REGB                            RESTORE ORIGINAL SOURCE
  
          CALLZ  SUBDNAT                         DELETE REGU3 DNAT
          CALLZ  SUBDNAT                         DELETE REGU2 DNAT
          RETURN
          SPACE  4
          LISTSEC  C12AN
          TITLE  C12AN -  COMP-1 ITEM TO ALPHANUMERIC ITEM
**        C12AN -  COMP-1 ITEM TO ALPHANUMERIC ITEM 
* 
*         REGB = DNAT POINTER TO SOURCE ITEM. 
*         FWASOURC = ADDRESS OF SOURCE ITEM.
*         (NUMLENOF,REGB) = NUMBER OF DIGITS IN SOURCE. 
*         (POINTOF,REGB) = POSITION OF LEAST SIGNIFICANT DIGIT
*           RELATIVE TO DECIMAL POINT.   (E.G. PIC 999P _ -1) 
*         (SIGNOF,REGB) = 1 IFF SOURCE IS SIGNED. 
*         REGC = DNAT POINTER TO DESTINATION ITEM.
* 
*         CALLZ  C12AN
* 
*         GENERATES CODE TO PERFORM THE INDICATED MOVE. 
  
  
 C12AN    EGO    2
  
*      CREATE A TEMPORARY DNAT ENTRY REFERENCED BY REGTABL ENTRY REGU1
  
          MOVEZ  REGU3,REGT 
          CALLZ  ADNAT
  
*      CREATE A TEMPORARY DNAT ENTRY REFERENCED BY REGTABL ENTRY REGU2
  
          MOVEZ  REGU2,REGT 
          CALLZ  ADNAT
  
*      MOVE C1 (IN REGB) TO R1 (IN REGU1) 
  
          NOTE   C12AN1 
          CALLZ  LOADC1C2 
          MOVEZ  VREG1,(TREGOF,REGU3) 
          MOVEZ  (NUMLENOF,REGB),(NUMLENOF,REGU3) 
          MOVEZ  (POINTOF,REGB),(POINTOF,REGU3) 
          MOVEZ  (SIGNOF,REGB),(SIGNOF,REGU3) 
  
*      MOVE R1 (IN REGU1) TO RN (IN REGU2)
  
          MINZ   (INTLENOF,REGU3),(BYTLENOF,REGC),(NUMLENOF,REGU2)
*         MOVEZ  0,(POINTOF,REGU2)               (SET BY ADNAT) 
*         MOVEZ  0,(SIGNOF,REGU2)                (SET BY ADNAT) 
          PUSH   REGB,REGC
          MOVEZ  REGU3,REGB 
          MOVEZ  REGU2,REGC 
          CALLZ  R12RN
          POP    REGB,REGC
  
*      STORE RN (IN REGU2) INTO C.BUFF
  
          NOTE   C12AN2 
          MOVEZ  (NUMLENOF,REGU2),T1
          GEN    SSRBPK,(TREGOF,REGU2),,((EXT$OF,C.BUFF)) 
  
          IFTHEN (T1,GT,10) 
            GEN    SSRAPB,(TREGP1OF,REGU2),(TREGOF,REGU2),VREGB1
            ENDIFZ
  
*      MOVE ITEM IN C.BUFF TO AN (IN REGC)
  
          GEN    SBBPK,(VREGOF,VREG3),,((FWA$OF,REGC))     FWA RECEIVING
          IFTHEN ((GSCODEOF,REGC),EQ,0)          NOT SUBSCRIPTED
            GEN    SBBPK,(VREGOF,VREG4),,(BCPOF,REGC) 
          ELSEZ 
          MOVEZ  (GSCODEOF,REGC),T2 
            IFZ    ((RFLCPTYP,T2),NE,0),C12RM 
            PUSH   T1 
            MOVEZ  (GSCODEOF,REGC),P1 
            CALLZ  SUBLOAD
            GEN    SHR,P1,30
            GEN    SBXPK,(VREGOF,VREG4),P1,(BCPOF,REGC) 
            POP    T1 
          ENDIFZ
          GEN    SBBPK,(VREGOF,VREG5),,((EXT$OF,C.BUFF))   FWA SOURCE 
  
          MOVEZ  10,T2
          IFTHEN (T1,GT,10) 
            MOVEZ  20,T2
            ENDIFZ
          SUBZ   T2,T1,T2 
          GEN    SBBPK,(VREGOF,VREG6),,T2                  BCP SOURCE 
  
          GEN    SBBPK,(VREGOF,VREG7),,T1        NO. CHARACTERS TO MOVE 
  
          SUBZ   T1,(BYTLENOF,REGC),T2           NO. BLANKS TO PREFIX 
          IFTHEN ((JUSTOF,REGC),NE,0) 
            SUBZ   0,T2,T2                       INDICATE SUFFIX
            ENDIFZ
          GEN    SXBPK,(VREGOF,VREG2),,T2        BLANKS TO PAD
  
          GENOBJ N=C.MOVN,I=(VREG3,VREG4,VREG5,VREG6,VREG7,VREG2) 
  
          CALLZ  SUBDNAT                         DELETE REGU2 DNAT
          CALLZ  SUBDNAT                         DELETE REGU1 DNAT
          RETURN
 C12RM    LABEL 
          NOTE   C12RM
          GEN    SBBPK,(VREGOF,VREG1),,((EXT$OF,C.BUFF))
          GEN    MASK,(VREGOF,VREG2),0
          MOVEZ  REGC,P2
          CALLZ  SUBREF 
          GEN    SBXPB,(VREGOF,VREG6),P3
          MOVEZ  P4,VREG5 
          MOVEZ  10,T2
          IFTHEN ((NUMLENOF,REGU2),GT,10) 
            MOVEZ  20,T2
          ENDIFZ
          SUBZ   T2,(NUMLENOF,REGU2),P1 
          CALLZ  SETBREG
          MOVEZ  (NUMLENOF,REGU2),P1
          CALLZ  SETXREG
          GENOBJ N=C.MOVRF,I=(VREG3,VREG6,VREG1,VREGX,VREG2,VREGW,VREG5,
,)
          RETURN
          SPACE  4
          LISTSEC  C12C1
          TITLE  C12C1 -  COMP-1 ITEM TO COMP-1 ITEM
**        C12C1 -  COMP-1 ITEM TO COMP-1 ITEM 
* 
*         REGB = DNAT POINTER TO DOURCE ITEM. 
*         FWASOURC = ADDRESS OF SOURCE ITEM.
*         (NUMLENOF,REGB) = NUMBER OF DIGITS IN SOURCE. 
*         (POINTOF,REGB) = POSITION OF LEAST SIGNIFICANT DIGIT
*           RELATIVE TO DECIMAL POINT.   (E.G. PIC 999PP _ -2)
*         (SIGNOF,REGB) = 1 IFF SOURCE IS SIGNED. 
*         REGC = DNAT POINTER TO DESTINATION ITEM.
*         FWARECV = ADDRESS OF DESTINATION ITEM.
*         (NUMLENOF,REGC) = NUMBER OF DIGITS IN DESTINATION VALUE.
*         (POINTOF,REGC) = POSITION OF LEAST SIGNIFICANT DIGIT
*           RELATIVE TO DECIMAL POINT.   (E.G. PIC 999V9 _ 1) 
*         (SIGNOF,REGC) = 1 IFF DESTINATION IS SIGNED.
* 
*         CALLZ  C12C1
* 
*         GENERATES CODE TO PERFORM THE INDICATED MOVE. 
* 
*         USES-  REGU1
*                REGU2
  
  
 C12C1    EGO    2
          NOTE   C12C1
  
*      LOAD THE SOURCE WORD INTO REGISTER VREG1 
  
          CALLZ  LOADC1C2 
  
*      CREATE A DUMMY DNAT
  
          MOVEZ  REGU1,REGT 
          CALLZ  ADNAT                           CREATE DNAT
          MOVEZ  VREG1,(TREGOF,REGU1) 
          MOVEZ  (NUMLENOF,REGB),(NUMLENOF,REGU1) 
          MOVEZ  (POINTOF,REGB),(POINTOF,REGU1) 
          MOVEZ  (SIGNOF,REGB),(SIGNOF,REGU1) 
  
*      CREATE ANOTHER DUMMY DNAT
  
          MOVEZ  REGU2,REGT 
          CALLZ  ADNAT                           CREATE DNAT
          MOVEZ  (NUMLENOF,REGC),(NUMLENOF,REGU2) 
          MOVEZ  (POINTOF,REGC),(POINTOF,REGU2) 
          MOVEZ  (SIGNOF,REGC),(SIGNOF,REGU2) 
  
*      SCALE R1 (IN REGU1) TO R1 (IN REGU2) 
  
          PUSH   REGB,REGC                       SAVE ORIG. SOURCE, DEST
          MOVEZ  REGU1,REGB                      THIS SOURCE IS REGU1 
          MOVEZ  REGU2,REGC                      THIS DEST. IS REGC 
          CALLZ  R12R1                           MOVE (REGB) TO (REGC)
          POP    REGB,REGC                       RESTORE
  
*      STORE THE RESULT 
  
 C12C11   LABEL                                  (CROSS-REFS ONLY)
          NOTE   C12C11 
          MOVEZ  (TREGOF,REGU2),P1               RESULT REGISTER
          CALLZ  STORC1C2 
  
          CALLZ  SUBDNAT                         DELETE REGU2 DNAT
          CALLZ  SUBDNAT                         DELETE REGU1 DNAT
          RETURN
          SPACE  4
          LISTSEC  C12C2
          TITLE  C12C2 -  COMP-1 ITEM TO COMP-2 ITEM
**        C12C2 -  COMP-1 ITEM TO COMP-2 ITEM 
* 
*         REGB = DNAT POINTER TO SOURCE ITEM. 
*         FWASOURC = ADDRESS OF SOURCE ITEM.
*         (POINTOF,REGB) = POSITION OF LEAST SIGNIFICANT DIGIT
*           RELATIVE TO DECIMAL POINT.   (E.G. PIC 999V99 _ 2)
*         (SIGNOF,REGB) = 1 IFF SOURCE IS SIGNED. 
*         REGC = DNAT POINTER TO DESTINATION ITEM.
*         FWARECV = ADDRESS OF DESTINATION ITEM.
*         (SIGNOF,REGC) = 1 IFF DESTINATION IS SIGNED.
* 
*         CALLZ  C12C2
* 
*         GENERATES CODE TO PERFORM THE INDICATED MOVE. 
* 
*         USES-  REGU2
*                REGU1
*                SAVREGB1 
*                SAVREGC1 
  
  
 C12C2    EGO    2
          NOTE   C12C2
  
*      LOAD THE SOURCE WORD INTO REGISTER VREG1 
  
          CALLZ  LOADC1C2 
  
          SUBZ   0,(POINTOF,REGB),T1
          IFZ    (T1,EQ,0),C12C22                IF NO SCALING
          IFZ    (T1,EQ,1),C12C23                IF MULT BY 10
          SUBZ   0,T1,T1
  
  
*                            MULTIPLYING BY 10'(-POINTOF,REGB)
 C12C21   LABEL 
          NOTE   C12C21 
          GEN    SLRBPK,(VREGOF,VREG4),,CBFTENS  (+T1)
          GEN    PACK,(VREGOF,VREG1),,VREG1 
          GEN    NORM,(VREGOF,VREG1),,VREG1 
          GEN    FMUL,(VREGOF,VREG1),VREG1,VREG4
          MOVEZ  VREG1,P1 
          CALLZ  STORC1C2 
          RETURN
  
  
*                            NO SCALING 
 C12C22   LABEL 
          NOTE   C12C22 
          GEN    PACK,(VREGOF,VREG1),,VREG1 
          GEN    NORM,(VREGOF,VREG1),,VREG1 
          MOVEZ  VREG1,P1 
          CALLZ  STORC1C2 
          RETURN
  
  
*                            MULTIPLYING BY 10
 C12C23   LABEL 
          NOTE   C12C23 
          GEN    IADD,(VREGOF,VREG1),VREG1,VREG1
          GEN    SHL,(TREGOF,REGB),3
          GEN    IADD,(VREGOF,VREG1),VREG1,(TREGOF,REGB)   *10
          GEN    PACK,(VREGOF,VREG1),,VREG1 
          GEN    NORM,(VREGOF,VREG1),,VREG1 
          MOVEZ  VREG1,P1 
          CALLZ  STORC1C2 
          RETURN
          SPACE  4
          LISTSEC  C12ND
          SPACE  4
          LISTSEC  C12C4
          TITLE  C12C4   - COMP-1 TO COMP-4 ITEM
************************************************************************
*         C12C4  -COMP-1 ITEM TO COMP-4 ITEM                           *
*                                                                      *
*         CALLZ  C12C4                                                 *
*                                                                      *
*         GENERATE CODE TO PERFORM THE INDICATED MOVE                  *
*                                                                      *
*         USES   REGU1                                                 *
*                REGU2                                                 *
************************************************************************
 C12C4    EGO    2
          NOTE   C12C4
*      LOAD SOURCE INTO REGISTER VREG1
* 
          CALLZ  LOADC1C2 
* 
*      CREATE DUMMY DNAT
* 
          MOVEZ  REGU1,REGT 
          CALLZ  ADNAT
          MOVEZ  VREG1,(TREGOF,REGU1) 
          MOVEZ  (NUMLENOF,REGB),(NUMLENOF,REGU1) 
          MOVEZ  (POINTOF,REGB),(POINTOF,REGU1) 
          MOVEZ  (SIGNOF,REGB),(SIGNOF,REGU1) 
* 
*      CREATE ANOTHER DUMMY DNAT
* 
          MOVEZ  REGU2,REGT 
          CALLZ  ADNAT
          MOVEZ  (NUMLENOF,REGC),(NUMLENOF,REGU2) 
          MOVEZ  (POINTOF,REGC),(POINTOF,REGU2) 
          MOVEZ  (SIGNOF,REGC),(SIGNOF,REGU2) 
* 
*      SCALE R1 (IN REGU1) TO R1 (IN REGU2) 
* 
          PUSH   REGB,REGC                       SAVE ORIG SOURC DEST 
          MOVEZ  REGU1,REGB 
          MOVEZ  REGU2,REGC 
          CALLZ  R12R1
          POP    REGB,REGC                       RESTORE
* 
*      STORE RESULT 
* 
 C12C41   LABEL 
          NOTE   C12C41 
          MOVEZ  (TREGOF,REGU2),P1               RESULT REGISTER
          CALLZ  STORC4 
          CALLZ  SUBDNAT
          CALLZ  SUBDNAT
          RETURN
          TITLE  C12ND -  COMP-1 ITEM TO NUMERIC DISPLAY ITEM 
**        C12ND -  COMP-1 ITEM TO NUMERIC DISPLAY ITEM
* 
*         REGB = DNAT POINTER TO SOURCE ITEM
*         FWASOURC = ADDRESS OF SOURCE. 
*         (NUMLENOF,REGB) = NUMBER OF DIGITS IN SOURCE. 
*         (POINTOF,REGB) = POSITION OF LEAST SIGNIFICANT DIGIT
*           RELATIVE TO DECIMAL POINT.   (E.G. PIC 999PP _ -2)
*         (SIGNOF,REGB) = 1 IFF SOURCE IS SIGNED. 
*         REGC = DNAT POINTER TO DESTINATION ITEM.
*         FWARECV = ADDRESS OF DESTINATION. 
*         (NUMLENOF,REGC) = NUMBER OF DIGITS IN DESTINATION.
*         (POINTOF,REGC) = POSITION OF LEAST SIGNIFICANT DIGIT
*           RELATIVE TO DECIMAL POINT.
*         (SIGNOF,REGC) = 1 IFF DESTINATION IS SIGNED.
*         (LDSIGNOF,REGC) = 1 IFF DESTINATION HAS A LEADING SIGN. 
*         (SCHAROF,REGC) = 1 IFF DESTINATION HAS A SEPARATE SIGN. 
* 
*         CALLZ  C12ND
* 
*         GENERATES CODE TO PERFORM THE INDICATED MOVE. 
* 
*         USES-  REGU2
*                REGU1       (BY R12RN) 
  
  
 C12ND    EGO    2
          NOTE   C12ND
  
*      LOAD THE SOURCE INTO A REGISTER
  
          CALLZ  LOADC1C2 
  
*      CREATE A DUMMY DNAT
  
          MOVEZ  REGU2,REGT 
          CALLZ  ADNAT                           CREATE DNAT
          MOVEZ  VREG1,(TREGOF,REGU2) 
          MOVEZ  (POINTOF,REGB),(POINTOF,REGU2) 
          MOVEZ  (NUMLENOF,REGB),(NUMLENOF,REGU2) 
          MOVEZ  (SIGNOF,REGB),(SIGNOF,REGU2) 
  
*      CREATE ANOTHER DUMMY DNAT
  
          MOVEZ  REGU3,REGT 
          CALLZ  ADNAT                           CREATE DNAT
          MOVEZ  (NUMLENOF,REGB),(NUMLENOF,REGU3) 
          MOVEZ  (POINTOF,REGB),(POINTOF,REGU3) 
          MOVEZ  (SIGNOF,REGC),(SIGNOF,REGU3) 
  
*      CONVERT R1 (IN REGU2) TO RN (IN REGU3) 
  
          PUSH   REGB,REGC
          MOVEZ  REGU2,REGB 
          MOVEZ  REGU3,REGC 
          CALLZ  R12RN
          POP    REGB,REGC
  
*      CONVERT RN (IN REGU3) TO ND (IN REGC)
  
          PUSH   REGB 
          MOVEZ  REGU3,REGB 
          CALLZ  RN2ND
          POP    REGB 
  
          CALLZ  SUBDNAT                         DELETE REGU3 DNAT
          CALLZ  SUBDNAT                         DELETE REGU2 DNAT
          RETURN
          SPACE  4
          LISTSEC  C12NE
          TITLE  C12NE -  COMP-1 ITEM TO NUMERIC-EDITED ITEM
**        C12NE -  COMP-1 ITEM TO NUMERIC-EDITED ITEM 
* 
*         REGB = DNAT POINTER TO SOURCE ITEM. 
*         FWASOURC = ADDRESS OF SOURCE ITEM.
*         (NUMLENOF,REGB) = NUMBER OF DIGITS IN SOURCE. 
*         "POINTOF,REGB) = POSITION OF LEAST SIGNIFICANT DIGIT
*           RELATIVE TO DECIMAL POINT.   (E.G. PIC 999V99 _ 1)
*         (SIGNOF,REGB) = 1 IFF SOURCE IS SIGNED. 
*         REGC = DNAT POINT TO DESTINATION ITEM.
* 
*         CALLZ  C12NE
* 
*         GENERATES CODE TO PERFORM THE INDICATED MOVE. 
*         USES-  REGU2
*                REGU3
*                SAVREGB1 
*                SAVREGC2 
*                REGU1       (BY R12RN AND RN2NE) 
*                SAVREGC1    (BY R12RN AND RN2NE) 
  
  
 C12NE    EGO    2
          NOTE   C12NE
  
*      LOAD THE SOURCE WORD INTO REGISTER VREG1 
  
          CALLZ  LOADC1C2 
  
*      DESCRIBE R1 (IN REGU2) 
  
          MOVEZ  REGU2,REGT                      REGU2 _ REGTABL/DNAT 
          CALLZ  ADNAT                           CREATE DNAT
          MOVEZ  VREG1,(TREGOF,REGU2) 
          MOVEZ  (NUMLENOF,REGB),(NUMLENOF,REGU2) 
          MOVEZ  (POINTOF,REGB),(POINTOF,REGU2) 
          MOVEZ  (SIGNOF,REGB),(SIGNOF,REGU2) 
  
*      CREATE DESTINATION RN (IN REGU3) 
  
          MOVEZ  REGU3,REGT                      REGU3 _ REGTABL/DNAT 
          CALLZ  ADNAT                           CREATE DNAT
          MOVEZ  (NUMLENOF,REGB),(NUMLENOF,REGU3) 
          MOVEZ  (POINTOF,REGB),(POINTOF,REGU3) 
          MOVEZ  (SIGNOF,REGC),(SIGNOF,REGU3) 
  
*      CONVERT R1 (IN REGU2) TO RN (IN REGU3) 
  
          PUSH   REGB                            SAVE ORIGINAL SOURCE 
          PUSH   REGC                            SAVE ORIGINAL DEST.
          MOVEZ  REGU2,REGB                      THIS SOURCE IS REGU2 
          MOVEZ  REGU3,REGC                      THIS DEST. IS REGU3
          CALLZ  R12RN                           CONVERT (REGB) _ (REGC)
          POP    REGC                            RESTORE ORIGINAL DEST. 
  
*      CONVERT RN (IN REGU3) TO NE (IN REGC)
  
          MOVEZ  REGU3,REGB                      THIS SOURCE IS REGU3 
          CALLZ  RN2NE                           CONVERT (REGB) _ (REGC)
          POP    REGB                            RESTORE ORIGINAL SOURCE
  
          CALLZ  SUBDNAT                         DELETE REGU3 DNAT
          CALLZ  SUBDNAT                         DELETE REGU2 DNAT
          RETURN
          SPACE  4
          LISTSEC  C12R1
          TITLE  C12R1 -  COMP-1 ITEM TO REGISTER COMP-1
**        C12R1 -  COMP-1 TO REGISTER COMP-1
* 
*         REGB = DNAT POINTER TO SOURCE ITEM. 
*         (POINTOF,REGB) = POSITION OF LEAST SIGNIFICANT DIGIT
*           RELATIVE TO DECIMAL POINT.  (E.G. PIC 99P _ 1)
*         (NUMLENOF,REGB) = NUMBER OF DECIMAL DIGITS. 
*         (FWA$OF,REGB) = ADDRESS 
*         REGC = DNAT POINTER FOR DESTINATION REGISTER
*         (POINTOF,REGC) = POSITION OF LEAST SIGNIFICANT DIGIT
*           RELATIVE TO DECIMAL POINT.  (E.G. PIC P99 _ -3) 
* 
*         CALLZ  C12R1
* 
*         SETS (TREGOF,REGC) = VIRTUAL REGISTER NUMBER OF RESULT REG. 
*         GENERATES CODE TO PERFORM NECESSARY SCALING AND PUT 
*           THE RESULT IN A REGISTER. 
*         USES-  REGU1
*                SAVREGB1 
  
  
 C12R1    EGO    2
          NOTE   C12R1
  
*      LOAD THE SOURCE WORD INTO REGISTER VREG1 
  
          CALLZ  LOADC1C2 
  
*      CREATE A DUMMY SOURCE DNAT 
  
          MOVEZ  (EQUALS,REGU1),REGT             REGU1 TO POINT TO DNAT 
          CALLZ  ADNAT                           CREATE DNAT
          MOVEZ  (POINTOF,REGB),(POINTOF,REGU1) 
          MOVEZ  (NUMLENOF,REGB),(NUMLENOF,REGU1) 
          MOVEZ  VREG1,(TREGOF,REGU1) 
  
*      SCALE R1 (IN REGU1) TO R1  (IN REGC) 
  
          PUSH   REGB                            SAVE ORIGINAL SOURCE 
          MOVEZ  (EQUALS,REGU1),REGB             THIS SOURCE IS REGU1 
          CALLZ  R12R1                           SCALE (REGB) _ (REGC)
          POP    REGB                            RESTORE ORIGINAL SOURCE
  
          CALLZ  SUBDNAT                         DELETE DUMMY DNAT
  
          RETURN
          SPACE  4
          LISTSEC  C12R2
          TITLE  C12R2 -  COMP-1 TO REGISTER COMP-2 
**        C12R2 -  COMP-1 TO REGISTER COMP-2
* 
*         REGB = DNAT POINTER TO SOURCE ITEM. 
*         (FWA$OF,REGB) = ADDRESS OF SOURCE ITEM. 
*         (POINTOF,REGB) = POSITION OF LEAST SIGNIFICANT DIGIT
*           RELATIVE TO DECIMAL POINT.   (E.G. PIC V999 = -3) 
*         (NUMLENOF,REGB) = NUMBER OF DECIMAL DIGITS. 
*         REGC = DNAT POINTER TO DESTINATION REGISTER.
*         (POINTOF,REGC) = POSITION OF LEAST SIGNIFICANT DIGIT
*           RELATIVE TO DECIMAL POINT.
* 
*         CALLZ  C12R2
* 
*         GENERATES CODE TO LOAD THE ITEM, PERFORM ANY NECESSARY SCALING
*           AND CONVERT TO COMP-2 FORMAT. 
*         SETS (TREGOF,REGC) = VIRTUAL REGISTER NUMBER OF RESULT REG. 
*         USES-  REGU1
*                SAVREGB1 
  
  
 C12R2    EGO    2
          NOTE   C12R2
  
*      LOAD THE SOURCE WORD INTO REGISTER VREG1 
  
          CALLZ  LOADC1C2 
  
*      CREATE A DUMMY SOURCE DNAT 
  
          MOVEZ  (EQUALS,REGU1),REGT             REGU1 TO POINT TO DNAT 
          CALLZ  ADNAT                           CREATE DNAT
          MOVEZ  (POINTOF,REGB),(POINTOF,REGU1) 
          MOVEZ  (NUMLENOF,REGB),(NUMLENOF,REGU1) 
          MOVEZ  (SIGNOF,REGB),(SIGNOF,REGU1) 
          MOVEZ  VREG1,(TREGOF,REGU1) 
  
*      CONVERT R1 (IN REGU1) TO R2 (IN REGC)
  
          PUSH   REGB                            SAVE ORIGINAL SOURCE 
          MOVEZ  (EQUALS,REGU1),REGB             THIS SOURCE IS REGU1 
          CALLZ  R12R2                           CONVERT (REGB) _ (REGC)
          POP    REGB                            RESTORE ORIGINAL SOURCE
  
          CALLZ  SUBDNAT                         DELETE REGU1 DNAT
  
          RETURN
          SPACE  4
          LISTSEC  C12R4
          TITLE  C12R4 -  COMP-1 TO REGISTER D.P. COMP-2
**        C12R4 -  COMP-1 TO REGISTER D.P. COMP-2 
* 
*         REGB = DNAT POINTER TO SOURCE ITEM
*         REGC = DNAT POINTER TO DESTINATION REGISTER 
* 
*         SETS (TREGOF,REGC) = VIRTUAL REGISTER NUMBER OF RESULT
  
  
 C12R4    EGO    2
          NOTE   C12R4
  
*      LOAD THE SOURCE WORD INTO REGISTER VREG1 
  
          CALLZ  LOADC1C2 
  
*      CREATE A DUMMY DNAT
  
          MOVEZ  (EQUALS,REGU1),REGT             REGU1 TO POINT TO DNAT 
          CALLZ  ADNAT                           CREATE DNAT
          MOVEZ  (NUMLENOF,REGB),(NUMLENOF,REGU1) 
          MOVEZ  (POINTOF,REGB),(POINTOF,REGU1) 
          MOVEZ  (SIGNOF,REGB),(SIGNOF,REGU1) 
          MOVEZ  VREG1,(TREGOF,REGU1) 
  
*      CONVERT AND SCALE R1 (IN REGU1) TO R2 (IN REGC)
  
          PUSH   REGB                            SAVE ORIGINAL SOURCE 
          MOVEZ  (EQUALS,REGU1),REGB             THIS SOURCE IS REGU1 
          CALLZ  R12R2                           CONVERT (REGB) _ (REGC)
          POP    REGB                            RESTORE ORIGINAL SOURCE
  
*      CONVERT R2 (IN REGC) TO R4 (IN REGC) 
  
 C12R41   LABEL                                  (CROSS-REFS ONLY)
          NOTE   C12R41 
  
          GEN    XMIT,(VREGOF,VREG1),(TREGOF,REGC)         VREG1
          GEN    MASK,(VREGOF,VREG2),0                     VREG2=VREG1+1
          MOVEZ  VREG1,(TREGOF,REGC)
  
          CALLZ  SUBDNAT                         DELETE REGU1 DNAT
          RETURN
          SPACE  4
          LISTSEC * 
          END 
