Mercurial > hg > graal-compiler
comparison src/cpu/sparc/vm/sparc.ad @ 20290:85c339200299
8029443: 'assert(klass->is_loader_alive(_is_alive)) failed: must be alive' during VM_CollectForMetadataAllocation
Summary: Added missing metadata relocation to 'loadConP_no_oop_cheap' on Sparc if the pointer is referring to a Klass. Added jtreg test.
Reviewed-by: kvn
author | thartmann |
---|---|
date | Wed, 06 Aug 2014 08:47:40 +0200 |
parents | 0bf37f737702 |
children | 318cc6fdae90 |
comparison
equal
deleted
inserted
replaced
20289:69ea58782b1a | 20290:85c339200299 |
---|---|
6182 instruct loadConP_no_oop_cheap(iRegP dst, immP_no_oop_cheap con) %{ | 6182 instruct loadConP_no_oop_cheap(iRegP dst, immP_no_oop_cheap con) %{ |
6183 match(Set dst con); | 6183 match(Set dst con); |
6184 ins_cost(DEFAULT_COST * 3/2); | 6184 ins_cost(DEFAULT_COST * 3/2); |
6185 format %{ "SET $con,$dst\t! non-oop ptr" %} | 6185 format %{ "SET $con,$dst\t! non-oop ptr" %} |
6186 ins_encode %{ | 6186 ins_encode %{ |
6187 __ set($con$$constant, $dst$$Register); | 6187 if (_opnds[1]->constant_reloc() == relocInfo::metadata_type) { |
6188 __ set_metadata_constant((Metadata*)$con$$constant, $dst$$Register); | |
6189 } else { | |
6190 __ set($con$$constant, $dst$$Register); | |
6191 } | |
6188 %} | 6192 %} |
6189 ins_pipe(loadConP); | 6193 ins_pipe(loadConP); |
6190 %} | 6194 %} |
6191 #endif // _LP64 | 6195 #endif // _LP64 |
6192 | 6196 |