Home | History | Annotate | Download | only in sparc

Lines Matching full:cif

49   if ( ecif->cif->rtype->type == FFI_TYPE_STRUCT ) */
69 for (i = ecif->cif->nargs, p_arg = ecif->cif->arg_types; i; i--, p_arg++)
149 if (ecif->cif->rtype->type == FFI_TYPE_STRUCT &&
150 ecif->cif->rtype->size > 32)
157 for (i = 0, p_arg = ecif->cif->arg_types; i < ecif->cif->nargs;
250 /* Perform machine dependent cif processing */
251 ffi_status ffi_prep_cif_machdep(ffi_cif *cif)
255 if (cif->abi != FFI_V9)
262 if (cif->rtype->type != FFI_TYPE_STRUCT)
263 cif->bytes += wordsize;
268 if (cif->bytes < 4*6+4)
269 cif->bytes = 4*6+4;
278 if (cif->bytes < 8*6)
279 cif->bytes = 8*6;
282 /* Adjust cif->bytes. to include 16 words for the window save area,
285 cif->bytes += 16 * wordsize;
290 cif->bytes = ALIGN(cif->bytes, 2 * wordsize);
293 switch (cif->rtype->type)
301 cif->flags = cif->rtype->type;
305 if (cif->abi == FFI_V9 && cif->rtype->size > 32)
306 cif->flags = FFI_TYPE_VOID;
308 cif->flags = FFI_TYPE_STRUCT;
313 if (cif->abi != FFI_V9)
315 cif->flags = FFI_TYPE_SINT64;
320 cif->flags = FFI_TYPE_INT;
368 void ffi_call(ffi_cif *cif, void (*fn)(void), void *rvalue, void **avalue)
373 ecif.cif = cif;
380 if (cif->rtype->type == FFI_TYPE_STRUCT)
382 if (cif->rtype->size <= 32)
388 ecif.rvalue = alloca(cif->rtype->size);
392 switch (cif->abi)
399 ffi_call_v8(ffi_prep_args_v8, &ecif, cif->bytes,
400 cif->flags, rvalue, fn);
405 ffi_call_v9(ffi_prep_args_v9, &ecif, cif->bytes,
406 cif->flags, rval, fn);
407 if (rvalue && rval && cif->rtype->type == FFI_TYPE_STRUCT)
408 ffi_v9_layout_struct(cif->rtype, 0, (char *)rvalue, (char *)rval, ((char *)rval)+32);
430 ffi_cif* cif,
440 FFI_ASSERT (cif->abi == FFI_V9);
449 FFI_ASSERT (cif->abi == FFI_V8);
457 closure->cif = cif;
477 ffi_cif *cif;
482 cif = closure->cif;
483 arg_types = cif->arg_types;
484 avalue = alloca(cif->nargs * sizeof(void *));
488 if (cif->flags == FFI_TYPE_STRUCT
490 || cif->flags == FFI_TYPE_LONGDOUBLE
499 for (i = 0; i < cif->nargs; i++)
532 (closure->fun) (cif, rvalue, avalue, closure->user_data);
535 return cif->rtype->type;
542 ffi_cif *cif;
547 cif = closure->cif;
548 arg_types = cif->arg_types;
549 avalue = alloca(cif->nargs * sizeof(void *));
553 if (cif->flags == FFI_TYPE_VOID
554 && cif->rtype->type == FFI_TYPE_STRUCT)
566 for (i = 0; i < cif->nargs; i++)
606 (closure->fun) (cif, rvalue, avalue, closure->user_data);
609 return cif->rtype->type;