< prev index next >

src/hotspot/cpu/x86/macroAssembler_x86.cpp

Print this page

        

*** 4600,4631 **** #undef IS_A_TEMP bind(L_fallthrough); } - void MacroAssembler::clinit_barrier(Register klass, Register thread, Label* L_fast_path, Label* L_slow_path) { assert(L_fast_path != NULL || L_slow_path != NULL, "at least one is required"); Label L_fallthrough; if (L_fast_path == NULL) { L_fast_path = &L_fallthrough; } // Fast path check: class is fully initialized cmpb(Address(klass, InstanceKlass::init_state_offset()), InstanceKlass::fully_initialized); jcc(Assembler::equal, *L_fast_path); // Fast path check: current thread is initializer thread cmpptr(thread, Address(klass, InstanceKlass::init_thread_offset())); ! if (L_slow_path != NULL) { jcc(Assembler::notEqual, *L_slow_path); } else { jcc(Assembler::equal, *L_fast_path); } - - bind(L_fallthrough); } void MacroAssembler::cmov32(Condition cc, Register dst, Address src) { if (VM_Version::supports_cmov()) { cmovl(cc, dst, src); --- 4600,4635 ---- #undef IS_A_TEMP bind(L_fallthrough); } void MacroAssembler::clinit_barrier(Register klass, Register thread, Label* L_fast_path, Label* L_slow_path) { assert(L_fast_path != NULL || L_slow_path != NULL, "at least one is required"); Label L_fallthrough; if (L_fast_path == NULL) { L_fast_path = &L_fallthrough; + } else if (L_slow_path == NULL) { + L_slow_path = &L_fallthrough; } // Fast path check: class is fully initialized cmpb(Address(klass, InstanceKlass::init_state_offset()), InstanceKlass::fully_initialized); jcc(Assembler::equal, *L_fast_path); // Fast path check: current thread is initializer thread cmpptr(thread, Address(klass, InstanceKlass::init_thread_offset())); ! if (L_slow_path == &L_fallthrough) { ! jcc(Assembler::equal, *L_fast_path); ! bind(*L_slow_path); ! } else if (L_fast_path == &L_fallthrough) { jcc(Assembler::notEqual, *L_slow_path); + bind(*L_fast_path); } else { jcc(Assembler::equal, *L_fast_path); + jmp(*L_slow_path); } } void MacroAssembler::cmov32(Condition cc, Register dst, Address src) { if (VM_Version::supports_cmov()) { cmovl(cc, dst, src);
< prev index next >