*DECK GMOVBL
          IDENT  GMOVBL 
          MACHINE  ANY,I
          SST 
          COMMENT  BOOLEAN MOVE 
          SPACE  3
**        GMOVBL - GENERATE BOOLEAN MOVES 
* 
*         INPUT 
*                REGB - REG TABLE POINTER FOR SOURCE
*                REGC - REG TABLE POINTER FOR DESTINATION 
          TITLE  GMOVBL - BOOLEAN MOVE GENERATOR
 GMOVBL   MODULE
*      LINKAGE FROM ROUTINES IN OTHER MODULES 
 BD2BD    KNIL   CGBD2BD
*      LINKAGE TO ROUTINES IN OTHER MODULES 
 CGAN2AN  LINK   CGAN2AN
 GTADBCP  LINK   CGGTABP
 PERMDNAT  LINK  ADPDNAT
 SUBLOAD  LINK   SUBLOAD
 SUBREF   LINK   SUBREF 
*      VREG EQUATES 
 VREGA    EQU    VREG1
 VREGB    EQU    VREG2
 VREGC    EQU    VREG3
 VREGD    EQU    VREG4
 VREGE    EQU    VREG5
 VREGF    EQU    VREG6
 VREGG    EQU    VREG7
 VREGH    EQU    VREG8
 BD2BD    EJECT 
*         BD2BD - BOOLEAN DISPLAY TO BOOLEAN DISPLAY
 BD2BD    EGO    2
          NOTE   BD2BD
          IFTHEN ((BYTLENOF,REGB),GE,(BYTLENOF,REGC))      NO FILL
          ANDIF  ((GSCODEOF,REGB),EQ,0)          SOURCE UNMODIFIED
          ANDIF  ((GSCODEOF,REGC),EQ,0)          DESTINATION UNMODIFIED 
            CALLZ  CGAN2AN
            RETURN
          ENDIFZ
          CALLZ  SETPARM
          GENOBJ N=C.BD2BD,I=(VREGA,VREGB,VREGC,VREGD,VREGE,VREGF,VREGG)
          RETURN
 SETPARM  EJECT 
*         SETPARM - SET OBJECT ROUTINE PARAMETERS FOR BOOLEAN MOVES 
*         OUTPUT
*                XREGA - ADDRESS DESTINATION (B REG)
*                VREGB - OFFSET  DESTINATION (B REG)
*                VREGC - ADDRESS SOURCE      (B REG)
*                VREGD - OFFSET SOURCE       (B REG)
*                VREGE - JUSTIFIED FLAG      (X REG)
*                VREGF - LENGTH SOURCE       (X REG)
*                VREGG - LENGTH DESTINATION  (X REG)
 SETPARM  EGO    3
          NOTE   SETPARM
          IFTHEN ((TYPEOF,REGB),NE,BOOLBIT) 
          ANDIF  ((GSCODEOF,REGB),EQ,0)     NO SUBSCRIPTS OR REF MOD
            GEN    SBBPK,(VREGOF,VREGD),,(BCPOF,REGB) 
            GEN    SXBPK,(VREGOF,VREGF),,(BYTLENOF,REGB)
          ENDIFZ
          IFTHEN ((TYPEOF,REGB),NE,BOOLBIT) 
          ANDIF  ((GSCODEOF,REGB),NE,0)     SUBSCRIPTS OR REF MOD 
            MOVEZ  REGB,P2
            CALLZ  SUBREF 
            GEN    SBXPB,(VREGOF,VREGD),P3
            MOVEZ  P4,VREGF 
          ENDIFZ
          IFTHEN ((TYPEOF,REGC),NE,BOOLBIT) 
          ANDIF  ((GSCODEOF,REGC),EQ,0)     NO SUBSCRIPTS OR REF MOD
            GEN    SBBPK,(VREGOF,VREGB),,(BCPOF,REGC) 
            GEN    SXBPK,(VREGOF,VREGG),,(BYTLENOF,REGC)
          ENDIFZ
          IFTHEN ((TYPEOF,REGC),NE,BOOLBIT) 
          ANDIF  ((GSCODEOF,REGC),NE,0)     SUBSCRIPTS OR REF MOD 
            MOVEZ  REGC,P2
            CALLZ   SUBREF
            GEN    SBXPB,(VREGOF,VREGB),P3,VREGB0 
            MOVEZ  P4,VREGG 
          ENDIFZ
          GEN    SBBPK,(VREGOF,VREGA),,((FWA$OF,REGC))
          GEN    SBBPK,(VREGOF,VREGC),,((FWA$OF,REGB))
          GEN    SXBPK,(VREGOF,VREGE),,(JUSTOF,REGC)
          RETURN
          END 
