X-Git-Url: http://wien.tomnetworks.com/gitweb/?a=blobdiff_plain;f=mono%2Futils%2Fmono-context.h;h=bac2fb331a1633ee4e143999f7b101870529e748;hb=161c807083bf5d889079a64604a176073eea8e1f;hp=b26442f73f5c7897e5ec9da2bf1881399dacf2fa;hpb=010fcfb9ecfef1654b415dbb909a01148a89e827;p=mono.git diff --git a/mono/utils/mono-context.h b/mono/utils/mono-context.h index b26442f73f5..bac2fb331a1 100644 --- a/mono/utils/mono-context.h +++ b/mono/utils/mono-context.h @@ -22,9 +22,17 @@ #define MONO_CONTEXT_OFFSET(field, index, field_type) \ "i" (offsetof (MonoContext, field) + (index) * sizeof (field_type)) +#if defined(TARGET_X86) #if defined(__APPLE__) typedef struct __darwin_xmm_reg MonoContextSimdReg; #endif +#elif defined(TARGET_AMD64) +#if defined(__APPLE__) +typedef struct __darwin_xmm_reg MonoContextSimdReg; +#elif defined(__linux__) +typedef struct _libc_xmmreg MonoContextSimdReg; +#endif +#endif /* * General notes about mono-context. @@ -34,7 +42,25 @@ typedef struct __darwin_xmm_reg MonoContextSimdReg; * MONO_CONTEXT_GET_CURRENT captures the current context as close as possible. One reg might be clobbered * to hold the address of the target MonoContext. It will be a caller save one, so should not be a problem. */ -#if (defined(__i386__) && !defined(MONO_CROSS_COMPILE)) || (defined(TARGET_X86)) +#if defined (TARGET_WASM) + +typedef struct { + mgreg_t wasm_sp; + mgreg_t wasm_bp; + mgreg_t llvm_exc_reg; + mgreg_t wasm_ip; + mgreg_t wasm_pc; +} MonoContext; + +#define MONO_CONTEXT_SET_IP(ctx,ip) do { (ctx)->wasm_ip = (mgreg_t)(ip); } while (0); +#define MONO_CONTEXT_SET_BP(ctx,bp) do { (ctx)->wasm_bp = (mgreg_t)(bp); } while (0); +#define MONO_CONTEXT_SET_SP(ctx,sp) do { (ctx)->wasm_sp = (mgreg_t)(sp); } while (0); + +#define MONO_CONTEXT_GET_IP(ctx) ((gpointer)((ctx)->wasm_ip)) +#define MONO_CONTEXT_GET_BP(ctx) ((gpointer)((ctx)->wasm_bp)) +#define MONO_CONTEXT_GET_SP(ctx) ((gpointer)((ctx)->wasm_sp)) + +#elif (defined(__i386__) && !defined(MONO_CROSS_COMPILE)) || (defined(TARGET_X86)) /*HACK, move this to an eventual mono-signal.c*/ #if defined( __linux__) || defined(__sun) || defined(__APPLE__) || defined(__NetBSD__) || \ @@ -219,7 +245,7 @@ typedef struct { typedef struct { mgreg_t gregs [AMD64_NREG]; -#ifdef __APPLE__ +#if defined(__APPLE__) || defined(__linux__) MonoContextSimdReg fregs [AMD64_XMM_NREG]; #else double fregs [AMD64_XMM_NREG];