util: Add and use functions to calculate min and max int for a size
Many places need to know the maximum or minimum possible value for a given size integer... so everyone just open-codes their favorite version. There is some potential to hit either undefined or implementation-defined behavior, so having one version that Just Works seems beneficial. v2: Fix copy-and-pasted bug (INT64_MAX instead of INT64_MIN) in u_intmin. Noticed by CI. Lol. Rename functions `s/u_(uint|int)(min|max)/u_\1N_\2/g`. Suggested by Jason. Add some unit tests that would have caught the copy-and-paste bug before wasting CI time. Change the implementation of u_intN_min to use the same pattern as stdint.h. This avoids the integer division. Noticed by Jason. v3: Add changes to convert_clear_color (src/gallium/drivers/iris/iris_clear.c). Suggested by Nanley. Reviewed-by: Jason Ekstrand <jason@jlekstrand.net> Suggested-by: Jason Ekstrand <jason@jlekstrand.net> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/12177>
This commit is contained in:
@@ -368,7 +368,7 @@ match_value(const nir_search_value *value, nir_alu_instr *instr, unsigned src,
|
||||
case nir_type_uint:
|
||||
case nir_type_bool: {
|
||||
unsigned bit_size = nir_src_bit_size(instr->src[src].src);
|
||||
uint64_t mask = bit_size == 64 ? UINT64_MAX : (1ull << bit_size) - 1;
|
||||
uint64_t mask = u_uintN_max(bit_size);
|
||||
for (unsigned i = 0; i < num_components; ++i) {
|
||||
uint64_t val = nir_src_comp_as_uint(instr->src[src].src,
|
||||
new_swizzle[i]);
|
||||
|
Reference in New Issue
Block a user