Skip to content

Commit da2581f

Browse files
committed
finalized manually-written file and fixed minor issue in compressed register operands generation
1 parent 62cb628 commit da2581f

File tree

7 files changed

+244
-92
lines changed

7 files changed

+244
-92
lines changed

lib/c_codegen/ccodegen_operand_info.ml

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,9 @@ let single_operand_to_c index operand walker =
1414
match regfile with
1515
| Base -> "AS_GEN_PURPOSE_REG"
1616
| Float_or_Double -> "AS_FLOAT_REG"
17-
| Base_or_Float -> "AS_GEN_PURPOSE_REG"
17+
(* assume the compressed register is a general purpose register, true for most cases *)
18+
(* float cases will be patched manually later *)
19+
| Base_or_Float -> "AS_COMPRESSED_GEN_PURPOSE_REG"
1820
| Vector -> "AS_VECTOR_REG"
1921
in
2022
let op_indexing = "ops[" ^ string_of_int index ^ "]" in

riscv_disasm/RISCVAst2StrHelpers.h

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -130,7 +130,7 @@ DEF_HEX_BITS_SIGNED(30);
130130
DEF_HEX_BITS_SIGNED(31);
131131
DEF_HEX_BITS_SIGNED(32);
132132

133-
const static const char *reg_names[] = {
133+
const static char *reg_names[] = {
134134
"zero", "ra", "sp", "gp", "tp", "t0", "t1", "t2", "fp", "s1", "a0",
135135
"a1", "a2", "a3", "a4", "a5", "a6", "a7", "s2", "s3", "s4", "s5",
136136
"s6", "s7", "s8", "s9", "s10", "s11", "t3", "t4", "t5", "t6"};
@@ -139,14 +139,14 @@ static inline void reg_name(uint8_t r, SStream *ss, RVContext *ctx) {
139139
SStream_concat(ss, reg_names[r]);
140140
}
141141

142-
const static const char *creg_names[] = {"s0", "s1", "a0", "a1",
142+
const static char *creg_names[] = {"s0", "s1", "a0", "a1",
143143
"a2", "a3", "a4", "a5"};
144144
static inline void creg_name(uint8_t r, SStream *ss, RVContext *ctx) {
145145
CS_ASSERT(r < 8);
146146
SStream_concat(ss, creg_names[r]);
147147
}
148148

149-
const static const char *freg_names[] = {
149+
const static char *freg_names[] = {
150150
"ft0", "ft1", "ft2", "ft3", "ft4", "ft5", "ft6", "ft7",
151151
"fs0", "fs1", "fa0", "fa1", "fa2", "fa3", "fa4", "fa5",
152152
"fa6", "fa7", "fs2", "fs3", "fs4", "fs5", "fs6", "fs7",
@@ -156,7 +156,7 @@ static inline void freg_name(uint8_t r, SStream *ss, RVContext *ctx) {
156156
SStream_concat(ss, freg_names[r]);
157157
}
158158

159-
const static const char *vreg_names[] = {
159+
const static char *vreg_names[] = {
160160
"v0", "v1", "v2", "v3", "v4", "v5", "v6", "v7", "v8", "v9", "v10",
161161
"v11", "v12", "v13", "v14", "v15", "v16", "v17", "v18", "v19", "v20", "v21",
162162
"v22", "v23", "v24", "v25", "v26", "v27", "v28", "v29", "v30", "v31"};

riscv_disasm/RISCVDecodeHelpers.h

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -248,7 +248,8 @@ static inline bool currentlyEnabled(ExtensionType t, RVContext *ctx) {
248248
case RISCV_Ext_Svpbmt:
249249
return 0;
250250
case RISCV_Ext_Sscofpmf:
251-
return HART_SUPPORTS(Ext_Sscofpmf) && currentlyEnabled(RISCV_Ext_Zihpm, ctx);
251+
return HART_SUPPORTS(Ext_Sscofpmf) &&
252+
currentlyEnabled(RISCV_Ext_Zihpm, ctx);
252253
case RISCV_Ext_Smcntrpmf:
253254
return HART_SUPPORTS(Ext_Smcntrpmf) &&
254255
currentlyEnabled(RISCV_Ext_Zicntr, ctx);
@@ -348,13 +349,13 @@ static inline bool validDoubleRegs2(uint8_t rs1, uint8_t rd, RVContext *ctx) {
348349
}
349350

350351
static inline bool validDoubleRegs3(uint8_t rs2, uint8_t rs1, uint8_t rd,
351-
RVContext *ctx) {
352+
RVContext *ctx) {
352353
uint8_t regs[] = {rs2, rs1, rd, 0xFF};
353354
return validDoubleRegsN(regs, ctx);
354355
}
355356

356357
static inline bool validDoubleRegs4(uint8_t rs3, uint8_t rs2, uint8_t rs1,
357-
uint8_t rd, RVContext *ctx) {
358+
uint8_t rd, RVContext *ctx) {
358359
uint8_t regs[] = {rs3, rs2, rs1, rd, 0xFF};
359360
return validDoubleRegsN(regs, ctx);
360361
}
@@ -409,19 +410,18 @@ static inline float get_lmul(int32_t lpow) {
409410
return (float)(~0);
410411
}
411412

412-
static inline bool zvk_check_encdec(int32_t egw, int32_t egs,
413-
RVContext *ctx) {
413+
static inline bool zvk_check_encdec(int32_t egw, int32_t egs, RVContext *ctx) {
414414
return (ctx->vl % egs == 0) && (ctx->vstart % egs == 0) &&
415415
(get_lmul(get_lmul_pow(ctx)) * ctx->vlen >= egw);
416416
}
417417

418418
static inline bool zvk_valid_reg_overlap(uint8_t rs, uint8_t rd,
419-
int32_t emul_pow) {
419+
int32_t emul_pow) {
420420
uint64_t reg_group_size = (emul_pow > 0) ? 1 << emul_pow : 1;
421421
return (rs + reg_group_size <= rd) || (rd + reg_group_size <= rs);
422422
}
423423
static inline bool zvknhab_check_encdec(uint8_t vs2, uint8_t vs1, uint8_t vd,
424-
RVContext *ctx) {
424+
RVContext *ctx) {
425425
uint32_t sew = get_sew(ctx);
426426
int32_t lmulpow = get_lmul_pow(ctx);
427427
return zvk_check_encdec(sew, 4, ctx) &&

0 commit comments

Comments
 (0)