From: "Andreas Färber" <afaerber@suse.de>
To: qemu-devel@nongnu.org
Cc: "Rui Carmo" <rui.carmo@gmail.com>,
"Peter Maydell" <peter.maydell@linaro.org>,
"Pavel Borzenkov" <pavel.borzenkov@gmail.com>,
"Alexander Graf" <agraf@suse.de>,
"Eric Sunshine" <sunshine@sunshineco.com>,
"Blue Swirl" <blauwirbel@gmail.com>,
"Christophe Lyon" <christophe.lyon@st.com>,
malc <av1474@comtv.ru>, "Juan Pineda" <juan@logician.com>,
"Andreas Färber" <afaerber@suse.de>,
"Aurélien Jarno" <aurelien@aurel32.net>
Subject: [Qemu-devel] [PATCH 00/14] softfloat: Use POSIX integer types - benchmarked
Date: Mon, 16 Jan 2012 01:46:49 +0100 [thread overview]
Message-ID: <1326674823-13069-1-git-send-email-afaerber@suse.de> (raw)
Hello,
Based on a suggestion from Alex earlier this week, I managed to run a
simple benchmark of softfloat performance with qemu-arm, as requested by
Peter.
I went for the Whetstone floating point benchmark:
http://en.wikipedia.org/wiki/Whetstone_%28benchmark%29
For a loop count of 100,000 and 5 runs I got the following results:
current: 138.9-204.1 Whetstone-MIPS
[u]int*_t: 185.2-188.7 Whetstone-MIPS
[u]int_fast*_t: 285.7-294.1 Whetstone-MIPS
Toshiba AC100: 833.3-909.1 Whetstone-MIPS
These results seem to indicate that the "fast" POSIX types are indeed
somewhat faster, both compared to exact-size POSIX types and to the
current state.
As a short summary of previous discussions, softfloat had these typedefs:
[s]bits{8,16,32,64} - exact-size semantics, => [u]int{8,16,32,64}_t
[u]int{8,16,32,64} - minimum-width semantics, host-independent
AIX, Mac OS X and BeOS/Haiku have some or all of the latter already,
leading to type conflicts.
I had originally suggested the POSIX [u]int_least*_t types but we
rather preferred [u]int_fast*_t, worried about performance, to get the
fastest least-width types. For either of these the actual width depends
on system headers. On the other hand it would be futile to try to
performance-optimize integer types for every possible host inside QEMU.
If we don't mind performance or dislike host-dependencies, we could just
use [u]int*_t, but then with everything [u]int*_t we can't easily change
this in case it bites us in the future.
Personally I prefer those 'fast' types, because that way we get to
keep the distinction between what was formerly [s]bits* and [u]int* types.
The clear name distinction would even allow to do conversions by regex.
However, I noticed that target-mips/cpu.h had typedefs for
uint_fast{8,16}_t for Solaris <= 9. So I moved these to osdep.h and
added typedefs for the newly needed types.
Coccinelle needed some tweaking for the macros and only did the uint16
conversion fully. For the others I was too impatient, so I hand-converted
the remaining occurrences that Coccinelle did not catch.
Since Coccinelle stripped leading whitespace before types replaced anyway,
I hand-edited (and git-am'ed) the patches to make lines touched adhere to
Coding Style.
Patches 1-3 fix misuses of softfloat types that were introduced since the
last series of fixes. These could be cherry-picked.
Patch 4 fixes a misuse of int inside softfloat. This could be cherry-picked.
Patch 5 moves the Solaris typedefs to a central header, resolving an XXX
present since their introduction in r1979.
Patches 6-13 convert the softfloat integer types.
Patch 14 converts the 'flag' type to bool, removing the last softfloat type.
Please test that this doesn't break / unbreaks Your Favorite Host:
http://repo.or.cz/w/qemu/afaerber.git/shortlog/refs/heads/softfloat
Regards,
Andreas
Cc: Alexander Graf <agraf@suse.de>
Cc: Peter Maydell <peter.maydell@linaro.org>
Cc: Aurélien Jarno <aurelien@aurel32.net>
Cc: malc <av1474@comtv.ru>
Cc: Ben Taylor <bentaylor.solx86@gmail.com>
Cc: Rui Carmo <rui.carmo@gmail.com>
Cc: Eric Sunshine <sunshine@sunshineco.com>
Cc: Pavel Borzenkov <pavel.borzenkov@gmail.com>
Cc: Juan Pineda <juan@logician.com>
Host: HP Envy w/ Intel Core i7-2630QM 2.0 GHz (openSUSE 12.1)
QEMU: 2be276242135eac6e86be2a8259545e620c94107 plus + 2 patches
Configuration: --prefix=/usr/local
Command: arm-linux-user/qemu-arm path/to/whetstone -c 100000
Source: http://www.netlib.org/benchmark/whetstone.c
Compiler: gcc (Ubuntu/Linaro 4.4.4-14ubuntu5) 4.4.5
Compilation: gcc -O -s whetstone.c -o whetstone -lm -static
[u]int*_t:
---
diff --git a/fpu/softfloat.h b/fpu/softfloat.h
index 07c2929..6fe19d7 100644
--- a/fpu/softfloat.h
+++ b/fpu/softfloat.h
@@ -57,11 +57,11 @@ typedef uint8_t flag;
typedef uint8_t uint8;
typedef int8_t int8;
#ifndef _AIX
-typedef int uint16;
-typedef int int16;
+typedef uint16_t uint16;
+typedef int16_t int16;
#endif
-typedef unsigned int uint32;
-typedef signed int int32;
+typedef uint32_t uint32;
+typedef int32_t int32;
typedef uint64_t uint64;
typedef int64_t int64;
---
[u]int_fast*_t:
---
diff --git a/fpu/softfloat.h b/fpu/softfloat.h
index 07c2929..43486aa 100644
--- a/fpu/softfloat.h
+++ b/fpu/softfloat.h
@@ -54,16 +54,16 @@ these four paragraphs for those parts of this code
that are retained.
| to the same as `int'.
*----------------------------------------------------------------------------*/
typedef uint8_t flag;
-typedef uint8_t uint8;
-typedef int8_t int8;
+typedef uint_fast8_t uint8;
+typedef int_fast8_t int8;
#ifndef _AIX
-typedef int uint16;
-typedef int int16;
+typedef uint_fast16_t uint16;
+typedef int_fast16_t int16;
#endif
-typedef unsigned int uint32;
-typedef signed int int32;
-typedef uint64_t uint64;
-typedef int64_t int64;
+typedef uint_fast32_t uint32;
+typedef int_fast32_t int32;
+typedef uint_fast64_t uint64;
+typedef int_fast64_t int64;
#define LIT64( a ) a##LL
#define INLINE static inline
---
spatch(1) -macro_file_builtins:
---
#define STATUS_PARAM
#define STATUS_VAR
#define INLINE static inline
#define MINMAX
---
Andreas Färber (13):
lm32: Fix mixup of uint32 and uint32_t
target-sparc: Fix mixup of uint64 and uint64_t
qemu-tool: Fix mixup of int64 and int64_t
softfloat: Fix mixups of int and int16
softfloat: Replace uint16 type with uint_fast16_t
softfloat: Replace int16 type with int_fast16_t
softfloat: Remove unused uint8 type
softfloat: Replace int8 type with int_fast8_t
softfloat: Replace uint32 type with uint_fast32_t
softfloat: Replace int32 type with int_fast32_t
softfloat: Replace uint64 type with uint_fast64_t
softfloat: Replace int64 type with int_fast64_t
softfloat: Replace flag type with bool
fpu/softfloat-macros.h | 52 ++--
fpu/softfloat-specialize.h | 56 ++--
fpu/softfloat.c | 626 ++++++++++++++++++++--------------------
fpu/softfloat.h | 115 ++++-----
hw/milkymist-vgafb_template.h | 2 +-
qemu-tool.c | 4 +-
target-sparc/vis_helper.c | 2 +-
7 files changed, 419 insertions(+), 438 deletions(-)
--
1.7.7
next reply other threads:[~2012-01-16 0:49 UTC|newest]
Thread overview: 40+ messages / expand[flat|nested] mbox.gz Atom feed top
2012-01-16 0:46 Andreas Färber [this message]
2012-01-16 0:46 ` [Qemu-devel] [PATCH 01/14] lm32: Fix mixup of uint32 and uint32_t Andreas Färber
2012-01-16 11:27 ` Peter Maydell
2012-01-16 12:18 ` Andreas Färber
2012-01-16 21:39 ` Michael Walle
2012-01-17 9:44 ` [Qemu-devel] [PATCH v2] " Andreas Färber
2012-01-19 8:17 ` [Qemu-devel] [Qemu-trivial] " Stefan Hajnoczi
2012-01-16 0:46 ` [Qemu-devel] [PATCH 02/14] target-sparc: Fix mixup of uint64 and uint64_t Andreas Färber
2012-01-21 18:51 ` Blue Swirl
2012-01-22 2:03 ` Andreas Färber
2012-01-22 8:09 ` Blue Swirl
2012-01-22 10:02 ` Blue Swirl
2012-01-16 0:46 ` [Qemu-devel] [PATCH 03/14] qemu-tool: Fix mixup of int64 and int64_t Andreas Färber
2012-01-16 8:11 ` Stefan Hajnoczi
2012-01-16 0:46 ` [Qemu-devel] [PATCH 04/14] softfloat: Fix mixups of int and int16 Andreas Färber
2012-01-16 17:51 ` Peter Maydell
2012-01-16 0:46 ` [Qemu-devel] [PATCH 05/14] target-mips: Move definition of uint_fast{8, 16}_t to osdep.h Andreas Färber
2012-01-16 11:38 ` Peter Maydell
2012-01-16 12:13 ` Andreas Färber
2012-01-16 12:21 ` Peter Maydell
2012-01-16 12:24 ` Andreas Färber
2012-01-16 0:46 ` [Qemu-devel] [PATCH 06/14] softfloat: Replace uint16 type with uint_fast16_t Andreas Färber
2012-01-16 18:43 ` Peter Maydell
2012-01-16 0:46 ` [Qemu-devel] [PATCH 07/14] softfloat: Replace int16 type with int_fast16_t Andreas Färber
2012-01-16 0:46 ` [Qemu-devel] [PATCH 08/14] softfloat: Remove unused uint8 type Andreas Färber
2012-01-16 0:46 ` [Qemu-devel] [PATCH 09/14] softfloat: Replace int8 type with int_fast8_t Andreas Färber
2012-01-16 18:48 ` Peter Maydell
2012-01-16 0:46 ` [Qemu-devel] [PATCH 10/14] softfloat: Replace uint32 type with uint_fast32_t Andreas Färber
2012-01-16 0:47 ` [Qemu-devel] [PATCH 11/14] softfloat: Replace int32 type with int_fast32_t Andreas Färber
2012-01-16 0:47 ` [Qemu-devel] [PATCH 12/14] softfloat: Replace uint64 type with uint_fast64_t Andreas Färber
2012-01-16 0:47 ` [Qemu-devel] [PATCH 13/14] softfloat: Replace int64 type with int_fast64_t Andreas Färber
2012-01-16 0:47 ` [Qemu-devel] [PATCH 14/14] softfloat: Replace flag type with bool Andreas Färber
2012-01-16 19:02 ` [Qemu-devel] [PATCH 00/14] softfloat: Use POSIX integer types - benchmarked Peter Maydell
2012-01-16 19:12 ` Alexander Graf
2012-01-16 19:17 ` Peter Maydell
2012-01-16 19:18 ` Alexander Graf
2012-01-16 23:52 ` Peter Maydell
2012-01-17 0:05 ` Alexander Graf
2012-01-20 13:05 ` Peter Maydell
2012-01-23 17:41 ` Andreas Färber
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1326674823-13069-1-git-send-email-afaerber@suse.de \
--to=afaerber@suse.de \
--cc=agraf@suse.de \
--cc=aurelien@aurel32.net \
--cc=av1474@comtv.ru \
--cc=blauwirbel@gmail.com \
--cc=christophe.lyon@st.com \
--cc=juan@logician.com \
--cc=pavel.borzenkov@gmail.com \
--cc=peter.maydell@linaro.org \
--cc=qemu-devel@nongnu.org \
--cc=rui.carmo@gmail.com \
--cc=sunshine@sunshineco.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).