*COMDECK  COMFSIM 
 COMFSIM  CTEXT              COMFSIM - SELECT INTEGER MULTIPLY SKELETON.
**        SIM - SELECT INTEGER MULTIPLY SUBSKEL ON BASIS OF 
*         MULTIPLICAND NATURE.
* 
*         ENTRY  B5 _ CURRENT TURPLE. 
* 
*         EXIT   TO SUB.RET WITH
*                X6 = ADDRESS OF SUBSKEL. 
*                ("GPBUF"),("GPBUF"+1) = GP1,GP2
* 
*         PRESERVES B4
* 
*         **KLUGE** AT PRESENT THE QCG I. L. INPUT IS IN P2. FORMAT.
*         SO IN ORER TO ACHIEVE COMMONALITY WE SUBSTITUTE THE MICRO 
*         "TP" FOR TP IN THIS CODE. "TP" = P2 (QCG) OR TP (BRIDGE). 
*         TO FURTHER COMPLICATE THINGS SHORT CONSTANT VALUES RESIDE 
*         IN THE BIAS FIELD FOR THE BRIDGE AND THE TAG FIELD FOR QCG. 
*         WE DEFINE "BIAS" = TAG (QCG) OR BIAS (BRIDGE).
  
          SX6    =XV=IMV     *NORMAL* INTEGER MULTIPLY
          SA1    B5+B1
          SA2    A1+B1
          BX7    X1 
          BX4    X2 
          LX1    59-"TP".SHRTP
          LX2    59-"TP".SHRTP
          BX3    X1+X2
          PL     X3,SUB.RET  IF NEITHER OPERAND SHORT CONSTANT
          MI     X2,IM1      IF OPERAND 2 IS SHORT CONSTANT 
  
*         SWITCH OP1/OP2
  
          BX0    X7 
          SA7    A2 
          BX7    X4 
          SA7    A1 
          BX4    X0 
  
 IM1      LX4    -"TP"."BIAS"P
          SX4    X4 
          SX3    B1 
          IX1    X4-X3
          SB7    X4          SAVE MULTIPLIER
          BX0    X4*X1
          BX2    X1 
          AX2    17 
          MI     X4,SUB.RET  IF CONSTANT LT 0 
          MI     X1,SUB.RET  IF CONSTANT LE 0 
          NZ     X0,IM2      IF NOT SIMPLE POWER OF 2 
  
*         SET-UP SIMPLE POWER OF 2
  
          NX0    B7,X4
          SB7    B7-47       OFF BIAS 
          SB7    -B7         SHIFT CONSTANT.
          BX4    X3 
          SX0    B7          K
          EQ     B7,B1,IM6   IF POWER = 1 
          SX6    =XV=SHFC 
          EQ     IMX2 
  
*         NOT SIMPLE POWER OF *2*, CHECK IF SUM OF POWER OF *2* 
  
 IM2      IX2    X0-X3
          SB2    X0          SAVE K PORTION 
          BX0    X0*X2
          NZ     X0,IM3      IF NO SUM OF POWER OF 2
  
*         SET-UP SUM OF POWER OF 2
  
          SX2    B2          K   NUMBER 
          SX1    B7-B2       J   NUMBER 
          NX0    B2,X2
          SB2    B2-47       -K  POWER
          NX0    B7,X1       J NUMBER 
          SB2    -B2
          SB7    B7-47       -J  POWER
          SX0    -B7         J   POWER
          SX6    =XV=SHFS 
          SX7    B2+B7       K POWER
          NZ     X0,IMX1     IF J POWER NOT 0 
          SX0    X7          J = K
          SX6    =XV=SHFS1
          EQ     IMX1 
  
*         NOT SUM OF POWER OF *2*, CHECK IF DIFFERENCE OF POWER OF *2*
  
 IM3      BX7    X4+X1
          IX0    X7+X3
          BX2    X0*X7
          NZ     X2,SUB.RET  IF NOT DIFFERENCE OF POWER OF *2*
          BX2    X4-X1       2**J+1 - 1 
  
*         SET-UP DIFFERENCE OF POWER OF 2 
  
          NX1    B2,X2
          SB2    B2-47
          SX1    B7 
          SX0    -B2         J   POWER
          NX7    B7,X1       K+J POWER
          SB7    B7-48
          SX7    -B7
          SX6    =XV=SHFD 
          NZ     X0,IMX1     IF J POWER NOT ZERO
          SX0    X7          J = K
          SX6    =XV=SHFD1
  
 IMX1     MX1    1
          LX7    "TP"."BIAS"P 
          LX1    1+"TP".SHRTP 
          BX7    X1+X7
          SA7    "GPBUF"+1
  
 IMX2     MX1    1
          LX0    "TP"."BIAS"P 
          LX1    1+"TP".SHRTP 
          BX7    X1+X0
          SA7    "GPBUF"
          EQ     SUB.RET
  
 IM6      SX6    =XV=IM2
          EQ     SUB.RET
          ENDX
