Skip to content

Commit 06c3468

Browse files
committed
Fixed emulated float operator+ bug
1 parent 2bbbf52 commit 06c3468

File tree

2 files changed

+10
-4
lines changed

2 files changed

+10
-4
lines changed

examples_tests

include/nbl/builtin/hlsl/emulated/float64_t.hlsl

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -154,14 +154,20 @@ namespace hlsl
154154
if ((data | ieee754::traits<float64_t>::signMask) == (rhs.data | ieee754::traits<float64_t>::signMask))
155155
return _static_cast<this_t>(0ull);
156156

157-
uint64_t rhsNormMantissaHigh = shiftAmount >= 64 ? 0ull : rhsNormMantissa >> shiftAmount;
157+
uint64_t rhsNormMantissaHigh = shiftAmount >= 64u ? 0ull : rhsNormMantissa >> shiftAmount;
158158
uint64_t rhsNormMantissaLow = 0ull;
159159
if (shiftAmount < 128)
160160
{
161161
if (shiftAmount >= 64)
162+
{
162163
rhsNormMantissaLow = rhsNormMantissa >> (shiftAmount - 64);
164+
}
163165
else
164-
rhsNormMantissaLow = rhsNormMantissa << (64 - shiftAmount);
166+
{
167+
const uint32_t lowMantissaShiftAmount = 64 - shiftAmount;
168+
if(lowMantissaShiftAmount < 64)
169+
rhsNormMantissaLow = rhsNormMantissa << lowMantissaShiftAmount;
170+
}
165171
}
166172

167173
const int64_t mantissaDiff = int64_t(lhsNormMantissa) - int64_t(rhsNormMantissaHigh);
@@ -179,7 +185,7 @@ namespace hlsl
179185
}
180186
else
181187
{
182-
rhsNormMantissa >>= shiftAmount;
188+
rhsNormMantissa = shiftAmount > 63 ? 0ull : rhsNormMantissa >> shiftAmount;
183189
resultMantissa = lhsNormMantissa + rhsNormMantissa;
184190

185191
if (resultMantissa & 1ull << 53)

0 commit comments

Comments
 (0)