*DECK GMOVECS 
          IDENT  GMOVECS
          TITLE  GMOVECS - SECONDARY STORAGE MOVE PROCESSOR 
          MACHINE  ANY,I
          SST 
          COMMENT  SECONDARY STORAGE MOVE PROCESSOR 
          SPACE  4
**        GMOVECS - SECONDARY STORAGE MOVE PROCESSOR
* 
* EC2AN   LINK   CGEC2AN
* AN2EC   LINK   CGAN2EC
* EC2EC   LINK   CGEC2EC
* LI2EC   LINK   CGLI2EC
* 
*         GENERATES CODE TO PERFORM THE INDICATED MOVE
          SPACE  4
*      COMDECKS 
          SPACE  4
 CONTROL  OPSYN  NIL
          EJECT 
 GMOVECS  MODULE
  
*      REGTABLE EQUATES 
  
  
 MOVEREGA EQU    REGB 
 MOVEREGB EQU    REGC 
  
*      VIRTUAL REGISTER EQUATES 
  
 VREGA    EQU    VREG1
 VREGB    EQU    VREG2
 VREGC    EQU    VREG3
 VREGD    EQU    VREG9
 VREGE    EQU    VREG5
 VREGF    EQU    VREG6
 VREGG    EQU    VREG7
 VREGU    EQU    VREG16 
 VREGW    EQU    VREG18 
 VREGX    EQU    VREG4
  
*      FIXED TABLE EQUATES
  
  
  
*      LINKAGE FROM CALLING ROUTINES IN OTHER MODULES 
  
 ECMOVE   KNIL   CGEC2AN
 ECMOVE   KNIL   CGAN2EC
 ECMOVE   KNIL   CGEC2EC
 LI2EC    KNIL   CGLI2EC
  
*      LINKAGE TO CALLED ROUTINES IN OTHER MODULES
  
 SETBREG  LINK   CGSETB4     * TO GMOVSUB 
 SETBXPK  LINK   CGSBXPK     * TO GMOVSUB 
 SETXREG  LINK   CGSETXW     * TO GMOVSUB 
 SUBLOAD  LINK   SUBLOAD     * TO 
 SUBREF   LINK   SUBREF 
  
*      SYMBOLIC PARAMETER DEFINITIONS 
  
 RECADDR  SETSY  (FWA$OF,MOVEREGB)
 SRCADDR  SETSY  (FWA$OF,MOVEREGA),ADOFSET
          EJECT 
************************************************************************
*                                                                      *
*         SECONDARY STORAGE MOVE PROCESSOR-                            *
*                                                                      *
*         PURPOSE-                                                     *
*                GENERATE CODE TO MOVE CHARS TO OR FROM ECS            *
*                                                                      *
*         DESCRIPTION-                                                 *
*                SECONDARY STORAGE TO CORE-                            *
*                    C.EC2AN IS CALLED TO DO THE MOVE.                 *
*                CORE TO SECONDARY STORAGE-                            *
*                    C.AN2EC IS CALLED TO DO THE MOVE.                 *
*                SECONDARY STORAGE TO SECONDARY STORAGE-               *
*                    C.EC2EC IS CALLED TO DO THE MOVE.                 *
*                                                                      *
************************************************************************
  
 ECMOVE   EGO    2
  
*      INITIALIZE SOURCE FIELD ADDRESS OFFSET 
  
          MOVEZ  0,ADOFSET
  
*      SET UP FIXED CELLS 
  
          MOVEZ  (BCPOF,MOVEREGA),SENDBCP 
          MOVEZ  (BYTLENOF,MOVEREGA),SENDSIZE 
          MOVEZ  (BCPOF,MOVEREGB),RECBCP
          MOVEZ  (BYTLENOF,MOVEREGB),RECSIZE
          SUBZ   SENDSIZE,RECSIZE,SIZEDIFF
          MOVEZ  (JUSTOF,MOVEREGB),JUSTFLG
          IFTHEN ((GSCODEOF,MOVEREGA),NE,0) 
            MOVEZ  (GSCODEOF,MOVEREGA),T1 
            IFZ    ((RFLCPTYP,T1),NE,0),ECMOV800
          ENDIFZ
          IFTHEN ((GSCODEOF,MOVEREGB),NE,0) 
            MOVEZ  (GSCODEOF,MOVEREGB),T1 
            IFZ    ((RFLCPTYP,T1),NE,0),ECMOV800
          ENDIFZ
  
          IFZ    (SIZEDIFF,GT,0),ECMOV600 
          IFZ    (SIZEDIFF,LT,0),ECMOV300 
  
************************************************************************
*      GENERATE CODE TO MOVE AN ITEM FROM ECS (OR CORE) TO CORE (OR    *
*      ECS).                                                           *
************************************************************************
  
 ECMOV100 LABEL 
          NOTE   ECMOV100 
  
*      SET B5 = FWA OF SOURCE 
  
          GEN    SBBPK,(VREGOF,VREGA),,SRCADDR
  
*      SET B6 = CHAR OFFSET OF SOURCE 
  
          IFTHEN (SENDSUBS,EQ,0)
            MOVEZ  SENDBCP,P1 
            CALLZ  SETBREG
            MOVEZ  VREGX,VREGB
          ELSEZ 
            MOVEZ  SENDSUBS,P1
            CALLZ  SUBLOAD
            GEN    SHR,P1,30
            MOVEZ  P1,VREGU 
            MOVEZ  SENDBCP,P1 
            CALLZ  SETBXPK
            MOVEZ  VREGU,VREGB
          ENDIFZ
  
*      SET B3 = FWA OF RECEIVING FIELD
  
          GEN    SBBPK,(VREGOF,VREGC),,RECADDR
  
*      SET B4 = CHAR OFFSET OF RECEIVING FIELD
  
          IFTHEN (RECSUBS,EQ,0) 
            MOVEZ  RECBCP,P1
            CALLZ  SETBREG
            MOVEZ  VREGX,VREGD
          ELSEZ 
            MOVEZ  RECSUBS,P1 
            CALLZ  SUBLOAD
            GEN    SHR,P1,30
            MOVEZ  P1,VREGU 
            MOVEZ  RECBCP,P1
            CALLZ  SETBXPK
            MOVEZ  VREGU,VREGD
          ENDIFZ
  
*      SET B7 = NUMBER OF CHARS TO MOVE 
  
          MOVEZ  SENDSIZE,P1
          CALLZ  SETBREG
  
*      SET X2 = NUMBER OF BLANKS TO PAD 
  
          MOVEZ  SIZEDIFF,P1
          CALLZ  SETXREG
  
*      CALL APPROPRIATE OBJECT TIME ROUTINE TO DO MOVE
  
          MOVEZ  (MAJMSCOF,MOVEREGA),T1 
          MOVEZ  (MAJMSCOF,MOVEREGB),T2 
  
          IFTHEN (T1,EQ,SECSMSEC) 
            ANDIF  (T2,EQ,SECSMSEC) 
              GENOBJ N=C.EC2EC,I=(VREGC,VREGD,VREGA,VREGB,VREGX,VREGW)
          ENDIFZ
  
          IFTHEN (T1,EQ,SECSMSEC) 
            ANDIF  (T2,NE,SECSMSEC) 
              GENOBJ N=C.EC2AN,I=(VREGC,VREGD,VREGA,VREGB,VREGX,VREGW)
          ENDIFZ
  
          IFTHEN (T1,NE,SECSMSEC) 
            ANDIF  (T2,EQ,SECSMSEC) 
              GENOBJ N=C.AN2EC,I=(VREGC,VREGD,VREGA,VREGB,VREGX,VREGW)
          ENDIFZ
  
          RETURN
          SPACE  4
*      SIZE OF SOURCE FIELD IS LESS THAN SIZE OF RECEIVING FIELD
  
 ECMOV300 LABEL 
          NOTE   ECMOV300 
          IFZ    (JUSTFLG,EQ,0),ECMOV100
  
*      JUSTIFIED RECEIVING FIELD, MAKE SIZEDIFF POSITIVE SO OBJECT
*      ROUTINE WILL PREFIX BLANKS 
  
          SUBZ   0,SIZEDIFF,SIZEDIFF
          BRANCH ECMOV100 
          SPACE  4
*      SIZE OF SOURCE FIELD IS LARGER THAN SIZE OF RECEIVING FIELD
  
 ECMOV600 LABEL 
          MOVEZ  RECSIZE,SENDSIZE 
          IFZ    (JUSTFLG,NE,0),ECMOV700
  
*      NO JUSTIFICATION 
  
          NOTE   ECMOV600 
          MOVEZ  0,SIZEDIFF 
          BRANCH ECMOV100 
  
*      JUSTIFIED RECEIVING FIELD
  
 ECMOV700 LABEL 
          NOTE   ECMOV700 
          ADDZ   SENDBCP,SIZEDIFF,T1
          REMZ   T1,10,SENDBCP
          QUOTZ  T1,10,ADOFSET
          MOVEZ  0,SIZEDIFF 
          BRANCH ECMOV100 
          SPACE  3
*      REFERENCE MODIFICATION 
 ECMOV800 LABEL 
          NOTE   ECMOV800 
          GEN    SBBPK,(VREGOF,VREGA),,SRCADDR
          GEN    SBBPK,(VREGOF,VREGB),,RECADDR
          MOVEZ  JUSTFLG,P1 
          CALLZ  SETXREG     OUTPUT IN VREGW
          MOVEZ  VREGW,VREGC
          IFTHEN ((GSCODEOF,MOVEREGA),EQ,0) 
            MOVEZ  SENDBCP,P1 
            CALLZ  SETBREG
            MOVEZ  VREGX,VREGD
            MOVEZ  SENDSIZE,P1
            CALLZ  SETXREG
            MOVEZ  VREGW,VREGE
          ELSEZ 
            MOVEZ  MOVEREGA,P2
            CALLZ  SUBREF 
            GEN    SBXPB,(VREGOF,VREGD),P3
            MOVEZ  P4,VREGE 
          ENDIFZ
          IFTHEN ((GSCODEOF,MOVEREGB),EQ,0) 
            MOVEZ  RECBCP,P1
            CALLZ  SETBREG
            MOVEZ  VREGX,VREGF
            MOVEZ  RECSIZE,P1 
            CALLZ  SETXREG
            MOVEZ  VREGW,VREGG
          ELSEZ 
            MOVEZ  MOVEREGB,P2
            CALLZ  SUBREF 
            GEN    SBXPB,(VREGOF,VREGF),P3
            MOVEZ  P4,VREGG 
          ENDIFZ
          MOVEZ  (MAJMSCOF,MOVEREGA),T1 
          MOVEZ  (MAJMSCOF,MOVEREGB),T2 
          IFTHEN (T1,EQ,SECSMSEC) 
          ANDIF  (T2,EQ,SECSMSEC) 
            GENOBJ  N=C.ECERF,I=(VREGB,VREGF,VREGA,VREGD,VREGC,VREGE,VRE
,GG)
          ENDIFZ
          IFTHEN (T1,EQ,SECSMSEC) 
          ANDIF  (T2,NE,SECSMSEC) 
            GENOBJ N=C.ECARF,I=(VREGB,VREGF,VREGA,VREGD,VREGC,VREGE,VREG
,G) 
          ENDIFZ
          IFTHEN  (T1,NE,SECSMSEC)
            GENOBJ N=C.AECRF,I=(VREGB,VREGF,VREGA,VREGD,VREGC,VREGE,VREG
,G) 
          ENDIFZ
          RETURN
 LI2EC    EGO    2
          IFZ    ((SPACESOF,MOVEREGA),EQ,0),ECMOVE
          IFTHEN ((GSCODEOF,MOVEREGB),NE,0) 
            MOVEZ  (GSCODEOF,MOVEREGB),T1 
            IFZ    ((RFLCPTYP,T1),NE,0),LI2EC100
          ENDIFZ
          NOTE   LI2EC
          GEN    SBBPK,(VREGOF,VREGA),,((FWA$OF,MOVEREGB))
          GEN    SBBPK,(VREGOF,VREGB),,(BCPOF,MOVEREGB) 
          GEN    SBBPK,(VREGOF,VREGC),,((EXT$OF,C.BLANK)) 
          GEN    SBBPB,(VREGOF,VREGD),VREGB0,VREGB0 
          GEN    SBBPB,(VREGOF,VREGE),VREGB0,VREGB0 
          GEN    SXBPK,(VREGOF,VREGF),,(BYTLENOF,MOVEREGB)
          GENOBJ N=C.AN2EC,I=(VREGA,VREGB,VREGC,VREGD,VREGE,VREGF)
          RETURN
          SPACE  3
*      REFERENCE MODIFICATION 
 LI2EC100 LABEL 
          NOTE   LI2EC100 
          GEN    SBBPK,(VREGOF,VREGA),,SRCADDR
          GEN    SBBPK,(VREGOF,VREGC),,((EXT$OF,C.BLANK)) 
          GEN    SBBPB,(VREGOF,VREGD),VREGB0,VREGB0 
          GEN    SBBPB,(VREGOF,VREGE),VREGB0,VREGB0 
          MOVEZ  MOVEREGB,P2
          CALLZ  SUBREF 
          GEN    SBXPB,(VREGOF,VREGB),P3
          MOVEZ  P4,VREGF 
          GENOBJ N=C.AN2EC,I=(VREGA,VREGB,VREGC,VREGD,VREGE,VREGF)
          RETURN
          END 
