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.
This commit is contained in:
parent
81faa74f0f
commit
f4cfb1b42f
@ -356,7 +356,9 @@ atomic_cmpset_32(volatile u_int32_t* p, u_int32_t cmpval, u_int32_t newval)
|
|||||||
|
|
||||||
__asm __volatile (
|
__asm __volatile (
|
||||||
"1:\tldl_l %0, %4\n\t" /* load old value */
|
"1:\tldl_l %0, %4\n\t" /* load old value */
|
||||||
|
#ifdef notyet
|
||||||
"zapnot %0,0xf,%0\n\t" /* Chop of signed bits */
|
"zapnot %0,0xf,%0\n\t" /* Chop of signed bits */
|
||||||
|
#endif
|
||||||
"cmpeq %0, %2, %0\n\t" /* compare */
|
"cmpeq %0, %2, %0\n\t" /* compare */
|
||||||
"beq %0, 2f\n\t" /* exit if not equal */
|
"beq %0, 2f\n\t" /* exit if not equal */
|
||||||
"mov %3, %0\n\t" /* value to store */
|
"mov %3, %0\n\t" /* value to store */
|
||||||
|
Loading…
Reference in New Issue
Block a user