47 lines
2.9 KiB
Text
47 lines
2.9 KiB
Text
$NetBSD: patch-as,v 1.2 2008/08/20 00:22:53 asau Exp $
|
|
|
|
--- erts/emulator/sys/unix/sys_float.c.orig 2008-04-07 17:58:26.000000000 +0400
|
|
+++ erts/emulator/sys/unix/sys_float.c 2008-08-20 00:29:34.000000000 +0400
|
|
@@ -370,7 +370,7 @@
|
|
|
|
#endif
|
|
|
|
-#if (defined(__linux__) && (defined(__x86_64__) || defined(__i386__))) || (defined(__DARWIN__) && (defined(__i386__) || defined(__x86_64__))) || (defined(__FreeBSD__) && (defined(__x86_64__) || defined(__i386__))) || (defined(__OpenBSD__) && defined(__x86_64__)) || (defined(__sun__) && defined(__x86_64__))
|
|
+#if (defined(__linux__) && (defined(__x86_64__) || defined(__i386__))) || (defined(__DARWIN__) && (defined(__i386__) || defined(__x86_64__))) || (defined(__FreeBSD__) && (defined(__x86_64__) || defined(__i386__))) || ((defined(__OpenBSD__) || defined(__NetBSD__)) && defined(__x86_64__)) || (defined(__sun__) && defined(__x86_64__))
|
|
#if !(defined(__OpenBSD__) && defined(__x86_64__))
|
|
#include <ucontext.h>
|
|
#endif
|
|
@@ -401,6 +401,9 @@
|
|
#elif defined(__FreeBSD__) && defined(__i386__)
|
|
#define mc_pc(mc) ((mc)->mc_eip)
|
|
typedef mcontext_t *erts_mcontext_ptr_t;
|
|
+#elif defined(__NetBSD__) && defined(__x86_64__)
|
|
+#define mc_pc(mc) ((mc)->__gregs[_REG_RIP])
|
|
+typedef mcontext_t *erts_mcontext_ptr_t;
|
|
#elif defined(__OpenBSD__) && defined(__x86_64__)
|
|
#define mc_pc(mc) ((mc)->sc_rip)
|
|
typedef struct sigcontext *erts_mcontext_ptr_t;
|
|
@@ -509,7 +512,7 @@
|
|
}
|
|
#endif /* (__linux__ && (__x86_64__ || __i386__)) || (__DARWIN__ && __i386__) || (__FreeBSD__ && (__x86_64__ || __i386__)) || (__OpenBSD__ && __x86_64__) || (__sun__ && __x86_64__) */
|
|
|
|
-#if (defined(__linux__) && (defined(__i386__) || defined(__x86_64__) || defined(__sparc__) || defined(__powerpc__))) || (defined(__DARWIN__) && (defined(__i386__) || defined(__x86_64__) || defined(__ppc__))) || (defined(__FreeBSD__) && (defined(__x86_64__) || defined(__i386__))) || (defined(__OpenBSD__) && defined(__x86_64__)) || (defined(__sun__) && defined(__x86_64__))
|
|
+#if (defined(__linux__) && (defined(__i386__) || defined(__x86_64__) || defined(__sparc__) || defined(__powerpc__))) || (defined(__DARWIN__) && (defined(__i386__) || defined(__x86_64__) || defined(__ppc__))) || (defined(__FreeBSD__) && (defined(__x86_64__) || defined(__i386__))) || ((defined(__OpenBSD__) || defined(__NetBSD__)) && defined(__x86_64__)) || (defined(__sun__) && defined(__x86_64__))
|
|
|
|
#if defined(__linux__) && defined(__i386__)
|
|
#if !defined(X86_FXSR_MAGIC)
|
|
@@ -630,6 +633,14 @@
|
|
skip_sse2_insn(uc);
|
|
}
|
|
fxsave->fx_fsw &= ~0xFF;
|
|
+#elif defined(__NetBSD__) && defined(__x86_64__)
|
|
+ mcontext_t *mc = &uc->uc_mcontext;
|
|
+ struct fxsave64 *fxsave = (struct fxsave64 *)&mc->__fpregs;
|
|
+ if (fxsave->fx_mxcsr & 0x000D) {
|
|
+ fxsave->fx_mxcsr &= ~(0x003F|0x0680);
|
|
+ skip_sse2_insn(uc);
|
|
+ }
|
|
+ fxsave->fx_fsw &= ~0xFF;
|
|
#elif defined(__sun__) && defined(__x86_64__)
|
|
mcontext_t *mc = &uc->uc_mcontext;
|
|
struct fpchip_state *fpstate = &mc->fpregs.fp_reg_set.fpchip_state;
|