comparison src/cpu/x86/vm/c1_Runtime1_x86.cpp @ 3714:b648304ba4ff

Change Graal monitor enter and exit from BasicObjectLock to BasicLock
author Christian Wimmer <christian.wimmer@oracle.com>
date Tue, 13 Dec 2011 21:17:46 -0800
parents 6917cd12e8f8
children 04b9a2566eec
comparison
equal deleted inserted replaced
3713:d6a0c46a73b2 3714:b648304ba4ff
2065 assert_different_registers(obj, lock, scratch1, scratch2); 2065 assert_different_registers(obj, lock, scratch1, scratch2);
2066 2066
2067 // copied from LIR_Assembler::emit_lock 2067 // copied from LIR_Assembler::emit_lock
2068 if (UseFastLocking) { 2068 if (UseFastLocking) {
2069 assert(BasicLock::displaced_header_offset_in_bytes() == 0, "lock_reg must point to the displaced header"); 2069 assert(BasicLock::displaced_header_offset_in_bytes() == 0, "lock_reg must point to the displaced header");
2070 __ lock_object(scratch1, obj, lock, scratch2, slow_case); 2070 __ lock_object(scratch1, obj, lock, scratch2, slow_case, false);
2071 __ ret(0); 2071 __ ret(0);
2072 } 2072 }
2073 2073
2074 __ bind(slow_case); 2074 __ bind(slow_case);
2075 { 2075 {
2076 StubFrame f(sasm, "graal_monitorenter", dont_gc_arguments); 2076 StubFrame f(sasm, "graal_monitorenter", dont_gc_arguments);
2077 OopMap* map = save_live_registers(sasm, 1, save_fpu_registers); 2077 OopMap* map = save_live_registers(sasm, 2, save_fpu_registers);
2078 2078
2079 // Called with store_parameter and not C abi 2079 // Called with store_parameter and not C abi
2080 int call_offset = __ call_RT(noreg, noreg, CAST_FROM_FN_PTR(address, monitorenter), obj, lock); 2080 int call_offset = __ call_RT(noreg, noreg, CAST_FROM_FN_PTR(address, graal_monitorenter), obj, lock);
2081 2081
2082 oop_maps = new OopMapSet(); 2082 oop_maps = new OopMapSet();
2083 oop_maps->add_gc_map(call_offset, map); 2083 oop_maps->add_gc_map(call_offset, map);
2084 restore_live_registers(sasm, save_fpu_registers); 2084 restore_live_registers(sasm, save_fpu_registers);
2085 } 2085 }
2099 assert_different_registers(obj, lock, scratch1, lock2); 2099 assert_different_registers(obj, lock, scratch1, lock2);
2100 2100
2101 // copied from LIR_Assembler::emit_lock 2101 // copied from LIR_Assembler::emit_lock
2102 if (UseFastLocking) { 2102 if (UseFastLocking) {
2103 assert(BasicLock::displaced_header_offset_in_bytes() == 0, "lock_reg must point to the displaced header"); 2103 assert(BasicLock::displaced_header_offset_in_bytes() == 0, "lock_reg must point to the displaced header");
2104 __ unlock_object(scratch1, obj, lock2, slow_case); 2104 __ unlock_object(scratch1, obj, lock2, slow_case, false);
2105 __ ret(0); 2105 __ ret(0);
2106 } 2106 }
2107 2107
2108 __ bind(slow_case); 2108 __ bind(slow_case);
2109 { 2109 {
2111 OopMap* map = save_live_registers(sasm, 2, save_fpu_registers); 2111 OopMap* map = save_live_registers(sasm, 2, save_fpu_registers);
2112 2112
2113 // note: really a leaf routine but must setup last java sp 2113 // note: really a leaf routine but must setup last java sp
2114 // => use call_RT for now (speed can be improved by 2114 // => use call_RT for now (speed can be improved by
2115 // doing last java sp setup manually) 2115 // doing last java sp setup manually)
2116 int call_offset = __ call_RT(noreg, noreg, CAST_FROM_FN_PTR(address, monitorexit), lock); 2116 int call_offset = __ call_RT(noreg, noreg, CAST_FROM_FN_PTR(address, graal_monitorexit), obj, lock);
2117 2117
2118 oop_maps = new OopMapSet(); 2118 oop_maps = new OopMapSet();
2119 oop_maps->add_gc_map(call_offset, map); 2119 oop_maps->add_gc_map(call_offset, map);
2120 restore_live_registers(sasm, save_fpu_registers); 2120 restore_live_registers(sasm, save_fpu_registers);
2121 } 2121 }