3820 ciMethod* method = callee(); |
3820 ciMethod* method = callee(); |
3821 int vtable_index = method->vtable_index(); |
3821 int vtable_index = method->vtable_index(); |
3822 assert(vtable_index >= 0 || vtable_index == Method::nonvirtual_vtable_index, |
3822 assert(vtable_index >= 0 || vtable_index == Method::nonvirtual_vtable_index, |
3823 "bad index %d", vtable_index); |
3823 "bad index %d", vtable_index); |
3824 // Get the Method* out of the appropriate vtable entry. |
3824 // Get the Method* out of the appropriate vtable entry. |
3825 int entry_offset = (InstanceKlass::vtable_start_offset() + |
3825 int entry_offset = in_bytes(Klass::vtable_start_offset()) + |
3826 vtable_index*vtableEntry::size()) * wordSize + |
3826 vtable_index*vtableEntry::size_in_bytes() + |
3827 vtableEntry::method_offset_in_bytes(); |
3827 vtableEntry::method_offset_in_bytes(); |
3828 Node* entry_addr = basic_plus_adr(obj_klass, entry_offset); |
3828 Node* entry_addr = basic_plus_adr(obj_klass, entry_offset); |
3829 Node* target_call = make_load(NULL, entry_addr, TypePtr::NOTNULL, T_ADDRESS, MemNode::unordered); |
3829 Node* target_call = make_load(NULL, entry_addr, TypePtr::NOTNULL, T_ADDRESS, MemNode::unordered); |
3830 |
3830 |
3831 // Compare the target method with the expected method (e.g., Object.hashCode). |
3831 // Compare the target method with the expected method (e.g., Object.hashCode). |