blob: ff926548b6de2aeaca4e245d4366d13c1865328a [file] [log] [blame]
Brad Bishop316dfdd2018-06-25 12:45:53 -04001From 25738bb9c75f94b451201acfd6bcab13bdeee512 Mon Sep 17 00:00:00 2001
2From: Roy Li <rongqing.li@windriver.com>
3Date: Thu, 5 May 2016 09:52:01 +0800
4Subject: [PATCH] [PATCH] avoid gcc optimize-away the loops
Patrick Williamsb48b7b42016-08-17 15:04:38 -05005
Andrew Geissler6aa7eec2023-03-03 12:41:14 -06006Upstream-Status: Pending
Patrick Williamsb48b7b42016-08-17 15:04:38 -05007
8Change expression used in do_integer_mul and do_uint64_mul
9benchmarks so GCC doesn't optimize-away the loops, other
10things are same:
11- TEN(r *= s;); r -= t;
12+ i = 0;
13+ while ( i++ < 10)
14+ r *= s;
15+ r -= t;
16
17and TEN is macro:
18 #define TEN(a) a a a a a a a a a a
19
20Signed-off-by: Roy Li <rongqing.li@windriver.com>
Brad Bishop316dfdd2018-06-25 12:45:53 -040021
Patrick Williamsb48b7b42016-08-17 15:04:38 -050022---
23 src/lat_ops.c | 30 +++++++++++++++++++++++++-----
24 1 file changed, 25 insertions(+), 5 deletions(-)
25
26diff --git a/src/lat_ops.c b/src/lat_ops.c
27index d343ff3..457072b 100644
28--- a/src/lat_ops.c
29+++ b/src/lat_ops.c
30@@ -126,11 +126,23 @@ do_integer_mul(iter_t iterations, void* cookie)
31 struct _state *pState = (struct _state*)cookie;
32 register int r = pState->N + 37431;
33 register int s = pState->N + 4;
34- register int t = r * s * s * s * s * s * s * s * s * s * s - r;
35+ register int t = r;
36+ int i = 0;
37+
38+ while ( i++ < 10)
39+ t *= s;
40+ t -= r;
41
42 while (iterations-- > 0) {
43- TEN(r *= s;); r -= t;
44- TEN(r *= s;); r -= t;
45+ i = 0;
46+ while ( i++ < 10)
47+ r *= s;
48+ r -= t;
49+
50+ i = 0;
51+ while ( i++ < 10)
52+ r *= s;
53+ r -= t;
54 }
55 use_int(r);
56 }
57@@ -207,13 +219,21 @@ do_int64_mul(iter_t iterations, void* cookie)
58 register int64 r = (int64)pState->N + 37420;
59 register int64 s = (int64)pState->N + 4;
60 register int64 t;
61+ int i = 0;
62
63 r += (int64)(pState->N + 6)<<32;
64 t = r * s * s * s * s * s * s * s * s * s * s - r;
65
66 while (iterations-- > 0) {
67- TEN(r *= s;); r -= t;
68- TEN(r *= s;); r -= t;
69+ i = 0;
70+ while ( i++ < 10)
71+ r *= s;
72+ r -= t;
73+
74+ i = 0;
75+ while ( i++ < 10)
76+ r *= s;
77+ r -= t;
78 }
79 use_int((int)r);
80 }