Skip to content

Commit be0871b

Browse files
authored
fix: replace - and . with _ in generated C header (riscv-software-src#895)
`-` and `.` are not legal in the name of a `#define` in C. This replaces `-` and `.` with `_` in CSR and exception code names in the generated C header, as is already done for instruction names. Currently, invalid examples are emitted in the "C header" (`gen/c_header/encoding.out.h`) generated via `./do gen:c_header`, for example: ``` #define CSR_MSTATUSH.RV32 0x310 #define CSR_MEDELEGH.RV32 0x312 #define CSR_MENVCFGH.RV32 0x31a [...] #define CAUSE_ENVIRONMENT_CALL_FROM_VS-MODE 0xa #define CAUSE_ENVIRONMENT_CALL_FROM_M-MODE 0xb ``` With proposed changes: ``` #define CSR_MSTATUSH_RV32 0x310 #define CSR_MEDELEGH_RV32 0x312 #define CSR_MENVCFGH_RV32 0x31a [...] #define CAUSE_ENVIRONMENT_CALL_FROM_VS_MODE 0xa #define CAUSE_ENVIRONMENT_CALL_FROM_M_MODE 0xb ```
1 parent 77d4edc commit be0871b

File tree

1 file changed

+6
-3
lines changed

1 file changed

+6
-3
lines changed

backends/generators/c_header/generate_encoding.py

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -79,7 +79,10 @@ def load_exception_codes(ext_dir, enabled_extensions=None, include_all=False):
7979

8080
if num is not None and name is not None:
8181
sanitized_name = (
82-
name.lower().replace(" ", "_").replace("/", "_")
82+
name.lower()
83+
.replace(" ", "_")
84+
.replace("/", "_")
85+
.replace("-", "_")
8386
)
8487
exception_codes.append((num, sanitized_name))
8588

@@ -361,8 +364,8 @@ def main():
361364
csr_names_str = ""
362365
declare_csr_str = ""
363366
for addr, name in sorted(csrs.items()):
364-
csr_names_str += f"#define CSR_{name.upper()} 0x{addr:x}\n"
365-
declare_csr_str += f"DECLARE_CSR({name.lower()}, CSR_{name.upper()})\n"
367+
csr_names_str += f"#define CSR_{name.upper().replace(".","_")} 0x{addr:x}\n"
368+
declare_csr_str += f"DECLARE_CSR({name.lower().replace(".","_")}, CSR_{name.upper().replace(".","_")})\n"
366369

367370
causes_str = ""
368371
declare_cause_str = ""

0 commit comments

Comments
 (0)