mirror of
https://github.com/jedisct1/libsodium.git
synced 2026-08-25 08:37:13 +09:00
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:
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;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user