--- old/src/cpu/ppc/vm/interp_masm_ppc_64.cpp 2017-04-29 08:24:01.477782734 -0700 +++ new/src/cpu/ppc/vm/interp_masm_ppc_64.cpp 2017-04-29 08:24:01.329777193 -0700 @@ -1,6 +1,6 @@ /* * Copyright (c) 2003, 2017, Oracle and/or its affiliates. All rights reserved. - * Copyright (c) 2012, 2016 SAP SE. All rights reserved. + * Copyright (c) 2012, 2017 SAP SE. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -472,6 +472,25 @@ load_heap_oop(result, arrayOopDesc::base_offset_in_bytes(T_OBJECT), result, is_null); } +// load cpool->resolved_klass_at(index) +void InterpreterMacroAssembler::load_resolved_klass_at_offset(Register Rcpool, Register Roffset, Register Rklass) { + // int value = *(Rcpool->int_at_addr(which)); + // int resolved_klass_index = extract_low_short_from_int(value); + add(Roffset, Rcpool, Roffset); +#if defined(VM_LITTLE_ENDIAN) + lhz(Roffset, sizeof(ConstantPool), Roffset); // Roffset = resolved_klass_index +#else + lhz(Roffset, sizeof(ConstantPool) + 2, Roffset); // Roffset = resolved_klass_index +#endif + + ld(Rklass, ConstantPool::resolved_klasses_offset_in_bytes(), Rcpool); // Rklass = Rcpool->_resolved_klasses + + sldi(Roffset, Roffset, LogBytesPerWord); + addi(Roffset, Roffset, Array::base_offset_in_bytes()); + isync(); // Order load of instance Klass wrt. tags. + ldx(Rklass, Rklass, Roffset); +} + // Generate a subtype check: branch to ok_is_subtype if sub_klass is // a subtype of super_klass. Blows registers Rsub_klass, tmp1, tmp2. void InterpreterMacroAssembler::gen_subtype_check(Register Rsub_klass, Register Rsuper_klass, Register Rtmp1,