--- old/src/cpu/aarch64/vm/c1_LIRGenerator_aarch64.cpp 2015-06-27 04:11:00.000000000 +0300 +++ new/src/cpu/aarch64/vm/c1_LIRGenerator_aarch64.cpp 2015-06-27 04:11:00.000000000 +0300 @@ -1334,6 +1334,17 @@ } } +LIR_Opr LIRGenerator::unpack_offset(LIR_Opr src, LIR_Opr off) { + LIR_Opr tmp = new_register(T_LONG); + LabelObj* Lcont = new LabelObj(); + __ move(off, tmp); + __ cmp(lir_cond_equal, src, LIR_OprFact::oopConst(NULL)); + __ branch(lir_cond_equal, T_OBJECT, Lcont->label()); + __ shift_right(tmp, Unsafe::offset_shift, tmp); + __ branch_destination(Lcont->label()); + return tmp; +} + void LIRGenerator::do_UnsafeGetAndSetObject(UnsafeGetAndSetObject* x) { BasicType type = x->basic_type(); LIRItem src(x->object(), this);