summaryrefslogtreecommitdiff
path: root/util
diff options
context:
space:
mode:
authorRichard Henderson <rth@twiddle.net>2013-02-16 12:46:59 -0800
committerBlue Swirl <blauwirbel@gmail.com>2013-02-17 14:28:57 +0000
commitf540166b7dfdf4ec2057ac322d8cbfd0691e1d65 (patch)
tree9ed4b3eed2a58ad4c14ec8e728fedf70bbb4d905 /util
parentbe96bd3fbffde908a392c830c856063e122791c1 (diff)
downloadqemu-f540166b7dfdf4ec2057ac322d8cbfd0691e1d65.tar.gz
qemu-f540166b7dfdf4ec2057ac322d8cbfd0691e1d65.tar.bz2
qemu-f540166b7dfdf4ec2057ac322d8cbfd0691e1d65.zip
host-utils: Use __int128_t for mul[us]64
Replace some x86_64 specific inline assembly with something that all 64-bit hosts ought to optimize well. At worst this becomes a call to the gcc __multi3 routine, which is no worse than our implementation in util/host-utils.c. With gcc 4.7, we get identical code generation for x86_64. We now get native multiplication on ia64 and s390x hosts. With minor improvements to gcc we can get it for ppc64 as well. Signed-off-by: Richard Henderson <rth@twiddle.net> Signed-off-by: Blue Swirl <blauwirbel@gmail.com>
Diffstat (limited to 'util')
-rw-r--r--util/host-utils.c4
1 files changed, 2 insertions, 2 deletions
diff --git a/util/host-utils.c b/util/host-utils.c
index 5e3915abba..2d06a2cb78 100644
--- a/util/host-utils.c
+++ b/util/host-utils.c
@@ -30,7 +30,7 @@
//#define DEBUG_MULDIV
/* Long integer helpers */
-#if !defined(__x86_64__)
+#ifndef CONFIG_INT128
static void add128 (uint64_t *plow, uint64_t *phigh, uint64_t a, uint64_t b)
{
*plow += a;
@@ -102,4 +102,4 @@ void muls64 (uint64_t *plow, uint64_t *phigh, int64_t a, int64_t b)
a, b, *phigh, *plow);
#endif
}
-#endif /* !defined(__x86_64__) */
+#endif /* !CONFIG_INT128 */