Mercurial > hg > graal-compiler
comparison src/cpu/x86/vm/c1_LIRGenerator_x86.cpp @ 360:5d254928c888
Merge
author | ysr |
---|---|
date | Wed, 27 Aug 2008 11:20:46 -0700 |
parents | 1ee8caae33af |
children | f8199438385b |
comparison
equal
deleted
inserted
replaced
341:d60e4e6d7f72 | 360:5d254928c888 |
---|---|
292 CodeEmitInfo* store_check_info = new CodeEmitInfo(range_check_info); | 292 CodeEmitInfo* store_check_info = new CodeEmitInfo(range_check_info); |
293 __ store_check(value.result(), array.result(), tmp1, tmp2, tmp3, store_check_info); | 293 __ store_check(value.result(), array.result(), tmp1, tmp2, tmp3, store_check_info); |
294 } | 294 } |
295 | 295 |
296 if (obj_store) { | 296 if (obj_store) { |
297 // Needs GC write barriers. | |
298 pre_barrier(LIR_OprFact::address(array_addr), false, NULL); | |
297 __ move(value.result(), array_addr, null_check_info); | 299 __ move(value.result(), array_addr, null_check_info); |
298 // Seems to be a precise | 300 // Seems to be a precise |
299 post_barrier(LIR_OprFact::address(array_addr), value.result()); | 301 post_barrier(LIR_OprFact::address(array_addr), value.result()); |
300 } else { | 302 } else { |
301 __ move(value.result(), array_addr, null_check_info); | 303 __ move(value.result(), array_addr, null_check_info); |
743 | 745 |
744 LIR_Opr addr = new_pointer_register(); | 746 LIR_Opr addr = new_pointer_register(); |
745 __ move(obj.result(), addr); | 747 __ move(obj.result(), addr); |
746 __ add(addr, offset.result(), addr); | 748 __ add(addr, offset.result(), addr); |
747 | 749 |
748 | 750 if (type == objectType) { // Write-barrier needed for Object fields. |
751 // Do the pre-write barrier, if any. | |
752 pre_barrier(addr, false, NULL); | |
753 } | |
749 | 754 |
750 LIR_Opr ill = LIR_OprFact::illegalOpr; // for convenience | 755 LIR_Opr ill = LIR_OprFact::illegalOpr; // for convenience |
751 if (type == objectType) | 756 if (type == objectType) |
752 __ cas_obj(addr, cmp.result(), val.result(), ill, ill); | 757 __ cas_obj(addr, cmp.result(), val.result(), ill, ill); |
753 else if (type == intType) | 758 else if (type == intType) |
1248 __ move(tmp, addr); | 1253 __ move(tmp, addr); |
1249 } else { | 1254 } else { |
1250 LIR_Address* addr = new LIR_Address(src, offset, type); | 1255 LIR_Address* addr = new LIR_Address(src, offset, type); |
1251 bool is_obj = (type == T_ARRAY || type == T_OBJECT); | 1256 bool is_obj = (type == T_ARRAY || type == T_OBJECT); |
1252 if (is_obj) { | 1257 if (is_obj) { |
1258 // Do the pre-write barrier, if any. | |
1259 pre_barrier(LIR_OprFact::address(addr), false, NULL); | |
1253 __ move(data, addr); | 1260 __ move(data, addr); |
1254 assert(src->is_register(), "must be register"); | 1261 assert(src->is_register(), "must be register"); |
1255 // Seems to be a precise address | 1262 // Seems to be a precise address |
1256 post_barrier(LIR_OprFact::address(addr), data); | 1263 post_barrier(LIR_OprFact::address(addr), data); |
1257 } else { | 1264 } else { |