| |
@@ -0,0 +1,26 @@
|
| |
+ From 83ce80f3194bbf95c39764d075b070389c0f8522 Mon Sep 17 00:00:00 2001
|
| |
+ From: =?UTF-8?q?Dan=20Hor=C3=A1k?= <dan@danny.cz>
|
| |
+ Date: Mon, 31 Jan 2022 09:21:53 +0000
|
| |
+ Subject: [PATCH] powerpc64: fix handling of homogeneous float128 structs
|
| |
+
|
| |
+ 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.
|
| |
+ ---
|
| |
+ src/powerpc/ffi_linux64.c | 2 +-
|
| |
+ 1 file changed, 1 insertion(+), 1 deletion(-)
|
| |
+
|
| |
+ diff --git a/src/powerpc/ffi_linux64.c b/src/powerpc/ffi_linux64.c
|
| |
+ index 4d50878e4..3454dacd3 100644
|
| |
+ --- a/src/powerpc/ffi_linux64.c
|
| |
+ +++ b/src/powerpc/ffi_linux64.c
|
| |
+ @@ -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)
|
| |