ffi_call_int (cif, fn, rvalue, avalue, NULL);
}
+#if FFI_CLOSURES
+
#ifdef FFI_GO_CLOSURES
void
ffi_call_go (ffi_cif *cif, void (*fn) (void), void *rvalue,
}
#endif
+#endif /* FFI_CLOSURES */
+
#endif /* (__aarch64__) || defined(__arm64__)|| defined (_M_ARM64)*/
.size CNAME(ffi_call_SYSV), .-CNAME(ffi_call_SYSV)
#endif
+#if FFI_CLOSURES
+
/* ffi_closure_SYSV
Closure invocation glue. This is the low level code invoked directly by
/* Load ffi_closure_inner arguments. */
ldp PTR_REG(0), PTR_REG(1), [x17, #FFI_TRAMPOLINE_CLOSURE_OFFSET] /* load cif, fn */
ldr PTR_REG(2), [x17, #FFI_TRAMPOLINE_CLOSURE_OFFSET+PTR_SIZE*2] /* load user_data */
+#ifdef FFI_GO_CLOSURES
.Ldo_closure:
+#endif
add x3, sp, #16 /* load context */
add x4, sp, #ffi_closure_SYSV_FS /* load stack */
add x5, sp, #16+CALL_CONTEXT_SIZE /* load rvalue */
.size CNAME(ffi_go_closure_SYSV), . - CNAME(ffi_go_closure_SYSV)
#endif
#endif /* FFI_GO_CLOSURES */
+#endif /* FFI_CLOSURES */
#endif /* __arm64__ */
#if defined __ELF__ && defined __linux__
return rvalue;
}
+#if FFI_CLOSURES
+
struct closure_frame
{
char vfp_space[8*8] __attribute__((aligned(8)));
}
#endif
+#endif /* FFI_CLOSURES */
+
/* Below are routines for VFP hard-float support. */
/* A subroutine of vfp_type_p. Given a structure type, return the type code
UNWIND(.fnend)
ARM_FUNC_END(ffi_call_SYSV)
+#if FFI_CLOSURES
/*
int ffi_closure_inner_* (cif, fun, user_data, frame)
.align ARM_TRAMP_MAP_SHIFT
#endif /* FFI_EXEC_STATIC_TRAMP */
+#endif /* FFI_CLOSURES */
+
#if FFI_EXEC_TRAMPOLINE_TABLE
#ifdef __MACH__