aco: remove sign-extension in constantValue64()
Signed-off-by: Rhys Perry <pendingchaos02@gmail.com> Reviewed-by: Daniel Schürmann <daniel@schuermann.dev> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/7798>
This commit is contained in:
parent
8451911156
commit
24ee0f55f2
|
@ -642,7 +642,7 @@ public:
|
||||||
return isConstant() && constantValue() == cmp;
|
return isConstant() && constantValue() == cmp;
|
||||||
}
|
}
|
||||||
|
|
||||||
constexpr uint64_t constantValue64(bool signext=false) const noexcept
|
constexpr uint64_t constantValue64() const noexcept
|
||||||
{
|
{
|
||||||
if (constSize == 3) {
|
if (constSize == 3) {
|
||||||
if (reg_ <= 192)
|
if (reg_ <= 192)
|
||||||
|
@ -668,12 +668,10 @@ public:
|
||||||
case 247:
|
case 247:
|
||||||
return 0xC010000000000000;
|
return 0xC010000000000000;
|
||||||
}
|
}
|
||||||
} else if (constSize == 1) {
|
unreachable("invalid register for 64-bit constant");
|
||||||
return (signext && (data_.i & 0x8000u) ? 0xffffffffffff0000ull : 0ull) | data_.i;
|
} else {
|
||||||
} else if (constSize == 0) {
|
return data_.i;
|
||||||
return (signext && (data_.i & 0x80u) ? 0xffffffffffffff00ull : 0ull) | data_.i;
|
|
||||||
}
|
}
|
||||||
return (signext && (data_.i & 0x80000000u) ? 0xffffffff00000000ull : 0ull) | data_.i;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
constexpr bool isOfType(RegType type) const noexcept
|
constexpr bool isOfType(RegType type) const noexcept
|
||||||
|
|
|
@ -132,8 +132,8 @@ void build_merge_code(Program *program, Block *block, Definition dst, Operand pr
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool prev_is_constant = prev.isConstant() && prev.constantValue64(true) + 1u < 2u;
|
bool prev_is_constant = prev.isConstant() && prev.constantValue() + 1u < 2u;
|
||||||
bool cur_is_constant = cur.isConstant() && cur.constantValue64(true) + 1u < 2u;
|
bool cur_is_constant = cur.isConstant() && cur.constantValue() + 1u < 2u;
|
||||||
|
|
||||||
if (!prev_is_constant) {
|
if (!prev_is_constant) {
|
||||||
if (!cur_is_constant) {
|
if (!cur_is_constant) {
|
||||||
|
@ -141,22 +141,22 @@ void build_merge_code(Program *program, Block *block, Definition dst, Operand pr
|
||||||
bld.sop2(Builder::s_andn2, Definition(tmp1), bld.def(s1, scc), prev, Operand(exec, bld.lm));
|
bld.sop2(Builder::s_andn2, Definition(tmp1), bld.def(s1, scc), prev, Operand(exec, bld.lm));
|
||||||
bld.sop2(Builder::s_and, Definition(tmp2), bld.def(s1, scc), cur, Operand(exec, bld.lm));
|
bld.sop2(Builder::s_and, Definition(tmp2), bld.def(s1, scc), cur, Operand(exec, bld.lm));
|
||||||
bld.sop2(Builder::s_or, dst, bld.def(s1, scc), tmp1, tmp2);
|
bld.sop2(Builder::s_or, dst, bld.def(s1, scc), tmp1, tmp2);
|
||||||
} else if (cur.constantValue64(true)) {
|
} else if (cur.constantValue()) {
|
||||||
bld.sop2(Builder::s_or, dst, bld.def(s1, scc), prev, Operand(exec, bld.lm));
|
bld.sop2(Builder::s_or, dst, bld.def(s1, scc), prev, Operand(exec, bld.lm));
|
||||||
} else {
|
} else {
|
||||||
bld.sop2(Builder::s_andn2, dst, bld.def(s1, scc), prev, Operand(exec, bld.lm));
|
bld.sop2(Builder::s_andn2, dst, bld.def(s1, scc), prev, Operand(exec, bld.lm));
|
||||||
}
|
}
|
||||||
} else if (prev.constantValue64(true)) {
|
} else if (prev.constantValue()) {
|
||||||
if (!cur_is_constant)
|
if (!cur_is_constant)
|
||||||
bld.sop2(Builder::s_orn2, dst, bld.def(s1, scc), cur, Operand(exec, bld.lm));
|
bld.sop2(Builder::s_orn2, dst, bld.def(s1, scc), cur, Operand(exec, bld.lm));
|
||||||
else if (cur.constantValue64(true))
|
else if (cur.constantValue())
|
||||||
bld.copy(dst, Operand(UINT32_MAX, bld.lm == s2));
|
bld.copy(dst, Operand(UINT32_MAX, bld.lm == s2));
|
||||||
else
|
else
|
||||||
bld.sop1(Builder::s_not, dst, bld.def(s1, scc), Operand(exec, bld.lm));
|
bld.sop1(Builder::s_not, dst, bld.def(s1, scc), Operand(exec, bld.lm));
|
||||||
} else {
|
} else {
|
||||||
if (!cur_is_constant)
|
if (!cur_is_constant)
|
||||||
bld.sop2(Builder::s_and, dst, bld.def(s1, scc), cur, Operand(exec, bld.lm));
|
bld.sop2(Builder::s_and, dst, bld.def(s1, scc), cur, Operand(exec, bld.lm));
|
||||||
else if (cur.constantValue64(true))
|
else if (cur.constantValue())
|
||||||
bld.copy(dst, Operand(exec, bld.lm));
|
bld.copy(dst, Operand(exec, bld.lm));
|
||||||
else
|
else
|
||||||
bld.copy(dst, Operand(0u, bld.lm == s2));
|
bld.copy(dst, Operand(0u, bld.lm == s2));
|
||||||
|
|
Loading…
Reference in New Issue