Completely replace mono_error_ok with is_ok and make first external_only. (#16217)
[mono-project.git] / mono / metadata / jit-icall-reg.h
blob4bc81d14de3711a71127a612aad874b3f93e6eef
1 /**
2 * \file
3 * Enum for JIT icalls: MonoJitICallId MONO_JIT_ICALL_mono_foo, etc.
4 * Static storage for JIT icall info: mono_get_jit_icall_info().
6 * mono_find_jit_icall_info (MonoJitICallId)
7 * Convert enum to pointer.
9 * mono_find_jit_icall_info ((MonoJitICallId)int)
10 * Convert int to pointer.
12 * mono_jit_icall_info_id (MonoJitICallInfo*)
13 * Convert pointer to enum.
15 * mono_jit_icall_info_index (MonoJitICallInfo*)
16 * Convert pointer to int.
18 * &mono_get_icall_info ()->name
19 * Convert name to pointer.
21 * MONO_JIT_ICALL_ ## name
22 * Convert name to enum.
24 * All conversions are just a few instructions.
26 * Author:
27 * Jay Krell (jaykrell@microsoft.com)
29 * Copyright 2019 Microsoft
30 * Licensed under the MIT license. See LICENSE file in the project root for full license information.
33 // No include guard needed.
35 // Changes within MONO_JIT_ICALLS require revising MONO_AOT_FILE_VERSION.
36 #define MONO_JIT_ICALLS \
38 MONO_JIT_ICALL (ZeroIsReserved) \
40 /* These must be ordered like MonoTrampolineType. */ \
41 MONO_JIT_ICALL (generic_trampoline_jit) \
42 MONO_JIT_ICALL (generic_trampoline_jump) \
43 MONO_JIT_ICALL (generic_trampoline_rgctx_lazy_fetch) \
44 MONO_JIT_ICALL (generic_trampoline_aot) \
45 MONO_JIT_ICALL (generic_trampoline_aot_plt) \
46 MONO_JIT_ICALL (generic_trampoline_delegate) \
47 MONO_JIT_ICALL (generic_trampoline_generic_virtual_remoting) \
48 MONO_JIT_ICALL (generic_trampoline_vcall) \
50 /* These must be ordered like MonoTlsKey (alphabetical). */ \
51 MONO_JIT_ICALL (mono_tls_get_domain) \
52 MONO_JIT_ICALL (mono_tls_get_jit_tls) \
53 MONO_JIT_ICALL (mono_tls_get_lmf_addr) \
54 MONO_JIT_ICALL (mono_tls_get_sgen_thread_info) \
55 MONO_JIT_ICALL (mono_tls_get_thread) \
57 MONO_JIT_ICALL (__emul_fadd) \
58 MONO_JIT_ICALL (__emul_fcmp_ceq) \
59 MONO_JIT_ICALL (__emul_fcmp_cgt) \
60 MONO_JIT_ICALL (__emul_fcmp_cgt_un) \
61 MONO_JIT_ICALL (__emul_fcmp_clt) \
62 MONO_JIT_ICALL (__emul_fcmp_clt_un) \
63 MONO_JIT_ICALL (__emul_fcmp_eq) \
64 MONO_JIT_ICALL (__emul_fcmp_ge) \
65 MONO_JIT_ICALL (__emul_fcmp_ge_un) \
66 MONO_JIT_ICALL (__emul_fcmp_gt) \
67 MONO_JIT_ICALL (__emul_fcmp_gt_un) \
68 MONO_JIT_ICALL (__emul_fcmp_le) \
69 MONO_JIT_ICALL (__emul_fcmp_le_un) \
70 MONO_JIT_ICALL (__emul_fcmp_lt) \
71 MONO_JIT_ICALL (__emul_fcmp_lt_un) \
72 MONO_JIT_ICALL (__emul_fcmp_ne_un) \
73 MONO_JIT_ICALL (__emul_fconv_to_i) \
74 MONO_JIT_ICALL (__emul_fconv_to_i1) \
75 MONO_JIT_ICALL (__emul_fconv_to_i2) \
76 MONO_JIT_ICALL (__emul_fconv_to_i4) \
77 MONO_JIT_ICALL (__emul_fconv_to_i8) \
78 MONO_JIT_ICALL (__emul_fconv_to_ovf_i8) \
79 MONO_JIT_ICALL (__emul_fconv_to_ovf_u8) \
80 MONO_JIT_ICALL (__emul_fconv_to_ovf_u8_un) \
81 MONO_JIT_ICALL (__emul_fconv_to_r4) \
82 MONO_JIT_ICALL (__emul_fconv_to_u) \
83 MONO_JIT_ICALL (__emul_fconv_to_u1) \
84 MONO_JIT_ICALL (__emul_fconv_to_u2) \
85 MONO_JIT_ICALL (__emul_fconv_to_u4) \
86 MONO_JIT_ICALL (__emul_fconv_to_u8) \
87 MONO_JIT_ICALL (__emul_fdiv) \
88 MONO_JIT_ICALL (__emul_fmul) \
89 MONO_JIT_ICALL (__emul_fneg) \
90 MONO_JIT_ICALL (__emul_frem) \
91 MONO_JIT_ICALL (__emul_fsub) \
92 MONO_JIT_ICALL (__emul_iconv_to_r_un) \
93 MONO_JIT_ICALL (__emul_iconv_to_r4) \
94 MONO_JIT_ICALL (__emul_iconv_to_r8) \
95 MONO_JIT_ICALL (__emul_lconv_to_r4) \
96 MONO_JIT_ICALL (__emul_lconv_to_r8) \
97 MONO_JIT_ICALL (__emul_lconv_to_r8_un) \
98 MONO_JIT_ICALL (__emul_ldiv) \
99 MONO_JIT_ICALL (__emul_ldiv_un) \
100 MONO_JIT_ICALL (__emul_lmul) \
101 MONO_JIT_ICALL (__emul_lmul_ovf) \
102 MONO_JIT_ICALL (__emul_lmul_ovf_un) \
103 MONO_JIT_ICALL (__emul_lrem) \
104 MONO_JIT_ICALL (__emul_lrem_un) \
105 MONO_JIT_ICALL (__emul_lshl) \
106 MONO_JIT_ICALL (__emul_lshr) \
107 MONO_JIT_ICALL (__emul_lshr_un) \
108 MONO_JIT_ICALL (__emul_op_idiv) \
109 MONO_JIT_ICALL (__emul_op_idiv_un) \
110 MONO_JIT_ICALL (__emul_op_imul) \
111 MONO_JIT_ICALL (__emul_op_imul_ovf) \
112 MONO_JIT_ICALL (__emul_op_imul_ovf_un) \
113 MONO_JIT_ICALL (__emul_op_irem) \
114 MONO_JIT_ICALL (__emul_op_irem_un) \
115 MONO_JIT_ICALL (__emul_rconv_to_i8) \
116 MONO_JIT_ICALL (__emul_rconv_to_ovf_i8) \
117 MONO_JIT_ICALL (__emul_rconv_to_ovf_u8) \
118 MONO_JIT_ICALL (__emul_rconv_to_ovf_u8_un) \
119 MONO_JIT_ICALL (__emul_rconv_to_u4) \
120 MONO_JIT_ICALL (__emul_rconv_to_u8) \
121 MONO_JIT_ICALL (__emul_rrem) \
122 MONO_JIT_ICALL (cominterop_get_ccw) \
123 MONO_JIT_ICALL (cominterop_get_ccw_object) \
124 MONO_JIT_ICALL (cominterop_get_function_pointer) \
125 MONO_JIT_ICALL (cominterop_get_interface) \
126 MONO_JIT_ICALL (cominterop_get_method_interface) \
127 MONO_JIT_ICALL (cominterop_object_is_rcw) \
128 MONO_JIT_ICALL (cominterop_type_from_handle) \
129 MONO_JIT_ICALL (g_free) \
130 MONO_JIT_ICALL (interp_to_native_trampoline) \
131 MONO_JIT_ICALL (mini_llvm_init_gshared_method_mrgctx) \
132 MONO_JIT_ICALL (mini_llvm_init_gshared_method_this) \
133 MONO_JIT_ICALL (mini_llvm_init_gshared_method_vtable) \
134 MONO_JIT_ICALL (mini_llvm_init_method) \
135 MONO_JIT_ICALL (mini_llvmonly_init_delegate) \
136 MONO_JIT_ICALL (mini_llvmonly_init_delegate_virtual) \
137 MONO_JIT_ICALL (mini_llvmonly_init_vtable_slot) \
138 MONO_JIT_ICALL (mini_llvmonly_resolve_generic_virtual_call) \
139 MONO_JIT_ICALL (mini_llvmonly_resolve_generic_virtual_iface_call) \
140 MONO_JIT_ICALL (mini_llvmonly_resolve_iface_call_gsharedvt) \
141 MONO_JIT_ICALL (mini_llvmonly_resolve_vcall_gsharedvt) \
142 MONO_JIT_ICALL (mini_llvmonly_throw_nullref_exception) \
143 MONO_JIT_ICALL (mono_amd64_resume_unwind) \
144 MONO_JIT_ICALL (mono_amd64_start_gsharedvt_call) \
145 MONO_JIT_ICALL (mono_amd64_throw_corlib_exception) \
146 MONO_JIT_ICALL (mono_amd64_throw_exception) \
147 MONO_JIT_ICALL (mono_arch_rethrow_exception) \
148 MONO_JIT_ICALL (mono_arch_throw_corlib_exception) \
149 MONO_JIT_ICALL (mono_arch_throw_exception) \
150 MONO_JIT_ICALL (mono_arm_resume_unwind) \
151 MONO_JIT_ICALL (mono_arm_start_gsharedvt_call) \
152 MONO_JIT_ICALL (mono_arm_throw_exception) \
153 MONO_JIT_ICALL (mono_arm_throw_exception_by_token) \
154 MONO_JIT_ICALL (mono_arm_unaligned_stack) \
155 MONO_JIT_ICALL (mono_array_new_1) \
156 MONO_JIT_ICALL (mono_array_new_2) \
157 MONO_JIT_ICALL (mono_array_new_3) \
158 MONO_JIT_ICALL (mono_array_new_4) \
159 MONO_JIT_ICALL (mono_array_new_n_icall) \
160 MONO_JIT_ICALL (mono_array_to_byte_byvalarray) \
161 MONO_JIT_ICALL (mono_array_to_lparray) \
162 MONO_JIT_ICALL (mono_array_to_savearray) \
163 MONO_JIT_ICALL (mono_break) \
164 MONO_JIT_ICALL (mono_byvalarray_to_byte_array) \
165 MONO_JIT_ICALL (mono_chkstk_win64) \
166 MONO_JIT_ICALL (mono_ckfinite) \
167 MONO_JIT_ICALL (mono_class_interface_match) \
168 MONO_JIT_ICALL (mono_class_static_field_address) \
169 MONO_JIT_ICALL (mono_compile_method_icall) \
170 MONO_JIT_ICALL (mono_context_get_icall) \
171 MONO_JIT_ICALL (mono_context_set_icall) \
172 MONO_JIT_ICALL (mono_create_corlib_exception_0) \
173 MONO_JIT_ICALL (mono_create_corlib_exception_1) \
174 MONO_JIT_ICALL (mono_create_corlib_exception_2) \
175 MONO_JIT_ICALL (mono_debug_personality) \
176 MONO_JIT_ICALL (mono_debugger_agent_breakpoint_from_context) \
177 MONO_JIT_ICALL (mono_debugger_agent_single_step_from_context) \
178 MONO_JIT_ICALL (mono_debugger_agent_user_break) \
179 MONO_JIT_ICALL (mono_delegate_begin_invoke) \
180 MONO_JIT_ICALL (mono_delegate_end_invoke) \
181 MONO_JIT_ICALL (mono_delegate_to_ftnptr) \
182 MONO_JIT_ICALL (mono_domain_get) \
183 MONO_JIT_ICALL (mono_dummy_jit_icall) \
184 MONO_JIT_ICALL (mono_exception_from_token) \
185 MONO_JIT_ICALL (mono_fill_class_rgctx) \
186 MONO_JIT_ICALL (mono_fill_method_rgctx) \
187 MONO_JIT_ICALL (mono_fload_r4) \
188 MONO_JIT_ICALL (mono_fload_r4_arg) \
189 MONO_JIT_ICALL (mono_free_bstr) \
190 MONO_JIT_ICALL (mono_free_lparray) \
191 MONO_JIT_ICALL (mono_fstore_r4) \
192 MONO_JIT_ICALL (mono_ftnptr_to_delegate) \
193 MONO_JIT_ICALL (mono_gc_alloc_obj) \
194 MONO_JIT_ICALL (mono_gc_alloc_string) \
195 MONO_JIT_ICALL (mono_gc_alloc_vector) \
196 MONO_JIT_ICALL (mono_gc_wbarrier_generic_nostore_internal) \
197 MONO_JIT_ICALL (mono_gc_wbarrier_range_copy) \
198 MONO_JIT_ICALL (mono_gchandle_get_target_internal) \
199 MONO_JIT_ICALL (mono_generic_class_init) \
200 MONO_JIT_ICALL (mono_get_assembly_object) \
201 MONO_JIT_ICALL (mono_get_method_object) \
202 MONO_JIT_ICALL (mono_get_native_calli_wrapper) \
203 MONO_JIT_ICALL (mono_get_special_static_data) \
204 MONO_JIT_ICALL (mono_gsharedvt_constrained_call) \
205 MONO_JIT_ICALL (mono_gsharedvt_value_copy) \
206 MONO_JIT_ICALL (mono_helper_compile_generic_method) \
207 MONO_JIT_ICALL (mono_helper_ldstr) \
208 MONO_JIT_ICALL (mono_helper_ldstr_mscorlib) \
209 MONO_JIT_ICALL (mono_helper_newobj_mscorlib) \
210 MONO_JIT_ICALL (mono_helper_stelem_ref_check) \
211 MONO_JIT_ICALL (mono_init_vtable_slot) \
212 MONO_JIT_ICALL (mono_interp_entry_from_trampoline) \
213 MONO_JIT_ICALL (mono_interp_to_native_trampoline) \
214 MONO_JIT_ICALL (mono_isfinite_double) \
215 MONO_JIT_ICALL (mono_jit_set_domain) \
216 MONO_JIT_ICALL (mono_ldftn) \
217 MONO_JIT_ICALL (mono_ldtoken_wrapper) \
218 MONO_JIT_ICALL (mono_ldtoken_wrapper_generic_shared) \
219 MONO_JIT_ICALL (mono_ldvirtfn) \
220 MONO_JIT_ICALL (mono_ldvirtfn_gshared) \
221 MONO_JIT_ICALL (mono_llvm_clear_exception) \
222 MONO_JIT_ICALL (mono_llvm_load_exception) \
223 MONO_JIT_ICALL (mono_llvm_match_exception) \
224 MONO_JIT_ICALL (mono_llvm_resume_exception) \
225 MONO_JIT_ICALL (mono_llvm_resume_unwind_trampoline) \
226 MONO_JIT_ICALL (mono_llvm_rethrow_exception) \
227 MONO_JIT_ICALL (mono_llvm_rethrow_exception_trampoline) \
228 MONO_JIT_ICALL (mono_llvm_set_unhandled_exception_handler) \
229 MONO_JIT_ICALL (mono_llvm_throw_corlib_exception) \
230 MONO_JIT_ICALL (mono_llvm_throw_corlib_exception_abs_trampoline) \
231 MONO_JIT_ICALL (mono_llvm_throw_corlib_exception_trampoline) \
232 MONO_JIT_ICALL (mono_llvm_throw_exception) \
233 MONO_JIT_ICALL (mono_llvm_throw_exception_trampoline) \
234 MONO_JIT_ICALL (mono_llvmonly_init_delegate) \
235 MONO_JIT_ICALL (mono_llvmonly_init_delegate_virtual) \
236 MONO_JIT_ICALL (mono_marshal_asany) \
237 MONO_JIT_ICALL (mono_marshal_check_domain_image) \
238 MONO_JIT_ICALL (mono_marshal_clear_last_error) \
239 MONO_JIT_ICALL (mono_marshal_free) \
240 MONO_JIT_ICALL (mono_marshal_free_array) \
241 MONO_JIT_ICALL (mono_marshal_free_asany) \
242 MONO_JIT_ICALL (mono_marshal_get_type_object) \
243 MONO_JIT_ICALL (mono_marshal_isinst_with_cache) \
244 MONO_JIT_ICALL (mono_marshal_safearray_begin) \
245 MONO_JIT_ICALL (mono_marshal_safearray_create) \
246 MONO_JIT_ICALL (mono_marshal_safearray_end) \
247 MONO_JIT_ICALL (mono_marshal_safearray_free_indices) \
248 MONO_JIT_ICALL (mono_marshal_safearray_get_value) \
249 MONO_JIT_ICALL (mono_marshal_safearray_next) \
250 MONO_JIT_ICALL (mono_marshal_safearray_set_value) \
251 MONO_JIT_ICALL (mono_marshal_set_domain_by_id) \
252 MONO_JIT_ICALL (mono_marshal_set_last_error) \
253 MONO_JIT_ICALL (mono_marshal_set_last_error_windows) \
254 MONO_JIT_ICALL (mono_marshal_string_to_utf16) \
255 MONO_JIT_ICALL (mono_marshal_string_to_utf16_copy) \
256 MONO_JIT_ICALL (mono_marshal_xdomain_copy_out_value) \
257 MONO_JIT_ICALL (mono_monitor_enter_fast) \
258 MONO_JIT_ICALL (mono_monitor_enter_internal) \
259 MONO_JIT_ICALL (mono_monitor_enter_v4_fast) \
260 MONO_JIT_ICALL (mono_monitor_enter_v4_internal) \
261 MONO_JIT_ICALL (mono_object_castclass_unbox) \
262 MONO_JIT_ICALL (mono_object_castclass_with_cache) \
263 MONO_JIT_ICALL (mono_object_isinst_icall) \
264 MONO_JIT_ICALL (mono_object_isinst_with_cache) \
265 MONO_JIT_ICALL (mono_ppc_throw_exception) \
266 MONO_JIT_ICALL (mono_profiler_raise_exception_clause) \
267 MONO_JIT_ICALL (mono_profiler_raise_gc_allocation) \
268 MONO_JIT_ICALL (mono_profiler_raise_method_enter) \
269 MONO_JIT_ICALL (mono_profiler_raise_method_leave) \
270 MONO_JIT_ICALL (mono_profiler_raise_method_tail_call) \
271 MONO_JIT_ICALL (mono_remoting_update_exception) \
272 MONO_JIT_ICALL (mono_remoting_wrapper) \
273 MONO_JIT_ICALL (mono_resolve_generic_virtual_call) \
274 MONO_JIT_ICALL (mono_resolve_generic_virtual_iface_call) \
275 MONO_JIT_ICALL (mono_resolve_iface_call_gsharedvt) \
276 MONO_JIT_ICALL (mono_resolve_vcall_gsharedvt) \
277 MONO_JIT_ICALL (mono_resume_unwind) \
278 MONO_JIT_ICALL (mono_rethrow_preserve_exception) \
279 MONO_JIT_ICALL (mono_string_builder_to_utf16) \
280 MONO_JIT_ICALL (mono_string_builder_to_utf8) \
281 MONO_JIT_ICALL (mono_string_from_bstr_icall) \
282 MONO_JIT_ICALL (mono_string_from_byvalstr) \
283 MONO_JIT_ICALL (mono_string_from_byvalwstr) \
284 MONO_JIT_ICALL (mono_string_new_len_wrapper) \
285 MONO_JIT_ICALL (mono_string_new_wrapper_internal) \
286 MONO_JIT_ICALL (mono_string_to_ansibstr) \
287 MONO_JIT_ICALL (mono_string_to_bstr) \
288 MONO_JIT_ICALL (mono_string_to_byvalstr) \
289 MONO_JIT_ICALL (mono_string_to_byvalwstr) \
290 MONO_JIT_ICALL (mono_string_to_utf16_internal) \
291 MONO_JIT_ICALL (mono_string_to_utf8str) \
292 MONO_JIT_ICALL (mono_string_utf16_to_builder) \
293 MONO_JIT_ICALL (mono_string_utf16_to_builder2) \
294 MONO_JIT_ICALL (mono_string_utf8_to_builder) \
295 MONO_JIT_ICALL (mono_string_utf8_to_builder2) \
296 MONO_JIT_ICALL (mono_struct_delete_old) \
297 MONO_JIT_ICALL (mono_thread_force_interruption_checkpoint_noraise) \
298 MONO_JIT_ICALL (mono_thread_get_undeniable_exception) \
299 MONO_JIT_ICALL (mono_thread_interruption_checkpoint) \
300 MONO_JIT_ICALL (mono_threads_attach_coop) \
301 MONO_JIT_ICALL (mono_threads_detach_coop) \
302 MONO_JIT_ICALL (mono_threads_enter_gc_safe_region_unbalanced) \
303 MONO_JIT_ICALL (mono_threads_enter_gc_unsafe_region_unbalanced) \
304 MONO_JIT_ICALL (mono_threads_exit_gc_safe_region_unbalanced) \
305 MONO_JIT_ICALL (mono_threads_exit_gc_unsafe_region_unbalanced) \
306 MONO_JIT_ICALL (mono_threads_state_poll) \
307 MONO_JIT_ICALL (mono_throw_exception) \
308 MONO_JIT_ICALL (mono_throw_method_access) \
309 MONO_JIT_ICALL (mono_throw_bad_image) \
310 MONO_JIT_ICALL (mono_trace_enter_method) \
311 MONO_JIT_ICALL (mono_trace_leave_method) \
312 MONO_JIT_ICALL (mono_upgrade_remote_class_wrapper) \
313 MONO_JIT_ICALL (mono_value_copy_internal) \
314 MONO_JIT_ICALL (mono_x86_start_gsharedvt_call) \
315 MONO_JIT_ICALL (mono_x86_throw_corlib_exception) \
316 MONO_JIT_ICALL (mono_x86_throw_exception) \
317 MONO_JIT_ICALL (native_to_interp_trampoline) \
318 MONO_JIT_ICALL (personality) \
319 MONO_JIT_ICALL (pthread_getspecific) \
320 MONO_JIT_ICALL (rgctx_fetch_trampoline_general) \
321 MONO_JIT_ICALL (sdb_breakpoint_trampoline) \
322 MONO_JIT_ICALL (sdb_single_step_trampoline) \
323 MONO_JIT_ICALL (type_from_handle) \
324 MONO_JIT_ICALL (ves_icall_array_new) \
325 MONO_JIT_ICALL (ves_icall_array_new_specific) \
326 MONO_JIT_ICALL (ves_icall_marshal_alloc) \
327 MONO_JIT_ICALL (ves_icall_mono_delegate_ctor) \
328 MONO_JIT_ICALL (ves_icall_mono_delegate_ctor_interp) \
329 MONO_JIT_ICALL (ves_icall_mono_ldstr) \
330 MONO_JIT_ICALL (ves_icall_mono_marshal_xdomain_copy_value) \
331 MONO_JIT_ICALL (ves_icall_mono_string_from_utf16) \
332 MONO_JIT_ICALL (ves_icall_mono_string_to_utf8) \
333 MONO_JIT_ICALL (ves_icall_object_new) \
334 MONO_JIT_ICALL (ves_icall_object_new_specific) \
335 MONO_JIT_ICALL (ves_icall_runtime_class_init) \
336 MONO_JIT_ICALL (ves_icall_string_alloc) \
337 MONO_JIT_ICALL (ves_icall_string_new_wrapper) \
338 MONO_JIT_ICALL (ves_icall_thread_finish_async_abort) \
340 MONO_JIT_ICALL (count) \
342 #define MONO_JIT_ICALL_mono_get_lmf_addr MONO_JIT_ICALL_mono_tls_get_lmf_addr
344 #ifdef __cplusplus
345 typedef enum MonoJitICallId : gsize // Widen to gsize for use in MonoJumpInfo union.
346 #else
347 typedef enum MonoJitICallId
348 #endif
350 #define MONO_JIT_ICALL(x) MONO_JIT_ICALL_ ## x,
351 MONO_JIT_ICALLS
352 #undef MONO_JIT_ICALL
353 } MonoJitICallId;
355 typedef union MonoJitICallInfos {
356 struct {
357 #define MONO_JIT_ICALL(x) MonoJitICallInfo x;
358 MONO_JIT_ICALLS
359 #undef MONO_JIT_ICALL
361 MonoJitICallInfo array [MONO_JIT_ICALL_count];
362 } MonoJitICallInfos;
364 // Indirect mono_jit_icall_info access through a function or macro due to loaded LLVM.
366 #if MONO_LLVM_LOADED
368 MonoJitICallInfos*
369 mono_get_jit_icall_info (void) MONO_LLVM_INTERNAL;
371 #else
373 extern MonoJitICallInfos mono_jit_icall_info;
375 #define mono_get_jit_icall_info() (&mono_jit_icall_info)
377 #endif
379 // Convert MonoJitICallInfo* to an int or enum.
381 #define mono_jit_icall_info_index(x) ((x) - mono_get_jit_icall_info ()->array)
382 #define mono_jit_icall_info_id(x) ((MonoJitICallId)mono_jit_icall_info_index(x))
384 // Given an enum/id, get the MonoJitICallInfo*.
386 static inline MonoJitICallInfo*
387 mono_find_jit_icall_info (MonoJitICallId id)
389 const guint index = (guint)id;
391 g_assert (index < MONO_JIT_ICALL_count);
392 g_static_assert (MONO_JIT_ICALL_count < 0x200); // fits in 9 bits
394 return &mono_get_jit_icall_info ()->array [index];