*COMDECK COMFROR - RESET OPCODES OF ROUNDABLE SKELETONS 
 ROR      CTEXT  COMFROR - ROUNDABLE OPCODE RESET.
          SPACE  4,7
          IF     -DEF,QUAL$,1 
          QUAL   COMFROR
          SPACE  4,10 
**        ROR    RESET OPCODES OF ROUNDABLES
*                THIS SUBROUTINE RECORDS THE ROUND OPTIONS SELECTED 
*                BY THE USER. IF NEEDED, IT THEN CHANGES THE EFFECTED 
*                OPCODE FIELDS OF ROUNDABLE SKELETONS FROM FLOATING 
*                TO ROUNDED OPCODES.
* 
*         ENTRY  CO.RNDA - 1S59 IF + MUST BE ROUNDED, ELSE 0
*                CO.RNDS - 1S59 IF - MUST BE ROUNDED, ELSE 0
*                CO.RNDM - 1S59 IF * MUST BE ROUNDED, ELSE 0
*                CO.RNDD - 1S59 IF / MUST BE ROUNDED, ELSE 0
* 
*                (B2) = FWA OF CODE SKELETONS 
* 
*         EXIT   SKELETON OPCODES CHANGED AS THE CO.RND CELLS INDICATE
* 
*         USES   A1,6  X0,1,2,3,6  B3 
  
 ROR      SUBR               ENTRY/EXIT 
  
**        FORM THE SKELETON MODIFICATION MASK IN X2, WITH THE VALUES OF 
*         59-OPCODE FOR THOSE OPERATIONS WHICH ARE TO BE ROUNDED. 
  
**        PROCESS FOR + 
  
          SA3    =XCO.RNDA
          LX3    -30B        SHIFT TO BIT 59-FADD OPCODE
          BX2    X3          INITIALIZE 
  
**        PROCESS FOR - 
  
          SA3    =XCO.RNDS
          LX3    -31B        POSITION IN BIT 59-FSUB OPCODE.
          IX2    X2+X3       ADD INTO OPCODE BIT ACUMULATOR.
  
**        REPEAT PROCESS FOR *
  
          SA3    =XCO.RNDM
          LX3    -40B        SHIFT TO 59-FMULT OPCODE 
          IX2    X2+X3
  
**        REPEAT PROCESS FOR /
  
          SA3    =XCO.RNDD
          LX3    -44B        SHIFT TO 59-FDIV OPCODE
          IX2    X2+X3
          ZR     X2,EXIT.    IF NO ROUNDED OPERATIONS 
  
**        HERE WE LOOP THROUGH CODE SKELETONS,
*         CHANGING ROUNDABLE OPCODES. 
  
          SA1    B2-1 
  
**        (A1) _ CURRENT SKELETON 
*         (X0) = SKELETON OPCODE MASK 
*         (X1) = CURRENT SKELETON 
*         (X2) = 59-OPCODE BITS FOR ROUNDED OPERATIONS. 
  
 ROR2     =A1    A1+1        FETCH NEXT SKELETON WORD 
          MX0    -SK.GHL     OPCODE MASK
          BX3    X1 
          LX3    -SK.GHP     POSITION OPCODE FIELD. 
          ZR     X1,EXIT.    IF DONE
          BX0    -X0*X3      EXTRACT OPCODE.
          HX1    SK.RND      SIGN BIT OF X1 = ROUNDABLE BIT 
          SB3    X0          SHIFT COUNT = OPCODE 
          LX3    B3,X2
          PL     X1,ROR2     IF NOT A ROUNDABLE SKELETON. 
          PL     X3,ROR2     IF OPERATOR NOT SELECTED FOR ROUNDING
          LX1    1+SK.RNDP-SK.GHP  READY SKEL WORD FOR OPCODE CHANGE. 
  
**        NOW CHANGE OPCODE USING A SNEEKY TRICK. OPCODES 30,31 BECOME
*         34,35 RESP, AND 40,44 BECOME 41,45 RESP. THAT IS WE INCREMENT 
*         OPCODE BY 1 IF BIT 5 IS ON OR INCREMENT BY 4 IF BIT 3 IS ON 
*         (IN OPCODE FIELD). THE FOLLOWING INSTRUCTIONS ACOMPLISH THIS. 
* 
*         (X0) = OPCODE OF SKELETON WORD
*         (X1) = SKELETON  LEFT SHIFTED BY SK.GHP 
  
          SX3    50B         3,5 BIT MASK 
          BX0    X3*X0       EXTRACT BIT 3 OR 5 
          BX3    X3-X0       REVERSE THE BITS 
          AX3    3           (X3) = 4 FOR 3X OPCODES, 1 FOR 4X OPCODES
          IX6    X1+X3       INCREMENT OPCODE.
          LX6    SK.GHP      RESET SKELETON WORD
          SA6    A1          RESET SKELETON.
          EQ     ROR2 
          SPACE  4,8
          IF     -DEF,QUAL$,2 
          QUAL   *
 ROR      EQU    /COMFROR/ROR 
          SPACE  4,7
 COMFROR  ENDX
