/src/wasm3/source/m3_exec_defs.h
Line | Count | Source |
1 | | // |
2 | | // m3_exec_defs.h |
3 | | // |
4 | | // Created by Steven Massey on 5/1/19. |
5 | | // Copyright © 2019 Steven Massey. All rights reserved. |
6 | | // |
7 | | |
8 | | #ifndef m3_exec_defs_h |
9 | | #define m3_exec_defs_h |
10 | | |
11 | | #include "m3_core.h" |
12 | | |
13 | | d_m3BeginExternC |
14 | | |
15 | 0 | # define m3MemData(mem) (u8*)(((M3MemoryHeader*)(mem))+1) |
16 | 0 | # define m3MemRuntime(mem) (((M3MemoryHeader*)(mem))->runtime) |
17 | 0 | # define m3MemInfo(mem) (&(((M3MemoryHeader*)(mem))->runtime->memory)) |
18 | | |
19 | | # define d_m3BaseOpSig pc_t _pc, m3stack_t _sp, M3MemoryHeader * _mem, m3reg_t _r0 |
20 | 439 | # define d_m3BaseOpArgs _sp, _mem, _r0 |
21 | | # define d_m3BaseOpAllArgs _pc, _sp, _mem, _r0 |
22 | 82 | # define d_m3BaseOpDefaultArgs 0 |
23 | 0 | # define d_m3BaseClearRegisters _r0 = 0; |
24 | | # define d_m3BaseCstr "" |
25 | | |
26 | | # define d_m3ExpOpSig(...) d_m3BaseOpSig, __VA_ARGS__ |
27 | 439 | # define d_m3ExpOpArgs(...) d_m3BaseOpArgs, __VA_ARGS__ |
28 | | # define d_m3ExpOpAllArgs(...) d_m3BaseOpAllArgs, __VA_ARGS__ |
29 | 82 | # define d_m3ExpOpDefaultArgs(...) d_m3BaseOpDefaultArgs, __VA_ARGS__ |
30 | 0 | # define d_m3ExpClearRegisters(...) d_m3BaseClearRegisters; __VA_ARGS__ |
31 | | |
32 | | # if d_m3HasFloat |
33 | | # define d_m3OpSig d_m3ExpOpSig (f64 _fp0) |
34 | 439 | # define d_m3OpArgs d_m3ExpOpArgs (_fp0) |
35 | | # define d_m3OpAllArgs d_m3ExpOpAllArgs (_fp0) |
36 | 82 | # define d_m3OpDefaultArgs d_m3ExpOpDefaultArgs (0.) |
37 | 0 | # define d_m3ClearRegisters d_m3ExpClearRegisters (_fp0 = 0.;) |
38 | | # else |
39 | | # define d_m3OpSig d_m3BaseOpSig |
40 | | # define d_m3OpArgs d_m3BaseOpArgs |
41 | | # define d_m3OpAllArgs d_m3BaseOpAllArgs |
42 | | # define d_m3OpDefaultArgs d_m3BaseOpDefaultArgs |
43 | | # define d_m3ClearRegisters d_m3BaseClearRegisters |
44 | | # endif |
45 | | |
46 | | |
47 | | #define d_m3RetSig static inline m3ret_t vectorcall |
48 | | # if (d_m3EnableOpProfiling || d_m3EnableOpTracing) |
49 | | typedef m3ret_t (vectorcall * IM3Operation) (d_m3OpSig, cstr_t i_operationName); |
50 | | # define d_m3Op(NAME) M3_NO_UBSAN d_m3RetSig op_##NAME (d_m3OpSig, cstr_t i_operationName) |
51 | | |
52 | | # define nextOpImpl() ((IM3Operation)(* _pc))(_pc + 1, d_m3OpArgs, __FUNCTION__) |
53 | | # define jumpOpImpl(PC) ((IM3Operation)(* PC))( PC + 1, d_m3OpArgs, __FUNCTION__) |
54 | | # else |
55 | | typedef m3ret_t (vectorcall * IM3Operation) (d_m3OpSig); |
56 | | # define d_m3Op(NAME) M3_NO_UBSAN d_m3RetSig op_##NAME (d_m3OpSig) |
57 | | |
58 | 878 | # define nextOpImpl() ((IM3Operation)(* _pc))(_pc + 1, d_m3OpArgs) |
59 | 0 | # define jumpOpImpl(PC) ((IM3Operation)(* PC))( PC + 1, d_m3OpArgs) |
60 | | # endif |
61 | | |
62 | 439 | #define nextOpDirect() M3_MUSTTAIL return nextOpImpl() |
63 | 0 | #define jumpOpDirect(PC) M3_MUSTTAIL return jumpOpImpl((pc_t)(PC)) |
64 | | |
65 | | # if (d_m3EnableOpProfiling || d_m3EnableOpTracing) |
66 | | d_m3RetSig RunCode (d_m3OpSig, cstr_t i_operationName) |
67 | | # else |
68 | | d_m3RetSig RunCode (d_m3OpSig) |
69 | | # endif |
70 | 82 | { |
71 | 82 | nextOpDirect(); |
72 | 82 | } Line | Count | Source | 70 | 82 | { | 71 | 82 | nextOpDirect(); | 72 | 82 | } |
Unexecuted instantiation: m3_function.c:RunCode Unexecuted instantiation: m3_info.c:RunCode Unexecuted instantiation: m3_module.c:RunCode Unexecuted instantiation: m3_parse.c:RunCode Unexecuted instantiation: m3_code.c:RunCode Unexecuted instantiation: m3_compile.c:RunCode Unexecuted instantiation: m3_core.c:RunCode |
73 | | |
74 | | d_m3EndExternC |
75 | | |
76 | | #endif // m3_exec_defs_h |