WIP ss16bit_simd: refactor load_found

This also affects the return value in some less common cases.
This commit is contained in:
Vladimír Čunát 2023-12-17 09:17:39 +01:00
parent 1c7c93dcf9
commit 231ed0c29b
No known key found for this signature in database
GPG key ID: E747DF1F9575A3AA

View file

@ -207,17 +207,8 @@ bool kru_limited(struct kru *kru, void *buf, size_t buf_len, uint32_t time_now,
}
#endif
if (load) {
load_found:;
const uint32_t limit = (1<<16) - price;
if (*load >= limit) return true;
if (__builtin_add_overflow(*load, price, load)) {
*load = (1<<16) - 1;
return true;
} else {
return false;
}
}
if (load)
goto load_found;
// No match, so find position of the smallest load.
int min_li = 0;
@ -271,9 +262,15 @@ bool kru_limited(struct kru *kru, void *buf, size_t buf_len, uint32_t time_now,
l[min_li]->ids[min_i] = id;
load = &l[min_li]->loads[min_i]; // TODO: goto load_found?
if (__builtin_add_overflow(*load, price, load))
load_found:;
const uint32_t limit = (1<<16) - price;
if (*load >= limit) return true;
if (__builtin_add_overflow(*load, price, load)) {
*load = (1<<16) - 1;
return false; // Let's not limit it, though its questionable.
return true;
} else {
return false;
}
}
#ifdef __clang__