luaur_code_gen/functions/
get_cmd_value_kind.rs1use crate::enums::ir_cmd::IrCmd;
2use crate::enums::ir_value_kind::IrValueKind;
3use luaur_common::macros::luau_unreachable::LUAU_UNREACHABLE;
4
5pub fn get_cmd_value_kind(cmd: IrCmd) -> IrValueKind {
6 match cmd {
7 IrCmd::NOP => IrValueKind::None,
8 IrCmd::LOAD_TAG => IrValueKind::Tag,
9 IrCmd::LOAD_POINTER => IrValueKind::Pointer,
10 IrCmd::LOAD_DOUBLE => IrValueKind::Double,
11 IrCmd::LOAD_INT => IrValueKind::Int,
12 IrCmd::LOAD_FLOAT => IrValueKind::Float,
13 IrCmd::LOAD_TVALUE => IrValueKind::Tvalue,
14 IrCmd::LOAD_ENV
15 | IrCmd::GET_ARR_ADDR
16 | IrCmd::GET_SLOT_NODE_ADDR
17 | IrCmd::GET_HASH_NODE_ADDR
18 | IrCmd::GET_CLOSURE_UPVAL_ADDR => IrValueKind::Pointer,
19 IrCmd::STORE_TAG
20 | IrCmd::STORE_EXTRA
21 | IrCmd::STORE_POINTER
22 | IrCmd::STORE_DOUBLE
23 | IrCmd::STORE_INT
24 | IrCmd::STORE_INT64
25 | IrCmd::STORE_VECTOR
26 | IrCmd::STORE_TVALUE
27 | IrCmd::STORE_SPLIT_TVALUE
28 | IrCmd::CHECK_DIV_INT64 => IrValueKind::None,
29 IrCmd::LOAD_INT64
30 | IrCmd::ADD_INT64
31 | IrCmd::SUB_INT64
32 | IrCmd::MUL_INT64
33 | IrCmd::DIV_INT64
34 | IrCmd::IDIV_INT64
35 | IrCmd::UDIV_INT64
36 | IrCmd::REM_INT64
37 | IrCmd::UREM_INT64
38 | IrCmd::MOD_INT64
39 | IrCmd::SELECT_INT64
40 | IrCmd::BITAND_INT64
41 | IrCmd::BITXOR_INT64
42 | IrCmd::BITOR_INT64
43 | IrCmd::BITNOT_INT64
44 | IrCmd::BITLSHIFT_INT64
45 | IrCmd::BITRSHIFT_INT64
46 | IrCmd::BITARSHIFT_INT64
47 | IrCmd::BITLROTATE_INT64
48 | IrCmd::BITRROTATE_INT64
49 | IrCmd::BITCOUNTLZ_INT64
50 | IrCmd::BITCOUNTRZ_INT64
51 | IrCmd::BYTESWAP_INT64 => IrValueKind::Int64,
52 IrCmd::ADD_INT | IrCmd::SUB_INT | IrCmd::SEXTI8_INT | IrCmd::SEXTI16_INT => {
53 IrValueKind::Int
54 }
55 IrCmd::ADD_NUM
56 | IrCmd::SUB_NUM
57 | IrCmd::MUL_NUM
58 | IrCmd::DIV_NUM
59 | IrCmd::IDIV_NUM
60 | IrCmd::MOD_NUM
61 | IrCmd::MIN_NUM
62 | IrCmd::MAX_NUM
63 | IrCmd::UNM_NUM
64 | IrCmd::FLOOR_NUM
65 | IrCmd::CEIL_NUM
66 | IrCmd::ROUND_NUM
67 | IrCmd::SQRT_NUM
68 | IrCmd::ABS_NUM
69 | IrCmd::SIGN_NUM
70 | IrCmd::SELECT_NUM
71 | IrCmd::MULADD_NUM => IrValueKind::Double,
72 IrCmd::ADD_FLOAT
73 | IrCmd::SUB_FLOAT
74 | IrCmd::MUL_FLOAT
75 | IrCmd::DIV_FLOAT
76 | IrCmd::MIN_FLOAT
77 | IrCmd::MAX_FLOAT
78 | IrCmd::UNM_FLOAT
79 | IrCmd::FLOOR_FLOAT
80 | IrCmd::CEIL_FLOAT
81 | IrCmd::SQRT_FLOAT
82 | IrCmd::ABS_FLOAT
83 | IrCmd::SIGN_FLOAT => IrValueKind::Float,
84 IrCmd::ADD_VEC
85 | IrCmd::SUB_VEC
86 | IrCmd::MUL_VEC
87 | IrCmd::DIV_VEC
88 | IrCmd::IDIV_VEC
89 | IrCmd::UNM_VEC
90 | IrCmd::MIN_VEC
91 | IrCmd::MAX_VEC
92 | IrCmd::FLOOR_VEC
93 | IrCmd::CEIL_VEC
94 | IrCmd::ABS_VEC
95 | IrCmd::SELECT_VEC
96 | IrCmd::SELECT_IF_TRUTHY
97 | IrCmd::MULADD_VEC => IrValueKind::Tvalue,
98 IrCmd::DOT_VEC | IrCmd::EXTRACT_VEC => IrValueKind::Float,
99 IrCmd::NOT_ANY
100 | IrCmd::CMP_ANY
101 | IrCmd::CMP_INT
102 | IrCmd::CMP_INT64
103 | IrCmd::CMP_TAG
104 | IrCmd::CMP_SPLIT_TVALUE => IrValueKind::Int,
105 IrCmd::JUMP
106 | IrCmd::JUMP_IF_TRUTHY
107 | IrCmd::JUMP_IF_FALSY
108 | IrCmd::JUMP_EQ_TAG
109 | IrCmd::JUMP_CMP_INT
110 | IrCmd::JUMP_EQ_POINTER
111 | IrCmd::JUMP_CMP_NUM
112 | IrCmd::JUMP_CMP_FLOAT
113 | IrCmd::JUMP_FORN_LOOP_COND
114 | IrCmd::JUMP_SLOT_MATCH => IrValueKind::None,
115 IrCmd::TABLE_LEN => IrValueKind::Int,
116 IrCmd::TABLE_SETNUM => IrValueKind::Pointer,
117 IrCmd::STRING_LEN => IrValueKind::Int,
118 IrCmd::NEW_TABLE | IrCmd::DUP_TABLE => IrValueKind::Pointer,
119 IrCmd::TRY_NUM_TO_INDEX => IrValueKind::Int,
120 IrCmd::TRY_CALL_FASTGETTM | IrCmd::NEW_USERDATA => IrValueKind::Pointer,
121 IrCmd::INT64_TO_NUM | IrCmd::INT_TO_NUM | IrCmd::UINT_TO_NUM => IrValueKind::Double,
122 IrCmd::UINT_TO_FLOAT => IrValueKind::Float,
123 IrCmd::NUM_TO_INT | IrCmd::NUM_TO_UINT => IrValueKind::Int,
124 IrCmd::NUM_TO_INT64 => IrValueKind::Int64,
125 IrCmd::FLOAT_TO_NUM => IrValueKind::Double,
126 IrCmd::NUM_TO_FLOAT => IrValueKind::Float,
127 IrCmd::FLOAT_TO_VEC | IrCmd::TAG_VECTOR => IrValueKind::Tvalue,
128 IrCmd::TRUNCATE_UINT => IrValueKind::Int,
129 IrCmd::ADJUST_STACK_TO_REG | IrCmd::ADJUST_STACK_TO_TOP | IrCmd::FASTCALL => {
130 IrValueKind::None
131 }
132 IrCmd::INVOKE_FASTCALL => IrValueKind::Int,
133 IrCmd::CHECK_FASTCALL_RES
134 | IrCmd::DO_ARITH
135 | IrCmd::DO_LEN
136 | IrCmd::GET_TABLE
137 | IrCmd::SET_TABLE
138 | IrCmd::GET_CACHED_IMPORT
139 | IrCmd::CONCAT => IrValueKind::None,
140 IrCmd::GET_UPVALUE => IrValueKind::Tvalue,
141 IrCmd::SET_UPVALUE
142 | IrCmd::CHECK_TAG
143 | IrCmd::CHECK_TRUTHY
144 | IrCmd::CHECK_READONLY
145 | IrCmd::CHECK_NO_METATABLE
146 | IrCmd::CHECK_SAFE_ENV
147 | IrCmd::CHECK_ARRAY_SIZE
148 | IrCmd::CHECK_SLOT_MATCH
149 | IrCmd::CHECK_NODE_NO_NEXT
150 | IrCmd::CHECK_NODE_VALUE
151 | IrCmd::CHECK_BUFFER_LEN
152 | IrCmd::CHECK_USERDATA_TAG
153 | IrCmd::CHECK_CMP_NUM
154 | IrCmd::CHECK_CMP_INT
155 | IrCmd::CHECK_CMP_INT64
156 | IrCmd::INTERRUPT
157 | IrCmd::CHECK_GC
158 | IrCmd::BARRIER_OBJ
159 | IrCmd::BARRIER_TABLE_BACK
160 | IrCmd::BARRIER_TABLE_FORWARD
161 | IrCmd::SET_SAVEDPC
162 | IrCmd::CLOSE_UPVALS
163 | IrCmd::CAPTURE
164 | IrCmd::SETLIST
165 | IrCmd::CALL
166 | IrCmd::RETURN
167 | IrCmd::FORGLOOP
168 | IrCmd::FORGLOOP_FALLBACK
169 | IrCmd::FORGPREP_XNEXT_FALLBACK
170 | IrCmd::COVERAGE
171 | IrCmd::FALLBACK_GETGLOBAL
172 | IrCmd::FALLBACK_SETGLOBAL
173 | IrCmd::FALLBACK_GETTABLEKS
174 | IrCmd::FALLBACK_SETTABLEKS
175 | IrCmd::FALLBACK_NAMECALL
176 | IrCmd::FALLBACK_PREPVARARGS
177 | IrCmd::FALLBACK_GETVARARGS => IrValueKind::None,
178 IrCmd::NEWCLOSURE => IrValueKind::Pointer,
179 IrCmd::FALLBACK_DUPCLOSURE | IrCmd::FALLBACK_FORGPREP => IrValueKind::None,
180 IrCmd::SUBSTITUTE => IrValueKind::Unknown,
181 IrCmd::MARK_USED | IrCmd::MARK_DEAD => IrValueKind::None,
182 IrCmd::BITAND_UINT
183 | IrCmd::BITXOR_UINT
184 | IrCmd::BITOR_UINT
185 | IrCmd::BITNOT_UINT
186 | IrCmd::BITLSHIFT_UINT
187 | IrCmd::BITRSHIFT_UINT
188 | IrCmd::BITARSHIFT_UINT
189 | IrCmd::BITLROTATE_UINT
190 | IrCmd::BITRROTATE_UINT
191 | IrCmd::BITCOUNTLZ_UINT
192 | IrCmd::BITCOUNTRZ_UINT
193 | IrCmd::BYTESWAP_UINT => IrValueKind::Int,
194 IrCmd::INVOKE_LIBM => IrValueKind::Double,
195 IrCmd::GET_TYPE | IrCmd::GET_TYPEOF | IrCmd::FINDUPVAL => IrValueKind::Pointer,
196 IrCmd::BUFFER_READI8
197 | IrCmd::BUFFER_READU8
198 | IrCmd::BUFFER_READI16
199 | IrCmd::BUFFER_READU16
200 | IrCmd::BUFFER_READI32 => IrValueKind::Int,
201 IrCmd::BUFFER_READI64 => IrValueKind::Int64,
202 IrCmd::BUFFER_WRITEI8
203 | IrCmd::BUFFER_WRITEI16
204 | IrCmd::BUFFER_WRITEI32
205 | IrCmd::BUFFER_WRITEF32
206 | IrCmd::BUFFER_WRITEF64
207 | IrCmd::BUFFER_WRITEI64 => IrValueKind::None,
208 IrCmd::BUFFER_READF32 => IrValueKind::Float,
209 IrCmd::BUFFER_READF64 => IrValueKind::Double,
210 IrCmd::JUMP_CMP_PROTOID => IrValueKind::None,
211 _ => LUAU_UNREACHABLE!(),
212 }
213}