PROC Shftmul32 (CHAN OF []BOOL ABusin, BBusin, Imm, 
                I1, I2,I3a, I3b,SelImm, ABusout, BBusout, 
                CHAN OF BOOL Multiply, Cin, Cout,
                CHAN OF ANY Ain, Aout)



  PROC input (CHAN OF []BOOL ABusin, BBusin, Imm,
              SelImm, I1, I2, I3a, I3b, ABusinr, ABusinm, BBusinm, BBusins,
              CHAN OF BOOL  Multiply,
              CHAN OF ANY Aregin,Amulin,Ashfin,Ain)

    [24]BOOL immed:
    [8]BOOL immed1:
    [12]BOOL immed2:
    [6]BOOL immed3a:
    [2]BOOL immed3b,simmed:
    [32]BOOL adata,bdata:
    BOOL 
    SEQ
      PAR
        Multiply?mul
        ABusin?adata
        BBusin?bdata
        Imm?immed
        I1?immed1
        I2?immed2
        I3a?immed3a
        I3b?immed3b
        SelImm?simmed      
      IF
        mul = TRUE
          SEQ
            PAR
              ABusinm!adata
              BBusinm!bdata
            Amulin?ANY
            Ain!ANY
         mul = FALSE
           SEQ
             PAR
               ABusinr!adata
               SEQ
                 s0 IS SelImm[0]:
                 s1 IS SelImm[1]:
                 IF
                   s0=FALSE ANDs1=FALSE
                     SKIP
                   s0=FALSE AND s1=TRUE 
                     SEQ
                       [bdata FROM 0 FOR 8]:=[immed FROM 0 FOR 8]
                       [bdata FROM 8 FOR 24]:=immed1
                   s0=TRUE AND s1=FALSE
                     SEQ
                       [bdata FROM 0 FOR 12]:=[immed FROM 0 FOR 12]
                       [bdata FROM 12 FOR 20]:=immed2
                   s0=TRUE AND s1=TRUE
                     SEQ
                       [bdata FROM 2 FOR 24]:=immed
                       [bdata FROM 0 FOR 2]:=immed3b
                       [bdata FROM 26 FOR 6]:=immed3a
                 BBusins!bdata
             Aregin?ANY
             Ashfin?ANY
             Ain!ANY

  :

  --********************************************************************
  PROC output (CHAN OF []BOOL ABusout, BBusout,
               ABusoutr,ABusoutm,BBusoutm,Bbusouts,
               CHAN OF ANY Aout, Aregout, Amulout, Ashfout)
    [32]BOOL adata, bdata
    SEQ
      ALT
        ABusoutm?adata 
          SEQ
            PAR
              ABusout!adata
              SEQ
                BBusoutm?bdata
                BBusout!bdata
            Aout?ANY
            Amulout!ANY                  
        BBusoutm?bdata
          SEQ
            PAR
              BBusout!bdata
              SEQ
                ABusoutm?adata
                ABusout!adata
            Aout?ANY
            Amulout!ANY
        ABusoutr?adata
          SEQ
            PAR
              ABusout!adata
              SEQ
                BBusouts?bdata
                BBusout!bdata
            Aout?ANY
            PAR
              Aregout!ANY
              Ashfout!ANY
        BBusouts?bdata
          SEQ
            PAR
              BBusout!bdata
              SEQ
                ABusoutr?adata
                ABusout!adata
            Aout?ANY
            PAR
              Aregout!ANY
              Ashfout!ANY
  :
  --********************************************************
  CHAN OF [31]BOOL ABusinr,ABusoutr,ABusinm,BBusinm,
               ABusoutm,BBusoutm,BBusins, BBusouts:
  CHAN OF ANY  Aregin, Aregout, Amulin, Amulout,Ashfin, Ashfout:
   
  PAR
    input(Abusin,BBusin,Imm,SelImm,I1,I2,I3a,I3b,
          ABusinr,ABusinm,BBusinm,BBusins,Multiply,
          Aregin,Amulin,Ashfin,Ain)
    output(ABusout,BBusout,ABusoutr,ABusoutm,BBusoutm,
           BBusouts, Aout, Aregout, Amulout, Ashfout)
    areg32_mde(ABusinr,ABusoutr,Aregin,Aregout)
    mult32_mde(ABusinm, BBusinm, ABusoutm,BBusoutm,Amulin, Amulout)
    shft32_mde(Cin, Cout, Shamnt, Shtype,
               BBusins, BBusouts, Ashfin, Ashfout)

:






    
              
               
              
  
         
                 



































































































































































