Fix ref10 slide on PPC-VLE (#525)

* Use intermediate variables in slide() which removes ambiguity for the compiler and fixes a crash in the PPC_VLE build with -O1 flag (added bonus: smaller compiled code.)

* Fix formatting in slide() loop counter to match the previously just-formatted version.
This commit is contained in:
Chris Fogelklou
2017-04-03 21:00:36 -07:00
committed by Frank Denis
parent 7fa678bdca
commit 3f65a21212
@@ -1359,6 +1359,8 @@ slide(signed char *r, const unsigned char *a)
int i;
int b;
int k;
int ribs;
int cmp;
for (i = 0; i < 256; ++i) {
r[i] = 1 & (a[i >> 3] >> (i & 7));
@@ -1367,20 +1369,25 @@ slide(signed char *r, const unsigned char *a)
if (r[i]) {
for (b = 1; b <= 6 && i + b < 256; ++b) {
if (r[i + b]) {
if (r[i] + (r[i + b] << b) <= 15) {
r[i] += r[i + b] << b;
ribs = r[i + b] << b;
cmp = r[i] + ribs;
if (cmp <= 15) {
r[i] = cmp;
r[i + b] = 0;
} else if (r[i] - (r[i + b] << b) >= -15) {
r[i] -= r[i + b] << b;
for (k = i + b; k < 256; ++k) {
if (!r[k]) {
r[k] = 1;
break;
}
r[k] = 0;
}
} else {
break;
cmp = r[i] - ribs;
if (cmp >= -15) {
r[i] = cmp;
for (k = i + b; k < 256; ++k) {
if (!r[k]) {
r[k] = 1;
break;
}
r[k] = 0;
}
} else {
break;
}
}
}
}