6884973: java -XX:Atomics=2 crashes
Summary: Remove buggy experimental option
Reviewed-by: acorn, coleenp
Contributed-by: harold.seigel@oracle.com
--- a/hotspot/src/cpu/x86/vm/assembler_x86.cpp Thu Oct 04 08:38:06 2012 -0400
+++ b/hotspot/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) {
--- a/hotspot/src/share/vm/runtime/globals.hpp Thu Oct 04 08:38:06 2012 -0400
+++ b/hotspot/src/share/vm/runtime/globals.hpp Thu Oct 04 08:43:14 2012 -0400
@@ -1066,9 +1066,6 @@
\
product(bool, MonitorInUseLists, false, "Track Monitors for Deflation") \
\
- product(intx, Atomics, 0, \
- "(Unsafe,Unstable) Diagnostic - Controls emission of atomics") \
- \
product(intx, SyncFlags, 0, "(Unsafe,Unstable) Experimental Sync flags" ) \
\
product(intx, SyncVerbose, 0, "(Unstable)" ) \