COMPREL 
COMMON
          CTEXT  COMPREL - LOCATION FREE OVERLAY MACROS.
*         COMMENT  COPYRIGHT CONTROL DATA SYSTEMS INC.  1992. 
 MACROS   SPACE  4
***       COMPREL - LOCATION FREE OVERLAY MACROS. 
*         G. R. MANSFIELD.  70/10/04. 
*         R. J. THIELEN.     75/11/20. MODIFIED.
 MACROS   SPACE  4
***              APPROPRIATE INSTRUCTIONS ARE RE-DEFINED SUCH THAT
*         PROPER CODE IS ASSEMBLED FOR LOCATION FREE OVERLAYS.
*         THE ORIGINAL DEFINITION OF THE INSTRUCTION MAY BE USED
*         WHERE APPROPRIATE, BY APPENDING A *.* TO THE OPCODE.
* 
*         IF REL$ = 1 IS DEFINED, THEN THE USE OF A SYSTEXT SYMBOL
*         (NON-RELOCATED VALUE) AS THE FIRST SYMBOL IN THE -M- FIELD
*         OF AN INSTRUCTION WILL PERMIT USE OF THE -D- FIELD. 
*         IF *REL$* IS NOT DEFINED IN THE PROGRAM OR IS SET " 1,
*         THERE IS NO CHANGE IN THE RELOCATION SCHEME.
* 
*         IF *RIREL$* IS UNDEFINED, THE INSTRUCTIONS WILL BE REDEFINED
*         AT THE TIME *COMPREL* IS ASSEMBLED AND THE MACRO *RIREL* WILL 
*         NOT BE CREATED.  IF *RIREL$* IS DEFINED, HOWEVER, THE MACRO 
*         *RIREL* WILL BE CREATED AND INSTRUCTION REDEFINITION WILL 
*         NOT TAKE PLACE UNTIL *RIREL* IS CALLED.  THE MACROS *RIREL* 
*         AND *RSTR* CAN BE USED TO ENABLE OR DISABLE INSTRUCTION 
*         REDEFINITION. 
* 
*         THE SYMBOL *REL=* WILL BE SET TO 1 WHEN RELOCATABLE ASSEMBLY
*         IS IN EFFECT.  IT WILL BE UNDEFINED OR 0 IF RELOCATABLE 
*         ASSEMBLY IS NOT IN EFFECT.
* 
*         THE FOLLOWING INSTRUCTIONS USE *LA* FOR RELOCATION. 
*         IF REL$ = 1 IS DEFINED, USE OF A SYSTEXT SYMBOL AS THE FIRST
*         SYMBOL IN THE -M- FIELD OF THE INSTRUCTION WILL PREVENT 
*         RELOCATION BY *LA* AND WILL PERMIT USE OF THE -D- FIELD.
* 
*                LJM
*                RJM
*                LDM
*                ADM
*                SBM
*                LMM
*                STM
*                RAM
*                AOM
*                SOM
* 
*         THE FOLLOWING INSTRUCTIONS ARE ILLEGAL UNLESS THE FIRST 
*         SYMBOL OF THE -M- FIELD IS A SYSTEXT SYMBOL (NON-RELOCATED
*         VALUE) WHEN REL$ = 1 IS DEFINED.
* 
*                CRM
*                CWM
*                AJM
*                IJM
*                FJM
*                EJM
*                IAM
*                OAM
* 
*         IF THE SYMBOL *RINST$* IS DEFINED, INSTRUCTIONS WILL BE 
*         RESTORED ON EXIT FROM THIS DECK.
 RELM     SPACE  4
**        RELM - DEFINE M-TYPE INSTRUCTIONS TO USE *LA* AS D-PART OF
*         INSTRUCTION.
* 
* 
*         RELM   OPC,CODE 
*         ENTRY  *OPC* = INSTRUCTION MNEMONIC.
*                *CODE* = OPERATION CODE. 
  
  
          PURGMAC RELM
 RELM     MACRO  OPC,CODE 
          PURGMAC OPC 
 OPC.     PPOP   5,CODE 
 OPC      MACRO  M,D
          LOCAL  CP,SEP,SMB 
 .A       IF     DEF,REL$ 
 .A       IFEQ   REL$,1 
 .A       IF     DEF,//M
 CP       SET    1
          DUP    9
 SEP      MICRO  CP,1,$_M$
 .B       IFC    NE,$"SEP"$$
 .B       IFC    LE,$"SEP"$9$ 
 CP       SET    CP+1 
 .B       ELSE
          STOPDUP 
 .B       ENDIF 
          ENDD
 CP       SET    CP-1 
 .A       IFNE   CP,0 
 SMB      MICRO  1,CP,$_M$
 .A       IF     SST,//"SMB"
          OPC.   M,D
 .A       ELSE
 .B       IFNE   D,0
          ERR                D-FIELD NOT ALLOWED. 
 .B       ELSE
          OPC.   M,LA 
 .B       ENDIF 
 .A       ENDIF 
 OPC      ENDM
 RELM     ENDM
 ILLM     SPACE  4
**        ILLM - DEFINE CERTAIN M-TYPE INSTRUCTIONS TO BE ILLEGAL.
* 
* 
*         ILLM   OPC
*         ENTRY  *OPC* = INSTRUCTION MNEMONIC.
*                *CODE* = OPERATION CODE. 
  
  
          PURGMAC ILLM
 ILLM     MACRO  OPC,CODE 
          PURGMAC OPC 
 OPC.     PPOP   7,CODE 
 OPC      MACRO  M,D
          LOCAL  CP,SEP,SMB 
 .A       IF     DEF,REL$ 
 .A       IFEQ   REL$,1 
 .A       IF     DEF,//M
 CP       SET    1
          DUP    9
 SEP      MICRO  CP,1,$_M$
 .B       IFC    NE,$"SEP"$$
 .B       IFC    LE,$"SEP"$9$ 
 CP       SET    CP+1 
 .B       ELSE
          STOPDUP 
 .B       ENDIF 
          ENDD
 CP       SET    CP-1 
 .A       IFNE   CP,0 
 SMB      MICRO  1,CP,$_M$
 .A       IF     SST,//"SMB"
          OPC.   M,D
 .A       ELSE
          ERR                OPERATION NOT ALLOWED. 
 .A       ENDIF 
 OPC      ENDM
 ILLM     ENDM
 RIREL    SPACE  4
***       RIREL - REDEFINE INSTRUCTIONS.
* 
*         RIREL 
*         EACH TIME *RIREL* IS CALLED, INSTRUCTION REDEFINITION OCCURS. 
*         *RIREL* IS CREATED ONLY IF *RIREL$* IS DEFINED. 
  
  
          IF     DEF,RIREL$,2 
          PURGMAC RIREL 
 RIREL    MACRO 
  
 REL=     SET    1           INDICATE RELOCATABLE CODE
  
          RELM   LJM,0100 
          RELM   RJM,0200 
          RELM   LDM,5000 
          RELM   ADM,5100 
          RELM   SBM,5200 
          RELM   LMM,5300 
          RELM   STM,5400 
          RELM   RAM,5500 
          RELM   AOM,5600 
          RELM   SOM,5700 
  
          ILLM   CRM,6100 
          ILLM   CWM,6300 
          ILLM   AJM,6400 
          ILLM   IJM,6500 
          ILLM   FJM,6600 
          ILLM   EJM,6700 
          ILLM   IAM,7100 
          ILLM   OAM,7300 
  
          ENDM
 RSTR     SPACE  4
***       RSTR - RESTORE ALL REDEFINED INSTRUCTIONS.
* 
* 
*         RSTR
*         ENTRY  NONE.
  
  
          PURGMAC RSTR
 RSTR     MACRO 
          PURGMAC LJM 
          PURGMAC RJM 
          PURGMAC LDM 
          PURGMAC ADM 
          PURGMAC SBM 
          PURGMAC LMM 
          PURGMAC STM 
          PURGMAC AOM 
          PURGMAC RAM 
          PURGMAC SOM 
          PURGMAC CRM 
          PURGMAC CWM 
          PURGMAC AJM 
          PURGMAC IJM 
          PURGMAC FJM 
          PURGMAC EJM 
          PURGMAC IAM 
          PURGMAC OAM 
 LJM      OPSYN  LJM. 
 RJM      OPSYN  RJM. 
 LDM      OPSYN  LDM. 
 ADM      OPSYN  ADM. 
 SBM      OPSYN  SBM. 
 LMM      OPSYN  LMM. 
 STM      OPSYN  STM. 
 AOM      OPSYN  AOM. 
 RAM      OPSYN  RAM. 
 SOM      OPSYN  SOM. 
 CRM      OPSYN  CRM. 
 CWM      OPSYN  CWM. 
 AJM      OPSYN  AJM. 
 IJM      OPSYN  IJM. 
 FJM      OPSYN  FJM. 
 EJM      OPSYN  EJM. 
 IAM      OPSYN  IAM. 
 OAM      OPSYN  OAM. 
  
 REL=     SET    0           CLEAR RELOCATABLE CODE FLAG
  
          ENDM
  
  
          IF     DEF,RINST$ 
          RSTR               RESTORE INSTRUCTIONS 
          ENDIF 
          SPACE  4,10 
          ENDX
