*DECK GCONMUL 
          IDENT  GCONMUL
          TITLE  GCONMUL - GENERATE CODE TO COMPUTE COMP1 * CONSTANT
  
          MACHINE  ANY,I
          SST 
          COMMENT  GENERATE CODE FOR COMP-1 * CONSTANT
          SPACE  4
**        GCONMUL -  GENERATE CODE FOR COMP-1 * CONSTANT
*         INPUT 
*                P1 - CONSTANT
*                P2 - VIRTUAL REGISTER CONTAINING INTEGER 
*         OUTPUT
*                P3 - VIRTUAL REGISTER CONTAINING RESULT
*         COMMENT - INPUT VIRTUAL REGISTER IS NOT MODIFIED BY 
*                   GENERATED CODE (P3 " P1)
* 
**        LITMULT -  GENERATE CODE FOR COMP1 * LITERAL
*         INPUT 
*                P1 - REG TABLE POINTER FOR LITERAL ENTRY 
*                P2 - VIRTUAL REGISTER CONTAINING INTEGER 
*         OUTPUT
*                P3 - VIRTUAL REGISTER CONTAINING RESULT
* 
  
  
  
  
  
 CONTROL  OPSYN  NIL
  
  
  
  
 GCONMUL  MODULE
  
 GCONMUL  KNIL   GCONMUL
 GLITMUL  KNIL   GLITMUL
  
 ADPDNAT  LINK   ADPDNAT
 BINVAL   LINK   BINVAL 
 EXAMBIN  LINK   EXAMBIN
 SUBDNAT  LINK   SUBDNAT
  
 VREGX    EQU    VREG22 
 VREGY    EQU    VREG23 
 VREGZ    EQU    VREG24 
  
 SUM      EQU    1
  
 GLITMUL  EGO    2
          MOVEZ  P1,REGT
          MOVEZ  P2,VREGX 
          CALLZ  BINVAL 
          BRANCH CONMUL0
          SPACE  4
 GCONMUL  EGO    2
          MOVEZ  P2,VREGX 
          CALLZ  EXAMBIN
 CONMUL0  LABEL 
          GOTOCASE P2 
            CASE   0,CONMUL1  GREATER THAN 17 BITS
            CASE   1,CONMUL2  0 
            CASE   2,CONMUL3  1 
            CASE   3,CONMUL4  2 
            CASE   4,CONMUL5  LESS THAN 17 BITS 
            CASE   5,CONMUL6  2**N
            CASE   6,CONMUL7  2**N + 2**M 
            CASE   7,CONMUL8  2**N - 2**M 
            CASE   8,CONMUL5  LESS THAN 17 BITS 
            CASE   9,CONMUL6  2**N
            CASE  10,CONMUL7  2**N + 2**M 
            CASE  11,CONMUL8  2**N - 2**M 
          ENDCASE 
          ERROR 
* 
 CONMUL1  LABEL              LITERAL GREATER THAN 17 BITS 
          MOVEZ  (EQUALS,REGT1),REGT
          CALLZ  ADPDNAT     ADD PERMANENT DNAT 
          MOVEZ  0,(BCPOF,REGT) 
          MOVEZ  10,(BYTLENOF,REGT) 
          MOVEZ  P1,P2
          MOVEZ  0,P1 
          EXECUTE LITPOOL 
          GEN    SLRBPK,(VREGOF,VREGY),,((FWA$OF,REGT)) 
          GEN    IMUL,(VREGOF,VREGY),VREGY,VREGX
* ELIMINATE -0
          GEN    MASK,(VREGOF,VREGX)
          GEN    IADD,(VREGOF,VREGY),VREGX,VREGY
          MOVEZ  VREGY,P3 
          RETURN
          SPACE  4
 CONMUL2  LABEL              LITERAL = 0
          GEN    MASK,(VREGOF,VREGY),0
          MOVEZ  VREGY,P3 
          RETURN
          SPACE  4
 CONMUL3  LABEL              LITERAL = 1
          GEN    XMIT,(VREGOF,VREGY),VREGX
          MOVEZ  VREGY,P3 
          RETURN
          SPACE  4
 CONMUL4  LABEL              LITERAL = 2
          GEN    SHLB,(VREGOF,VREGY),R1,VREGX 
          MOVEZ  VREGY,P3 
          RETURN
          SPACE  4
 CONMUL5  LABEL              LITERAL LESS THAN 17 BITS
          GEN    SXBPK,(VREGOF,VREGY),P1
          GEN    IMUL,(VREGOF,VREGY),VREGY,VREGX
* ELIMINATE -0
          GEN    MASK,(VREGOF,VREGX)
          GEN    IADD,(VREGOF,VREGY),VREGX,VREGY
          MOVEZ  VREGY,P3 
          SPACE  4
          RETURN
 CONMUL6  LABEL              LITERAL = 2**N 
          GEN    XMIT,(VREGOF,VREGY),VREGX
          GEN    SHL,VREGY,P3 
          MOVEZ  VREGY,P3 
          RETURN
          SPACE  4
 CONMUL7  LABEL              LITERAL = 2**N + 2**M
          IFTHEN (P3,EQ,0)
            MOVEZ  VREGX,VREGY
          ELSEZ 
            GEN    XMIT,(VREGOF,VREGY),VREGX
            GEN    SHL,VREGY,P3 
          ENDIFZ
          IFTHEN  (P4,EQ,0) 
            MOVEZ  VREGX,VREGZ
          ELSEZ 
            GEN    XMIT,(VREGOF,VREGZ),VREGX
            GEN    SHL,VREGZ,P4 
          ENDIFZ
          GEN    IADD,(VREGOF,VREGY),VREGY,VREGZ
          MOVEZ  VREGY,P3 
          RETURN
          SPACE  4
 CONMUL8  LABEL              LITERAL = 2**N - 2**M
          IFTHEN (P3,EQ,0)
            MOVEZ  VREGX,VREGY
          ELSEZ 
            GEN    XMIT,(VREGOF,VREGY),VREGX
            GEN    SHL,VREGY,P3 
          ENDIFZ
          IFTHEN (P4,EQ,0)
            MOVEZ  VREGX,VREGZ
          ELSEZ 
            GEN    XMIT,(VREGOF,VREGZ),VREGX
            GEN    SHL,VREGZ,P4 
          ENDIFZ
          GEN    ISUB,(VREGOF,VREGY),VREGY,VREGZ
          MOVEZ  VREGY,P3 
          RETURN
          END 
