comparison src/share/vm/graal/graalCompiler.cpp @ 5003:5e6f1026a63e

fixes to vtable stub inlining: compute offset on demand, look out for interface methods
author Lukas Stadler <lukas.stadler@jku.at>
date Thu, 01 Mar 2012 15:36:35 +0100
parents b5dc2403c1e7
children bf63d72879aa
comparison
equal deleted inserted replaced
5002:6072d5da5c20 5003:5e6f1026a63e
272 HotSpotMethodResolved::set_codeSize(obj, method->code_size()); 272 HotSpotMethodResolved::set_codeSize(obj, method->code_size());
273 HotSpotMethodResolved::set_accessFlags(obj, method->access_flags().as_int()); 273 HotSpotMethodResolved::set_accessFlags(obj, method->access_flags().as_int());
274 HotSpotMethodResolved::set_maxLocals(obj, method->max_locals()); 274 HotSpotMethodResolved::set_maxLocals(obj, method->max_locals());
275 HotSpotMethodResolved::set_maxStackSize(obj, method->max_stack()); 275 HotSpotMethodResolved::set_maxStackSize(obj, method->max_stack());
276 HotSpotMethodResolved::set_canBeInlined(obj, !CompilerOracle::should_not_inline(method)); 276 HotSpotMethodResolved::set_canBeInlined(obj, !CompilerOracle::should_not_inline(method));
277
278 int vtable_entry_offset;
279 if (instanceKlass::cast(method->method_holder())->is_interface()) {
280 vtable_entry_offset = -1;
281 } else {
282 // get entry offset in words
283 vtable_entry_offset = instanceKlass::vtable_start_offset() + method->vtable_index() * vtableEntry::size();
284 // convert to bytes
285 vtable_entry_offset = vtable_entry_offset * wordSize + vtableEntry::method_offset_in_bytes();
286 }
287 HotSpotMethodResolved::set_vtableEntryOffset(obj, vtable_entry_offset);
288 277
289 method->set_graal_mirror(obj()); 278 method->set_graal_mirror(obj());
290 return obj; 279 return obj;
291 } 280 }
292 281