165 } 166 static bool ref_kind_is_method(int ref_kind) { 167 return !ref_kind_is_field(ref_kind) && (ref_kind != JVM_REF_newInvokeSpecial); 168 } 169 static bool ref_kind_has_receiver(int ref_kind) { 170 assert(ref_kind_is_valid(ref_kind), ""); 171 return (ref_kind & 1) != 0; 172 } 173 static bool ref_kind_is_static(int ref_kind) { 174 return !ref_kind_has_receiver(ref_kind) && (ref_kind != JVM_REF_newInvokeSpecial); 175 } 176 static bool ref_kind_does_dispatch(int ref_kind) { 177 return (ref_kind == JVM_REF_invokeVirtual || 178 ref_kind == JVM_REF_invokeInterface); 179 } 180 181 182 #ifdef TARGET_ARCH_x86 183 # include "methodHandles_x86.hpp" 184 #endif 185 #ifdef TARGET_ARCH_sparc 186 # include "methodHandles_sparc.hpp" 187 #endif 188 #ifdef TARGET_ARCH_zero 189 # include "methodHandles_zero.hpp" 190 #endif 191 #ifdef TARGET_ARCH_arm 192 # include "methodHandles_arm.hpp" 193 #endif 194 #ifdef TARGET_ARCH_ppc 195 # include "methodHandles_ppc.hpp" 196 #endif 197 198 // Tracing 199 static void trace_method_handle(MacroAssembler* _masm, const char* adaptername) PRODUCT_RETURN; 200 static void trace_method_handle_interpreter_entry(MacroAssembler* _masm, vmIntrinsics::ID iid) { 201 if (TraceMethodHandles) { 202 const char* name = vmIntrinsics::name_at(iid); 203 if (*name == '_') name += 1; 204 const size_t len = strlen(name) + 50; | 165 } 166 static bool ref_kind_is_method(int ref_kind) { 167 return !ref_kind_is_field(ref_kind) && (ref_kind != JVM_REF_newInvokeSpecial); 168 } 169 static bool ref_kind_has_receiver(int ref_kind) { 170 assert(ref_kind_is_valid(ref_kind), ""); 171 return (ref_kind & 1) != 0; 172 } 173 static bool ref_kind_is_static(int ref_kind) { 174 return !ref_kind_has_receiver(ref_kind) && (ref_kind != JVM_REF_newInvokeSpecial); 175 } 176 static bool ref_kind_does_dispatch(int ref_kind) { 177 return (ref_kind == JVM_REF_invokeVirtual || 178 ref_kind == JVM_REF_invokeInterface); 179 } 180 181 182 #ifdef TARGET_ARCH_x86 183 # include "methodHandles_x86.hpp" 184 #endif 185 #ifdef TARGET_ARCH_aarch64 186 # include "methodHandles_aarch64.hpp" 187 #endif 188 #ifdef TARGET_ARCH_sparc 189 # include "methodHandles_sparc.hpp" 190 #endif 191 #ifdef TARGET_ARCH_zero 192 # include "methodHandles_zero.hpp" 193 #endif 194 #ifdef TARGET_ARCH_arm 195 # include "methodHandles_arm.hpp" 196 #endif 197 #ifdef TARGET_ARCH_ppc 198 # include "methodHandles_ppc.hpp" 199 #endif 200 201 // Tracing 202 static void trace_method_handle(MacroAssembler* _masm, const char* adaptername) PRODUCT_RETURN; 203 static void trace_method_handle_interpreter_entry(MacroAssembler* _masm, vmIntrinsics::ID iid) { 204 if (TraceMethodHandles) { 205 const char* name = vmIntrinsics::name_at(iid); 206 if (*name == '_') name += 1; 207 const size_t len = strlen(name) + 50; |