Mercurial > hg > truffle
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 } |