< prev index next >

src/cpu/ppc/vm/templateTable_ppc_64.cpp

Print this page

        

*** 3284,3296 **** assert_different_registers(Rrecv_klass, Rtemp, Rret); const Register Rtarget_method = Rindex; // Get target method & entry point. ! const int base = InstanceKlass::vtable_start_offset() * wordSize; // Calc vtable addr scale the vtable index by 8. ! __ sldi(Rindex, Rindex, exact_log2(vtableEntry::size() * wordSize)); // Load target. __ addi(Rrecv_klass, Rrecv_klass, base + vtableEntry::method_offset_in_bytes()); __ ldx(Rtarget_method, Rindex, Rrecv_klass); // Argument and return type profiling. __ profile_arguments_type(Rtarget_method, Rrecv_klass /* scratch1 */, Rtemp /* scratch2 */, true); --- 3284,3296 ---- assert_different_registers(Rrecv_klass, Rtemp, Rret); const Register Rtarget_method = Rindex; // Get target method & entry point. ! const int base = in_bytes(InstanceKlass::vtable_start_offset()); // Calc vtable addr scale the vtable index by 8. ! __ sldi(Rindex, Rindex, exact_log2(vtableEntry::size_in_bytes())); // Load target. __ addi(Rrecv_klass, Rrecv_klass, base + vtableEntry::method_offset_in_bytes()); __ ldx(Rtarget_method, Rindex, Rrecv_klass); // Argument and return type profiling. __ profile_arguments_type(Rtarget_method, Rrecv_klass /* scratch1 */, Rtemp /* scratch2 */, true);
< prev index next >