ATOMIC_CAS with 3 sregs.
[mono.git] / mono / mini / mini-amd64.h
index 420cdae079059c35260623311cc703758fb046b2..e5d089cf5df569497e93000d2640eee589749959 100644 (file)
@@ -221,9 +221,35 @@ typedef struct {
 
 #endif
 
+#ifdef __OpenBSD__
+#undef MONO_ARCH_USE_SIGACTION
+#endif
+
 #endif /* PLATFORM_WIN32 */
 
-#ifdef __FreeBSD__
+#if defined (__NetBSD__)
+
+#define REG_RAX 14
+#define REG_RCX 3
+#define REG_RDX 2
+#define REG_RBX 13
+#define REG_RSP 24
+#define REG_RBP 12
+#define REG_RSI 1
+#define REG_RDI 0
+#define REG_R8 4
+#define REG_R9 5
+#define REG_R10 6
+#define REG_R11 7
+#define REG_R12 8
+#define REG_R13 9
+#define REG_R14 10
+#define REG_R15 11
+#define REG_RIP 21
+
+#define MONO_ARCH_NOMAP32BIT
+
+#elif defined (__FreeBSD__) || defined (__OpenBSD__)
 
 #define REG_RAX 7
 #define REG_RCX 4
@@ -275,7 +301,7 @@ typedef struct {
 #define MONO_ARCH_HAVE_CREATE_DELEGATE_TRAMPOLINE 1
 #define MONO_ARCH_HAVE_ATOMIC_ADD 1
 #define MONO_ARCH_HAVE_ATOMIC_EXCHANGE 1
-#define MONO_ARCH_HAVE_ATOMIC_CAS_IMM 1
+#define MONO_ARCH_HAVE_ATOMIC_CAS 1
 #define MONO_ARCH_HAVE_FULL_AOT_TRAMPOLINES 1
 #define MONO_ARCH_HAVE_IMT 1
 #define MONO_ARCH_HAVE_TLS_GET 1
@@ -290,13 +316,19 @@ typedef struct {
 #define MONO_ARCH_COMMON_VTABLE_TRAMPOLINE 1
 #define MONO_ARCH_HAVE_CMOV_OPS 1
 #define MONO_ARCH_HAVE_NOTIFY_PENDING_EXC 1
-#define MONO_ARCH_ENABLE_NORMALIZE_OPCODES 1
+#define MONO_ARCH_HAVE_EXCEPTIONS_INIT 1
 #define MONO_ARCH_ENABLE_GLOBAL_RA 1
 #define MONO_ARCH_HAVE_GENERALIZED_IMT_THUNK 1
+#define MONO_ARCH_HAVE_LIVERANGE_OPS 1
+#define MONO_ARCH_HAVE_XP_UNWIND 1
+#define MONO_ARCH_HAVE_SIGCTX_TO_MONOCTX 1
+#if !defined(PLATFORM_WIN32) && !defined(HAVE_MOVING_COLLECTOR)
+#define MONO_ARCH_MONITOR_OBJECT_REG AMD64_RDI
+#endif
 
 #define MONO_ARCH_AOT_SUPPORTED 1
 
-#if defined(__linux__) || defined(__sun)
+#if !defined(PLATFORM_WIN32) || defined(__sun)
 #define MONO_ARCH_ENABLE_MONITOR_IL_FASTPATH 1
 #endif
 
@@ -325,6 +357,12 @@ mono_amd64_throw_exception (guint64 dummy1, guint64 dummy2, guint64 dummy3, guin
                                                        guint64 rax, guint64 rcx, guint64 rdx,
                                                        guint64 rethrow);
 
+guint64
+mono_amd64_get_original_ip (void) MONO_INTERNAL;
+
+guint8*
+mono_amd64_emit_tls_get (guint8* code, int dreg, int tls_offset) MONO_INTERNAL;
+
 typedef struct {
        guint8 *address;
        guint8 saved_byte;