diff options
author | David Monniaux <david.monniaux@univ-grenoble-alpes.fr> | 2019-04-08 16:01:06 +0200 |
---|---|---|
committer | David Monniaux <david.monniaux@univ-grenoble-alpes.fr> | 2019-04-08 16:01:06 +0200 |
commit | 6e9f3d396d4087150f8ec148802c32252eaeead5 (patch) | |
tree | c4a989d2bf039412240a29d2e5c39af4c74a1b23 /test | |
parent | 8e760a22e68b9d53022856998c82d77f3be6124b (diff) | |
download | compcert-kvx-6e9f3d396d4087150f8ec148802c32252eaeead5.tar.gz compcert-kvx-6e9f3d396d4087150f8ec148802c32252eaeead5.zip |
better intermediate point
Diffstat (limited to 'test')
-rw-r--r-- | test/monniaux/binary_search/binary_search.c | 13 |
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; |