Mercurial > hg > truffle
comparison src/cpu/x86/vm/methodHandles_x86.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 | 2e038ad0c1d0 |
comparison
equal
deleted
inserted
replaced
2356:72dee110246f | 2357:8033953d67ff |
---|---|
123 tem = rax_mtype; // in case there is another indirection | 123 tem = rax_mtype; // in case there is another indirection |
124 } | 124 } |
125 } | 125 } |
126 | 126 |
127 // given the MethodType, find out where the MH argument is buried | 127 // given the MethodType, find out where the MH argument is buried |
128 __ load_heap_oop(rdx_temp, Address(rax_mtype, __ delayed_value(java_dyn_MethodType::form_offset_in_bytes, rdi_temp))); | 128 __ load_heap_oop(rdx_temp, Address(rax_mtype, __ delayed_value(java_lang_invoke_MethodType::form_offset_in_bytes, rdi_temp))); |
129 Register rdx_vmslots = rdx_temp; | 129 Register rdx_vmslots = rdx_temp; |
130 __ movl(rdx_vmslots, Address(rdx_temp, __ delayed_value(java_dyn_MethodTypeForm::vmslots_offset_in_bytes, rdi_temp))); | 130 __ movl(rdx_vmslots, Address(rdx_temp, __ delayed_value(java_lang_invoke_MethodTypeForm::vmslots_offset_in_bytes, rdi_temp))); |
131 __ movptr(rcx_recv, __ argument_address(rdx_vmslots)); | 131 __ movptr(rcx_recv, __ argument_address(rdx_vmslots)); |
132 | 132 |
133 trace_method_handle(_masm, "invokeExact"); | 133 trace_method_handle(_masm, "invokeExact"); |
134 | 134 |
135 __ check_method_handle_type(rax_mtype, rcx_recv, rdi_temp, wrong_method_type); | 135 __ check_method_handle_type(rax_mtype, rcx_recv, rdi_temp, wrong_method_type); |
152 __ lea(rcx_argslot, __ argument_address(rdx_vmslots, 1)); | 152 __ lea(rcx_argslot, __ argument_address(rdx_vmslots, 1)); |
153 insert_arg_slots(_masm, 2 * stack_move_unit(), _INSERT_REF_MASK, | 153 insert_arg_slots(_masm, 2 * stack_move_unit(), _INSERT_REF_MASK, |
154 rcx_argslot, rbx_temp, rdx_temp); | 154 rcx_argslot, rbx_temp, rdx_temp); |
155 | 155 |
156 // load up an adapter from the calling type (Java weaves this) | 156 // load up an adapter from the calling type (Java weaves this) |
157 __ load_heap_oop(rdx_temp, Address(rax_mtype, __ delayed_value(java_dyn_MethodType::form_offset_in_bytes, rdi_temp))); | 157 __ load_heap_oop(rdx_temp, Address(rax_mtype, __ delayed_value(java_lang_invoke_MethodType::form_offset_in_bytes, rdi_temp))); |
158 Register rdx_adapter = rdx_temp; | 158 Register rdx_adapter = rdx_temp; |
159 // __ load_heap_oop(rdx_adapter, Address(rdx_temp, java_dyn_MethodTypeForm::genericInvoker_offset_in_bytes())); | 159 // __ load_heap_oop(rdx_adapter, Address(rdx_temp, java_lang_invoke_MethodTypeForm::genericInvoker_offset_in_bytes())); |
160 // deal with old JDK versions: | 160 // deal with old JDK versions: |
161 __ lea(rdi_temp, Address(rdx_temp, __ delayed_value(java_dyn_MethodTypeForm::genericInvoker_offset_in_bytes, rdi_temp))); | 161 __ lea(rdi_temp, Address(rdx_temp, __ delayed_value(java_lang_invoke_MethodTypeForm::genericInvoker_offset_in_bytes, rdi_temp))); |
162 __ cmpptr(rdi_temp, rdx_temp); | 162 __ cmpptr(rdi_temp, rdx_temp); |
163 Label sorry_no_invoke_generic; | 163 Label sorry_no_invoke_generic; |
164 __ jcc(Assembler::below, sorry_no_invoke_generic); | 164 __ jcc(Assembler::below, sorry_no_invoke_generic); |
165 | 165 |
166 __ load_heap_oop(rdx_adapter, Address(rdi_temp, 0)); | 166 __ load_heap_oop(rdx_adapter, Address(rdi_temp, 0)); |
369 } | 369 } |
370 #endif //PRODUCT | 370 #endif //PRODUCT |
371 | 371 |
372 // which conversion op types are implemented here? | 372 // which conversion op types are implemented here? |
373 int MethodHandles::adapter_conversion_ops_supported_mask() { | 373 int MethodHandles::adapter_conversion_ops_supported_mask() { |
374 return ((1<<sun_dyn_AdapterMethodHandle::OP_RETYPE_ONLY) | 374 return ((1<<java_lang_invoke_AdapterMethodHandle::OP_RETYPE_ONLY) |
375 |(1<<sun_dyn_AdapterMethodHandle::OP_RETYPE_RAW) | 375 |(1<<java_lang_invoke_AdapterMethodHandle::OP_RETYPE_RAW) |
376 |(1<<sun_dyn_AdapterMethodHandle::OP_CHECK_CAST) | 376 |(1<<java_lang_invoke_AdapterMethodHandle::OP_CHECK_CAST) |
377 |(1<<sun_dyn_AdapterMethodHandle::OP_PRIM_TO_PRIM) | 377 |(1<<java_lang_invoke_AdapterMethodHandle::OP_PRIM_TO_PRIM) |
378 |(1<<sun_dyn_AdapterMethodHandle::OP_REF_TO_PRIM) | 378 |(1<<java_lang_invoke_AdapterMethodHandle::OP_REF_TO_PRIM) |
379 |(1<<sun_dyn_AdapterMethodHandle::OP_SWAP_ARGS) | 379 |(1<<java_lang_invoke_AdapterMethodHandle::OP_SWAP_ARGS) |
380 |(1<<sun_dyn_AdapterMethodHandle::OP_ROT_ARGS) | 380 |(1<<java_lang_invoke_AdapterMethodHandle::OP_ROT_ARGS) |
381 |(1<<sun_dyn_AdapterMethodHandle::OP_DUP_ARGS) | 381 |(1<<java_lang_invoke_AdapterMethodHandle::OP_DUP_ARGS) |
382 |(1<<sun_dyn_AdapterMethodHandle::OP_DROP_ARGS) | 382 |(1<<java_lang_invoke_AdapterMethodHandle::OP_DROP_ARGS) |
383 //|(1<<sun_dyn_AdapterMethodHandle::OP_SPREAD_ARGS) //BUG! | 383 //|(1<<java_lang_invoke_AdapterMethodHandle::OP_SPREAD_ARGS) //BUG! |
384 ); | 384 ); |
385 // FIXME: MethodHandlesTest gets a crash if we enable OP_SPREAD_ARGS. | 385 // FIXME: MethodHandlesTest gets a crash if we enable OP_SPREAD_ARGS. |
386 } | 386 } |
387 | 387 |
388 //------------------------------------------------------------------------------ | 388 //------------------------------------------------------------------------------ |
413 const Register rarg0_code = LP64_ONLY(j_rarg0) NOT_LP64(rcx); | 413 const Register rarg0_code = LP64_ONLY(j_rarg0) NOT_LP64(rcx); |
414 const Register rarg1_actual = LP64_ONLY(j_rarg1) NOT_LP64(rdx); | 414 const Register rarg1_actual = LP64_ONLY(j_rarg1) NOT_LP64(rdx); |
415 const Register rarg2_required = LP64_ONLY(j_rarg2) NOT_LP64(rdi); | 415 const Register rarg2_required = LP64_ONLY(j_rarg2) NOT_LP64(rdi); |
416 assert_different_registers(rarg0_code, rarg1_actual, rarg2_required, saved_last_sp); | 416 assert_different_registers(rarg0_code, rarg1_actual, rarg2_required, saved_last_sp); |
417 | 417 |
418 guarantee(java_dyn_MethodHandle::vmentry_offset_in_bytes() != 0, "must have offsets"); | 418 guarantee(java_lang_invoke_MethodHandle::vmentry_offset_in_bytes() != 0, "must have offsets"); |
419 | 419 |
420 // some handy addresses | 420 // some handy addresses |
421 Address rbx_method_fie( rbx, methodOopDesc::from_interpreted_offset() ); | 421 Address rbx_method_fie( rbx, methodOopDesc::from_interpreted_offset() ); |
422 Address rbx_method_fce( rbx, methodOopDesc::from_compiled_offset() ); | 422 Address rbx_method_fce( rbx, methodOopDesc::from_compiled_offset() ); |
423 | 423 |
424 Address rcx_mh_vmtarget( rcx_recv, java_dyn_MethodHandle::vmtarget_offset_in_bytes() ); | 424 Address rcx_mh_vmtarget( rcx_recv, java_lang_invoke_MethodHandle::vmtarget_offset_in_bytes() ); |
425 Address rcx_dmh_vmindex( rcx_recv, sun_dyn_DirectMethodHandle::vmindex_offset_in_bytes() ); | 425 Address rcx_dmh_vmindex( rcx_recv, java_lang_invoke_DirectMethodHandle::vmindex_offset_in_bytes() ); |
426 | 426 |
427 Address rcx_bmh_vmargslot( rcx_recv, sun_dyn_BoundMethodHandle::vmargslot_offset_in_bytes() ); | 427 Address rcx_bmh_vmargslot( rcx_recv, java_lang_invoke_BoundMethodHandle::vmargslot_offset_in_bytes() ); |
428 Address rcx_bmh_argument( rcx_recv, sun_dyn_BoundMethodHandle::argument_offset_in_bytes() ); | 428 Address rcx_bmh_argument( rcx_recv, java_lang_invoke_BoundMethodHandle::argument_offset_in_bytes() ); |
429 | 429 |
430 Address rcx_amh_vmargslot( rcx_recv, sun_dyn_AdapterMethodHandle::vmargslot_offset_in_bytes() ); | 430 Address rcx_amh_vmargslot( rcx_recv, java_lang_invoke_AdapterMethodHandle::vmargslot_offset_in_bytes() ); |
431 Address rcx_amh_argument( rcx_recv, sun_dyn_AdapterMethodHandle::argument_offset_in_bytes() ); | 431 Address rcx_amh_argument( rcx_recv, java_lang_invoke_AdapterMethodHandle::argument_offset_in_bytes() ); |
432 Address rcx_amh_conversion( rcx_recv, sun_dyn_AdapterMethodHandle::conversion_offset_in_bytes() ); | 432 Address rcx_amh_conversion( rcx_recv, java_lang_invoke_AdapterMethodHandle::conversion_offset_in_bytes() ); |
433 Address vmarg; // __ argument_address(vmargslot) | 433 Address vmarg; // __ argument_address(vmargslot) |
434 | 434 |
435 const int java_mirror_offset = klassOopDesc::klass_part_offset_in_bytes() + Klass::java_mirror_offset_in_bytes(); | 435 const int java_mirror_offset = klassOopDesc::klass_part_offset_in_bytes() + Klass::java_mirror_offset_in_bytes(); |
436 | 436 |
437 if (have_entry(ek)) { | 437 if (have_entry(ek)) { |
458 __ pop(rdi_pc); // caller PC | 458 __ pop(rdi_pc); // caller PC |
459 __ mov(rsp, saved_last_sp); // cut the stack back to where the caller started | 459 __ mov(rsp, saved_last_sp); // cut the stack back to where the caller started |
460 | 460 |
461 Register rbx_method = rbx_temp; | 461 Register rbx_method = rbx_temp; |
462 Label L_no_method; | 462 Label L_no_method; |
463 // FIXME: fill in _raise_exception_method with a suitable sun.dyn method | 463 // FIXME: fill in _raise_exception_method with a suitable java.lang.invoke method |
464 __ movptr(rbx_method, ExternalAddress((address) &_raise_exception_method)); | 464 __ movptr(rbx_method, ExternalAddress((address) &_raise_exception_method)); |
465 __ testptr(rbx_method, rbx_method); | 465 __ testptr(rbx_method, rbx_method); |
466 __ jccb(Assembler::zero, L_no_method); | 466 __ jccb(Assembler::zero, L_no_method); |
467 | 467 |
468 const int jobject_oop_offset = 0; | 468 const int jobject_oop_offset = 0; |