From fb01d970c404ce167315c13e59a42b6c60f86569 Mon Sep 17 00:00:00 2001 From: Eric Botcazou Date: Fri, 11 Dec 2009 10:06:18 +0000 Subject: [PATCH] ffi.c (ffi_closure_sparc_inner_v9): Properly align 'long double' arguments. * src/sparc/ffi.c (ffi_closure_sparc_inner_v9): Properly align 'long double' arguments. From-SVN: r155152 --- libffi/ChangeLog | 5 +++++ libffi/src/sparc/ffi.c | 5 +++++ 2 files changed, 10 insertions(+) diff --git a/libffi/ChangeLog b/libffi/ChangeLog index 8f2861400ce5..517ac4eff639 100644 --- a/libffi/ChangeLog +++ b/libffi/ChangeLog @@ -1,3 +1,8 @@ +2009-12-11 Eric Botcazou + + * src/sparc/ffi.c (ffi_closure_sparc_inner_v9): Properly align 'long + double' arguments. + 2009-12-11 Eric Botcazou * testsuite/libffi.call/ffitest.h: Define PRIuPTR on Solaris < 10. diff --git a/libffi/src/sparc/ffi.c b/libffi/src/sparc/ffi.c index 3b73f0c47752..1d01f59ec231 100644 --- a/libffi/src/sparc/ffi.c +++ b/libffi/src/sparc/ffi.c @@ -599,6 +599,11 @@ ffi_closure_sparc_inner_v9(ffi_closure *closure, /* Right-justify. */ argn += ALIGN(arg_types[i]->size, FFI_SIZEOF_ARG) / FFI_SIZEOF_ARG; + /* Align on a 16-byte boundary. */ +#if FFI_TYPE_LONGDOUBLE != FFI_TYPE_DOUBLE + if (arg_types[i]->type == FFI_TYPE_LONGDOUBLE && (argn % 2) != 0) + argn++; +#endif if (i < fp_slot_max && (arg_types[i]->type == FFI_TYPE_FLOAT || arg_types[i]->type == FFI_TYPE_DOUBLE -- 2.43.5