diff options
author | attilio <attilio@FreeBSD.org> | 2011-05-12 14:01:40 +0000 |
---|---|---|
committer | attilio <attilio@FreeBSD.org> | 2011-05-12 14:01:40 +0000 |
commit | 99e65551b9bcfa3dd0f837068d871552f6501af3 (patch) | |
tree | 47746a5cf787e85809af7176101c6cbcef1c23d8 /sys/sparc64 | |
parent | 22bfcf5b903832f985a3d630fdad61b72a9d1763 (diff) | |
parent | aed257e3d8840e7e4ae6a445d46b4ec5a02ef330 (diff) | |
download | FreeBSD-src-99e65551b9bcfa3dd0f837068d871552f6501af3.zip FreeBSD-src-99e65551b9bcfa3dd0f837068d871552f6501af3.tar.gz |
MFC
Diffstat (limited to 'sys/sparc64')
-rw-r--r-- | sys/sparc64/include/asmacros.h | 11 |
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 |