summaryrefslogtreecommitdiff
path: root/lib/libpthread
diff options
context:
space:
mode:
authormatt <matt@NetBSD.org>2013-08-15 22:37:29 +0000
committermatt <matt@NetBSD.org>2013-08-15 22:37:29 +0000
commitf021c4bfc09fb17bdc84338eceff71cacdaf80be (patch)
treee69971e75d9aa710af5ca88b6fa4cf965b559a00 /lib/libpthread
parent47d631c28a30b1f08850ae05a767069862b50121 (diff)
Use the thumb1 versions of sev/wfe for thumb && armv6+.
if using armv5t don't do anything for thumb.
Diffstat (limited to 'lib/libpthread')
-rw-r--r--lib/libpthread/arch/arm/pthread_md.h10
1 files changed, 9 insertions, 1 deletions
diff --git a/lib/libpthread/arch/arm/pthread_md.h b/lib/libpthread/arch/arm/pthread_md.h
index 827a75a9d64..153c39fad86 100644
--- a/lib/libpthread/arch/arm/pthread_md.h
+++ b/lib/libpthread/arch/arm/pthread_md.h
@@ -1,4 +1,4 @@
-/* $NetBSD: pthread_md.h,v 1.8 2012/09/19 07:57:14 matt Exp $ */
+/* $NetBSD: pthread_md.h,v 1.9 2013/08/15 22:37:29 matt Exp $ */
/*
* Copyright (c) 2001 Wasabi Systems, Inc.
@@ -49,8 +49,16 @@ pthread__sp(void)
return (ret);
}
+#if defined(__thumb__) && defined(_ARM_ARCH_6)
+#define pthread__smt_pause() __asm __volatile(".inst.n 0xbf20") /* wfe */
+#define pthread__smt_wake() __asm __volatile(".inst.n 0xbf40") /* sev */
+#elif !defined(__thumb__)
#define pthread__smt_pause() __asm __volatile(".inst 0xe320f002") /* wfe */
#define pthread__smt_wake() __asm __volatile(".inst 0xe320f004") /* sev */
+#else
+#define pthread__smt_pause()
+#define pthread__smt_wake()
+#endif
#define pthread__uc_sp(ucp) ((ucp)->uc_mcontext.__gregs[_REG_SP])