diff options
| author | Alejandro Soto <alejandro@34project.org> | 2022-11-06 19:43:51 -0600 |
|---|---|---|
| committer | Alejandro Soto <alejandro@34project.org> | 2022-11-06 19:43:56 -0600 |
| commit | 3576202083fb46fb755ceaefb5efe228afa9e2de (patch) | |
| tree | b629a968d588908d1629f8db0268c1cf229fac2a /rtl/core/decode/decode.sv | |
| parent | 177c8a0f0cff07010d01ead3f072777d94ebd97d (diff) | |
Implement decode for mrs, msr
Diffstat (limited to 'rtl/core/decode/decode.sv')
| -rw-r--r-- | rtl/core/decode/decode.sv | 46 |
1 files changed, 42 insertions, 4 deletions
diff --git a/rtl/core/decode/decode.sv b/rtl/core/decode/decode.sv index 850ddd0..b6c6cbd 100644 --- a/rtl/core/decode/decode.sv +++ b/rtl/core/decode/decode.sv @@ -146,6 +146,29 @@ module core_decode .* ); + //TODO + logic mrs_spsr; + reg_num mrs_rd; + + core_decode_mrs group_mrs + ( + .rd(mrs_rd), + .spsr(mrs_spsr), + .* + ); + + //TODO + logic msr_spsr, msr_is_imm; + msr_mask msr_fields; + + core_decode_msr group_msr + ( + .spsr(msr_spsr), + .fields(msr_fields), + .snd_is_imm(msr_is_imm), + .* + ); + always_comb begin mul = 0; ldst = 0; @@ -195,7 +218,6 @@ module core_decode snd_ctrl.is_imm = 0; snd_ctrl.r = mul_rm; - snd_ctrl.shift_by_reg = 0; writeback = 1; update_flags = mul_update_flags; @@ -261,12 +283,28 @@ module core_decode data_ctrl.uses_rn = coproc_ctrl.load; end + `INSN_MRS: begin + snd_ctrl.is_imm = 0; + snd_ctrl.r = mrs_rd; + + writeback = 1; + conditional = 1; + end + + `GROUP_MSR: begin + snd_is_imm = msr_is_imm; + snd_ror_if_imm = 1; + snd_shift_by_reg_if_reg = 0; + + snd_ctrl = snd; + conditional = 1; + end + /*`GROUP_SWP: ; - `INSN_MRS: ; - `GROUP_MSR: ; `INSN_SWI: ;*/ - default: undefined = 1; + default: + undefined = 1; endcase unique casez(insn `FIELD_OP) |
