mirror of
https://git.eden-emu.dev/eden-emu/eden.git
synced 2025-07-24 11:25:46 +00:00
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.
This commit is contained in:
parent
6404cd824b
commit
45cb8fc72a
1 changed files with 2 additions and 2 deletions
|
@ -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) {
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue