comparison src/share/vm/c1/c1_LIRGenerator.cpp @ 2464:d86923d96dca

7034967: C1: assert(false) failed: error (assembler_sparc.cpp:2043) Summary: Fix -XX:+VerifyOops Reviewed-by: kvn, never
author iveresov
date Fri, 08 Apr 2011 17:03:31 -0700
parents 13bc79b5c9c8
children 0654ee04b214 5d046bf49ce7
comparison
equal deleted inserted replaced
2463:3f49d30f8184 2464:d86923d96dca
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);