aboutsummaryrefslogtreecommitdiffstats
path: root/test/monniaux/binary_search
diff options
context:
space:
mode:
authorDavid Monniaux <david.monniaux@univ-grenoble-alpes.fr>2019-04-08 16:01:06 +0200
committerDavid Monniaux <david.monniaux@univ-grenoble-alpes.fr>2019-04-08 16:01:06 +0200
commit6e9f3d396d4087150f8ec148802c32252eaeead5 (patch)
treec4a989d2bf039412240a29d2e5c39af4c74a1b23 /test/monniaux/binary_search
parent8e760a22e68b9d53022856998c82d77f3be6124b (diff)
downloadcompcert-kvx-6e9f3d396d4087150f8ec148802c32252eaeead5.tar.gz
compcert-kvx-6e9f3d396d4087150f8ec148802c32252eaeead5.zip
better intermediate point
Diffstat (limited to 'test/monniaux/binary_search')
-rw-r--r--test/monniaux/binary_search/binary_search.c13
1 files changed, 8 insertions, 5 deletions
diff --git a/test/monniaux/binary_search/binary_search.c b/test/monniaux/binary_search/binary_search.c
index df9b7b46..d5839955 100644
--- a/test/monniaux/binary_search/binary_search.c
+++ b/test/monniaux/binary_search/binary_search.c
@@ -29,11 +29,13 @@ int my_bsearch2 (data *a, index n, data x) {
index i = 0, j = n - 1;
while (i <= j) {
index k = (i + j) / 2;
- if (a[k] == x) {
+ index kp1 = k+1, km1 = k-1;
+ data ak = a[k];
+ i = TERNARY32(ak < x, kp1, i);
+ j = TERNARY32(ak > x, km1, j);
+ if (ak == x) {
return k;
}
- i = TERNARY32(a[k] < x, k+1, i);
- j = TERNARY32(a[k] > x, k-1, j);
}
return -1;
}
@@ -43,10 +45,11 @@ int my_bsearch3 (data *a, index n, data x) {
k = (i + j) / 2;
while (i <= j) {
index kp1 = k+1, km1 = k-1;
- _Bool lt = a[k] < x, gt = a[k] > x;
+ data ak = a[k];
+ _Bool lt = ak < x, gt = ak > x;
i = TERNARY32(lt, kp1, i);
j = TERNARY32(gt, km1, j);
- if (a[k] == x) {
+ if (ak == x) {
goto end;
}
k = (i + j) / 2;