200 CONV_OP_LIMIT = java_lang_invoke_AdapterMethodHandle::CONV_OP_LIMIT,
201 CONV_OP_MASK = java_lang_invoke_AdapterMethodHandle::CONV_OP_MASK,
202 CONV_TYPE_MASK = java_lang_invoke_AdapterMethodHandle::CONV_TYPE_MASK,
203 CONV_VMINFO_MASK = java_lang_invoke_AdapterMethodHandle::CONV_VMINFO_MASK,
204 CONV_VMINFO_SHIFT = java_lang_invoke_AdapterMethodHandle::CONV_VMINFO_SHIFT,
205 CONV_OP_SHIFT = java_lang_invoke_AdapterMethodHandle::CONV_OP_SHIFT,
206 CONV_DEST_TYPE_SHIFT = java_lang_invoke_AdapterMethodHandle::CONV_DEST_TYPE_SHIFT,
207 CONV_SRC_TYPE_SHIFT = java_lang_invoke_AdapterMethodHandle::CONV_SRC_TYPE_SHIFT,
208 CONV_STACK_MOVE_SHIFT = java_lang_invoke_AdapterMethodHandle::CONV_STACK_MOVE_SHIFT,
209 CONV_STACK_MOVE_MASK = java_lang_invoke_AdapterMethodHandle::CONV_STACK_MOVE_MASK
210 };
211
212 static bool _enabled;
213 static MethodHandleEntry* _entries[_EK_LIMIT];
214 static const char* _entry_names[_EK_LIMIT+1];
215 static jobject _raise_exception_method;
216 static address _adapter_return_handlers[CONV_TYPE_MASK+1];
217
218 // Adapters.
219 static MethodHandlesAdapterBlob* _adapter_code;
220 static int _adapter_code_size;
221
222 static bool ek_valid(EntryKind ek) { return (uint)ek < (uint)_EK_LIMIT; }
223 static bool conv_op_valid(int op) { return (uint)op < (uint)CONV_OP_LIMIT; }
224
225 public:
226 static bool have_entry(EntryKind ek) { return ek_valid(ek) && _entries[ek] != NULL; }
227 static MethodHandleEntry* entry(EntryKind ek) { assert(ek_valid(ek), "initialized");
228 return _entries[ek]; }
229 static const char* entry_name(EntryKind ek) { assert(ek_valid(ek), "oob");
230 return _entry_names[ek]; }
231 static EntryKind adapter_entry_kind(int op) { assert(conv_op_valid(op), "oob");
232 return EntryKind(_adapter_mh_first + op); }
233
234 static void init_entry(EntryKind ek, MethodHandleEntry* me) {
235 assert(ek_valid(ek), "oob");
236 assert(_entries[ek] == NULL, "no double initialization");
237 _entries[ek] = me;
238 }
239
240 // Some adapter helper functions.
696 KlassHandle receiver_limit,
697 int decode_flags,
698 KlassHandle receiver_klass,
699 TRAPS);
700
701 public:
702 static bool is_float_fixed_reinterpretation_cast(BasicType src, BasicType dst);
703 static bool same_basic_type_for_arguments(BasicType src, BasicType dst,
704 bool raw = false,
705 bool for_return = false);
706 static bool same_basic_type_for_returns(BasicType src, BasicType dst, bool raw = false) {
707 return same_basic_type_for_arguments(src, dst, raw, true);
708 }
709
710 static Symbol* convert_to_signature(oop type_str, bool polymorphic, TRAPS);
711
712 #ifdef TARGET_ARCH_x86
713 # include "methodHandles_x86.hpp"
714 #endif
715 #ifdef TARGET_ARCH_sparc
716 #define TARGET_ARCH_NYI_6939861 1 //FIXME
717 //# include "methodHandles_sparc.hpp"
718 #endif
719 #ifdef TARGET_ARCH_zero
720 #define TARGET_ARCH_NYI_6939861 1 //FIXME
721 //# include "methodHandles_zero.hpp"
722 #endif
723 #ifdef TARGET_ARCH_arm
724 # include "methodHandles_arm.hpp"
725 #endif
726 #ifdef TARGET_ARCH_ppc
727 # include "methodHandles_ppc.hpp"
728 #endif
729
730 #ifdef TARGET_ARCH_NYI_6939861
731 // Here are some backward compatible declarations until the 6939861 ports are updated.
732 #define _adapter_flyby (_EK_LIMIT + 10)
733 #define _adapter_ricochet (_EK_LIMIT + 11)
734 #define _adapter_opt_spread_1 _adapter_opt_spread_1_ref
735 #define _adapter_opt_spread_more _adapter_opt_spread_ref
736 enum {
737 _INSERT_NO_MASK = -1,
738 _INSERT_REF_MASK = 0,
739 _INSERT_INT_MASK = 1,
740 _INSERT_LONG_MASK = 3
741 };
|
200 CONV_OP_LIMIT = java_lang_invoke_AdapterMethodHandle::CONV_OP_LIMIT,
201 CONV_OP_MASK = java_lang_invoke_AdapterMethodHandle::CONV_OP_MASK,
202 CONV_TYPE_MASK = java_lang_invoke_AdapterMethodHandle::CONV_TYPE_MASK,
203 CONV_VMINFO_MASK = java_lang_invoke_AdapterMethodHandle::CONV_VMINFO_MASK,
204 CONV_VMINFO_SHIFT = java_lang_invoke_AdapterMethodHandle::CONV_VMINFO_SHIFT,
205 CONV_OP_SHIFT = java_lang_invoke_AdapterMethodHandle::CONV_OP_SHIFT,
206 CONV_DEST_TYPE_SHIFT = java_lang_invoke_AdapterMethodHandle::CONV_DEST_TYPE_SHIFT,
207 CONV_SRC_TYPE_SHIFT = java_lang_invoke_AdapterMethodHandle::CONV_SRC_TYPE_SHIFT,
208 CONV_STACK_MOVE_SHIFT = java_lang_invoke_AdapterMethodHandle::CONV_STACK_MOVE_SHIFT,
209 CONV_STACK_MOVE_MASK = java_lang_invoke_AdapterMethodHandle::CONV_STACK_MOVE_MASK
210 };
211
212 static bool _enabled;
213 static MethodHandleEntry* _entries[_EK_LIMIT];
214 static const char* _entry_names[_EK_LIMIT+1];
215 static jobject _raise_exception_method;
216 static address _adapter_return_handlers[CONV_TYPE_MASK+1];
217
218 // Adapters.
219 static MethodHandlesAdapterBlob* _adapter_code;
220
221 static bool ek_valid(EntryKind ek) { return (uint)ek < (uint)_EK_LIMIT; }
222 static bool conv_op_valid(int op) { return (uint)op < (uint)CONV_OP_LIMIT; }
223
224 public:
225 static bool have_entry(EntryKind ek) { return ek_valid(ek) && _entries[ek] != NULL; }
226 static MethodHandleEntry* entry(EntryKind ek) { assert(ek_valid(ek), "initialized");
227 return _entries[ek]; }
228 static const char* entry_name(EntryKind ek) { assert(ek_valid(ek), "oob");
229 return _entry_names[ek]; }
230 static EntryKind adapter_entry_kind(int op) { assert(conv_op_valid(op), "oob");
231 return EntryKind(_adapter_mh_first + op); }
232
233 static void init_entry(EntryKind ek, MethodHandleEntry* me) {
234 assert(ek_valid(ek), "oob");
235 assert(_entries[ek] == NULL, "no double initialization");
236 _entries[ek] = me;
237 }
238
239 // Some adapter helper functions.
695 KlassHandle receiver_limit,
696 int decode_flags,
697 KlassHandle receiver_klass,
698 TRAPS);
699
700 public:
701 static bool is_float_fixed_reinterpretation_cast(BasicType src, BasicType dst);
702 static bool same_basic_type_for_arguments(BasicType src, BasicType dst,
703 bool raw = false,
704 bool for_return = false);
705 static bool same_basic_type_for_returns(BasicType src, BasicType dst, bool raw = false) {
706 return same_basic_type_for_arguments(src, dst, raw, true);
707 }
708
709 static Symbol* convert_to_signature(oop type_str, bool polymorphic, TRAPS);
710
711 #ifdef TARGET_ARCH_x86
712 # include "methodHandles_x86.hpp"
713 #endif
714 #ifdef TARGET_ARCH_sparc
715 # include "methodHandles_sparc.hpp"
716 #endif
717 #ifdef TARGET_ARCH_zero
718 # include "methodHandles_zero.hpp"
719 #endif
720 #ifdef TARGET_ARCH_arm
721 # include "methodHandles_arm.hpp"
722 #endif
723 #ifdef TARGET_ARCH_ppc
724 # include "methodHandles_ppc.hpp"
725 #endif
726
727 #ifdef TARGET_ARCH_NYI_6939861
728 // Here are some backward compatible declarations until the 6939861 ports are updated.
729 #define _adapter_flyby (_EK_LIMIT + 10)
730 #define _adapter_ricochet (_EK_LIMIT + 11)
731 #define _adapter_opt_spread_1 _adapter_opt_spread_1_ref
732 #define _adapter_opt_spread_more _adapter_opt_spread_ref
733 enum {
734 _INSERT_NO_MASK = -1,
735 _INSERT_REF_MASK = 0,
736 _INSERT_INT_MASK = 1,
737 _INSERT_LONG_MASK = 3
738 };
|