Mercurial > hg > truffle
comparison src/cpu/sparc/vm/methodHandles_sparc.cpp @ 2357:8033953d67ff
7012648: move JSR 292 to package java.lang.invoke and adjust names
Summary: package and class renaming only; delete unused methods and classes
Reviewed-by: twisti
author | jrose |
---|---|
date | Fri, 11 Mar 2011 22:34:57 -0800 |
parents | 1b4e6a5d98e0 |
children | 3ef1a1866a60 |
comparison
equal
deleted
inserted
replaced
2356:72dee110246f | 2357:8033953d67ff |
---|---|
110 tem = O0_mtype; // in case there is another indirection | 110 tem = O0_mtype; // in case there is another indirection |
111 } | 111 } |
112 } | 112 } |
113 | 113 |
114 // given the MethodType, find out where the MH argument is buried | 114 // given the MethodType, find out where the MH argument is buried |
115 __ load_heap_oop(Address(O0_mtype, __ delayed_value(java_dyn_MethodType::form_offset_in_bytes, O1_scratch)), O4_argslot); | 115 __ load_heap_oop(Address(O0_mtype, __ delayed_value(java_lang_invoke_MethodType::form_offset_in_bytes, O1_scratch)), O4_argslot); |
116 __ ldsw( Address(O4_argslot, __ delayed_value(java_dyn_MethodTypeForm::vmslots_offset_in_bytes, O1_scratch)), O4_argslot); | 116 __ ldsw( Address(O4_argslot, __ delayed_value(java_lang_invoke_MethodTypeForm::vmslots_offset_in_bytes, O1_scratch)), O4_argslot); |
117 __ add(Gargs, __ argument_offset(O4_argslot, 1), O4_argbase); | 117 __ add(Gargs, __ argument_offset(O4_argslot, 1), O4_argbase); |
118 // Note: argument_address uses its input as a scratch register! | 118 // Note: argument_address uses its input as a scratch register! |
119 __ ld_ptr(Address(O4_argbase, -Interpreter::stackElementSize), G3_method_handle); | 119 __ ld_ptr(Address(O4_argbase, -Interpreter::stackElementSize), G3_method_handle); |
120 | 120 |
121 trace_method_handle(_masm, "invokeExact"); | 121 trace_method_handle(_masm, "invokeExact"); |
139 // make room on the stack for another pointer: | 139 // make room on the stack for another pointer: |
140 insert_arg_slots(_masm, 2 * stack_move_unit(), _INSERT_REF_MASK, O4_argbase, O1_scratch, O2_scratch, O3_scratch); | 140 insert_arg_slots(_masm, 2 * stack_move_unit(), _INSERT_REF_MASK, O4_argbase, O1_scratch, O2_scratch, O3_scratch); |
141 // load up an adapter from the calling type (Java weaves this) | 141 // load up an adapter from the calling type (Java weaves this) |
142 Register O2_form = O2_scratch; | 142 Register O2_form = O2_scratch; |
143 Register O3_adapter = O3_scratch; | 143 Register O3_adapter = O3_scratch; |
144 __ load_heap_oop(Address(O0_mtype, __ delayed_value(java_dyn_MethodType::form_offset_in_bytes, O1_scratch)), O2_form); | 144 __ load_heap_oop(Address(O0_mtype, __ delayed_value(java_lang_invoke_MethodType::form_offset_in_bytes, O1_scratch)), O2_form); |
145 // load_heap_oop(Address(O2_form, __ delayed_value(java_dyn_MethodTypeForm::genericInvoker_offset_in_bytes, O1_scratch)), O3_adapter); | 145 // load_heap_oop(Address(O2_form, __ delayed_value(java_lang_invoke_MethodTypeForm::genericInvoker_offset_in_bytes, O1_scratch)), O3_adapter); |
146 // deal with old JDK versions: | 146 // deal with old JDK versions: |
147 __ add( Address(O2_form, __ delayed_value(java_dyn_MethodTypeForm::genericInvoker_offset_in_bytes, O1_scratch)), O3_adapter); | 147 __ add( Address(O2_form, __ delayed_value(java_lang_invoke_MethodTypeForm::genericInvoker_offset_in_bytes, O1_scratch)), O3_adapter); |
148 __ cmp(O3_adapter, O2_form); | 148 __ cmp(O3_adapter, O2_form); |
149 Label sorry_no_invoke_generic; | 149 Label sorry_no_invoke_generic; |
150 __ brx(Assembler::lessUnsigned, false, Assembler::pn, sorry_no_invoke_generic); | 150 __ brx(Assembler::lessUnsigned, false, Assembler::pn, sorry_no_invoke_generic); |
151 __ delayed()->nop(); | 151 __ delayed()->nop(); |
152 | 152 |
374 } | 374 } |
375 #endif // PRODUCT | 375 #endif // PRODUCT |
376 | 376 |
377 // which conversion op types are implemented here? | 377 // which conversion op types are implemented here? |
378 int MethodHandles::adapter_conversion_ops_supported_mask() { | 378 int MethodHandles::adapter_conversion_ops_supported_mask() { |
379 return ((1<<sun_dyn_AdapterMethodHandle::OP_RETYPE_ONLY) | 379 return ((1<<java_lang_invoke_AdapterMethodHandle::OP_RETYPE_ONLY) |
380 |(1<<sun_dyn_AdapterMethodHandle::OP_RETYPE_RAW) | 380 |(1<<java_lang_invoke_AdapterMethodHandle::OP_RETYPE_RAW) |
381 |(1<<sun_dyn_AdapterMethodHandle::OP_CHECK_CAST) | 381 |(1<<java_lang_invoke_AdapterMethodHandle::OP_CHECK_CAST) |
382 |(1<<sun_dyn_AdapterMethodHandle::OP_PRIM_TO_PRIM) | 382 |(1<<java_lang_invoke_AdapterMethodHandle::OP_PRIM_TO_PRIM) |
383 |(1<<sun_dyn_AdapterMethodHandle::OP_REF_TO_PRIM) | 383 |(1<<java_lang_invoke_AdapterMethodHandle::OP_REF_TO_PRIM) |
384 |(1<<sun_dyn_AdapterMethodHandle::OP_SWAP_ARGS) | 384 |(1<<java_lang_invoke_AdapterMethodHandle::OP_SWAP_ARGS) |
385 |(1<<sun_dyn_AdapterMethodHandle::OP_ROT_ARGS) | 385 |(1<<java_lang_invoke_AdapterMethodHandle::OP_ROT_ARGS) |
386 |(1<<sun_dyn_AdapterMethodHandle::OP_DUP_ARGS) | 386 |(1<<java_lang_invoke_AdapterMethodHandle::OP_DUP_ARGS) |
387 |(1<<sun_dyn_AdapterMethodHandle::OP_DROP_ARGS) | 387 |(1<<java_lang_invoke_AdapterMethodHandle::OP_DROP_ARGS) |
388 //|(1<<sun_dyn_AdapterMethodHandle::OP_SPREAD_ARGS) //BUG! | 388 //|(1<<java_lang_invoke_AdapterMethodHandle::OP_SPREAD_ARGS) //BUG! |
389 ); | 389 ); |
390 // FIXME: MethodHandlesTest gets a crash if we enable OP_SPREAD_ARGS. | 390 // FIXME: MethodHandlesTest gets a crash if we enable OP_SPREAD_ARGS. |
391 } | 391 } |
392 | 392 |
393 //------------------------------------------------------------------------------ | 393 //------------------------------------------------------------------------------ |
411 // Argument registers for _raise_exception. | 411 // Argument registers for _raise_exception. |
412 const Register O0_code = O0; | 412 const Register O0_code = O0; |
413 const Register O1_actual = O1; | 413 const Register O1_actual = O1; |
414 const Register O2_required = O2; | 414 const Register O2_required = O2; |
415 | 415 |
416 guarantee(java_dyn_MethodHandle::vmentry_offset_in_bytes() != 0, "must have offsets"); | 416 guarantee(java_lang_invoke_MethodHandle::vmentry_offset_in_bytes() != 0, "must have offsets"); |
417 | 417 |
418 // Some handy addresses: | 418 // Some handy addresses: |
419 Address G5_method_fie( G5_method, in_bytes(methodOopDesc::from_interpreted_offset())); | 419 Address G5_method_fie( G5_method, in_bytes(methodOopDesc::from_interpreted_offset())); |
420 Address G5_method_fce( G5_method, in_bytes(methodOopDesc::from_compiled_offset())); | 420 Address G5_method_fce( G5_method, in_bytes(methodOopDesc::from_compiled_offset())); |
421 | 421 |
422 Address G3_mh_vmtarget( G3_method_handle, java_dyn_MethodHandle::vmtarget_offset_in_bytes()); | 422 Address G3_mh_vmtarget( G3_method_handle, java_lang_invoke_MethodHandle::vmtarget_offset_in_bytes()); |
423 | 423 |
424 Address G3_dmh_vmindex( G3_method_handle, sun_dyn_DirectMethodHandle::vmindex_offset_in_bytes()); | 424 Address G3_dmh_vmindex( G3_method_handle, java_lang_invoke_DirectMethodHandle::vmindex_offset_in_bytes()); |
425 | 425 |
426 Address G3_bmh_vmargslot( G3_method_handle, sun_dyn_BoundMethodHandle::vmargslot_offset_in_bytes()); | 426 Address G3_bmh_vmargslot( G3_method_handle, java_lang_invoke_BoundMethodHandle::vmargslot_offset_in_bytes()); |
427 Address G3_bmh_argument( G3_method_handle, sun_dyn_BoundMethodHandle::argument_offset_in_bytes()); | 427 Address G3_bmh_argument( G3_method_handle, java_lang_invoke_BoundMethodHandle::argument_offset_in_bytes()); |
428 | 428 |
429 Address G3_amh_vmargslot( G3_method_handle, sun_dyn_AdapterMethodHandle::vmargslot_offset_in_bytes()); | 429 Address G3_amh_vmargslot( G3_method_handle, java_lang_invoke_AdapterMethodHandle::vmargslot_offset_in_bytes()); |
430 Address G3_amh_argument ( G3_method_handle, sun_dyn_AdapterMethodHandle::argument_offset_in_bytes()); | 430 Address G3_amh_argument ( G3_method_handle, java_lang_invoke_AdapterMethodHandle::argument_offset_in_bytes()); |
431 Address G3_amh_conversion(G3_method_handle, sun_dyn_AdapterMethodHandle::conversion_offset_in_bytes()); | 431 Address G3_amh_conversion(G3_method_handle, java_lang_invoke_AdapterMethodHandle::conversion_offset_in_bytes()); |
432 | 432 |
433 const int java_mirror_offset = klassOopDesc::klass_part_offset_in_bytes() + Klass::java_mirror_offset_in_bytes(); | 433 const int java_mirror_offset = klassOopDesc::klass_part_offset_in_bytes() + Klass::java_mirror_offset_in_bytes(); |
434 | 434 |
435 if (have_entry(ek)) { | 435 if (have_entry(ek)) { |
436 __ nop(); // empty stubs make SG sick | 436 __ nop(); // empty stubs make SG sick |
451 assert(raise_exception_method()->from_compiled_entry(), "method must be linked"); | 451 assert(raise_exception_method()->from_compiled_entry(), "method must be linked"); |
452 | 452 |
453 __ mov(O5_savedSP, SP); // Cut the stack back to where the caller started. | 453 __ mov(O5_savedSP, SP); // Cut the stack back to where the caller started. |
454 | 454 |
455 Label L_no_method; | 455 Label L_no_method; |
456 // FIXME: fill in _raise_exception_method with a suitable sun.dyn method | 456 // FIXME: fill in _raise_exception_method with a suitable java.lang.invoke method |
457 __ set(AddressLiteral((address) &_raise_exception_method), G5_method); | 457 __ set(AddressLiteral((address) &_raise_exception_method), G5_method); |
458 __ ld_ptr(Address(G5_method, 0), G5_method); | 458 __ ld_ptr(Address(G5_method, 0), G5_method); |
459 __ tst(G5_method); | 459 __ tst(G5_method); |
460 __ brx(Assembler::zero, false, Assembler::pn, L_no_method); | 460 __ brx(Assembler::zero, false, Assembler::pn, L_no_method); |
461 __ delayed()->nop(); | 461 __ delayed()->nop(); |