mirror of
https://github.com/odin-lang/Odin.git
synced 2026-08-28 16:01:31 +00:00
Begin work on pseudo mnemonics in the checker
This commit is contained in:
@@ -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, """
|
||||
|
||||
|
||||
@@ -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");
|
||||
|
||||
Reference in New Issue
Block a user