MODULE RightShifter( (*NW 11.11.2016*) IN x: WORD; sc: [5] BIT; md: BIT; (*md = 0 -> rotate; md = 1 -=> arith shift*) OUT y: WORD); VAR sc0, sc1: [2] BIT; s1, s2: WORD; BEGIN sc0 := sc[1:0]; sc1 := sc[3:2]; s1 := (sc0 = 3) -> {(md -> x[2:0] : {x.31 ! 3}), x[31:3]} : (sc0 = 2) -> {(md -> x[1:0] : {x.31 ! 2}), x[31:2]} : (sc0 = 1) -> {(md -> x.0 : x.31), x[31:1]} : x; s2 := (sc1 = 3) -> {(md -> s1[11:0] : {x.31 ! 12}), s1[31:12]} : (sc1 = 2) -> {(md -> s1[7:0] : {x.31 ! 8}), s1[31:8]} : (sc1 = 1) -> {(md -> s1[3:0] : {x.31 ! 4}), s1[31:4]} : s1; y := sc.4 -> {(md -> s2[15:0] : {s2.31 ! 16}), s2[31:16]} : s2; END RightShifter.