mirror of
https://github.com/partic2/libffi
synced 2026-11-09 17:47:19 +00:00
The original code, removed in the "rewrite" patch, was incorrect for large structures, and required dynamic allocation of a trampoline on every ffi_call. Instead, allocate a 4k entry table of all possible structure returns. The table is 80k, but is read-only and dynamically paged, which ought to be better than allocating the trampoline. This is difficult to test with gcc. One can only use -O0 at present. See https://gcc.gnu.org/bugzilla/show_bug.cgi?id=63668.
27 lines
733 B
C
27 lines
733 B
C
#define SPARC_RET_VOID 0
|
|
#define SPARC_RET_STRUCT 1
|
|
#define SPARC_RET_UINT8 2
|
|
#define SPARC_RET_SINT8 3
|
|
#define SPARC_RET_UINT16 4
|
|
#define SPARC_RET_SINT16 5
|
|
#define SPARC_RET_UINT32 6
|
|
#define SP_V9_RET_SINT32 7 /* v9 only */
|
|
#define SP_V8_RET_CPLX16 7 /* v8 only */
|
|
#define SPARC_RET_INT64 8
|
|
#define SPARC_RET_INT128 9
|
|
|
|
/* Note that F_7 is missing, and is handled by SPARC_RET_STRUCT. */
|
|
#define SPARC_RET_F_8 10
|
|
#define SPARC_RET_F_6 11
|
|
#define SPARC_RET_F_4 12
|
|
#define SPARC_RET_F_2 13
|
|
#define SP_V9_RET_F_3 14 /* v9 only */
|
|
#define SP_V8_RET_CPLX8 14 /* v8 only */
|
|
#define SPARC_RET_F_1 15
|
|
|
|
#define SPARC_FLAG_RET_MASK 15
|
|
#define SPARC_FLAG_RET_IN_MEM 32
|
|
#define SPARC_FLAG_FP_ARGS 64
|
|
|
|
#define SPARC_SIZEMASK_SHIFT 8
|