* src/powerpc/ffi.c (ffi_closure_helper_SYSV) Handle struct
passing correctly.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@71238
138bc75d-0d04-0410-961f-
82ee72b054a4
+2003-09-09 Andreas Tobler <a.tobler@schweiz.ch>
+
+ * src/powerpc/ffi.c (ffi_closure_helper_SYSV) Handle struct
+ passing correctly.
+
2003-09-09 Alan Modra <amodra@bigpond.net.au>
* configure: Regenerate.
case FFI_TYPE_SINT32:
case FFI_TYPE_UINT32:
case FFI_TYPE_POINTER:
- case FFI_TYPE_STRUCT:
- /* there are 8 gpr registers used to pass values */
+ /* there are 8 gpr registers used to pass values */
if (ng < 8) {
avalue[i] = pgr;
ng++;
pst++;
}
break;
+
+ case FFI_TYPE_STRUCT:
+ /* Structs are passed by reference. The address will appear in a
+ gpr if it is one of the first 8 arguments. */
+ if (ng < 8) {
+ avalue[i] = (void *) *pgr;
+ ng++;
+ pgr++;
+ } else {
+ avalue[i] = (void *) *pst;
+ pst++;
+ }
+ break;
case FFI_TYPE_SINT64:
case FFI_TYPE_UINT64: