mirror of
https://github.com/odin-lang/Odin.git
synced 2026-10-09 14:22:18 -04:00
87 lines
1.9 KiB
C++
87 lines
1.9 KiB
C++
enum AsmRegClass : u8 {
|
|
AsmRegClass_Unknown,
|
|
AsmRegClass_Integer,
|
|
AsmRegClass_Float,
|
|
AsmRegClass_Vector,
|
|
AsmRegClass_Mask,
|
|
|
|
AsmRegClass_COUNT
|
|
};
|
|
|
|
gb_global String const asm_reg_class_strings[AsmRegClass_COUNT] = {
|
|
str_lit("unknown"),
|
|
str_lit("integer"),
|
|
str_lit("float"),
|
|
str_lit("vector"),
|
|
str_lit("mask"),
|
|
};
|
|
|
|
gb_global String const asm_reg_class_strings_with_article[AsmRegClass_COUNT] = {
|
|
str_lit("an unknown"),
|
|
str_lit("an integer"),
|
|
str_lit("a float"),
|
|
str_lit("a vector"),
|
|
str_lit("a mask"),
|
|
};
|
|
|
|
enum AsmOperandKind : u8 {
|
|
AsmOperand_Invalid,
|
|
AsmOperand_Register,
|
|
AsmOperand_Memory,
|
|
AsmOperand_Register_Or_Memory,
|
|
AsmOperand_Immediate,
|
|
AsmOperand_Label,
|
|
AsmOperand_RegisterGroup,
|
|
AsmOperand_Lane,
|
|
AsmOperand_RegisterShift,
|
|
|
|
AsmOperand_COUNT
|
|
};
|
|
|
|
gb_global String const asm_operand_kind_strings[AsmOperand_COUNT] = {
|
|
str_lit(""),
|
|
str_lit("register"),
|
|
str_lit("memory"),
|
|
str_lit("register or memory"),
|
|
str_lit("immediate"),
|
|
str_lit("label"),
|
|
str_lit("register group"),
|
|
str_lit("lane"),
|
|
str_lit("register shift"),
|
|
};
|
|
|
|
gb_global String const asm_operand_kind_expected_strings[AsmOperand_COUNT] = {
|
|
str_lit(""),
|
|
str_lit("a register"),
|
|
str_lit("a memory"),
|
|
str_lit("a register or memory"),
|
|
str_lit("an immediate"),
|
|
str_lit("a label"),
|
|
str_lit("a register group"),
|
|
str_lit("a lane"),
|
|
str_lit("a register shift"),
|
|
};
|
|
|
|
enum AsmOperandConstraintKind : u32 {
|
|
AsmOperandConstraint_None = 0,
|
|
AsmOperandConstraint_ShiftCount, // integer const must satisfy 0 <= v < width
|
|
AsmOperandConstraint_NonZeroDivisor, // integer const must be != 0
|
|
|
|
AsmOperandConstraint_COUNT
|
|
};
|
|
|
|
|
|
struct AsmOperandConstraint {
|
|
AsmOperandConstraintKind kind;
|
|
i32 width_operand; // ShiftCount
|
|
};
|
|
|
|
#include "asm_tables_amd64.cpp"
|
|
#include "asm_tables_riscv.cpp"
|
|
#include "asm_tables_arm64.cpp"
|
|
|
|
void init_asm_tables(i64 word_size_bytes) {
|
|
g_asm_amd64.init(word_size_bytes*8);
|
|
g_asm_riscv.init(word_size_bytes*8);
|
|
g_asm_arm64.init(word_size_bytes*8);
|
|
} |