summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/compiler/nir/nir_constant_expressions.py2
-rw-r--r--src/compiler/nir/nir_opcodes.py2
2 files changed, 3 insertions, 1 deletions
diff --git a/src/compiler/nir/nir_constant_expressions.py b/src/compiler/nir/nir_constant_expressions.py
index 0f89e90d7b7..f26fd0a3ea2 100644
--- a/src/compiler/nir/nir_constant_expressions.py
+++ b/src/compiler/nir/nir_constant_expressions.py
@@ -66,6 +66,8 @@ template = """\
#include "util/bigmath.h"
#include "nir_constant_expressions.h"
+#define MAX_UINT_FOR_SIZE(bits) (UINT64_MAX >> (64 - (bits)))
+
/**
* Evaluate one component of packSnorm4x8.
*/
diff --git a/src/compiler/nir/nir_opcodes.py b/src/compiler/nir/nir_opcodes.py
index 0f56dd9596c..d35d820aa5b 100644
--- a/src/compiler/nir/nir_opcodes.py
+++ b/src/compiler/nir/nir_opcodes.py
@@ -488,7 +488,7 @@ binop("iadd_sat", tint, commutative + associative, """
(src0 < src0 + src1 ? (1ull << (bit_size - 1)) : src0 + src1)
""")
binop("uadd_sat", tuint, commutative,
- "(src0 + src1) < src0 ? UINT64_MAX : (src0 + src1)")
+ "(src0 + src1) < src0 ? MAX_UINT_FOR_SIZE(sizeof(src0) * 8) : (src0 + src1)")
binop("isub_sat", tint, "", """
src1 < 0 ?
(src0 - src1 < src0 ? (1ull << (bit_size - 1)) - 1 : src0 - src1) :