diff options
Diffstat (limited to 'rtl/core')
| -rw-r--r-- | rtl/core/decode/decode.sv | 4 | ||||
| -rw-r--r-- | rtl/core/decode/isa.sv | 8 | ||||
| -rw-r--r-- | rtl/core/decode/ldst/misc.sv | 4 | ||||
| -rw-r--r-- | rtl/core/decode/mux.sv | 28 |
4 files changed, 18 insertions, 26 deletions
diff --git a/rtl/core/decode/decode.sv b/rtl/core/decode/decode.sv index 6c5b802..71d76e3 100644 --- a/rtl/core/decode/decode.sv +++ b/rtl/core/decode/decode.sv @@ -99,7 +99,7 @@ module core_decode ); ldst_decode ldst_misc; - logic ldst_misc_off_is_reg; + logic ldst_misc_off_is_imm; reg_num ldst_misc_off_reg; logic[7:0] ldst_misc_off_imm; @@ -108,7 +108,7 @@ module core_decode .decode(ldst_misc), .off_imm(ldst_misc_off_imm), .off_reg(ldst_misc_off_reg), - .off_is_reg(ldst_misc_off_is_reg), + .off_is_imm(ldst_misc_off_is_imm), .* ); diff --git a/rtl/core/decode/isa.sv b/rtl/core/decode/isa.sv index 3e3a6d1..4f2578d 100644 --- a/rtl/core/decode/isa.sv +++ b/rtl/core/decode/isa.sv @@ -125,12 +125,10 @@ `define INSN_STM_CUR 28'b100_?_?_0_?_0_????_???????????????? `define INSN_STM_USR 28'b100_?_?_1_0_0_????_???????????????? -`define GROUP_LDST_SINGLE 28'b01_?_?_?_?_?_?_????_????_???????????? `define GROUP_LDST_SINGLE_IMM 28'b01_0_?_?_?_?_?_????_????_???????????? `define GROUP_LDST_SINGLE_REG 28'b01_1_?_?_?_?_?_????_????_?????_??_0_???? -`define GROUP_LDST_MISC 28'b000_?_?_?_?_?_????_????_????_1_?_?_1_???? -`define GROUP_LDST_MISC_IMM 28'b000_?_?_1_?_?_????_????_????_1_?_?_1_???? -`define GROUP_LDST_MISC_REG 28'b000_?_?_0_?_?_????_????_0000_1_?_?_1_???? +`define GROUP_LDST_SINGLE `GROUP_LDST_SINGLE_IMM, `GROUP_LDST_SINGLE_REG +`define GROUP_LDST_MISC `INSN_LDRH, `INSN_LDRSB, `INSN_LDRSH, `INSN_STRH `define GROUP_LDST_MULT 28'b100_?_?_?_?_?_????_???????????????? `define FIELD_LDST_LD [20] @@ -144,7 +142,7 @@ `define FIELD_LDST_MISC_P [24] `define FIELD_LDST_MISC_U [23] -`define FIELD_LDST_MISC_REG [22] +`define FIELD_LDST_MISC_IMM [22] `define FIELD_LDST_MISC_W [21] `define FIELD_LDST_MISC_RN [19:16] `define FIELD_LDST_MISC_RD [15:12] diff --git a/rtl/core/decode/ldst/misc.sv b/rtl/core/decode/ldst/misc.sv index d8ac898..4e4a17e 100644 --- a/rtl/core/decode/ldst/misc.sv +++ b/rtl/core/decode/ldst/misc.sv @@ -6,7 +6,7 @@ module core_decode_ldst_misc input word insn, output ldst_decode decode, - output logic off_is_reg, + output logic off_is_imm, output logic[7:0] off_imm, output reg_num off_reg ); @@ -27,7 +27,7 @@ module core_decode_ldst_misc assign off_imm = {insn `FIELD_LDST_MISC_IMM_HI, insn `FIELD_LDST_MISC_IMM_LO}; assign off_reg = insn `FIELD_LDST_MISC_RM; - assign off_is_reg = insn `FIELD_LDST_MISC_REG; + assign off_is_imm = insn `FIELD_LDST_MISC_IMM; assign p = insn `FIELD_LDST_MISC_P; assign w = insn `FIELD_LDST_MISC_W; diff --git a/rtl/core/decode/mux.sv b/rtl/core/decode/mux.sv index 594b7f0..d740e94 100644 --- a/rtl/core/decode/mux.sv +++ b/rtl/core/decode/mux.sv @@ -22,7 +22,7 @@ module core_decode_mux ldst_misc, ldst_multiple, input logic ldst_single_is_imm, - ldst_misc_off_is_reg, + ldst_misc_off_is_imm, input reg_num ldst_misc_off_reg, input logic[7:0] ldst_misc_off_imm, input logic ldst_mult_restore_spsr, @@ -125,6 +125,15 @@ module core_decode_mux update_flags = mul_update_flags; end + `GROUP_LDST_MISC: begin + dec_ldst = ldst_misc; + ldst_addr = ldst_misc; + + dec_snd.r = ldst_misc_off_reg; + dec_snd.imm = {4'b0, ldst_misc_off_imm}; + dec_snd.is_imm = ldst_misc_off_is_imm; + end + `GROUP_ALU: begin snd_is_imm = data_is_imm; snd_ror_if_imm = 1; @@ -141,7 +150,7 @@ module core_decode_mux conditional = data_conditional; end - `GROUP_LDST_SINGLE_IMM, `GROUP_LDST_SINGLE_REG: begin + `GROUP_LDST_SINGLE: begin snd_is_imm = ldst_single_is_imm; snd_ror_if_imm = 0; snd_shift_by_reg_if_reg = 0; @@ -153,21 +162,6 @@ module core_decode_mux undefined = snd_undefined; end - `GROUP_LDST_MISC_IMM, `GROUP_LDST_MISC_REG: - priority casez(insn `FIELD_OP) - `INSN_LDRB, `INSN_LDRSB, `INSN_LDRSH, `INSN_STRH: begin - dec_ldst = ldst_misc; - ldst_addr = ldst_misc; - - dec_snd.r = ldst_misc_off_reg; - dec_snd.imm = {4'b0, ldst_misc_off_imm}; - dec_snd.is_imm = !ldst_misc_off_is_reg; - end - - default: - undefined = 1; - endcase - `GROUP_LDST_MULT: begin dec_ldst = ldst_multiple; ldst_addr = ldst_multiple; |
