aboutsummaryrefslogtreecommitdiff
path: root/src/video_core/shader/decode/arithmetic_integer.cpp
diff options
context:
space:
mode:
authorReinUsesLisp <reinuseslisp@airmail.cc>2020-04-25 22:42:33 -0300
committerReinUsesLisp <reinuseslisp@airmail.cc>2020-04-25 22:57:54 -0300
commit45cb8fc72ac4fe349056371e7d6b80b679ace123 (patch)
tree6cd0335814b5dacb81ac60d1ffba9caa22164e67 /src/video_core/shader/decode/arithmetic_integer.cpp
parent6404cd824bd5db9519cec6fb07f2e5f67867946d (diff)
shader/arithmetic_integer: Change IAdd to UAdd to avoid signed overflow
Signed integer addition overflow might be undefined behavior. It's free to change operations to UAdd and use unsigned integers to avoid potential bugs.
Diffstat (limited to 'src/video_core/shader/decode/arithmetic_integer.cpp')
-rw-r--r--src/video_core/shader/decode/arithmetic_integer.cpp4
1 files changed, 2 insertions, 2 deletions
diff --git a/src/video_core/shader/decode/arithmetic_integer.cpp b/src/video_core/shader/decode/arithmetic_integer.cpp
index 2a3311cb8e..addd7f5333 100644
--- a/src/video_core/shader/decode/arithmetic_integer.cpp
+++ b/src/video_core/shader/decode/arithmetic_integer.cpp
@@ -40,12 +40,12 @@ u32 ShaderIR::DecodeArithmeticInteger(NodeBlock& bb, u32 pc) {
op_a = GetOperandAbsNegInteger(op_a, false, instr.alu_integer.negate_a, true);
op_b = GetOperandAbsNegInteger(op_b, false, instr.alu_integer.negate_b, true);
- Node value = Operation(OperationCode::IAdd, op_a, op_b);
+ Node value = Operation(OperationCode::UAdd, op_a, op_b);
if (instr.iadd.x) {
Node carry = GetInternalFlag(InternalFlag::Carry);
Node x = Operation(OperationCode::Select, std::move(carry), Immediate(1), Immediate(0));
- value = Operation(OperationCode::IAdd, std::move(value), std::move(x));
+ value = Operation(OperationCode::UAdd, std::move(value), std::move(x));
}
if (instr.generates_cc) {