src/share/vm/c1/c1_Runtime1.cpp
Print this page
*** 1076,1093 ****
#endif
if (do_patch) {
// replace instructions
// first replace the tail, then the call
#ifdef ARM
! if(load_klass_or_mirror_patch_id && !VM_Version::supports_movw()) {
nmethod* nm = CodeCache::find_nmethod(instr_pc);
address addr = NULL;
assert(nm != NULL, "invalid nmethod_pc");
RelocIterator mds(nm, copy_buff, copy_buff + 1);
while (mds.next()) {
if (mds.type() == relocInfo::oop_type) {
! assert(stub_id == Runtime1::load_mirror_patching_id, "wrong stub id");
oop_Relocation* r = mds.oop_reloc();
addr = (address)r->oop_addr();
break;
} else if (mds.type() == relocInfo::metadata_type) {
assert(stub_id == Runtime1::load_klass_patching_id, "wrong stub id");
--- 1076,1096 ----
#endif
if (do_patch) {
// replace instructions
// first replace the tail, then the call
#ifdef ARM
! if((load_klass_or_mirror_patch_id ||
! stub_id == Runtime1::load_appendix_patching_id) &&
! !VM_Version::supports_movw()) {
nmethod* nm = CodeCache::find_nmethod(instr_pc);
address addr = NULL;
assert(nm != NULL, "invalid nmethod_pc");
RelocIterator mds(nm, copy_buff, copy_buff + 1);
while (mds.next()) {
if (mds.type() == relocInfo::oop_type) {
! assert(stub_id == Runtime1::load_mirror_patching_id ||
! stub_id == Runtime1::load_appendix_patching_id, "wrong stub id");
oop_Relocation* r = mds.oop_reloc();
addr = (address)r->oop_addr();
break;
} else if (mds.type() == relocInfo::metadata_type) {
assert(stub_id == Runtime1::load_klass_patching_id, "wrong stub id");
*** 1095,1105 ****
addr = (address)r->metadata_addr();
break;
}
}
assert(addr != NULL, "metadata relocation must exist");
- copy_buff -= *byte_count;
NativeMovConstReg* n_copy2 = nativeMovConstReg_at(copy_buff);
n_copy2->set_pc_relative_offset(addr, instr_pc);
}
#endif
--- 1098,1107 ----