[interp] Small fixes (#11667)
[mono-project.git] / mono / mini / mini-wasm.h
blob3b44b9fdf41ba61bcd5d20a606dcdac115e6e2e4
1 #ifndef __MONO_MINI_WASM_H__
2 #define __MONO_MINI_WASM_H__
4 #include <mono/utils/mono-sigcontext.h>
5 #include <mono/utils/mono-context.h>
7 #define MONO_ARCH_CPU_SPEC mono_wasm_desc
9 #define MONO_MAX_IREGS 1
10 #define MONO_MAX_FREGS 1
12 #define WASM_REG_0 0
14 #define MONO_ARCH_USE_FPSTACK FALSE
16 // Does the ABI have a volatile non-parameter register, so tailcall
17 // can pass context to generics or interfaces?
18 #define MONO_ARCH_HAVE_VOLATILE_NON_PARAM_REGISTER 0
20 #define MONO_ARCH_AOT_SUPPORTED 1
21 #define MONO_ARCH_LLVM_SUPPORTED 1
22 #define MONO_ARCH_GSHARED_SUPPORTED 1
23 #define MONO_ARCH_GSHAREDVT_SUPPORTED 1
24 #define MONO_ARCH_HAVE_FULL_AOT_TRAMPOLINES 1
25 #define MONO_ARCH_NEED_DIV_CHECK 1
27 #define MONO_ARCH_EMULATE_FREM 1
28 #define MONO_ARCH_FLOAT32_SUPPORTED 1
30 //mini-codegen stubs - this doesn't do anything
31 #define MONO_ARCH_CALLEE_REGS (1 << 0)
32 #define MONO_ARCH_CALLEE_FREGS (1 << 1)
33 #define MONO_ARCH_CALLEE_SAVED_FREGS (1 << 2)
34 #define MONO_ARCH_CALLEE_SAVED_REGS (1 << 3)
35 #define MONO_ARCH_INST_FIXED_REG(desc) FALSE
36 #define MONO_ARCH_INST_IS_REGPAIR(desc) FALSE
37 #define MONO_ARCH_INST_REGPAIR_REG2(desc,hreg1) (-1)
38 #define MONO_ARCH_INST_SREG2_MASK(ins) 0
41 struct MonoLMF {
42 /*
43 * If the second lowest bit is set to 1, then this is a MonoLMFExt structure, and
44 * the other fields are not valid.
46 gpointer previous_lmf;
47 gpointer lmf_addr;
49 /* This is set to signal this is the top lmf entry */
50 gboolean top_entry;
53 typedef struct {
54 gpointer cinfo;
55 } MonoCompileArch;
57 #define MONO_ARCH_INIT_TOP_LMF_ENTRY(lmf) do { (lmf)->top_entry = TRUE; } while (0)
59 #define MONO_CONTEXT_SET_LLVM_EXC_REG(ctx, exc) do { (ctx)->llvm_exc_reg = (gsize)exc; } while (0)
61 #define MONO_INIT_CONTEXT_FROM_FUNC(ctx,start_func) do { \
62 int ___tmp = 99; \
63 MONO_CONTEXT_SET_IP ((ctx), (start_func)); \
64 MONO_CONTEXT_SET_BP ((ctx), (0)); \
65 MONO_CONTEXT_SET_SP ((ctx), (&___tmp)); \
66 } while (0)
69 #define MONO_ARCH_VTABLE_REG WASM_REG_0
70 #define MONO_ARCH_IMT_REG WASM_REG_0
71 #define MONO_ARCH_RGCTX_REG WASM_REG_0
73 /* must be at a power of 2 and >= 8 */
74 #define MONO_ARCH_FRAME_ALIGNMENT 16
76 #define MONO_ARCH_USE_FPSTACK FALSE
78 // Does the ABI have a volatile non-parameter register, so tailcall
79 // can pass context to generics or interfaces?
80 #define MONO_ARCH_HAVE_VOLATILE_NON_PARAM_REGISTER 0
82 #define MONO_ARCH_AOT_SUPPORTED 1
83 #define MONO_ARCH_LLVM_SUPPORTED 1
84 #define MONO_ARCH_GSHAREDVT_SUPPORTED 1
85 #define MONO_ARCH_HAVE_FULL_AOT_TRAMPOLINES 1
87 #define MONO_ARCH_EMULATE_FREM 1
88 #define MONO_ARCH_FLOAT32_SUPPORTED 1
90 //mini-codegen stubs - this doesn't do anything
91 #define MONO_ARCH_CALLEE_REGS (1 << 0)
92 #define MONO_ARCH_CALLEE_FREGS (1 << 1)
93 #define MONO_ARCH_CALLEE_SAVED_FREGS (1 << 2)
94 #define MONO_ARCH_CALLEE_SAVED_REGS (1 << 3)
95 #define MONO_ARCH_INST_FIXED_REG(desc) FALSE
96 #define MONO_ARCH_INST_IS_REGPAIR(desc) FALSE
97 #define MONO_ARCH_INST_REGPAIR_REG2(desc,hreg1) (-1)
98 #define MONO_ARCH_INST_SREG2_MASK(ins) 0
101 #define MONO_ARCH_INTERPRETER_SUPPORTED 1
102 #define MONO_ARCH_HAS_REGISTER_ICALL 1
103 #define MONO_ARCH_HAVE_PATCH_CODE_NEW 1
104 #define MONO_ARCH_HAVE_SDB_TRAMPOLINES 1
105 #define MONO_ARCH_LLVM_TARGET_LAYOUT "e-p:32:32-i64:64-v128:32:128-n32-S128"
106 #define MONO_ARCH_LLVM_TARGET_TRIPLE "wasm32-unknown-unknown-wasm"
108 void mono_wasm_debugger_init (void);
110 G_BEGIN_DECLS // sdks/wasm/driver.c is C and uses this
112 void mono_wasm_enable_debugging (void);
114 G_END_DECLS
116 void mono_wasm_breakpoint_hit (void);
117 void mono_wasm_set_timeout (int timeout, int id);
119 void mono_wasm_single_step_hit (void);
120 void mono_wasm_breakpoint_hit (void);
122 #endif /* __MONO_MINI_WASM_H__ */