1454 } |
1454 } |
1455 assert(new_val->is_register(), "must be a register at this point"); |
1455 assert(new_val->is_register(), "must be a register at this point"); |
1456 |
1456 |
1457 if (addr->is_address()) { |
1457 if (addr->is_address()) { |
1458 LIR_Address* address = addr->as_address_ptr(); |
1458 LIR_Address* address = addr->as_address_ptr(); |
1459 LIR_Opr ptr = new_register(T_OBJECT); |
1459 LIR_Opr ptr = new_pointer_register(); |
1460 if (!address->index()->is_valid() && address->disp() == 0) { |
1460 if (!address->index()->is_valid() && address->disp() == 0) { |
1461 __ move(address->base(), ptr); |
1461 __ move(address->base(), ptr); |
1462 } else { |
1462 } else { |
1463 assert(address->disp() != max_jint, "lea doesn't support patched addresses!"); |
1463 assert(address->disp() != max_jint, "lea doesn't support patched addresses!"); |
1464 __ leal(addr, ptr); |
1464 __ leal(addr, ptr); |
1506 |
1506 |
1507 assert(sizeof(*((CardTableModRefBS*)_bs)->byte_map_base) == sizeof(jbyte), "adjust this code"); |
1507 assert(sizeof(*((CardTableModRefBS*)_bs)->byte_map_base) == sizeof(jbyte), "adjust this code"); |
1508 LIR_Const* card_table_base = new LIR_Const(((CardTableModRefBS*)_bs)->byte_map_base); |
1508 LIR_Const* card_table_base = new LIR_Const(((CardTableModRefBS*)_bs)->byte_map_base); |
1509 if (addr->is_address()) { |
1509 if (addr->is_address()) { |
1510 LIR_Address* address = addr->as_address_ptr(); |
1510 LIR_Address* address = addr->as_address_ptr(); |
1511 LIR_Opr ptr = new_register(T_OBJECT); |
1511 // ptr cannot be an object because we use this barrier for array card marks |
|
1512 // and addr can point in the middle of an array. |
|
1513 LIR_Opr ptr = new_pointer_register(); |
1512 if (!address->index()->is_valid() && address->disp() == 0) { |
1514 if (!address->index()->is_valid() && address->disp() == 0) { |
1513 __ move(address->base(), ptr); |
1515 __ move(address->base(), ptr); |
1514 } else { |
1516 } else { |
1515 assert(address->disp() != max_jint, "lea doesn't support patched addresses!"); |
1517 assert(address->disp() != max_jint, "lea doesn't support patched addresses!"); |
1516 __ leal(addr, ptr); |
1518 __ leal(addr, ptr); |