/* -----------------------------------------------------------------------
- ffi.c - Copyright (c) 2012 Alexandre K. I. de Mendonca <alexandre.keunecke@gmail.com>
+ ffi.c - Copyright (c) 2012 Alexandre K. I. de Mendonca <alexandre.keunecke@gmail.com>,
+ Paulo Pizarro <paulo.pizarro@gmail.com>
Blackfin Foreign Function Interface
/* -----------------------------------------------------------------------
- sysv.S - Copyright (c) 2012 Alexandre K. I. de Mendonca <alexandre.keunecke@gmail.com>
+ sysv.S - Copyright (c) 2012 Alexandre K. I. de Mendonca <alexandre.keunecke@gmail.com>,
+ Paulo Pizarro <paulo.pizarro@gmail.com>
Blackfin Foreign Function Interface
.func ffi_call_SYSV
/*
- cif->bytes = R0 (fp+8)
- &ecif = R1 (fp+12)
- ffi_prep_args = R2 (fp+16)
- ret_type = stack (fp+20)
- ecif.rvalue = stack (fp+24)
- fn = stack (fp+28)
- got (fp+32)
- There is room for improvement here (we can use temporary registers
+ cif->bytes = R0 (fp+8)
+ &ecif = R1 (fp+12)
+ ffi_prep_args = R2 (fp+16)
+ ret_type = stack (fp+20)
+ ecif.rvalue = stack (fp+24)
+ fn = stack (fp+28)
+ got (fp+32)
+
+ There is room for improvement here (we can use temporary registers
instead of saving the values in the memory)
- REGS:
- P5 => Stack pointer (function arguments)
- R5 => cif->bytes
- R4 => ret->type
-
- FP-20 = P3
- FP-16 = SP (parameters area)
- FP-12 = SP (temp)
- FP-08 = function return part 1 [R0]
- FP-04 = function return part 2 [R1]
+ REGS:
+ P5 => Stack pointer (function arguments)
+ R5 => cif->bytes
+ R4 => ret->type
+
+ FP-20 = P3
+ FP-16 = SP (parameters area)
+ FP-12 = SP (temp)
+ FP-08 = function return part 1 [R0]
+ FP-04 = function return part 2 [R1]
*/
_ffi_call_SYSV: