src/cpu/sparc/vm/methodHandles_sparc.cpp
Index Unified diffs Context diffs Sdiffs Patch New Old Previous File Next File 7009361 Sdiff src/cpu/sparc/vm

src/cpu/sparc/vm/methodHandles_sparc.cpp

Print this page




 333     __ brx(Assembler::greaterEqual, false, Assembler::pt, loop);
 334     __ delayed()->nop();  // FILLME
 335   }
 336 
 337   // Now move the argslot up, to point to the just-copied block.
 338   __ add(Gargs, offset, Gargs);
 339   // And adjust the argslot address to point at the deletion point.
 340   __ add(argslot_reg, offset, argslot_reg);
 341 
 342   // Keep the stack pointer 2*wordSize aligned.
 343   const int TwoWordAlignmentMask = right_n_bits(LogBytesPerWord + 1);
 344   RegisterOrConstant masked_offset = __ regcon_andn_ptr(offset, TwoWordAlignmentMask, temp_reg);
 345   __ add(SP, masked_offset, SP);
 346   BLOCK_COMMENT("} remove_arg_slots");
 347 }
 348 
 349 
 350 #ifndef PRODUCT
 351 extern "C" void print_method_handle(oop mh);
 352 void trace_method_handle_stub(const char* adaptername,
 353                               oopDesc* mh) {
 354   printf("MH %s mh="INTPTR_FORMAT"\n", adaptername, (intptr_t) mh);

 355   print_method_handle(mh);
 356 }
 357 void MethodHandles::trace_method_handle(MacroAssembler* _masm, const char* adaptername) {
 358   if (!TraceMethodHandles)  return;
 359   BLOCK_COMMENT("trace_method_handle {");
 360   // save: Gargs, O5_savedSP
 361   __ save_frame(16);
 362   __ set((intptr_t) adaptername, O0);
 363   __ mov(G3_method_handle, O1);

 364   __ mov(G3_method_handle, L3);
 365   __ mov(Gargs, L4);
 366   __ mov(G5_method_type, L5);
 367   __ call_VM_leaf(L7, CAST_FROM_FN_PTR(address, trace_method_handle_stub));
 368 
 369   __ mov(L3, G3_method_handle);
 370   __ mov(L4, Gargs);
 371   __ mov(L5, G5_method_type);
 372   __ restore();
 373   BLOCK_COMMENT("} trace_method_handle");
 374 }
 375 #endif // PRODUCT
 376 
 377 // which conversion op types are implemented here?
 378 int MethodHandles::adapter_conversion_ops_supported_mask() {
 379   return ((1<<java_lang_invoke_AdapterMethodHandle::OP_RETYPE_ONLY)
 380          |(1<<java_lang_invoke_AdapterMethodHandle::OP_RETYPE_RAW)
 381          |(1<<java_lang_invoke_AdapterMethodHandle::OP_CHECK_CAST)
 382          |(1<<java_lang_invoke_AdapterMethodHandle::OP_PRIM_TO_PRIM)
 383          |(1<<java_lang_invoke_AdapterMethodHandle::OP_REF_TO_PRIM)




 333     __ brx(Assembler::greaterEqual, false, Assembler::pt, loop);
 334     __ delayed()->nop();  // FILLME
 335   }
 336 
 337   // Now move the argslot up, to point to the just-copied block.
 338   __ add(Gargs, offset, Gargs);
 339   // And adjust the argslot address to point at the deletion point.
 340   __ add(argslot_reg, offset, argslot_reg);
 341 
 342   // Keep the stack pointer 2*wordSize aligned.
 343   const int TwoWordAlignmentMask = right_n_bits(LogBytesPerWord + 1);
 344   RegisterOrConstant masked_offset = __ regcon_andn_ptr(offset, TwoWordAlignmentMask, temp_reg);
 345   __ add(SP, masked_offset, SP);
 346   BLOCK_COMMENT("} remove_arg_slots");
 347 }
 348 
 349 
 350 #ifndef PRODUCT
 351 extern "C" void print_method_handle(oop mh);
 352 void trace_method_handle_stub(const char* adaptername,
 353                               oopDesc* mh,
 354                               intptr_t* saved_sp) {
 355   tty->print_cr("MH %s mh="INTPTR_FORMAT " saved_sp=" INTPTR_FORMAT, adaptername, (intptr_t) mh, saved_sp);
 356   print_method_handle(mh);
 357 }
 358 void MethodHandles::trace_method_handle(MacroAssembler* _masm, const char* adaptername) {
 359   if (!TraceMethodHandles)  return;
 360   BLOCK_COMMENT("trace_method_handle {");
 361   // save: Gargs, O5_savedSP
 362   __ save_frame(16);
 363   __ set((intptr_t) adaptername, O0);
 364   __ mov(G3_method_handle, O1);
 365   __ mov(I5_savedSP, O2);
 366   __ mov(G3_method_handle, L3);
 367   __ mov(Gargs, L4);
 368   __ mov(G5_method_type, L5);
 369   __ call_VM_leaf(L7, CAST_FROM_FN_PTR(address, trace_method_handle_stub));
 370 
 371   __ mov(L3, G3_method_handle);
 372   __ mov(L4, Gargs);
 373   __ mov(L5, G5_method_type);
 374   __ restore();
 375   BLOCK_COMMENT("} trace_method_handle");
 376 }
 377 #endif // PRODUCT
 378 
 379 // which conversion op types are implemented here?
 380 int MethodHandles::adapter_conversion_ops_supported_mask() {
 381   return ((1<<java_lang_invoke_AdapterMethodHandle::OP_RETYPE_ONLY)
 382          |(1<<java_lang_invoke_AdapterMethodHandle::OP_RETYPE_RAW)
 383          |(1<<java_lang_invoke_AdapterMethodHandle::OP_CHECK_CAST)
 384          |(1<<java_lang_invoke_AdapterMethodHandle::OP_PRIM_TO_PRIM)
 385          |(1<<java_lang_invoke_AdapterMethodHandle::OP_REF_TO_PRIM)


src/cpu/sparc/vm/methodHandles_sparc.cpp
Index Unified diffs Context diffs Sdiffs Patch New Old Previous File Next File