27 lines
1.2 KiB
Diff
27 lines
1.2 KiB
Diff
|
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)
|