diff options
Diffstat (limited to 'rtl/core/decode/snd.sv')
| -rw-r--r-- | rtl/core/decode/snd.sv | 18 |
1 files changed, 7 insertions, 11 deletions
diff --git a/rtl/core/decode/snd.sv b/rtl/core/decode/snd.sv index 78c5424..264982e 100644 --- a/rtl/core/decode/snd.sv +++ b/rtl/core/decode/snd.sv @@ -41,23 +41,21 @@ module core_decode_snd ror = is_imm; shr = ~is_imm; put_carry = 0; - sign_extend = 1'bx; + sign_extend = 0; - if(is_imm && !ror_if_imm) - shift_imm = 6'b0; - else if(is_imm && !ror_if_imm) - shift_imm = {1'b0, insn `FIELD_SND_ROR8, 1'b0}; + if(is_imm) + shift_imm = ror_if_imm ? {1'b0, insn `FIELD_SND_ROR8, 1'b0} : 6'b0; else begin shift_imm = {1'b0, insn `FIELD_SND_SHIFTIMM}; case(shift_op) `SHIFT_LSL: shr = 0; - `SHIFT_LSR: sign_extend = 0; + `SHIFT_LSR: ; `SHIFT_ASR: sign_extend = 1; - `SHIFT_ROR: ; + `SHIFT_ROR: ror = 1; endcase - if(~shift_by_reg & (shift_imm == 0)) + if(!shift_by_reg && shift_imm == 0) case(shift_op) `SHIFT_LSL: ; @@ -66,13 +64,11 @@ module core_decode_snd `SHIFT_ROR: begin // RRX + ror = 0; shift_imm = 6'd1; put_carry = 1; - sign_extend = 0; end endcase - else if(shift_op == `SHIFT_ROR) - ror = 1; end end |
