*COMDECK  COMAREG - REPLACEMENT FOR R= PSEUDO INSTRUCTION.
          CTEXT  COMAREG - REPLACEMENT FOR R= PSEUDO INSTRUCTION. 
 COMAREG  SPACE  4
***       COMAREG - REPLACEMENT FOR R= PSEUDO INSTRUCTION.
* 
*         R. H. GOODELL.     71/06/01.
* 
*         CONTROL DATA  PROPRIETARY PRODUCT.
*         COPYRIGHT CONTROL DATA CORP. 1971-1976. 
 COMAREG  SPACE  4,7
***              THE FOLLOWING SET OF  MACROS,  OPDEFS,  AND  CPOPS 
*         DEFINE PSEUDO MACHINE INSTRUCTIONS FOR SETTING A REGISTER 
*         TO  A  VALUE INVOLVING REGISTERS AND/OR CONSTANTS.  THESE 
*         INSTRUCTIONS GENERATE NO CODE AT ALL OR A 15-BIT  MACHINE 
*         INSTRUCTION WHENEVER POSSIBLE DEPENDING ON THE EXPRESSION 
*         VALUE  AND WHETHER *B1=1* IS DEFINED, WITHOUT MOST OF THE 
*         DEFICIENCIES OF THE R=  PSEUDO  INSTRUCTION  IN  COMPASS. 
*         EXAMPLES -- 
* 
*         COMPASS         R= FORM          NEW FORM        COMMENTS 
* 
*         SX1   1         R=   X1,1        =X1   1
*         SA1   EXP       R=   A1,EXP      =A1   EXP
*         SB4   B4+1      R=   B4,B4+1     =B4   B4+1      NOTE 1.
*         SA6   A6+EXP    R=   A6,A6+EXP   =A6   A6+EXP    NOTE 2.
*         SB.I  B.J       ---------        =B.I  B.J       NOTE 3.
*         BX6   X4        ---------        =X6   X4        BOOLEAN. 
* 
*         NOTE 1.   R= GENERATES 30 BITS.  NEW IS 15 BITS IF B1=1.
*         NOTE 2.   R= GENERATES 30 BITS.  NEW IS 15 BITS IF B1=1 
*                            AND (EXP) IS EVALUATABLE AND = +- 1. 
*         NOTE 3.   R= CANNOT HANDLE SYMBOLIC REGISTERS.  NEW FORM
*                            GENERATES NO CODE IF  (I) = (J). 
*         * NOTE * THIS COMDECK WILL DISAPPEAR WHEN COMPASS 4.0 ARRIVES.
  
  
          BASE   OCTAL
 =A       SPACE  4,7
*         A-REGISTER SETS.
  
  
 =A       CPOP   0,560,100         =AI
  
 =A,Q     OPDEF  I,Q               =AI    K 
  '?REG#S2 A.I,(Q)
  ENDM
  
 =A,A     OPDEF  I,J               =AI    AJ
  IFNE I,J,1
  SA.I A.J
  ENDM
  
 =A,AQ    OPDEF  I,J,Q             =AI    AJ+K
  '?REG#S1 A.I,A.J,(Q)
  ENDM
  
 =A,A+B   CPOP   0,540,132         =AI    AJ+BK 
 =A,A-B   CPOP   0,550,132         =AI    AJ-BK 
  
 =A,B     CPOP   0,560,120         =AI    BJ
  
 =A,BQ    OPDEF  I,J,Q             =AI    BJ+K
  '?REG#S1 A.I,B.J,(Q)
  ENDM
  
 =A,B+A   CPOP   0,540,123         =AI    BK+AJ 
 =A,B+B   CPOP   0,560,132         =AI    BJ+BK 
 =A,B+X   CPOP   0,530,123         =AI    BK+XJ 
 =A,B-B   CPOP   0,570,132         =AI    BJ-BK 
 =A,-B    CPOP   0,570,102         =AI    -BK 
 =A,-B+A  CPOP   0,550,123         =AI    -BK+AJ
 =A,-B+B  CPOP   0,570,123         =AI    -BK+BJ
  
 =A,X     CPOP   0,530,120         =AI    XJ
  
 =A,XQ    OPDEF  I,J,Q             =AI    XJ+K
  '?REG#S0 A.I,X.J,(Q)
  ENDM
  
 =A,X+B   CPOP   0,530,132         =AI    XJ+BK 
 =B       SPACE  4,7
*         B-REGISTER SETS.
  
  
 =B       CPOP   0,660,100         =BI
  
 =B,Q     OPDEF  I,Q               =BI    K 
  '?REG#S2 B.I,(Q)
  ENDM
  
 =B,A     CPOP   0,640,120         =BI    AJ
  
 =B,AQ    OPDEF  I,J,Q             =BI    AJ+K
  '?REG#S1 B.I,A.J,(Q)
  ENDM
  
 =B,A+B   CPOP   0,640,132         =BI    AJ+BK 
 =B,A-B   CPOP   0,650,132         =BI    AJ-BK 
  
 =B,B     OPDEF  I,J               =BI    BJ
  IFNE I,J,1
  SB.I B.J
  ENDM
  
 =B,BQ    OPDEF  I,J,Q             =BI    BJ+K
  '?REG#S1 B.I,B.J,(Q)
  ENDM
  
 =B,B+A   CPOP   0,640,123         =BI    BK+AJ 
 =B,B+B   CPOP   0,660,132         =BI    BJ+BK 
 =B,B-B   CPOP   0,670,132         =BI    BJ-BK 
 =B,B+X   CPOP   0,630,123         =BI    BK+XJ 
 =B,-B    CPOP   0,670,102         =BI    -BK 
 =B,-B+A  CPOP   0,650,123         =BI    -BK+AJ
 =B,-B+B  CPOP   0,670,123         =BI    -BK+BJ
  
 =B,X     CPOP   0,630,120         =BI    XJ
  
 =B,XQ    OPDEF  I,J,Q             =BI    XJ+K
  '?REG#S0 B.I,X.J,(Q)
  ENDM
  
 =B,X+B   CPOP   0,630,132         =BI    XJ+BK 
 =X       SPACE  4,7
*         X-REGISTER SETS, PLUS SOME FAKES. 
  
  
 =X       CPOP   0,130,111         =XI                 BOOLEAN
  
 =X,Q     OPDEF  I,Q               =XI    K 
  '?REG#S2 X.I,(Q)
  ENDM
  
 =X,A     CPOP   0,740,120         =XI    AJ
  
 =X,AQ    OPDEF  I,J,Q             =XI    AJ+K
  '?REG#S1 X.I,A.J,(Q)
  ENDM
  
 =X,A+B   CPOP   0,740,132         =XI    AJ+BK 
 =X,A-B   CPOP   0,750,132         =XI    AJ-BK 
  
 =X,B     CPOP   0,760,120         =XI    BJ
  
 =X,BQ    OPDEF  I,J,Q             =XI    BJ+K
  '?REG#S1 X.I,B.J,(Q)
  ENDM
  
 =X,B+A   CPOP   0,740,123         =XI    BK+AJ 
 =X,B+B   CPOP   0,760,132         =XI    BJ+BK 
 =X,B-B   CPOP   0,770,132         =XI    BJ-BK 
 =X,B+X   CPOP   0,730,123         =XI    BK+XJ 
 =X,-B    CPOP   0,770,102         =XI    -BK 
 =X,-B+A  CPOP   0,750,123         =XI    -BK+AJ
 =X,-B+B  CPOP   0,770,123         =XI    -BK+BJ
  
 =X,X     OPDEF  I,J               =XI    XJ          BOOLEAN 
  IFNE I,J,1
  BX.I X.J
  ENDM
  
 =X,XQ    OPDEF  I,J,Q             =XI    XJ+K
  '?REG#S0 X.I,X.J,(Q)
  ENDM
  
 =X,X+B   CPOP   0,730,132         =XI    XJ+BK 
 =X,X+X   CPOP   0,360,132         =XI    XJ+XK       LONG ADD
 =X,X-X   CPOP   0,370,132         =XI    XJ-XK       LONG ADD
 =X,-X    CPOP   0,140,122         =XI    -XK         BOOLEAN 
 =X,-X+X  CPOP   0,370,123         =XI    -XK+XJ      LONG ADD
 '?REG#S0 SPACE  4,7
*         INTERNAL MACROS USED BY SOME OF THE ABOVE.
  
  
          PURGMAC '?REG#S0,'?REG#S1,'?REG#S2
  
 '?REG#S0 MACRO  I,J,Q       FOR VARIABLE FIELD SYNTAX = XQ 
  IF DEF,B1=1+Q,8D
'?REG#QQ SET Q
  IFEQ '?REG#QQ,1,2 
  S;A J+B1
  SKIP 5
  IFEQ '?REG#QQ,,3
  IFNE I,J,3
  S;A J 
  SKIP 1
  S;A J+Q 
  ENDM
  
 '?REG#S1 MACRO  I,J,Q       FOR VARIABLE FIELD SYNTAX = AQ OR BQ 
  IF DEF,B1=1+Q,11D 
'?REG#QQ SET Q
  IFEQ '?REG#QQ,1,2 
  S;A J+B1
  SKIP 8D 
  IFEQ '?REG#QQ,,3
  IFNE I,J,6
  S;A J 
  SKIP 4
  IFEQ '?REG#QQ,-1,2
  S;A J-B1
  SKIP 1
  S;A J+Q 
  ENDM
  
 '?REG#S2 MACRO  I,Q         FOR VARIABLE FIELD SYNTAX = Q
  IF DEF,B1=1+Q,14D 
'?REG#QQ SET Q
  IFEQ '?REG#QQ,1,3 
  IFNE I,B1,1 
  S;A B1
  SKIP 10D
  IFEQ '?REG#QQ,,2
  S;A B0
  SKIP 7
  IFEQ '?REG#QQ,-1,2
  S;A -B1 
  SKIP 4
  IFEQ '?REG#QQ,2,2 
  S;A B1+B1 
  SKIP 1
  S;A Q 
  ENDM
          SPACE  4,7
          BASE   *
  
  
 COMAREG  ENDX
