1use enum_iterator::Sequence;
2use rkyv::{Archive, Deserialize as RkyvDeserialize, Serialize as RkyvSerialize};
3#[cfg(feature = "enable-serde")]
4use serde::{Deserialize, Serialize};
5use std::fmt;
6
7#[derive(
11 Copy, Clone, Debug, PartialEq, Eq, Hash, Sequence, RkyvSerialize, RkyvDeserialize, Archive,
12)]
13#[cfg_attr(feature = "enable-serde", derive(Serialize, Deserialize))]
14#[cfg_attr(feature = "artifact-size", derive(loupe::MemoryUsage))]
15#[rkyv(derive(Debug, Hash, PartialEq, Eq), compare(PartialEq))]
16#[repr(u16)]
17pub enum LibCall {
18 CeilF32,
20
21 CeilF64,
23
24 FloorF32,
26
27 FloorF64,
29
30 NearestF32,
32
33 NearestF64,
35
36 SqrtF32,
38
39 SqrtF64,
41
42 TruncF32,
44
45 TruncF64,
47
48 Memory32Size,
50
51 ImportedMemory32Size,
53
54 TableCopy,
56
57 TableInit,
59
60 TableFill,
62
63 TableSize,
65
66 ImportedTableSize,
68
69 TableGet,
71
72 ImportedTableGet,
74
75 TableSet,
77
78 ImportedTableSet,
80
81 TableGrow,
83
84 ImportedTableGrow,
86
87 FuncRef,
89
90 ElemDrop,
92
93 Memory32Copy,
95
96 ImportedMemory32Copy,
98
99 Memory32Fill,
101
102 ImportedMemory32Fill,
104
105 Memory32Init,
107
108 DataDrop,
110
111 RaiseTrap,
113
114 Probestack,
117
118 Memory32AtomicWait32,
120
121 ImportedMemory32AtomicWait32,
123
124 Memory32AtomicWait64,
126
127 ImportedMemory32AtomicWait64,
129
130 Memory32AtomicNotify,
132
133 ImportedMemory32AtomicNotify,
135
136 Throw,
138
139 AllocException,
141 ReadExnRef,
143 LibunwindExceptionIntoExnRef,
145
146 EHPersonality,
148 EHPersonality2,
150
151 DebugUsize,
153 DebugStr,
155
156 Addsf3,
165 Adddf3,
167 Subsf3,
169 Subdf3,
171 Mulsf3,
173 Muldf3,
175 Divsf3,
177 Divdf3,
179 Negsf2,
181 Negdf2,
183
184 Extendsfdf2,
187 Truncdfsf2,
189 Fixsfsi,
191 Fixdfsi,
193 Fixsfdi,
195 Fixdfdi,
197 Fixunssfsi,
199 Fixunsdfsi,
201 Fixunssfdi,
203 Fixunsdfdi,
205 Floatsisf,
207 Floatsidf,
209 Floatdisf,
211 Floatdidf,
213 Floatunsisf,
215 Floatunsidf,
217 Floatundisf,
219 Floatundidf,
221
222 Unordsf2,
225 Unorddf2,
227 Eqsf2,
229 Eqdf2,
231 Nesf2,
233 Nedf2,
235 Gesf2,
237 Gedf2,
239 Ltsf2,
241 Ltdf2,
243 Lesf2,
245 Ledf2,
247 Gtsf2,
249 Gtdf2,
251}
252
253impl LibCall {
254 pub fn to_function_name(&self) -> &str {
256 match self {
257 Self::CeilF32 => "wasmer_vm_f32_ceil",
258 Self::CeilF64 => "wasmer_vm_f64_ceil",
259 Self::FloorF32 => "wasmer_vm_f32_floor",
260 Self::FloorF64 => "wasmer_vm_f64_floor",
261 Self::NearestF32 => "wasmer_vm_f32_nearest",
262 Self::NearestF64 => "wasmer_vm_f64_nearest",
263 Self::SqrtF32 => "wasmer_vm_f32_sqrt",
264 Self::SqrtF64 => "wasmer_vm_f64_sqrt",
265 Self::TruncF32 => "wasmer_vm_f32_trunc",
266 Self::TruncF64 => "wasmer_vm_f64_trunc",
267 Self::Memory32Size => "wasmer_vm_memory32_size",
268 Self::ImportedMemory32Size => "wasmer_vm_imported_memory32_size",
269 Self::TableCopy => "wasmer_vm_table_copy",
270 Self::TableInit => "wasmer_vm_table_init",
271 Self::TableFill => "wasmer_vm_table_fill",
272 Self::TableSize => "wasmer_vm_table_size",
273 Self::ImportedTableSize => "wasmer_vm_imported_table_size",
274 Self::TableGet => "wasmer_vm_table_get",
275 Self::ImportedTableGet => "wasmer_vm_imported_table_get",
276 Self::TableSet => "wasmer_vm_table_set",
277 Self::ImportedTableSet => "wasmer_vm_imported_table_set",
278 Self::TableGrow => "wasmer_vm_table_grow",
279 Self::ImportedTableGrow => "wasmer_vm_imported_table_grow",
280 Self::FuncRef => "wasmer_vm_func_ref",
281 Self::ElemDrop => "wasmer_vm_elem_drop",
282 Self::Memory32Copy => "wasmer_vm_memory32_copy",
283 Self::ImportedMemory32Copy => "wasmer_vm_imported_memory32_copy",
284 Self::Memory32Fill => "wasmer_vm_memory32_fill",
285 Self::ImportedMemory32Fill => "wasmer_vm_imported_memory32_fill",
286 Self::Memory32Init => "wasmer_vm_memory32_init",
287 Self::DataDrop => "wasmer_vm_data_drop",
288 Self::RaiseTrap => "wasmer_vm_raise_trap",
289 #[cfg(target_vendor = "apple")]
292 Self::Probestack => "_wasmer_vm_probestack",
293 #[cfg(not(target_vendor = "apple"))]
294 Self::Probestack => "wasmer_vm_probestack",
295 Self::Memory32AtomicWait32 => "wasmer_vm_memory32_atomic_wait32",
296 Self::ImportedMemory32AtomicWait32 => "wasmer_vm_imported_memory32_atomic_wait32",
297 Self::Memory32AtomicWait64 => "wasmer_vm_memory32_atomic_wait64",
298 Self::ImportedMemory32AtomicWait64 => "wasmer_vm_imported_memory32_atomic_wait64",
299 Self::Memory32AtomicNotify => "wasmer_vm_memory32_atomic_notify",
300 Self::ImportedMemory32AtomicNotify => "wasmer_vm_imported_memory32_atomic_notify",
301 Self::Throw => "wasmer_vm_throw",
302 Self::EHPersonality => "wasmer_eh_personality",
303 Self::EHPersonality2 => "wasmer_eh_personality2",
304 Self::AllocException => "wasmer_vm_alloc_exception",
305 Self::ReadExnRef => "wasmer_vm_read_exnref",
306 Self::LibunwindExceptionIntoExnRef => "wasmer_vm_exception_into_exnref",
307 Self::DebugUsize => "wasmer_vm_dbg_usize",
308 Self::DebugStr => "wasmer_vm_dbg_str",
309 Self::Addsf3 => "__addsf3",
311 Self::Adddf3 => "__adddf3",
312 Self::Subsf3 => "__subsf3",
313 Self::Subdf3 => "__subdf3",
314 Self::Mulsf3 => "__mulsf3",
315 Self::Muldf3 => "__muldf3",
316 Self::Divsf3 => "__divsf3",
317 Self::Divdf3 => "__divdf3",
318 Self::Negsf2 => "__negsf2",
319 Self::Negdf2 => "__negdf2",
320 Self::Extendsfdf2 => "__extendsfdf2",
321 Self::Truncdfsf2 => "__truncdfsf2",
322 Self::Fixsfsi => "__fixsfsi",
323 Self::Fixdfsi => "__fixdfsi",
324 Self::Fixsfdi => "__fixsfdi",
325 Self::Fixdfdi => "__fixdfdi",
326 Self::Fixunssfsi => "__fixunssfsi",
327 Self::Fixunsdfsi => "__fixunsdfsi",
328 Self::Fixunssfdi => "__fixunssfdi",
329 Self::Fixunsdfdi => "__fixunsdfdi",
330 Self::Floatsisf => "__floatsisf",
331 Self::Floatsidf => "__floatsidf",
332 Self::Floatdisf => "__floatdisf",
333 Self::Floatdidf => "__floatdidf",
334 Self::Floatunsisf => "__floatunsisf",
335 Self::Floatunsidf => "__floatunsidf",
336 Self::Floatundisf => "__floatundisf",
337 Self::Floatundidf => "__floatundidf",
338 Self::Unordsf2 => "__unordsf2",
339 Self::Unorddf2 => "__unorddf2",
340 Self::Eqsf2 => "__eqsf2",
341 Self::Eqdf2 => "__eqdf2",
342 Self::Nesf2 => "__nesf2",
343 Self::Nedf2 => "__nedf2",
344 Self::Gesf2 => "__gesf2",
345 Self::Gedf2 => "__gedf2",
346 Self::Ltsf2 => "__ltsf2",
347 Self::Ltdf2 => "__ltdf2",
348 Self::Lesf2 => "__lesf2",
349 Self::Ledf2 => "__ledf2",
350 Self::Gtsf2 => "__gtsf2",
351 Self::Gtdf2 => "__gtdf2",
352 }
353 }
354}
355
356impl fmt::Display for LibCall {
357 fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
358 fmt::Debug::fmt(self, f)
359 }
360}