]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
libffi: fix handling of homogeneous float128 structs (#689)
authorDan Horák <dan@danny.cz>
Wed, 3 May 2023 19:29:09 +0000 (14:29 -0500)
committerPeter Bergner <bergner@linux.ibm.com>
Sat, 6 May 2023 15:30:49 +0000 (11:30 -0400)
If there is a homogeneous struct with float128 members, they should be
copied to vector register save area. The current code incorrectly copies
only the value of the first member, not increasing the pointer with each
iteration. Fix this.

Merged from upstream libffi commit: 464b4b66e3cf3b5489e730c1466ee1bf825560e0

2023-05-03  Dan Horák <dan@danny.cz>

libffi/
PR libffi/109447
* src/powerpc/ffi_linux64.c (ffi_prep_args64): Update arg.f128 pointer.

libffi/src/powerpc/ffi_linux64.c

index 4d50878e402a2a6a2f842e7d2a0c6d8d1e1ebe02..3454dacd3d641654929152271535f68493bf55be 100644 (file)
@@ -680,7 +680,7 @@ ffi_prep_args64 (extended_cif *ecif, unsigned long *const stack)
                     {
                       if (vecarg_count < NUM_VEC_ARG_REGISTERS64
                           && i < nfixedargs)
-                       memcpy (vec_base.f128++, arg.f128, sizeof (float128));
+                       memcpy (vec_base.f128++, arg.f128++, sizeof (float128));
                       else
                        memcpy (next_arg.f128, arg.f128++, sizeof (float128));
                       if (++next_arg.f128 == gpr_end.f128)