[interp] Fix interp logging (#17636)
[mono-project.git] / mono / mini / mini-wasm.h
blob06f1a5b8747a5d48ae748b24517cfd9e2c7685b7
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_EMULATE_FCONV_TO_U8 1
29 #define MONO_ARCH_EMULATE_FCONV_TO_U4 1
30 #define MONO_ARCH_NO_EMULATE_LONG_SHIFT_OPS 1
31 #define MONO_ARCH_NO_EMULATE_LONG_MUL_OPTS 1
32 #define MONO_ARCH_FLOAT32_SUPPORTED 1
34 //mini-codegen stubs - this doesn't do anything
35 #define MONO_ARCH_CALLEE_REGS (1 << 0)
36 #define MONO_ARCH_CALLEE_FREGS (1 << 1)
37 #define MONO_ARCH_CALLEE_SAVED_FREGS (1 << 2)
38 #define MONO_ARCH_CALLEE_SAVED_REGS (1 << 3)
39 #define MONO_ARCH_INST_FIXED_REG(desc) FALSE
40 #define MONO_ARCH_INST_IS_REGPAIR(desc) FALSE
41 #define MONO_ARCH_INST_REGPAIR_REG2(desc,hreg1) (-1)
42 #define MONO_ARCH_INST_SREG2_MASK(ins) 0
45 struct MonoLMF {
46 /*
47 * If the second lowest bit is set to 1, then this is a MonoLMFExt structure, and
48 * the other fields are not valid.
50 gpointer previous_lmf;
51 gpointer lmf_addr;
53 /* This is set to signal this is the top lmf entry */
54 gboolean top_entry;
57 typedef struct {
58 gpointer cinfo;
59 } MonoCompileArch;
61 #define MONO_ARCH_INIT_TOP_LMF_ENTRY(lmf) do { (lmf)->top_entry = TRUE; } while (0)
63 #define MONO_CONTEXT_SET_LLVM_EXC_REG(ctx, exc) do { (ctx)->llvm_exc_reg = (gsize)exc; } while (0)
65 #define MONO_INIT_CONTEXT_FROM_FUNC(ctx,start_func) do { \
66 int ___tmp = 99; \
67 MONO_CONTEXT_SET_IP ((ctx), (start_func)); \
68 MONO_CONTEXT_SET_BP ((ctx), (0)); \
69 MONO_CONTEXT_SET_SP ((ctx), (&___tmp)); \
70 } while (0)
73 #define MONO_ARCH_VTABLE_REG WASM_REG_0
74 #define MONO_ARCH_IMT_REG WASM_REG_0
75 #define MONO_ARCH_RGCTX_REG WASM_REG_0
77 /* must be at a power of 2 and >= 8 */
78 #define MONO_ARCH_FRAME_ALIGNMENT 16
80 #define MONO_ARCH_USE_FPSTACK FALSE
82 // Does the ABI have a volatile non-parameter register, so tailcall
83 // can pass context to generics or interfaces?
84 #define MONO_ARCH_HAVE_VOLATILE_NON_PARAM_REGISTER 0
86 #define MONO_ARCH_AOT_SUPPORTED 1
87 #define MONO_ARCH_LLVM_SUPPORTED 1
88 #define MONO_ARCH_GSHAREDVT_SUPPORTED 1
89 #define MONO_ARCH_HAVE_FULL_AOT_TRAMPOLINES 1
91 #define MONO_ARCH_EMULATE_FREM 1
92 #define MONO_ARCH_FLOAT32_SUPPORTED 1
94 //mini-codegen stubs - this doesn't do anything
95 #define MONO_ARCH_CALLEE_REGS (1 << 0)
96 #define MONO_ARCH_CALLEE_FREGS (1 << 1)
97 #define MONO_ARCH_CALLEE_SAVED_FREGS (1 << 2)
98 #define MONO_ARCH_CALLEE_SAVED_REGS (1 << 3)
99 #define MONO_ARCH_INST_FIXED_REG(desc) FALSE
100 #define MONO_ARCH_INST_IS_REGPAIR(desc) FALSE
101 #define MONO_ARCH_INST_REGPAIR_REG2(desc,hreg1) (-1)
102 #define MONO_ARCH_INST_SREG2_MASK(ins) 0
105 #define MONO_ARCH_INTERPRETER_SUPPORTED 1
106 #define MONO_ARCH_HAS_REGISTER_ICALL 1
107 #define MONO_ARCH_HAVE_PATCH_CODE_NEW 1
108 #define MONO_ARCH_HAVE_SDB_TRAMPOLINES 1
109 #define MONO_ARCH_LLVM_TARGET_LAYOUT "e-m:e-p:32:32-i64:64-n32:64-S128"
110 #define MONO_ARCH_LLVM_TARGET_TRIPLE "wasm32-unknown-emscripten"
112 void mono_wasm_debugger_init (void);
114 // sdks/wasm/driver.c is C and uses this
115 G_EXTERN_C void mono_wasm_enable_debugging (void);
117 void mono_wasm_breakpoint_hit (void);
118 void mono_wasm_set_timeout (int timeout, int id);
120 void mono_wasm_single_step_hit (void);
121 void mono_wasm_breakpoint_hit (void);
123 #endif /* __MONO_MINI_WASM_H__ */