summaryrefslogtreecommitdiffstats
path: root/lib/libc_r
diff options
context:
space:
mode:
authorpeter <peter@FreeBSD.org>2003-06-02 22:22:52 +0000
committerpeter <peter@FreeBSD.org>2003-06-02 22:22:52 +0000
commit8f0f81825daca4c7490ab86e1b2f98b82476e9fe (patch)
treea6b086a365d2f5b9b0783b8096eb9a95cd6f86c2 /lib/libc_r
parent58b9cc83ad08e252efdd2bb1ef346696aaec625a (diff)
downloadFreeBSD-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')
-rw-r--r--lib/libc_r/uthread/pthread_private.h18
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]))
OpenPOWER on IntegriCloud