I was just curious of how much the looping takes time without
conversion, so I added this.

My results on Intel(R) Core(TM) i5-2410M CPU @ 2.30GHz:

benchmarked noop:       1.876349827s
benchmarked magic:      2.245844470s
benchmarked div:        12.709085309s
benchmarked mul:        7.504838141s

Mul seems to take 15x the time magic does, cool!

Btw. the simple default cast of int32_t to double is slower than magic
for me, hence the use of union.

Signed-off-by: Pekka Paalanen <[email protected]>
---
 tests/fixed-benchmark.c |   16 ++++++++++++++++
 1 files changed, 16 insertions(+), 0 deletions(-)

diff --git a/tests/fixed-benchmark.c b/tests/fixed-benchmark.c
index 3f7aae3..0d7abd0 100644
--- a/tests/fixed-benchmark.c
+++ b/tests/fixed-benchmark.c
@@ -30,6 +30,21 @@
 volatile double global_d;
 
 static void
+noop_conversion(void)
+{
+       wl_fixed_t f;
+       union {
+               int64_t i;
+               double d;
+       } u;
+
+       for (f = 0; f < INT32_MAX; f++) {
+               u.i = f;
+               global_d = u.d;
+       }
+}
+
+static void
 magic_conversion(void)
 {
        wl_fixed_t f;
@@ -80,6 +95,7 @@ benchmark(const char *s, void (*f)(void))
 
 int main(int argc, char *argv[])
 {
+       benchmark("noop", noop_conversion);
        benchmark("magic", magic_conversion);
        benchmark("div", div_conversion);
        benchmark("mul", mul_conversion);
-- 
1.7.3.4

_______________________________________________
wayland-devel mailing list
[email protected]
http://lists.freedesktop.org/mailman/listinfo/wayland-devel

Reply via email to