39 #define FFIBFIN_RET_VOID 0 40 #define FFIBFIN_RET_BYTE 1 41 #define FFIBFIN_RET_HALFWORD 2 42 #define FFIBFIN_RET_INT64 3 43 #define FFIBFIN_RET_INT32 4 72 switch (cif->rtype->type) {
87 case FFI_TYPE_POINTER:
97 if (cif->rtype->size <= 4){
99 }
else if (cif->rtype->size == 8){
120 void ffi_call(ffi_cif *cif,
void(*fn)(
void),
void *rvalue,
void **avalue)
122 int ret_type = cif->flags;
146 register unsigned int i = 0;
152 for (i = ecif->
cif->nargs, p_arg = ecif->
cif->arg_types;
157 if (z <
sizeof(
int)) {
159 switch ((*p_arg)->type) {
160 case FFI_TYPE_SINT8: {
161 signed char v = *(SINT8 *)(* p_argv);
163 *(
signed int *) argp = t;
166 case FFI_TYPE_UINT8: {
167 unsigned char v = *(UINT8 *)(* p_argv);
169 *(
unsigned int *) argp = t;
172 case FFI_TYPE_SINT16:
173 *(
signed int *) argp = (
signed int) * (SINT16 *)(* p_argv);
175 case FFI_TYPE_UINT16:
176 *(
unsigned int *) argp = (
unsigned int) * (UINT16 *)(* p_argv);
178 case FFI_TYPE_STRUCT:
179 memcpy(argp, *p_argv, (*p_arg)->size);
185 }
else if (z ==
sizeof(
int)) {
186 *(
unsigned int *) argp = (
unsigned int) * (UINT32 *)(* p_argv);
#define FFIBFIN_RET_HALFWORD
void ffi_call_SYSV(unsigned(*)(struct call_context *context, unsigned char *, extended_cif *), struct call_context *context, extended_cif *, size_t, void(*fn)(void))
void ffi_call(ffi_cif *cif, void(*fn)(void), void *rvalue, void **avalue)
#define FFIBFIN_RET_INT64
void ffi_prep_args(char *stack, extended_cif *ecif)
ffi_status ffi_prep_cif_machdep(ffi_cif *cif)
#define FFIBFIN_RET_INT32