Message ID | 20160708030028.GB28765@flamenco (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
On 07/07/2016 08:00 PM, Emilio G. Cota wrote: > 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 <rth@twiddle.net> >> --- >> 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" ... > if compile_prog "" "" ; then > atomic128=yes > + elif compile_prog "-mcx16" "" ; then > + QEMU_CFLAGS="$QEMU_CFLAGS -mcx16" > + EXTRA_CFLAGS="$EXTRA_CFLAGS -mcx16" > + atomic128=yes Your change doesn't change anything. If the user gave -march=haswell, then cx16 is enabled and the first test succeeds. If the user gave -march=k8, the initial test would fail, but the second test would explicitly add cx16, and the second test would succeed. In all cases, cx16 gets enabled. r~
--- 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