Mercurial > hg > truffle
comparison src/cpu/sparc/vm/interp_masm_sparc.cpp @ 11006:b88209cf98c0
Merge
author | kvn |
---|---|
date | Thu, 20 Jun 2013 16:08:11 -0700 |
parents | 46c544b8fbfc |
children | 6b0fd0964b87 8cdf3f43f63e |
comparison
equal
deleted
inserted
replaced
10994:9f9c0a163cc5 | 11006:b88209cf98c0 |
---|---|
1208 or3(mark_reg, markOopDesc::unlocked_value, mark_reg); | 1208 or3(mark_reg, markOopDesc::unlocked_value, mark_reg); |
1209 // initialize the box (Must happen before we update the object mark!) | 1209 // initialize the box (Must happen before we update the object mark!) |
1210 st_ptr(mark_reg, lock_addr, BasicLock::displaced_header_offset_in_bytes()); | 1210 st_ptr(mark_reg, lock_addr, BasicLock::displaced_header_offset_in_bytes()); |
1211 // compare and exchange object_addr, markOop | 1, stack address of basicLock | 1211 // compare and exchange object_addr, markOop | 1, stack address of basicLock |
1212 assert(mark_addr.disp() == 0, "cas must take a zero displacement"); | 1212 assert(mark_addr.disp() == 0, "cas must take a zero displacement"); |
1213 casx_under_lock(mark_addr.base(), mark_reg, temp_reg, | 1213 cas_ptr(mark_addr.base(), mark_reg, temp_reg); |
1214 (address)StubRoutines::Sparc::atomic_memory_operation_lock_addr()); | |
1215 | 1214 |
1216 // if the compare and exchange succeeded we are done (we saw an unlocked object) | 1215 // if the compare and exchange succeeded we are done (we saw an unlocked object) |
1217 cmp_and_brx_short(mark_reg, temp_reg, Assembler::equal, Assembler::pt, done); | 1216 cmp_and_brx_short(mark_reg, temp_reg, Assembler::equal, Assembler::pt, done); |
1218 | 1217 |
1219 // We did not see an unlocked object so try the fast recursive case | 1218 // We did not see an unlocked object so try the fast recursive case |
1289 | 1288 |
1290 // we have the displaced header in displaced_header_reg | 1289 // we have the displaced header in displaced_header_reg |
1291 // we expect to see the stack address of the basicLock in case the | 1290 // we expect to see the stack address of the basicLock in case the |
1292 // lock is still a light weight lock (lock_reg) | 1291 // lock is still a light weight lock (lock_reg) |
1293 assert(mark_addr.disp() == 0, "cas must take a zero displacement"); | 1292 assert(mark_addr.disp() == 0, "cas must take a zero displacement"); |
1294 casx_under_lock(mark_addr.base(), lock_reg, displaced_header_reg, | 1293 cas_ptr(mark_addr.base(), lock_reg, displaced_header_reg); |
1295 (address)StubRoutines::Sparc::atomic_memory_operation_lock_addr()); | |
1296 cmp(lock_reg, displaced_header_reg); | 1294 cmp(lock_reg, displaced_header_reg); |
1297 brx(Assembler::equal, true, Assembler::pn, done); | 1295 brx(Assembler::equal, true, Assembler::pn, done); |
1298 delayed()->st_ptr(G0, lockobj_addr); // free entry | 1296 delayed()->st_ptr(G0, lockobj_addr); // free entry |
1299 | 1297 |
1300 // The lock has been converted into a heavy lock and hence | 1298 // The lock has been converted into a heavy lock and hence |