summaryrefslogtreecommitdiffstats
path: root/sys/sparc64
diff options
context:
space:
mode:
authorattilio <attilio@FreeBSD.org>2011-05-12 14:01:40 +0000
committerattilio <attilio@FreeBSD.org>2011-05-12 14:01:40 +0000
commit99e65551b9bcfa3dd0f837068d871552f6501af3 (patch)
tree47746a5cf787e85809af7176101c6cbcef1c23d8 /sys/sparc64
parent22bfcf5b903832f985a3d630fdad61b72a9d1763 (diff)
parentaed257e3d8840e7e4ae6a445d46b4ec5a02ef330 (diff)
downloadFreeBSD-src-99e65551b9bcfa3dd0f837068d871552f6501af3.zip
FreeBSD-src-99e65551b9bcfa3dd0f837068d871552f6501af3.tar.gz
MFC
Diffstat (limited to 'sys/sparc64')
-rw-r--r--sys/sparc64/include/asmacros.h11
1 files changed, 11 insertions, 0 deletions
diff --git a/sys/sparc64/include/asmacros.h b/sys/sparc64/include/asmacros.h
index 840959f..777b35a 100644
--- a/sys/sparc64/include/asmacros.h
+++ b/sys/sparc64/include/asmacros.h
@@ -90,6 +90,17 @@
bne,pn %icc, 9b ; \
mov r3, r2
+/*
+ * Atomically clear a number of bits of an u_long in memory.
+ */
+#define ATOMIC_CLEAR_LONG(r1, r2, r3, bits) \
+ ldx [r1], r2 ; \
+9: andn r2, bits, r3 ; \
+ casxa [r1] ASI_N, r2, r3 ; \
+ cmp r2, r3 ; \
+ bne,pn %icc, 9b ; \
+ mov r3, r2
+
#define PCPU(member) PCPU_REG + PC_ ## member
#define PCPU_ADDR(member, reg) \
add PCPU_REG, PC_ ## member, reg
OpenPOWER on IntegriCloud