On 18/11/22 10:47, Richard Henderson wrote:
> Notice when the host has additional atomic instructions.
> The new variables will also be used in generated code.
>
> Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
> ---
> tcg/aarch64/tcg-target.h | 3 +++
> tcg/aarch64/tcg-target.c.inc | 10 ++++++++++
> 2 files changed, 13 insertions(+)
> diff --git a/tcg/aarch64/tcg-target.c.inc b/tcg/aarch64/tcg-target.c.inc
> index 001a71bbc0..cf5ee6f742 100644
> --- a/tcg/aarch64/tcg-target.c.inc
> +++ b/tcg/aarch64/tcg-target.c.inc
> @@ -13,6 +13,8 @@
> #include "../tcg-ldst.c.inc"
> #include "../tcg-pool.c.inc"
> #include "qemu/bitops.h"
> +#include <asm/hwcap.h>
This doesn't build on Darwin:
In file included from ../../tcg/tcg.c:426:
tcg/aarch64/tcg-target.c.inc:16:10: fatal error: 'asm/hwcap.h' file not
found
#include <asm/hwcap.h>
^~~~~~~~~~~~~
In file included from ../../accel/tcg/cputlb.c:1656:
../../accel/tcg/ldst_atomicity.c.inc:269:21: warning: value size does
not match register size specified by the constraint and modifier
[-Wasm-operand-widths]
: "=&r"(r.u), "=&r"(fail) : "Q"(*p));
^
../../accel/tcg/ldst_atomicity.c.inc:266:22: note: use constraint
modifier "w"
asm("0: ldxp %0, %R0, %2\n\t"
^~
%w0
../../accel/tcg/ldst_atomicity.c.inc:902:9: error: invalid operand in
inline asm: '0: ldxp $2, ${2:R}, $0 bic $2, $2, $4 bic ${2:R}, ${2:R},
${4:R} orr $2, $2, $3 orr ${2:R}, ${2:R}, ${3:R} stxp ${1:w}, $2,
${2:R}, $0 cbnz ${1:w}, 0b'
asm("0: ldxp %[t], %R[t], %[mem]\n\t"
^
../../accel/tcg/ldst_atomicity.c.inc:902:9: error: invalid operand in
inline asm: '0: ldxp $2, ${2:R}, $0 bic $2, $2, $4 bic ${2:R}, ${2:R},
${4:R} orr $2, $2, $3 orr ${2:R}, ${2:R}, ${3:R} stxp ${1:w}, $2,
${2:R}, $0 cbnz ${1:w}, 0b'
../../accel/tcg/ldst_atomicity.c.inc:902:9: error: invalid operand in
inline asm: '0: ldxp $2, ${2:R}, $0 bic $2, $2, $4 bic ${2:R}, ${2:R},
${4:R} orr $2, $2, $3 orr ${2:R}, ${2:R}, ${3:R} stxp ${1:w}, $2,
${2:R}, $0 cbnz ${1:w}, 0b'
../../accel/tcg/ldst_atomicity.c.inc:902:9: error: invalid operand in
inline asm: '0: ldxp $2, ${2:R}, $0 bic $2, $2, $4 bic ${2:R}, ${2:R},
${4:R} orr $2, $2, $3 orr ${2:R}, ${2:R}, ${3:R} stxp ${1:w}, $2,
${2:R}, $0 cbnz ${1:w}, 0b'
../../accel/tcg/ldst_atomicity.c.inc:902:9: error: invalid operand in
inline asm: '0: ldxp $2, ${2:R}, $0 bic $2, $2, $4 bic ${2:R}, ${2:R},
${4:R} orr $2, $2, $3 orr ${2:R}, ${2:R}, ${3:R} stxp ${1:w}, $2,
${2:R}, $0 cbnz ${1:w}, 0b'
../../accel/tcg/ldst_atomicity.c.inc:902:9: error: invalid operand in
inline asm: '0: ldxp $2, ${2:R}, $0 bic $2, $2, $4 bic ${2:R}, ${2:R},
${4:R} orr $2, $2, $3 orr ${2:R}, ${2:R}, ${3:R} stxp ${1:w}, $2,
${2:R}, $0 cbnz ${1:w}, 0b'
../../accel/tcg/ldst_atomicity.c.inc:902:9: error: invalid operand in
inline asm: '0: ldxp $2, ${2:R}, $0 bic $2, $2, $4 bic ${2:R}, ${2:R},
${4:R} orr $2, $2, $3 orr ${2:R}, ${2:R}, ${3:R} stxp ${1:w}, $2,
${2:R}, $0 cbnz ${1:w}, 0b'
../../accel/tcg/ldst_atomicity.c.inc:902:9: error: invalid operand in
inline asm: '0: ldxp $2, ${2:R}, $0 bic $2, $2, $4 bic ${2:R}, ${2:R},
${4:R} orr $2, $2, $3 orr ${2:R}, ${2:R}, ${3:R} stxp ${1:w}, $2,
${2:R}, $0 cbnz ${1:w}, 0b'
../../accel/tcg/ldst_atomicity.c.inc:902:9: error: unknown token in
expression
<inline asm>:1:15: note: instantiated into assembly here
0: ldxp x13, , [x9]
^
In file included from ../../accel/tcg/cputlb.c:1656:
../../accel/tcg/ldst_atomicity.c.inc:902:9: error: invalid operand
asm("0: ldxp %[t], %R[t], %[mem]\n\t"
^
<inline asm>:1:15: note: instantiated into assembly here
0: ldxp x13, , [x9]
^
In file included from ../../accel/tcg/cputlb.c:1656:
../../accel/tcg/ldst_atomicity.c.inc:903:32: error: unknown token in
expression
"bic %[t], %[t], %[m]\n\t"
^
<inline asm>:3:6: note: instantiated into assembly here
bic , ,
^
In file included from ../../accel/tcg/cputlb.c:1656:
../../accel/tcg/ldst_atomicity.c.inc:902:9: error: invalid operand in
inline asm: '0: ldxp $2, ${2:R}, $0 bic $2, $2, $4 bic ${2:R}, ${2:R},
${4:R} orr $2, $2, $3 orr ${2:R}, ${2:R}, ${3:R} stxp ${1:w}, $2,
${2:R}, $0 cbnz ${1:w}, 0b'
asm("0: ldxp %[t], %R[t], %[mem]\n\t"
^
../../accel/tcg/ldst_atomicity.c.inc:902:9: error: invalid operand in
inline asm: '0: ldxp $2, ${2:R}, $0 bic $2, $2, $4 bic ${2:R}, ${2:R},
${4:R} orr $2, $2, $3 orr ${2:R}, ${2:R}, ${3:R} stxp ${1:w}, $2,
${2:R}, $0 cbnz ${1:w}, 0b'
../../accel/tcg/ldst_atomicity.c.inc:902:9: error: invalid operand in
inline asm: '0: ldxp $2, ${2:R}, $0 bic $2, $2, $4 bic ${2:R}, ${2:R},
${4:R} orr $2, $2, $3 orr ${2:R}, ${2:R}, ${3:R} stxp ${1:w}, $2,
${2:R}, $0 cbnz ${1:w}, 0b'
fatal error: too many errors emitted, stopping now [-ferror-limit=]