SPU LLVM: Remove wrong zero sign fixup

This commit is contained in:
Elad Ashkenazi 2024-04-28 20:01:30 +03:00
parent e32c48d0dd
commit 430b57833d

View file

@ -5987,29 +5987,24 @@ public:
// This is odd since SPU code could just use the FM instruction, but it seems common enough // This is odd since SPU code could just use the FM instruction, but it seems common enough
if (auto [ok, data] = get_const_vector(c.value, m_pos); ok) if (auto [ok, data] = get_const_vector(c.value, m_pos); ok)
{ {
if (is_spu_float_zero(data, -1)) if (is_spu_float_zero(data, 0))
{ {
return eval(a * b); return eval(a * b);
} }
if (!m_use_fma && is_spu_float_zero(data, +1))
{
return eval(a * b + fsplat<f32[4]>(0.f));
}
} }
if ([&]() if ([&]()
{ {
if (auto [ok, data] = get_const_vector(a.value, m_pos); ok) if (auto [ok, data] = get_const_vector(a.value, m_pos); ok)
{ {
if (!is_spu_float_zero(data, +1)) if (!is_spu_float_zero(data, 0))
{ {
return false; return false;
} }
if (auto [ok0, data0] = get_const_vector(b.value, m_pos); ok0) if (auto [ok0, data0] = get_const_vector(b.value, m_pos); ok0)
{ {
if (is_spu_float_zero(data0, +1)) if (is_spu_float_zero(data0, 0))
{ {
return true; return true;
} }
@ -6018,14 +6013,14 @@ public:
if (auto [ok, data] = get_const_vector(a.value, m_pos); ok) if (auto [ok, data] = get_const_vector(a.value, m_pos); ok)
{ {
if (!is_spu_float_zero(data, -1)) if (!is_spu_float_zero(data, 0))
{ {
return false; return false;
} }
if (auto [ok0, data0] = get_const_vector(b.value, m_pos); ok0) if (auto [ok0, data0] = get_const_vector(b.value, m_pos); ok0)
{ {
if (is_spu_float_zero(data0, -1)) if (is_spu_float_zero(data0, 0))
{ {
return true; return true;
} }