From 25738bb9c75f94b451201acfd6bcab13bdeee512 Mon Sep 17 00:00:00 2001 From: Roy Li Date: Thu, 5 May 2016 09:52:01 +0800 Subject: [PATCH] [PATCH] avoid gcc optimize-away the loops Upstream-Status: pending Change expression used in do_integer_mul and do_uint64_mul benchmarks so GCC doesn't optimize-away the loops, other things are same: - TEN(r *= s;); r -= t; + i = 0; + while ( i++ < 10) + r *= s; + r -= t; and TEN is macro: #define TEN(a) a a a a a a a a a a Signed-off-by: Roy Li --- src/lat_ops.c | 30 +++++++++++++++++++++++++----- 1 file changed, 25 insertions(+), 5 deletions(-) diff --git a/src/lat_ops.c b/src/lat_ops.c index d343ff3..457072b 100644 --- a/src/lat_ops.c +++ b/src/lat_ops.c @@ -126,11 +126,23 @@ do_integer_mul(iter_t iterations, void* cookie) struct _state *pState = (struct _state*)cookie; register int r = pState->N + 37431; register int s = pState->N + 4; - register int t = r * s * s * s * s * s * s * s * s * s * s - r; + register int t = r; + int i = 0; + + while ( i++ < 10) + t *= s; + t -= r; while (iterations-- > 0) { - TEN(r *= s;); r -= t; - TEN(r *= s;); r -= t; + i = 0; + while ( i++ < 10) + r *= s; + r -= t; + + i = 0; + while ( i++ < 10) + r *= s; + r -= t; } use_int(r); } @@ -207,13 +219,21 @@ do_int64_mul(iter_t iterations, void* cookie) register int64 r = (int64)pState->N + 37420; register int64 s = (int64)pState->N + 4; register int64 t; + int i = 0; r += (int64)(pState->N + 6)<<32; t = r * s * s * s * s * s * s * s * s * s * s - r; while (iterations-- > 0) { - TEN(r *= s;); r -= t; - TEN(r *= s;); r -= t; + i = 0; + while ( i++ < 10) + r *= s; + r -= t; + + i = 0; + while ( i++ < 10) + r *= s; + r -= t; } use_int((int)r); }