equal
deleted
inserted
replaced
342 |
342 |
343 if (use_length && needs_range_check) { |
343 if (use_length && needs_range_check) { |
344 length.set_instruction(x->length()); |
344 length.set_instruction(x->length()); |
345 length.load_item(); |
345 length.load_item(); |
346 } |
346 } |
347 if (needs_store_check) { |
347 if (needs_store_check || x->check_boolean()) { |
348 value.load_item(); |
348 value.load_item(); |
349 } else { |
349 } else { |
350 value.load_for_store(x->elt_type()); |
350 value.load_for_store(x->elt_type()); |
351 } |
351 } |
352 |
352 |
387 if (obj_store) { |
387 if (obj_store) { |
388 // Needs GC write barriers. |
388 // Needs GC write barriers. |
389 pre_barrier(LIR_OprFact::address(array_addr), LIR_OprFact::illegalOpr /* pre_val */, |
389 pre_barrier(LIR_OprFact::address(array_addr), LIR_OprFact::illegalOpr /* pre_val */, |
390 true /* do_load */, false /* patch */, NULL); |
390 true /* do_load */, false /* patch */, NULL); |
391 } |
391 } |
392 __ move(value.result(), array_addr, null_check_info); |
392 LIR_Opr result = maybe_mask_boolean(x, array.result(), value.result(), null_check_info); |
|
393 __ move(result, array_addr, null_check_info); |
393 if (obj_store) { |
394 if (obj_store) { |
394 // Precise card mark |
395 // Precise card mark |
395 post_barrier(LIR_OprFact::address(array_addr), value.result()); |
396 post_barrier(LIR_OprFact::address(array_addr), value.result()); |
396 } |
397 } |
397 } |
398 } |