Begin work on pseudo mnemonics in the checker

This commit is contained in:
gingerBill
2026-08-20 19:12:44 +01:00
parent cfb8a109b6
commit 7a7bfea0bd
8 changed files with 315 additions and 96 deletions

View File

@@ -294,7 +294,7 @@ main :: proc() {
return found ? *found : PM_INVALID;
}
PseudoAlias pseudo_alias(PseudoMnemonic pm) {
PseudoAlias pseudo_alias(u16 pm) {
PseudoAlias *pa = (PseudoAlias *)raw_pseudo_aliases;
return pa[pm];
}
@@ -409,7 +409,7 @@ main :: proc() {
strings.write_string(&sb, "\n")
strings.write_string(&sb, "\tStringMap<Mnemonic> mnemonic_map;\n")
strings.write_string(&sb, "\tStringMap<Register> register_map;\n")
strings.write_string(&sb, "\tStringMap<PseudoMnemonic> pseudo_register_map;\n")
strings.write_string(&sb, "\tStringMap<PseudoMnemonic> pseudo_mnemonic_map;\n")
strings.write_string(&sb, """

View File

@@ -340,8 +340,16 @@ main :: proc() {
strings.write_string(&sb, "\n");
strings.write_string(&sb, "\n");
strings.write_string(&sb, """
enum AliasSrc : u8 {
AliasSrc_NONE, // slot unused
};
struct PseudoAlias {
Mnemonic target;
Mnemonic target; // real instruction emitted
AliasSrc src[4]; // how to fill target's four operand slots
i16 lit; // immediate when a src slot is AliasSrc_LIT
u16 csr; // CSR address when a src slot is AliasSrc_CSR_LIT
u8 nargs; // operands the user supplies (ARG0..<ARGn)
};
enum PseudoMnemonic : u16 {
PM_INVALID,
@@ -352,11 +360,14 @@ main :: proc() {
return PM_INVALID;
}
PseudoAlias pseudo_alias(PseudoMnemonic pm) {
PseudoAlias pseudo_alias(u16 pm) {
return {};
}
""")
strings.write_string(&sb, "\tstatic String const pseudo_mnemonic_strings[PSEUDO_MNEMONIC_COUNT];\n")
strings.write_string(&sb, "\n")
strings.write_string(&sb, "\tstatic u16 const register_codes [REG_COUNT];\n")
strings.write_string(&sb, "\tstatic String const register_strings[REG_COUNT];\n")
@@ -774,6 +785,8 @@ main :: proc() {
strings.write_string(&sb, "\n");
}
fmt.sbprintf(&sb, "String const Asm_{0:s}::pseudo_mnemonic_strings[Asm_{0:s}::PSEUDO_MNEMONIC_COUNT] {{}};\n", ISA_NAME)
{
fmt.sbprintf(&sb, "u16 const Asm_{0:s}::register_codes[Asm_{0:s}::REG_COUNT] {{\n", ISA_NAME)
defer strings.write_string(&sb, "};\n");