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 TruncF32,
38
39 TruncF64,
41
42 Memory32Size,
44
45 ImportedMemory32Size,
47
48 TableCopy,
50
51 TableInit,
53
54 TableFill,
56
57 TableSize,
59
60 ImportedTableSize,
62
63 TableGet,
65
66 ImportedTableGet,
68
69 TableSet,
71
72 ImportedTableSet,
74
75 TableGrow,
77
78 ImportedTableGrow,
80
81 FuncRef,
83
84 ElemDrop,
86
87 Memory32Copy,
89
90 ImportedMemory32Copy,
92
93 Memory32Fill,
95
96 ImportedMemory32Fill,
98
99 Memory32Init,
101
102 DataDrop,
104
105 RaiseTrap,
107
108 Probestack,
111
112 Memory32AtomicWait32,
114
115 ImportedMemory32AtomicWait32,
117
118 Memory32AtomicWait64,
120
121 ImportedMemory32AtomicWait64,
123
124 Memory32AtomicNotify,
126
127 ImportedMemory32AtomicNotify,
129
130 Throw,
132
133 AllocException,
135 ReadExnRef,
137 LibunwindExceptionIntoExnRef,
139
140 EHPersonality,
142 EHPersonality2,
144
145 DebugUsize,
147 DebugStr,
149
150 Addsf3,
159 Adddf3,
161 Subsf3,
163 Subdf3,
165 Mulsf3,
167 Muldf3,
169 Divsf3,
171 Divdf3,
173 Negsf2,
175 Negdf2,
177
178 Extendsfdf2,
181 Truncdfsf2,
183 Fixsfsi,
185 Fixdfsi,
187 Fixsfdi,
189 Fixdfdi,
191 Fixunssfsi,
193 Fixunsdfsi,
195 Fixunssfdi,
197 Fixunsdfdi,
199 Floatsisf,
201 Floatsidf,
203 Floatdisf,
205 Floatdidf,
207 Floatunsisf,
209 Floatunsidf,
211 Floatundisf,
213 Floatundidf,
215
216 Unordsf2,
219 Unorddf2,
221 Eqsf2,
223 Eqdf2,
225 Nesf2,
227 Nedf2,
229 Gesf2,
231 Gedf2,
233 Ltsf2,
235 Ltdf2,
237 Lesf2,
239 Ledf2,
241 Gtsf2,
243 Gtdf2,
245}
246
247impl LibCall {
248 pub fn to_function_name(&self) -> &str {
250 match self {
251 Self::CeilF32 => "wasmer_vm_f32_ceil",
252 Self::CeilF64 => "wasmer_vm_f64_ceil",
253 Self::FloorF32 => "wasmer_vm_f32_floor",
254 Self::FloorF64 => "wasmer_vm_f64_floor",
255 Self::NearestF32 => "wasmer_vm_f32_nearest",
256 Self::NearestF64 => "wasmer_vm_f64_nearest",
257 Self::TruncF32 => "wasmer_vm_f32_trunc",
258 Self::TruncF64 => "wasmer_vm_f64_trunc",
259 Self::Memory32Size => "wasmer_vm_memory32_size",
260 Self::ImportedMemory32Size => "wasmer_vm_imported_memory32_size",
261 Self::TableCopy => "wasmer_vm_table_copy",
262 Self::TableInit => "wasmer_vm_table_init",
263 Self::TableFill => "wasmer_vm_table_fill",
264 Self::TableSize => "wasmer_vm_table_size",
265 Self::ImportedTableSize => "wasmer_vm_imported_table_size",
266 Self::TableGet => "wasmer_vm_table_get",
267 Self::ImportedTableGet => "wasmer_vm_imported_table_get",
268 Self::TableSet => "wasmer_vm_table_set",
269 Self::ImportedTableSet => "wasmer_vm_imported_table_set",
270 Self::TableGrow => "wasmer_vm_table_grow",
271 Self::ImportedTableGrow => "wasmer_vm_imported_table_grow",
272 Self::FuncRef => "wasmer_vm_func_ref",
273 Self::ElemDrop => "wasmer_vm_elem_drop",
274 Self::Memory32Copy => "wasmer_vm_memory32_copy",
275 Self::ImportedMemory32Copy => "wasmer_vm_imported_memory32_copy",
276 Self::Memory32Fill => "wasmer_vm_memory32_fill",
277 Self::ImportedMemory32Fill => "wasmer_vm_imported_memory32_fill",
278 Self::Memory32Init => "wasmer_vm_memory32_init",
279 Self::DataDrop => "wasmer_vm_data_drop",
280 Self::RaiseTrap => "wasmer_vm_raise_trap",
281 #[cfg(target_vendor = "apple")]
284 Self::Probestack => "_wasmer_vm_probestack",
285 #[cfg(not(target_vendor = "apple"))]
286 Self::Probestack => "wasmer_vm_probestack",
287 Self::Memory32AtomicWait32 => "wasmer_vm_memory32_atomic_wait32",
288 Self::ImportedMemory32AtomicWait32 => "wasmer_vm_imported_memory32_atomic_wait32",
289 Self::Memory32AtomicWait64 => "wasmer_vm_memory32_atomic_wait64",
290 Self::ImportedMemory32AtomicWait64 => "wasmer_vm_imported_memory32_atomic_wait64",
291 Self::Memory32AtomicNotify => "wasmer_vm_memory32_atomic_notify",
292 Self::ImportedMemory32AtomicNotify => "wasmer_vm_imported_memory32_atomic_notify",
293 Self::Throw => "wasmer_vm_throw",
294 Self::EHPersonality => "wasmer_eh_personality",
295 Self::EHPersonality2 => "wasmer_eh_personality2",
296 Self::AllocException => "wasmer_vm_alloc_exception",
297 Self::ReadExnRef => "wasmer_vm_read_exnref",
298 Self::LibunwindExceptionIntoExnRef => "wasmer_vm_exception_into_exnref",
299 Self::DebugUsize => "wasmer_vm_dbg_usize",
300 Self::DebugStr => "wasmer_vm_dbg_str",
301 Self::Addsf3 => "__addsf3",
303 Self::Adddf3 => "__adddf3",
304 Self::Subsf3 => "__subsf3",
305 Self::Subdf3 => "__subdf3",
306 Self::Mulsf3 => "__mulsf3",
307 Self::Muldf3 => "__muldf3",
308 Self::Divsf3 => "__divsf3",
309 Self::Divdf3 => "__divdf3",
310 Self::Negsf2 => "__negsf2",
311 Self::Negdf2 => "__negdf2",
312 Self::Extendsfdf2 => "__extendsfdf2",
313 Self::Truncdfsf2 => "__truncdfsf2",
314 Self::Fixsfsi => "__fixsfsi",
315 Self::Fixdfsi => "__fixdfsi",
316 Self::Fixsfdi => "__fixsfdi",
317 Self::Fixdfdi => "__fixdfdi",
318 Self::Fixunssfsi => "__fixunssfsi",
319 Self::Fixunsdfsi => "__fixunsdfsi",
320 Self::Fixunssfdi => "__fixunssfdi",
321 Self::Fixunsdfdi => "__fixunsdfdi",
322 Self::Floatsisf => "__floatsisf",
323 Self::Floatsidf => "__floatsidf",
324 Self::Floatdisf => "__floatdisf",
325 Self::Floatdidf => "__floatdidf",
326 Self::Floatunsisf => "__floatunsisf",
327 Self::Floatunsidf => "__floatunsidf",
328 Self::Floatundisf => "__floatundisf",
329 Self::Floatundidf => "__floatundidf",
330 Self::Unordsf2 => "__unordsf2",
331 Self::Unorddf2 => "__unorddf2",
332 Self::Eqsf2 => "__eqsf2",
333 Self::Eqdf2 => "__eqdf2",
334 Self::Nesf2 => "__nesf2",
335 Self::Nedf2 => "__nedf2",
336 Self::Gesf2 => "__gesf2",
337 Self::Gedf2 => "__gedf2",
338 Self::Ltsf2 => "__ltsf2",
339 Self::Ltdf2 => "__ltdf2",
340 Self::Lesf2 => "__lesf2",
341 Self::Ledf2 => "__ledf2",
342 Self::Gtsf2 => "__gtsf2",
343 Self::Gtdf2 => "__gtdf2",
344 }
345 }
346}
347
348impl fmt::Display for LibCall {
349 fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
350 fmt::Debug::fmt(self, f)
351 }
352}