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 Memory32Fill,
98
99 ImportedMemory32Fill,
101
102 Memory32Init,
104
105 DataDrop,
107
108 RaiseTrap,
110
111 Probestack,
114
115 Memory32AtomicWait32,
117
118 ImportedMemory32AtomicWait32,
120
121 Memory32AtomicWait64,
123
124 ImportedMemory32AtomicWait64,
126
127 Memory32AtomicNotify,
129
130 ImportedMemory32AtomicNotify,
132
133 Throw,
135
136 AllocException,
138 ReadExnRef,
140 LibunwindExceptionIntoExnRef,
142
143 EHPersonality,
145 EHPersonality2,
147
148 DebugUsize,
150 DebugStr,
152
153 Addsf3,
162 Adddf3,
164 Subsf3,
166 Subdf3,
168 Mulsf3,
170 Muldf3,
172 Divsf3,
174 Divdf3,
176 Negsf2,
178 Negdf2,
180
181 Extendsfdf2,
184 Truncdfsf2,
186 Fixsfsi,
188 Fixdfsi,
190 Fixsfdi,
192 Fixdfdi,
194 Fixunssfsi,
196 Fixunsdfsi,
198 Fixunssfdi,
200 Fixunsdfdi,
202 Floatsisf,
204 Floatsidf,
206 Floatdisf,
208 Floatdidf,
210 Floatunsisf,
212 Floatunsidf,
214 Floatundisf,
216 Floatundidf,
218
219 Unordsf2,
222 Unorddf2,
224 Eqsf2,
226 Eqdf2,
228 Nesf2,
230 Nedf2,
232 Gesf2,
234 Gedf2,
236 Ltsf2,
238 Ltdf2,
240 Lesf2,
242 Ledf2,
244 Gtsf2,
246 Gtdf2,
248}
249
250impl LibCall {
251 pub fn to_function_name(&self) -> &str {
253 match self {
254 Self::CeilF32 => "wasmer_vm_f32_ceil",
255 Self::CeilF64 => "wasmer_vm_f64_ceil",
256 Self::FloorF32 => "wasmer_vm_f32_floor",
257 Self::FloorF64 => "wasmer_vm_f64_floor",
258 Self::NearestF32 => "wasmer_vm_f32_nearest",
259 Self::NearestF64 => "wasmer_vm_f64_nearest",
260 Self::SqrtF32 => "wasmer_vm_f32_sqrt",
261 Self::SqrtF64 => "wasmer_vm_f64_sqrt",
262 Self::TruncF32 => "wasmer_vm_f32_trunc",
263 Self::TruncF64 => "wasmer_vm_f64_trunc",
264 Self::Memory32Size => "wasmer_vm_memory32_size",
265 Self::ImportedMemory32Size => "wasmer_vm_imported_memory32_size",
266 Self::TableCopy => "wasmer_vm_table_copy",
267 Self::TableInit => "wasmer_vm_table_init",
268 Self::TableFill => "wasmer_vm_table_fill",
269 Self::TableSize => "wasmer_vm_table_size",
270 Self::ImportedTableSize => "wasmer_vm_imported_table_size",
271 Self::TableGet => "wasmer_vm_table_get",
272 Self::ImportedTableGet => "wasmer_vm_imported_table_get",
273 Self::TableSet => "wasmer_vm_table_set",
274 Self::ImportedTableSet => "wasmer_vm_imported_table_set",
275 Self::TableGrow => "wasmer_vm_table_grow",
276 Self::ImportedTableGrow => "wasmer_vm_imported_table_grow",
277 Self::FuncRef => "wasmer_vm_func_ref",
278 Self::ElemDrop => "wasmer_vm_elem_drop",
279 Self::Memory32Copy => "wasmer_vm_memory32_copy",
280 Self::Memory32Fill => "wasmer_vm_memory32_fill",
281 Self::ImportedMemory32Fill => "wasmer_vm_imported_memory32_fill",
282 Self::Memory32Init => "wasmer_vm_memory32_init",
283 Self::DataDrop => "wasmer_vm_data_drop",
284 Self::RaiseTrap => "wasmer_vm_raise_trap",
285 #[cfg(target_vendor = "apple")]
288 Self::Probestack => "_wasmer_vm_probestack",
289 #[cfg(not(target_vendor = "apple"))]
290 Self::Probestack => "wasmer_vm_probestack",
291 Self::Memory32AtomicWait32 => "wasmer_vm_memory32_atomic_wait32",
292 Self::ImportedMemory32AtomicWait32 => "wasmer_vm_imported_memory32_atomic_wait32",
293 Self::Memory32AtomicWait64 => "wasmer_vm_memory32_atomic_wait64",
294 Self::ImportedMemory32AtomicWait64 => "wasmer_vm_imported_memory32_atomic_wait64",
295 Self::Memory32AtomicNotify => "wasmer_vm_memory32_atomic_notify",
296 Self::ImportedMemory32AtomicNotify => "wasmer_vm_imported_memory32_atomic_notify",
297 Self::Throw => "wasmer_vm_throw",
298 Self::EHPersonality => "wasmer_eh_personality",
299 Self::EHPersonality2 => "wasmer_eh_personality2",
300 Self::AllocException => "wasmer_vm_alloc_exception",
301 Self::ReadExnRef => "wasmer_vm_read_exnref",
302 Self::LibunwindExceptionIntoExnRef => "wasmer_vm_exception_into_exnref",
303 Self::DebugUsize => "wasmer_vm_dbg_usize",
304 Self::DebugStr => "wasmer_vm_dbg_str",
305 Self::Addsf3 => "__addsf3",
307 Self::Adddf3 => "__adddf3",
308 Self::Subsf3 => "__subsf3",
309 Self::Subdf3 => "__subdf3",
310 Self::Mulsf3 => "__mulsf3",
311 Self::Muldf3 => "__muldf3",
312 Self::Divsf3 => "__divsf3",
313 Self::Divdf3 => "__divdf3",
314 Self::Negsf2 => "__negsf2",
315 Self::Negdf2 => "__negdf2",
316 Self::Extendsfdf2 => "__extendsfdf2",
317 Self::Truncdfsf2 => "__truncdfsf2",
318 Self::Fixsfsi => "__fixsfsi",
319 Self::Fixdfsi => "__fixdfsi",
320 Self::Fixsfdi => "__fixsfdi",
321 Self::Fixdfdi => "__fixdfdi",
322 Self::Fixunssfsi => "__fixunssfsi",
323 Self::Fixunsdfsi => "__fixunsdfsi",
324 Self::Fixunssfdi => "__fixunssfdi",
325 Self::Fixunsdfdi => "__fixunsdfdi",
326 Self::Floatsisf => "__floatsisf",
327 Self::Floatsidf => "__floatsidf",
328 Self::Floatdisf => "__floatdisf",
329 Self::Floatdidf => "__floatdidf",
330 Self::Floatunsisf => "__floatunsisf",
331 Self::Floatunsidf => "__floatunsidf",
332 Self::Floatundisf => "__floatundisf",
333 Self::Floatundidf => "__floatundidf",
334 Self::Unordsf2 => "__unordsf2",
335 Self::Unorddf2 => "__unorddf2",
336 Self::Eqsf2 => "__eqsf2",
337 Self::Eqdf2 => "__eqdf2",
338 Self::Nesf2 => "__nesf2",
339 Self::Nedf2 => "__nedf2",
340 Self::Gesf2 => "__gesf2",
341 Self::Gedf2 => "__gedf2",
342 Self::Ltsf2 => "__ltsf2",
343 Self::Ltdf2 => "__ltdf2",
344 Self::Lesf2 => "__lesf2",
345 Self::Ledf2 => "__ledf2",
346 Self::Gtsf2 => "__gtsf2",
347 Self::Gtdf2 => "__gtdf2",
348 }
349 }
350}
351
352impl fmt::Display for LibCall {
353 fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
354 fmt::Debug::fmt(self, f)
355 }
356}