< prev index next >
src/hotspot/cpu/ppc/c1_LIRAssembler_ppc.cpp
Print this page
rev 56646 : 8231757: [ppc] Fix VerifyOops. Errors show since 8231058.
Summary: Also make the checks print the wrong value and where a failure occurred.
@@ -741,14 +741,15 @@
case T_OBJECT:
{
if (UseCompressedOops && !wide) {
// Encoding done in caller
__ stw(from_reg->as_register(), offset, base);
+ __ verify_coop(from_reg->as_register(), FILE_AND_LINE);
} else {
__ std(from_reg->as_register(), offset, base);
+ __ verify_oop(from_reg->as_register(), FILE_AND_LINE);
}
- __ verify_oop(from_reg->as_register());
break;
}
case T_FLOAT : __ stfs(from_reg->as_float_reg(), offset, base); break;
case T_DOUBLE: __ stfd(from_reg->as_double_reg(), offset, base); break;
default : ShouldNotReachHere();
@@ -781,14 +782,15 @@
case T_OBJECT:
{
if (UseCompressedOops && !wide) {
// Encoding done in caller.
__ stwx(from_reg->as_register(), base, disp);
+ __ verify_coop(from_reg->as_register(), FILE_AND_LINE); // kills R0
} else {
__ stdx(from_reg->as_register(), base, disp);
+ __ verify_oop(from_reg->as_register(), FILE_AND_LINE); // kills R0
}
- __ verify_oop(from_reg->as_register()); // kills R0
break;
}
case T_FLOAT : __ stfsx(from_reg->as_float_reg(), base, disp); break;
case T_DOUBLE: __ stfdx(from_reg->as_double_reg(), base, disp); break;
default : ShouldNotReachHere();
@@ -829,11 +831,13 @@
__ lwz(to_reg->as_register(), offset, base);
__ decode_heap_oop(to_reg->as_register());
} else {
__ ld(to_reg->as_register(), offset, base);
}
- __ verify_oop(to_reg->as_register());
+ // Emitting oop verification here makes the code exceed the
+ // allowed size for PatchingStubs.
+ // __ verify_oop(to_reg->as_register(), FILE_AND_LINE);
break;
}
case T_FLOAT: __ lfs(to_reg->as_float_reg(), offset, base); break;
case T_DOUBLE: __ lfd(to_reg->as_double_reg(), offset, base); break;
default : ShouldNotReachHere();
@@ -860,11 +864,13 @@
__ lwzx(to_reg->as_register(), base, disp);
__ decode_heap_oop(to_reg->as_register());
} else {
__ ldx(to_reg->as_register(), base, disp);
}
- __ verify_oop(to_reg->as_register());
+ // Emitting oop verification here makes the code exceed the
+ // allowed size for PatchingStubs.
+ //__ verify_oop(to_reg->as_register(), FILE_AND_LINE);
break;
}
case T_FLOAT: __ lfsx(to_reg->as_float_reg() , base, disp); break;
case T_DOUBLE: __ lfdx(to_reg->as_double_reg(), base, disp); break;
case T_LONG :
@@ -1139,11 +1145,11 @@
if (info != NULL && needs_explicit_null_check) {
explicit_null_check(src, info);
}
if (addr->base()->type() == T_OBJECT) {
- __ verify_oop(src);
+ __ verify_oop(src, FILE_AND_LINE);
}
PatchingStub* patch = NULL;
if (needs_patching) {
patch = new PatchingStub(_masm, PatchingStub::access_field_id);
@@ -1236,11 +1242,11 @@
}
} else {
ShouldNotReachHere();
}
if (is_reference_type(to_reg->type())) {
- __ verify_oop(to_reg->as_register());
+ __ verify_oop(to_reg->as_register(), FILE_AND_LINE);
}
}
void LIR_Assembler::reg2mem(LIR_Opr from_reg, LIR_Opr dest, BasicType type,
@@ -1263,11 +1269,11 @@
if (info != NULL && needs_explicit_null_check) {
explicit_null_check(src, info);
}
if (addr->base()->is_oop_register()) {
- __ verify_oop(src);
+ __ verify_oop(src, FILE_AND_LINE);
}
PatchingStub* patch = NULL;
if (needs_patching) {
patch = new PatchingStub(_masm, PatchingStub::access_field_id);
@@ -2306,11 +2312,11 @@
op->object_size(),
op->klass()->as_register(),
*op->stub()->entry());
__ bind(*op->stub()->continuation());
- __ verify_oop(op->obj()->as_register());
+ __ verify_oop(op->obj()->as_register(), FILE_AND_LINE);
}
void LIR_Assembler::emit_alloc_array(LIR_OpAllocArray* op) {
LP64_ONLY( __ extsw(op->len()->as_register(), op->len()->as_register()); )
@@ -2531,11 +2537,11 @@
Register k_RInfo = op->tmp1()->as_register();
Register klass_RInfo = op->tmp2()->as_register();
Register Rtmp1 = op->tmp3()->as_register();
bool should_profile = op->should_profile();
- __ verify_oop(value);
+ __ verify_oop(value, FILE_AND_LINE);
CodeStub* stub = op->stub();
// Check if it needs to be profiled.
ciMethodData* md = NULL;
ciProfileData* data = NULL;
int mdo_offset_bias = 0;
@@ -3084,11 +3090,11 @@
bool do_update = !TypeEntries::is_type_unknown(current_klass) && !exact_klass_set;
assert(do_null || do_update, "why are we here?");
assert(!TypeEntries::was_null_seen(current_klass) || do_update, "why are we here?");
- __ verify_oop(obj);
+ __ verify_oop(obj, FILE_AND_LINE);
if (do_null) {
if (!TypeEntries::was_null_seen(current_klass)) {
__ cmpdi(CCR0, obj, 0);
__ bne(CCR0, Lupdate);
< prev index next >