diff options
author | peter <peter@FreeBSD.org> | 2003-06-02 22:22:52 +0000 |
---|---|---|
committer | peter <peter@FreeBSD.org> | 2003-06-02 22:22:52 +0000 |
commit | 8f0f81825daca4c7490ab86e1b2f98b82476e9fe (patch) | |
tree | a6b086a365d2f5b9b0783b8096eb9a95cd6f86c2 /lib/libc_r/uthread | |
parent | 58b9cc83ad08e252efdd2bb1ef346696aaec625a (diff) | |
download | FreeBSD-src-8f0f81825daca4c7490ab86e1b2f98b82476e9fe.zip FreeBSD-src-8f0f81825daca4c7490ab86e1b2f98b82476e9fe.tar.gz |
Port libc_r to amd64, and turn it back on for amd64. It passes all of
the same src/lib/libc_r/test/* tests that the other platforms pass.
Diffstat (limited to 'lib/libc_r/uthread')
-rw-r--r-- | lib/libc_r/uthread/pthread_private.h | 18 |
1 files changed, 18 insertions, 0 deletions
diff --git a/lib/libc_r/uthread/pthread_private.h b/lib/libc_r/uthread/pthread_private.h index 143772d..5569b20 100644 --- a/lib/libc_r/uthread/pthread_private.h +++ b/lib/libc_r/uthread/pthread_private.h @@ -87,6 +87,24 @@ __asm__("frstor %0": :"m"(*fdata)); \ } while (0) #define SET_RETURN_ADDR_JB(jb, ra) (jb)[0]._jb[0] = (int)(ra) +#elif defined(__amd64__) +#define GET_STACK_JB(jb) ((unsigned long)((jb)[0]._jb[2])) +#define GET_STACK_SJB(sjb) ((unsigned long)((sjb)[0]._sjb[2])) +#define GET_STACK_UC(ucp) ((unsigned long)((ucp)->uc_mcontext.mc_rsp)) +#define SET_STACK_JB(jb, stk) (jb)[0]._jb[2] = (long)(stk) +#define SET_STACK_SJB(sjb, stk) (sjb)[0]._sjb[2] = (long)(stk) +#define SET_STACK_UC(ucp, stk) (ucp)->uc_mcontext.mc_rsp = (long)(stk) +#define FP_SAVE_UC(ucp) do { \ + char *fdata; \ + fdata = (char *) (ucp)->uc_mcontext.mc_fpstate; \ + __asm__("fxsave %0": :"m"(*fdata)); \ +} while (0) +#define FP_RESTORE_UC(ucp) do { \ + char *fdata; \ + fdata = (char *) (ucp)->uc_mcontext.mc_fpstate; \ + __asm__("fxrstor %0": :"m"(*fdata)); \ +} while (0) +#define SET_RETURN_ADDR_JB(jb, ra) (jb)[0]._jb[0] = (long)(ra) #elif defined(__alpha__) #include <machine/reg.h> #define GET_STACK_JB(jb) ((unsigned long)((jb)[0]._jb[R_SP + 4])) |