Skip to content

Commit

Permalink
tcg/aarch64: Apple does not align __int128_t in even registers
Browse files Browse the repository at this point in the history
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: 5427a9a ("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>
(cherry picked from commit 7f89fdf)
Signed-off-by: Michael Tokarev <mjt@tls.msk.ru>
  • Loading branch information
rth7680 authored and Michael Tokarev committed Mar 5, 2024
1 parent 16f1f95 commit 151d593
Showing 1 changed file with 5 additions and 1 deletion.
6 changes: 5 additions & 1 deletion tcg/aarch64/tcg-target.h
Original file line number Diff line number Diff line change
Expand Up @@ -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)
Expand Down

0 comments on commit 151d593

Please sign in to comment.