Skip to main content

luaur_code_gen/functions/
get_cmd_value_kind.rs

1use 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}