summaryrefslogtreecommitdiff
path: root/rtl
diff options
context:
space:
mode:
authorAlejandro Soto <alejandro@34project.org>2022-11-16 00:03:11 -0600
committerAlejandro Soto <alejandro@34project.org>2022-11-16 00:03:11 -0600
commit86903ec40acd3014861d856660a27f6a131d8ca3 (patch)
tree875e7b1d6da0962667e55607748c0abe11f543a5 /rtl
parentd9dfa098323bc9ffdc9e976bd4106efc75b2954a (diff)
Fix decoding of LDST_MISC group
Diffstat (limited to '')
-rw-r--r--rtl/core/decode/decode.sv4
-rw-r--r--rtl/core/decode/isa.sv8
-rw-r--r--rtl/core/decode/ldst/misc.sv4
-rw-r--r--rtl/core/decode/mux.sv28
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;