Mercurial > hg > truffle
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); |