[LoongArch64] Part-5:add loongarch support in some files for LoongArch64. (#21769)
[mono-project.git] / mono / mini / mini-wasm.h
blob1026fad0c2a2fc4fa85d8139338f7e94da2cde5e
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
11 #define MONO_MAX_XREGS 1
13 #define WASM_REG_0 0
15 #define MONO_ARCH_USE_FPSTACK FALSE
17 // Does the ABI have a volatile non-parameter register, so tailcall
18 // can pass context to generics or interfaces?
19 #define MONO_ARCH_HAVE_VOLATILE_NON_PARAM_REGISTER 0
21 #define MONO_ARCH_AOT_SUPPORTED 1
22 #define MONO_ARCH_LLVM_SUPPORTED 1
23 #define MONO_ARCH_GSHARED_SUPPORTED 1
24 #define MONO_ARCH_GSHAREDVT_SUPPORTED 1
25 #define MONO_ARCH_HAVE_FULL_AOT_TRAMPOLINES 1
26 #define MONO_ARCH_NEED_DIV_CHECK 1
27 #define MONO_ARCH_NO_CODEMAN 1
29 #define MONO_ARCH_EMULATE_FREM 1
30 #define MONO_ARCH_EMULATE_FCONV_TO_U8 1
31 #define MONO_ARCH_EMULATE_FCONV_TO_U4 1
32 #define MONO_ARCH_NO_EMULATE_LONG_SHIFT_OPS 1
33 #define MONO_ARCH_NO_EMULATE_LONG_MUL_OPTS 1
34 #define MONO_ARCH_FLOAT32_SUPPORTED 1
36 //mini-codegen stubs - this doesn't do anything
37 #define MONO_ARCH_CALLEE_REGS (1 << 0)
38 #define MONO_ARCH_CALLEE_FREGS (1 << 1)
39 #define MONO_ARCH_CALLEE_XREGS (1 << 2)
40 #define MONO_ARCH_CALLEE_SAVED_FREGS (1 << 3)
41 #define MONO_ARCH_CALLEE_SAVED_REGS (1 << 4)
42 #define MONO_ARCH_INST_FIXED_REG(desc) FALSE
43 #define MONO_ARCH_INST_IS_REGPAIR(desc) FALSE
44 #define MONO_ARCH_INST_REGPAIR_REG2(desc,hreg1) (-1)
45 #define MONO_ARCH_INST_SREG2_MASK(ins) 0
47 struct MonoLMF {
48 /*
49 * If the second lowest bit is set to 1, then this is a MonoLMFExt structure, and
50 * the other fields are not valid.
52 gpointer previous_lmf;
53 gpointer lmf_addr;
55 MonoMethod *method;
58 typedef struct {
59 gpointer cinfo;
60 } MonoCompileArch;
62 #define MONO_ARCH_INIT_TOP_LMF_ENTRY(lmf) do { } while (0)
64 #define MONO_CONTEXT_SET_LLVM_EXC_REG(ctx, exc) do { (ctx)->llvm_exc_reg = (gsize)exc; } while (0)
66 #define MONO_INIT_CONTEXT_FROM_FUNC(ctx,start_func) do { \
67 int ___tmp = 99; \
68 MONO_CONTEXT_SET_IP ((ctx), (start_func)); \
69 MONO_CONTEXT_SET_BP ((ctx), (0)); \
70 MONO_CONTEXT_SET_SP ((ctx), (&___tmp)); \
71 } while (0)
74 #define MONO_ARCH_VTABLE_REG WASM_REG_0
75 #define MONO_ARCH_IMT_REG WASM_REG_0
76 #define MONO_ARCH_RGCTX_REG WASM_REG_0
78 /* must be at a power of 2 and >= 8 */
79 #define MONO_ARCH_FRAME_ALIGNMENT 16
81 #define MONO_ARCH_USE_FPSTACK FALSE
83 // Does the ABI have a volatile non-parameter register, so tailcall
84 // can pass context to generics or interfaces?
85 #define MONO_ARCH_HAVE_VOLATILE_NON_PARAM_REGISTER 0
87 #define MONO_ARCH_AOT_SUPPORTED 1
88 #define MONO_ARCH_LLVM_SUPPORTED 1
89 #define MONO_ARCH_GSHAREDVT_SUPPORTED 1
90 #define MONO_ARCH_HAVE_FULL_AOT_TRAMPOLINES 1
93 #define MONO_ARCH_INTERPRETER_SUPPORTED 1
94 #define MONO_ARCH_HAS_REGISTER_ICALL 1
95 #define MONO_ARCH_HAVE_PATCH_CODE_NEW 1
96 #define MONO_ARCH_HAVE_SDB_TRAMPOLINES 1
97 #define MONO_ARCH_LLVM_TARGET_LAYOUT "e-m:e-p:32:32-i64:64-n32:64-S128"
98 #define MONO_ARCH_LLVM_TARGET_TRIPLE "wasm32-unknown-emscripten"
100 void mono_wasm_debugger_init (void);
102 // sdks/wasm/driver.c is C and uses this
103 G_EXTERN_C void mono_wasm_enable_debugging (int log_level);
105 void mono_wasm_breakpoint_hit (void);
106 void mono_wasm_set_timeout (int timeout, int id);
108 void mono_wasm_single_step_hit (void);
109 void mono_wasm_breakpoint_hit (void);
110 void mono_wasm_user_break (void);
112 int mono_wasm_assembly_already_added (const char *assembly_name);
114 #endif /* __MONO_MINI_WASM_H__ */