luaur-code-gen 0.1.3

Native (A64/X64) code generation for Luau (Rust).
Documentation
use crate::enums::ir_cmd::IrCmd;
use luaur_common::macros::luau_unreachable::LUAU_UNREACHABLE;

pub fn get_cmd_name(cmd: IrCmd) -> &'static str {
    match cmd {
        IrCmd::NOP => "NOP",
        IrCmd::LOAD_TAG => "LOAD_TAG",
        IrCmd::LOAD_POINTER => "LOAD_POINTER",
        IrCmd::LOAD_DOUBLE => "LOAD_DOUBLE",
        IrCmd::LOAD_INT => "LOAD_INT",
        IrCmd::LOAD_INT64 => "LOAD_INT64",
        IrCmd::LOAD_FLOAT => "LOAD_FLOAT",
        IrCmd::LOAD_TVALUE => "LOAD_TVALUE",
        IrCmd::LOAD_ENV => "LOAD_ENV",
        IrCmd::GET_ARR_ADDR => "GET_ARR_ADDR",
        IrCmd::GET_SLOT_NODE_ADDR => "GET_SLOT_NODE_ADDR",
        IrCmd::GET_HASH_NODE_ADDR => "GET_HASH_NODE_ADDR",
        IrCmd::GET_CLOSURE_UPVAL_ADDR => "GET_CLOSURE_UPVAL_ADDR",
        IrCmd::STORE_TAG => "STORE_TAG",
        IrCmd::STORE_EXTRA => "STORE_EXTRA",
        IrCmd::STORE_POINTER => "STORE_POINTER",
        IrCmd::STORE_DOUBLE => "STORE_DOUBLE",
        IrCmd::STORE_INT => "STORE_INT",
        IrCmd::STORE_INT64 => "STORE_INT64",
        IrCmd::STORE_VECTOR => "STORE_VECTOR",
        IrCmd::STORE_TVALUE => "STORE_TVALUE",
        IrCmd::STORE_SPLIT_TVALUE => "STORE_SPLIT_TVALUE",
        IrCmd::ADD_INT => "ADD_INT",
        IrCmd::SUB_INT => "SUB_INT",
        IrCmd::ADD_INT64 => "ADD_INT64",
        IrCmd::SUB_INT64 => "SUB_INT64",
        IrCmd::MUL_INT64 => "MUL_INT64",
        IrCmd::DIV_INT64 => "DIV_INT64",
        IrCmd::IDIV_INT64 => "IDIV_INT64",
        IrCmd::CHECK_DIV_INT64 => "CHECK_DIV_INT64",
        IrCmd::UDIV_INT64 => "UDIV_INT64",
        IrCmd::REM_INT64 => "REM_INT64",
        IrCmd::UREM_INT64 => "UREM_INT64",
        IrCmd::MOD_INT64 => "MOD_INT64",
        IrCmd::SEXTI8_INT => "SEXTI8_INT",
        IrCmd::SEXTI16_INT => "SEXTI16_INT",
        IrCmd::ADD_NUM => "ADD_NUM",
        IrCmd::SUB_NUM => "SUB_NUM",
        IrCmd::MUL_NUM => "MUL_NUM",
        IrCmd::DIV_NUM => "DIV_NUM",
        IrCmd::IDIV_NUM => "IDIV_NUM",
        IrCmd::MOD_NUM => "MOD_NUM",
        IrCmd::MIN_NUM => "MIN_NUM",
        IrCmd::MAX_NUM => "MAX_NUM",
        IrCmd::UNM_NUM => "UNM_NUM",
        IrCmd::FLOOR_NUM => "FLOOR_NUM",
        IrCmd::CEIL_NUM => "CEIL_NUM",
        IrCmd::ROUND_NUM => "ROUND_NUM",
        IrCmd::SQRT_NUM => "SQRT_NUM",
        IrCmd::ABS_NUM => "ABS_NUM",
        IrCmd::SIGN_NUM => "SIGN_NUM",
        IrCmd::ADD_FLOAT => "ADD_FLOAT",
        IrCmd::SUB_FLOAT => "SUB_FLOAT",
        IrCmd::MUL_FLOAT => "MUL_FLOAT",
        IrCmd::DIV_FLOAT => "DIV_FLOAT",
        IrCmd::MIN_FLOAT => "MIN_FLOAT",
        IrCmd::MAX_FLOAT => "MAX_FLOAT",
        IrCmd::UNM_FLOAT => "UNM_FLOAT",
        IrCmd::FLOOR_FLOAT => "FLOOR_FLOAT",
        IrCmd::CEIL_FLOAT => "CEIL_FLOAT",
        IrCmd::SQRT_FLOAT => "SQRT_FLOAT",
        IrCmd::ABS_FLOAT => "ABS_FLOAT",
        IrCmd::SIGN_FLOAT => "SIGN_FLOAT",
        IrCmd::SELECT_NUM => "SELECT_NUM",
        IrCmd::SELECT_INT64 => "SELECT_INT64",
        IrCmd::MULADD_NUM => "MULADD_NUM",
        IrCmd::SELECT_VEC => "SELECT_VEC",
        IrCmd::SELECT_IF_TRUTHY => "SELECT_IF_TRUTHY",
        IrCmd::ADD_VEC => "ADD_VEC",
        IrCmd::SUB_VEC => "SUB_VEC",
        IrCmd::MUL_VEC => "MUL_VEC",
        IrCmd::DIV_VEC => "DIV_VEC",
        IrCmd::IDIV_VEC => "IDIV_VEC",
        IrCmd::MULADD_VEC => "MULADD_VEC",
        IrCmd::UNM_VEC => "UNM_VEC",
        IrCmd::MIN_VEC => "MIN_VEC",
        IrCmd::MAX_VEC => "MAX_VEC",
        IrCmd::FLOOR_VEC => "FLOOR_VEC",
        IrCmd::CEIL_VEC => "CEIL_VEC",
        IrCmd::ABS_VEC => "ABS_VEC",
        IrCmd::DOT_VEC => "DOT_VEC",
        IrCmd::EXTRACT_VEC => "EXTRACT_VEC",
        IrCmd::NOT_ANY => "NOT_ANY",
        IrCmd::CMP_ANY => "CMP_ANY",
        IrCmd::CMP_INT => "CMP_INT",
        IrCmd::CMP_INT64 => "CMP_INT64",
        IrCmd::CMP_TAG => "CMP_TAG",
        IrCmd::CMP_SPLIT_TVALUE => "CMP_SPLIT_TVALUE",
        IrCmd::JUMP => "JUMP",
        IrCmd::JUMP_IF_TRUTHY => "JUMP_IF_TRUTHY",
        IrCmd::JUMP_IF_FALSY => "JUMP_IF_FALSY",
        IrCmd::JUMP_EQ_TAG => "JUMP_EQ_TAG",
        IrCmd::JUMP_CMP_INT => "JUMP_CMP_INT",
        IrCmd::JUMP_EQ_POINTER => "JUMP_EQ_POINTER",
        IrCmd::JUMP_CMP_NUM => "JUMP_CMP_NUM",
        IrCmd::JUMP_CMP_FLOAT => "JUMP_CMP_FLOAT",
        IrCmd::JUMP_FORN_LOOP_COND => "JUMP_FORN_LOOP_COND",
        IrCmd::JUMP_SLOT_MATCH => "JUMP_SLOT_MATCH",
        IrCmd::TABLE_LEN => "TABLE_LEN",
        IrCmd::TABLE_SETNUM => "TABLE_SETNUM",
        IrCmd::STRING_LEN => "STRING_LEN",
        IrCmd::NEW_TABLE => "NEW_TABLE",
        IrCmd::DUP_TABLE => "DUP_TABLE",
        IrCmd::TRY_NUM_TO_INDEX => "TRY_NUM_TO_INDEX",
        IrCmd::TRY_CALL_FASTGETTM => "TRY_CALL_FASTGETTM",
        IrCmd::NEW_USERDATA => "NEW_USERDATA",
        IrCmd::INT64_TO_NUM => "INT64_TO_NUM",
        IrCmd::INT_TO_NUM => "INT_TO_NUM",
        IrCmd::UINT_TO_NUM => "UINT_TO_NUM",
        IrCmd::UINT_TO_FLOAT => "UINT_TO_FLOAT",
        IrCmd::NUM_TO_INT => "NUM_TO_INT",
        IrCmd::NUM_TO_INT64 => "NUM_TO_INT64",
        IrCmd::NUM_TO_UINT => "NUM_TO_UINT",
        IrCmd::FLOAT_TO_NUM => "FLOAT_TO_NUM",
        IrCmd::NUM_TO_FLOAT => "NUM_TO_FLOAT",
        IrCmd::FLOAT_TO_VEC => "FLOAT_TO_VEC",
        IrCmd::TAG_VECTOR => "TAG_VECTOR",
        IrCmd::TRUNCATE_UINT => "TRUNCATE_UINT",
        IrCmd::ADJUST_STACK_TO_REG => "ADJUST_STACK_TO_REG",
        IrCmd::ADJUST_STACK_TO_TOP => "ADJUST_STACK_TO_TOP",
        IrCmd::FASTCALL => "FASTCALL",
        IrCmd::INVOKE_FASTCALL => "INVOKE_FASTCALL",
        IrCmd::CHECK_FASTCALL_RES => "CHECK_FASTCALL_RES",
        IrCmd::DO_ARITH => "DO_ARITH",
        IrCmd::DO_LEN => "DO_LEN",
        IrCmd::GET_TABLE => "GET_TABLE",
        IrCmd::SET_TABLE => "SET_TABLE",
        IrCmd::GET_CACHED_IMPORT => "GET_CACHED_IMPORT",
        IrCmd::CONCAT => "CONCAT",
        IrCmd::GET_UPVALUE => "GET_UPVALUE",
        IrCmd::SET_UPVALUE => "SET_UPVALUE",
        IrCmd::CHECK_TAG => "CHECK_TAG",
        IrCmd::CHECK_TRUTHY => "CHECK_TRUTHY",
        IrCmd::CHECK_READONLY => "CHECK_READONLY",
        IrCmd::CHECK_NO_METATABLE => "CHECK_NO_METATABLE",
        IrCmd::CHECK_SAFE_ENV => "CHECK_SAFE_ENV",
        IrCmd::CHECK_ARRAY_SIZE => "CHECK_ARRAY_SIZE",
        IrCmd::CHECK_SLOT_MATCH => "CHECK_SLOT_MATCH",
        IrCmd::CHECK_NODE_NO_NEXT => "CHECK_NODE_NO_NEXT",
        IrCmd::CHECK_NODE_VALUE => "CHECK_NODE_VALUE",
        IrCmd::CHECK_BUFFER_LEN => "CHECK_BUFFER_LEN",
        IrCmd::CHECK_USERDATA_TAG => "CHECK_USERDATA_TAG",
        IrCmd::CHECK_CMP_NUM => "CHECK_CMP_NUM",
        IrCmd::CHECK_CMP_INT => "CHECK_CMP_INT",
        IrCmd::CHECK_CMP_INT64 => "CHECK_CMP_INT64",
        IrCmd::INTERRUPT => "INTERRUPT",
        IrCmd::CHECK_GC => "CHECK_GC",
        IrCmd::BARRIER_OBJ => "BARRIER_OBJ",
        IrCmd::BARRIER_TABLE_BACK => "BARRIER_TABLE_BACK",
        IrCmd::BARRIER_TABLE_FORWARD => "BARRIER_TABLE_FORWARD",
        IrCmd::SET_SAVEDPC => "SET_SAVEDPC",
        IrCmd::CLOSE_UPVALS => "CLOSE_UPVALS",
        IrCmd::CAPTURE => "CAPTURE",
        IrCmd::SETLIST => "SETLIST",
        IrCmd::CALL => "CALL",
        IrCmd::RETURN => "RETURN",
        IrCmd::FORGLOOP => "FORGLOOP",
        IrCmd::FORGLOOP_FALLBACK => "FORGLOOP_FALLBACK",
        IrCmd::FORGPREP_XNEXT_FALLBACK => "FORGPREP_XNEXT_FALLBACK",
        IrCmd::COVERAGE => "COVERAGE",
        IrCmd::FALLBACK_GETGLOBAL => "FALLBACK_GETGLOBAL",
        IrCmd::FALLBACK_SETGLOBAL => "FALLBACK_SETGLOBAL",
        IrCmd::FALLBACK_GETTABLEKS => "FALLBACK_GETTABLEKS",
        IrCmd::FALLBACK_SETTABLEKS => "FALLBACK_SETTABLEKS",
        IrCmd::FALLBACK_NAMECALL => "FALLBACK_NAMECALL",
        IrCmd::FALLBACK_PREPVARARGS => "FALLBACK_PREPVARARGS",
        IrCmd::FALLBACK_GETVARARGS => "FALLBACK_GETVARARGS",
        IrCmd::NEWCLOSURE => "NEWCLOSURE",
        IrCmd::FALLBACK_DUPCLOSURE => "FALLBACK_DUPCLOSURE",
        IrCmd::FALLBACK_FORGPREP => "FALLBACK_FORGPREP",
        IrCmd::SUBSTITUTE => "SUBSTITUTE",
        IrCmd::MARK_USED => "MARK_USED",
        IrCmd::MARK_DEAD => "MARK_DEAD",
        IrCmd::BITAND_INT64 => "BITAND_INT64",
        IrCmd::BITXOR_INT64 => "BITXOR_INT64",
        IrCmd::BITOR_INT64 => "BITOR_INT64",
        IrCmd::BITNOT_INT64 => "BITNOT_INT64",
        IrCmd::BITLSHIFT_INT64 => "BITLSHIFT_INT64",
        IrCmd::BITRSHIFT_INT64 => "BITRSHIFT_INT64",
        IrCmd::BITARSHIFT_INT64 => "BITARSHIFT_INT64",
        IrCmd::BITLROTATE_INT64 => "BITLROTATE_INT64",
        IrCmd::BITRROTATE_INT64 => "BITRROTATE_INT64",
        IrCmd::BITCOUNTLZ_INT64 => "BITCOUNTLZ_INT64",
        IrCmd::BITCOUNTRZ_INT64 => "BITCOUNTRZ_INT64",
        IrCmd::BYTESWAP_INT64 => "BYTESWAP_INT64",
        IrCmd::BITAND_UINT => "BITAND_UINT",
        IrCmd::BITXOR_UINT => "BITXOR_UINT",
        IrCmd::BITOR_UINT => "BITOR_UINT",
        IrCmd::BITNOT_UINT => "BITNOT_UINT",
        IrCmd::BITLSHIFT_UINT => "BITLSHIFT_UINT",
        IrCmd::BITRSHIFT_UINT => "BITRSHIFT_UINT",
        IrCmd::BITARSHIFT_UINT => "BITARSHIFT_UINT",
        IrCmd::BITLROTATE_UINT => "BITLROTATE_UINT",
        IrCmd::BITRROTATE_UINT => "BITRROTATE_UINT",
        IrCmd::BITCOUNTLZ_UINT => "BITCOUNTLZ_UINT",
        IrCmd::BITCOUNTRZ_UINT => "BITCOUNTRZ_UINT",
        IrCmd::BYTESWAP_UINT => "BYTESWAP_UINT",
        IrCmd::INVOKE_LIBM => "INVOKE_LIBM",
        IrCmd::GET_TYPE => "GET_TYPE",
        IrCmd::GET_TYPEOF => "GET_TYPEOF",
        IrCmd::FINDUPVAL => "FINDUPVAL",
        IrCmd::BUFFER_READI8 => "BUFFER_READI8",
        IrCmd::BUFFER_READU8 => "BUFFER_READU8",
        IrCmd::BUFFER_WRITEI8 => "BUFFER_WRITEI8",
        IrCmd::BUFFER_READI16 => "BUFFER_READI16",
        IrCmd::BUFFER_READU16 => "BUFFER_READU16",
        IrCmd::BUFFER_WRITEI16 => "BUFFER_WRITEI16",
        IrCmd::BUFFER_READI32 => "BUFFER_READI32",
        IrCmd::BUFFER_WRITEI32 => "BUFFER_WRITEI32",
        IrCmd::BUFFER_READF32 => "BUFFER_READF32",
        IrCmd::BUFFER_WRITEF32 => "BUFFER_WRITEF32",
        IrCmd::BUFFER_READF64 => "BUFFER_READF64",
        IrCmd::BUFFER_WRITEF64 => "BUFFER_WRITEF64",
        IrCmd::BUFFER_READI64 => "BUFFER_READI64",
        IrCmd::BUFFER_WRITEI64 => "BUFFER_WRITEI64",
        IrCmd::JUMP_CMP_PROTOID => "JUMP_CMP_PROTOID",
    }
    // (C++ `switch` returned from each `case`; the match is exhaustive over all
    // 216 IrCmd variants, so it IS the return value. The original port discarded
    // it with `;` and always fell through to LUAU_UNREACHABLE — guaranteed UB.)
}