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 <ppaalanen@gmail.com>
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;
int main(int argc, char *argv[])
{
+ benchmark("noop", noop_conversion);
benchmark("magic", magic_conversion);
benchmark("div", div_conversion);
benchmark("mul", mul_conversion);