d8c1bd07336c7f91a0ebe48c668cd8d10a84ea9e
[pkgsrc.git] / wip / erlang / patches / patch-as
1 $NetBSD: patch-as,v 1.1 2009/12/15 12:09:20 asau Exp $
2
3 --- erts/emulator/sys/unix/sys_float.c.orig     2010-02-19 20:04:07.000000000 +0200
4 +++ erts/emulator/sys/unix/sys_float.c  2010-02-24 14:43:43.000000000 +0200
5 @@ -476,7 +476,7 @@
6  
7  #endif
8  
9 -#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__))
10 +#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(__NetBSD__) || defined(__OpenBSD__)) && defined(__x86_64__)) || (defined(__sun__) && defined(__x86_64__))
11  
12  #if defined(__linux__) && defined(__i386__)
13  #if !defined(X86_FXSR_MAGIC)
14 @@ -519,6 +519,9 @@
15  #define mc_pc(mc)      ((mc)->mc_rip)
16  #elif defined(__FreeBSD__) && defined(__i386__)
17  #define mc_pc(mc)      ((mc)->mc_eip)
18 +#elif defined(__NetBSD__) && defined(__x86_64__)
19 +#define mc_pc(mc)      ((mc)->__gregs[_REG_RIP])
20 +typedef mcontext_t *erts_mcontext_ptr_t;
21  #elif defined(__OpenBSD__) && defined(__x86_64__)
22  #define mc_pc(mc)      ((mc)->sc_rip)
23  #elif defined(__sun__) && defined(__x86_64__)
24 @@ -615,6 +618,14 @@
25      pc = mc_pc(uc);
26      fxsave->fx_mxcsr = 0x1F80;
27      fxsave->fx_fsw &= ~0xFF;
28 +#elif defined(__NetBSD__) && defined(__x86_64__)
29 +    mcontext_t *mc = &uc->uc_mcontext;
30 +    struct fxsave64 *fxsave = (struct fxsave64 *)&mc->__fpregs;
31 +    if (fxsave->fx_mxcsr & 0x000D) {
32 +       fxsave->fx_mxcsr &= ~(0x003F|0x0680);
33 +       skip_sse2_insn(uc);
34 +    }
35 +    fxsave->fx_fsw &= ~0xFF;
36  #elif defined(__sun__) && defined(__x86_64__)
37      mcontext_t *mc = &uc->uc_mcontext;
38      struct fpchip_state *fpstate = &mc->fpregs.fp_reg_set.fpchip_state;