diff options
author | jhb <jhb@FreeBSD.org> | 2002-05-11 04:27:39 +0000 |
---|---|---|
committer | jhb <jhb@FreeBSD.org> | 2002-05-11 04:27:39 +0000 |
commit | a2929176d9db88392f6d3d79a92abfa679f762a7 (patch) | |
tree | 5433ecb0a3516f6798e0441eff67d4e1fa12cbfe /sys | |
parent | c94931edf30d81eb9084c24694ba4af15517fdad (diff) | |
download | FreeBSD-src-a2929176d9db88392f6d3d79a92abfa679f762a7.zip FreeBSD-src-a2929176d9db88392f6d3d79a92abfa679f762a7.tar.gz |
Temporarily disable Jeff's fix for atomic_cmpset_32() to zero-extend the
value we load from memory. gcc3.1 passes in the u_int32_t old value to
compare against as a _sign_-extended 64-bit value for some reason (bug?).
This is a temporary workaround so kernels work again on alpha.
Diffstat (limited to 'sys')
-rw-r--r-- | sys/alpha/include/atomic.h | 2 |
1 files changed, 2 insertions, 0 deletions
diff --git a/sys/alpha/include/atomic.h b/sys/alpha/include/atomic.h index 93cdbf6..f5dd718d 100644 --- a/sys/alpha/include/atomic.h +++ b/sys/alpha/include/atomic.h @@ -356,7 +356,9 @@ atomic_cmpset_32(volatile u_int32_t* p, u_int32_t cmpval, u_int32_t newval) __asm __volatile ( "1:\tldl_l %0, %4\n\t" /* load old value */ +#ifdef notyet "zapnot %0,0xf,%0\n\t" /* Chop of signed bits */ +#endif "cmpeq %0, %2, %0\n\t" /* compare */ "beq %0, 2f\n\t" /* exit if not equal */ "mov %3, %0\n\t" /* value to store */ |