[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Qemu-devel] [PATCH v2 10/27] tcg: Add atomic128 helpers
From: |
Emilio G. Cota |
Subject: |
Re: [Qemu-devel] [PATCH v2 10/27] tcg: Add atomic128 helpers |
Date: |
Thu, 7 Jul 2016 23:00:28 -0400 |
User-agent: |
Mutt/1.5.23 (2014-03-12) |
On Fri, Jul 01, 2016 at 10:04:36 -0700, Richard Henderson wrote:
> Force the use of cmpxchg16b on x86_64.
>
> Wikipedia suggests that only very old AMD64 (circa 2004) did not have
> this instruction. Further, it's required by Windows 8 so no new cpus
> will ever omit it.
>
> If we truely care about these, then we could check this at startup time
> and then avoid executing paths that use it.
>
> Signed-off-by: Richard Henderson <address@hidden>
> ---
> configure | 29 ++++++++++++-
> cputlb.c | 6 +++
> include/qemu/int128.h | 6 +++
> softmmu_template.h | 110
> +++++++++++++++++++++++++++++++++++++-------------
> tcg/tcg.h | 22 ++++++++++
> 5 files changed, 144 insertions(+), 29 deletions(-)
>
> diff --git a/configure b/configure
> index 59ea124..586abd6 100755
> --- a/configure
> +++ b/configure
> @@ -1201,7 +1201,10 @@ case "$cpu" in
> cc_i386='$(CC) -m32'
> ;;
> x86_64)
> - CPU_CFLAGS="-m64"
> + # ??? Only extremely old AMD cpus do not have cmpxchg16b.
> + # If we truly care, we should simply detect this case at
> + # runtime and generate the fallback to serial emulation.
> + CPU_CFLAGS="-m64 -mcx16"
> LDFLAGS="-m64 $LDFLAGS"
> cc_i386='$(CC) -m32'
> ;;
> @@ -4434,6 +4437,26 @@ if compile_prog "" "" ; then
> int128=yes
> fi
>
> +#########################################
> +# See if 128-bit atomic operations are supported.
> +
> +atomic128=no
> +if test "$int128" = "yes"; then
> + cat > $TMPC << EOF
> +int main(void)
> +{
> + unsigned __int128 x = 0, y = 0;
> + y = __atomic_load_16(&x, 0);
> + __atomic_store_16(&x, y, 0);
> + __atomic_compare_exchange_16(&x, &y, x, 0, 0, 0);
> + return 0;
> +}
> +EOF
> + if compile_prog "" "" ; then
> + atomic128=yes
> + fi
> +fi
Would it be correct to just trust that gcc is doing the right thing?
As in this delta over the patch:
--- a/configure
+++ b/configure
@@ -1201,10 +1201,7 @@ case "$cpu" in
cc_i386='$(CC) -m32'
;;
x86_64)
- # ??? Only extremely old AMD cpus do not have cmpxchg16b.
- # If we truly care, we should simply detect this case at
- # runtime and generate the fallback to serial emulation.
- CPU_CFLAGS="-m64 -mcx16"
+ CPU_CFLAGS="-m64"
LDFLAGS="-m64 $LDFLAGS"
cc_i386='$(CC) -m32'
;;
@@ -4454,6 +4451,10 @@ int main(void)
EOF
if compile_prog "" "" ; then
atomic128=yes
+ elif compile_prog "-mcx16" "" ; then
+ QEMU_CFLAGS="$QEMU_CFLAGS -mcx16"
+ EXTRA_CFLAGS="$EXTRA_CFLAGS -mcx16"
+ atomic128=yes
fi
fi
I might be missing other CFLAGS to be set, but the idea is that
if a program with __atomic[..]_16 links, then we should be OK.
This way we would handle correctly even those old AMD cpus,
and would also handle non-x86 architectures that implement
cmpxchg16.
Emilio
- [Qemu-devel] [PATCH v2 02/27] atomics: add atomic_op_fetch variants, (continued)
- [Qemu-devel] [PATCH v2 02/27] atomics: add atomic_op_fetch variants, Richard Henderson, 2016/07/01
- [Qemu-devel] [PATCH v2 08/27] HACK: Always enable parallel_cpus, Richard Henderson, 2016/07/01
- [Qemu-devel] [PATCH v2 01/27] atomics: add atomic_xor, Richard Henderson, 2016/07/01
- [Qemu-devel] [PATCH v2 11/27] target-i386: emulate LOCK'ed cmpxchg using cmpxchg helpers, Richard Henderson, 2016/07/01
- [Qemu-devel] [PATCH v2 06/27] int128: Use complex numbers if advisable, Richard Henderson, 2016/07/01
- [Qemu-devel] [PATCH v2 10/27] tcg: Add atomic128 helpers, Richard Henderson, 2016/07/01
- Re: [Qemu-devel] [PATCH v2 10/27] tcg: Add atomic128 helpers,
Emilio G. Cota <=
- [Qemu-devel] [PATCH v2 07/27] tcg: Add EXCP_ATOMIC, Richard Henderson, 2016/07/01
- [Qemu-devel] [PATCH v2 13/27] target-i386: emulate LOCK'ed INC using atomic helper, Richard Henderson, 2016/07/01
- [Qemu-devel] [PATCH v2 09/27] tcg: Add atomic helpers, Richard Henderson, 2016/07/01
- [Qemu-devel] [PATCH v2 15/27] target-i386: emulate LOCK'ed NEG using cmpxchg helper, Richard Henderson, 2016/07/01
- [Qemu-devel] [PATCH v2 16/27] target-i386: emulate LOCK'ed XADD using atomic helper, Richard Henderson, 2016/07/01
- [Qemu-devel] [PATCH v2 12/27] target-i386: emulate LOCK'ed OP instructions using atomic helpers, Richard Henderson, 2016/07/01
- [Qemu-devel] [PATCH v2 14/27] target-i386: emulate LOCK'ed NOT using atomic helper, Richard Henderson, 2016/07/01
- [Qemu-devel] [PATCH v2 18/27] target-i386: emulate XCHG using atomic helper, Richard Henderson, 2016/07/01
- [Qemu-devel] [PATCH v2 19/27] target-i386: remove helper_lock(), Richard Henderson, 2016/07/01