target/nios2: Split out named structs for [IRJ]_TYPE

Currently the structures are anonymous within the macro.
Pull them out to standalone types.

Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
Reviewed-by: Peter Maydell <peter.maydell@linaro.org>
Message-Id: <20220421151735.31996-44-richard.henderson@linaro.org>
This commit is contained in:
Richard Henderson 2022-04-21 08:17:14 -07:00
parent 718db07714
commit 1746338ed6

View File

@ -53,16 +53,18 @@
#define INSN_R_TYPE 0x3A #define INSN_R_TYPE 0x3A
/* I-Type instruction parsing */ /* I-Type instruction parsing */
typedef struct {
uint8_t op;
union {
uint16_t u;
int16_t s;
} imm16;
uint8_t b;
uint8_t a;
} InstrIType;
#define I_TYPE(instr, code) \ #define I_TYPE(instr, code) \
struct { \ InstrIType (instr) = { \
uint8_t op; \
union { \
uint16_t u; \
int16_t s; \
} imm16; \
uint8_t b; \
uint8_t a; \
} (instr) = { \
.op = extract32((code), 0, 6), \ .op = extract32((code), 0, 6), \
.imm16.u = extract32((code), 6, 16), \ .imm16.u = extract32((code), 6, 16), \
.b = extract32((code), 22, 5), \ .b = extract32((code), 22, 5), \
@ -70,15 +72,17 @@
} }
/* R-Type instruction parsing */ /* R-Type instruction parsing */
typedef struct {
uint8_t op;
uint8_t imm5;
uint8_t opx;
uint8_t c;
uint8_t b;
uint8_t a;
} InstrRType;
#define R_TYPE(instr, code) \ #define R_TYPE(instr, code) \
struct { \ InstrRType (instr) = { \
uint8_t op; \
uint8_t imm5; \
uint8_t opx; \
uint8_t c; \
uint8_t b; \
uint8_t a; \
} (instr) = { \
.op = extract32((code), 0, 6), \ .op = extract32((code), 0, 6), \
.imm5 = extract32((code), 6, 5), \ .imm5 = extract32((code), 6, 5), \
.opx = extract32((code), 11, 6), \ .opx = extract32((code), 11, 6), \
@ -88,11 +92,13 @@
} }
/* J-Type instruction parsing */ /* J-Type instruction parsing */
typedef struct {
uint8_t op;
uint32_t imm26;
} InstrJType;
#define J_TYPE(instr, code) \ #define J_TYPE(instr, code) \
struct { \ InstrJType (instr) = { \
uint8_t op; \
uint32_t imm26; \
} (instr) = { \
.op = extract32((code), 0, 6), \ .op = extract32((code), 0, 6), \
.imm26 = extract32((code), 6, 26), \ .imm26 = extract32((code), 6, 26), \
} }