diff options
| author | Richard Henderson <richard.henderson@linaro.org> | 2024-02-16 15:40:11 -0600 |
|---|---|---|
| committer | Richard Henderson <richard.henderson@linaro.org> | 2024-02-29 11:35:36 -1000 |
| commit | 7f89fdf8ebe6ef8df48f0a05f44e1020c713a94e (patch) | |
| tree | 32ad0778a9cc61e2a560521af52df96148a0e3bf | |
| parent | 41689bb30cb55f411a4d9f7a31f3e601292d3be2 (diff) | |
| download | focaccia-qemu-7f89fdf8ebe6ef8df48f0a05f44e1020c713a94e.tar.gz focaccia-qemu-7f89fdf8ebe6ef8df48f0a05f44e1020c713a94e.zip | |
tcg/aarch64: Apple does not align __int128_t in even registers
From https://developer.apple.com/documentation/xcode/writing-arm64-code-for-apple-platforms
When passing an argument with 16-byte alignment in integer registers,
Apple platforms allow the argument to start in an odd-numbered xN
register. The standard ABI requires it to begin in an even-numbered
xN register.
Cc: qemu-stable@nongnu.org
Fixes: 5427a9a7604 ("tcg: Add TCG_TARGET_CALL_{RET,ARG}_I128")
Resolves: https://gitlab.com/qemu-project/qemu/-/issues/2169
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
Message-Id: <9fc0c2c7-dd57-459e-aecb-528edb74b4a7@linaro.org>
Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org>
| -rw-r--r-- | tcg/aarch64/tcg-target.h | 6 |
1 files changed, 5 insertions, 1 deletions
diff --git a/tcg/aarch64/tcg-target.h b/tcg/aarch64/tcg-target.h index ef5ebe91bd..85d5746e47 100644 --- a/tcg/aarch64/tcg-target.h +++ b/tcg/aarch64/tcg-target.h @@ -55,7 +55,11 @@ typedef enum { #define TCG_TARGET_CALL_STACK_OFFSET 0 #define TCG_TARGET_CALL_ARG_I32 TCG_CALL_ARG_NORMAL #define TCG_TARGET_CALL_ARG_I64 TCG_CALL_ARG_NORMAL -#define TCG_TARGET_CALL_ARG_I128 TCG_CALL_ARG_EVEN +#ifdef CONFIG_DARWIN +# define TCG_TARGET_CALL_ARG_I128 TCG_CALL_ARG_NORMAL +#else +# define TCG_TARGET_CALL_ARG_I128 TCG_CALL_ARG_EVEN +#endif #define TCG_TARGET_CALL_RET_I128 TCG_CALL_RET_NORMAL #define have_lse (cpuinfo & CPUINFO_LSE) |