Mercurial > hg > truffle
diff src/cpu/x86/vm/assembler_x86.cpp @ 6834:bacdc1d5c21c
6884973: java -XX:Atomics=2 crashes
Summary: Remove buggy experimental option
Reviewed-by: acorn, coleenp
Contributed-by: harold.seigel@oracle.com
author | coleenp |
---|---|
date | Thu, 04 Oct 2012 08:43:14 -0400 |
parents | d8ce2825b193 |
children | d804e148cff8 |
line wrap: on
line diff
--- a/src/cpu/x86/vm/assembler_x86.cpp Thu Oct 04 08:38:06 2012 -0400 +++ b/src/cpu/x86/vm/assembler_x86.cpp Thu Oct 04 08:43:14 2012 -0400 @@ -1170,26 +1170,11 @@ // and stores reg into adr if so; otherwise, the value at adr is loaded into rax,. // The ZF is set if the compared values were equal, and cleared otherwise. void Assembler::cmpxchgl(Register reg, Address adr) { // cmpxchg - if (Atomics & 2) { - // caveat: no instructionmark, so this isn't relocatable. - // Emit a synthetic, non-atomic, CAS equivalent. - // Beware. The synthetic form sets all ICCs, not just ZF. - // cmpxchg r,[m] is equivalent to rax, = CAS (m, rax, r) - cmpl(rax, adr); - movl(rax, adr); - if (reg != rax) { - Label L ; - jcc(Assembler::notEqual, L); - movl(adr, reg); - bind(L); - } - } else { - InstructionMark im(this); - prefix(adr, reg); - emit_byte(0x0F); - emit_byte(0xB1); - emit_operand(reg, adr); - } + InstructionMark im(this); + prefix(adr, reg); + emit_byte(0x0F); + emit_byte(0xB1); + emit_operand(reg, adr); } void Assembler::comisd(XMMRegister dst, Address src) { @@ -1513,12 +1498,7 @@ } void Assembler::lock() { - if (Atomics & 1) { - // Emit either nothing, a NOP, or a NOP: prefix - emit_byte(0x90) ; - } else { - emit_byte(0xF0); - } + emit_byte(0xF0); } void Assembler::lzcntl(Register dst, Register src) {