src/cpu/x86/vm/templateTable_x86_32.cpp
Index Unified diffs Context diffs Sdiffs Wdiffs Patch New Old Previous File Next File 6829192 Sdiff src/cpu/x86/vm

src/cpu/x86/vm/templateTable_x86_32.cpp

Print this page
rev 1021 : 6858164: invokedynamic code needs some cleanup (post-6655638)
Note: The bug ID for this change set was erroneously used to call for review of 6815692.
Summary: Fix several crashers, remove needless paths for boxed-style bootstrap method call, refactor & simplify APIs for rewriter constantPoolOop, remove sun.dyn.CallSiteImpl
Reviewed-by: ?
rev 1022 : 6829192: JSR 292 needs to support 64-bit x86
Summary: changes for method handles and invokedynamic
Reviewed-by: ?, ?


3129                      InterpreterRuntime::throw_IncompatibleClassChangeError));
3130     // the call_VM checks for exception, so we should never return here.
3131     __ should_not_reach_here();
3132     return;
3133   }
3134 
3135   prepare_invoke(rax, rbx, byte_no);
3136 
3137   // rax: CallSite object (f1)
3138   // rbx: unused (f2)
3139   // rcx: receiver address
3140   // rdx: flags (unused)
3141 
3142   if (ProfileInterpreter) {
3143     Label L;
3144     // %%% should make a type profile for any invokedynamic that takes a ref argument
3145     // profile this call
3146     __ profile_call(rsi);
3147   }
3148 
3149   Label handle_unlinked_site;
3150   __ movptr(rcx, Address(rax, __ delayed_value(java_dyn_CallSite::target_offset_in_bytes, rcx)));
3151   __ null_check(rcx);
3152   __ prepare_to_jump_from_interpreted();
3153   __ jump_to_method_handle_entry(rcx, rdx);
3154 }
3155 
3156 //----------------------------------------------------------------------------------------------------
3157 // Allocation
3158 
3159 void TemplateTable::_new() {
3160   transition(vtos, atos);
3161   __ get_unsigned_2_byte_index_at_bcp(rdx, 1);
3162   Label slow_case;
3163   Label done;
3164   Label initialize_header;
3165   Label initialize_object;  // including clearing the fields
3166   Label allocate_shared;
3167 
3168   __ get_cpool_and_tags(rcx, rax);
3169   // get instanceKlass




3129                      InterpreterRuntime::throw_IncompatibleClassChangeError));
3130     // the call_VM checks for exception, so we should never return here.
3131     __ should_not_reach_here();
3132     return;
3133   }
3134 
3135   prepare_invoke(rax, rbx, byte_no);
3136 
3137   // rax: CallSite object (f1)
3138   // rbx: unused (f2)
3139   // rcx: receiver address
3140   // rdx: flags (unused)
3141 
3142   if (ProfileInterpreter) {
3143     Label L;
3144     // %%% should make a type profile for any invokedynamic that takes a ref argument
3145     // profile this call
3146     __ profile_call(rsi);
3147   }
3148 

3149   __ movptr(rcx, Address(rax, __ delayed_value(java_dyn_CallSite::target_offset_in_bytes, rcx)));
3150   __ null_check(rcx);
3151   __ prepare_to_jump_from_interpreted();
3152   __ jump_to_method_handle_entry(rcx, rdx);
3153 }
3154 
3155 //----------------------------------------------------------------------------------------------------
3156 // Allocation
3157 
3158 void TemplateTable::_new() {
3159   transition(vtos, atos);
3160   __ get_unsigned_2_byte_index_at_bcp(rdx, 1);
3161   Label slow_case;
3162   Label done;
3163   Label initialize_header;
3164   Label initialize_object;  // including clearing the fields
3165   Label allocate_shared;
3166 
3167   __ get_cpool_and_tags(rcx, rax);
3168   // get instanceKlass


src/cpu/x86/vm/templateTable_x86_32.cpp
Index Unified diffs Context diffs Sdiffs Wdiffs Patch New Old Previous File Next File