--- a/src/hotspot/cpu/aarch64/interp_masm_aarch64.cpp Wed Apr 18 15:57:19 2018 +0200
+++ b/src/hotspot/cpu/aarch64/interp_masm_aarch64.cpp Wed Apr 18 10:39:40 2018 -0400
@@ -265,22 +265,21 @@
// Load object from cpool->resolved_references(index)
void InterpreterMacroAssembler::load_resolved_reference_at_index(
- Register result, Register index) {
+ Register result, Register index, Register tmp) {
assert_different_registers(result, index);
// convert from field index to resolved_references() index and from
// word index to byte offset. Since this is a java object, it can be compressed
- Register tmp = index; // reuse
- lslw(tmp, tmp, LogBytesPerHeapOop);
+ lslw(index, index, LogBytesPerHeapOop);
get_constant_pool(result);
// load pointer for resolved_references[] objArray
ldr(result, Address(result, ConstantPool::cache_offset_in_bytes()));
ldr(result, Address(result, ConstantPoolCache::resolved_references_offset_in_bytes()));
- resolve_oop_handle(result);
+ resolve_oop_handle(result, tmp);
// Add in the index
- add(result, result, tmp);
+ add(result, result, index);
BarrierSetAssembler *bs = BarrierSet::barrier_set()->barrier_set_assembler();
- bs->load_at(this, IN_HEAP, T_OBJECT, result, Address(result, arrayOopDesc::base_offset_in_bytes(T_OBJECT)), /*tmp1*/ noreg, /*tmp_thread*/ noreg);
+ bs->load_at(this, IN_HEAP, T_OBJECT, result, Address(result, arrayOopDesc::base_offset_in_bytes(T_OBJECT)), tmp, /*tmp_thread*/ noreg);
}
void InterpreterMacroAssembler::load_resolved_klass_at_offset(