/******************************************
* (C)Copyright by N.T.T 1993(unpublished) *
* All rights are reserved.                *
******************************************/
module sft_8 {
    input       left_right ;
    input       sign ;
    input       amt<3> ;
    input       in<8> ;
    output      out<8> ;
    sel_v       pad ;
    sel_v       tmp2<8>, tmp1<8> ;
    instrin     do ;
    instrself   sftl4 , sftr4 , pass4 ;
    instrself   sftl2 , sftr2 , pass2 ;
    instrself   sftl1 , sftr1 , pass1 ;
    instruct do par {
        pad = in<7> & sign ;
        any {
            left_right : par {
                any { amt<2> : sftl4() ;  else : pass4() ;  }
                any { amt<1> : sftl2() ;  else : pass2() ;  }
                any { amt<0> : sftl1() ;  else : pass1() ;  }
            }
            else : par {
                any { amt<2> : sftr4() ;  else : pass4() ;  }
                any { amt<1> : sftr2() ;  else : pass2() ;  }
                any { amt<0> : sftr1() ;  else : pass1() ;  }
            }
        }
    }
    instruct sftl4 out  = tmp2<3:0> || 0b0000 ;
    instruct sftr4 out  = pad || pad || pad || pad || tmp2<7:4> ;
    instruct pass4 out  = tmp2 ;
    instruct sftl2 tmp2 = tmp1<5:0> || 0b00 ;
    instruct sftr2 tmp2 = pad || pad || tmp1<7:2> ;
    instruct pass2 tmp2 = tmp1 ;
    instruct sftl1 tmp1 = in<6:0> || 0b0 ;
    instruct sftr1 tmp1 = pad || in<7:1> ;
    instruct pass1 tmp1 = in ;
}
