mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-03-06 12:10:45 +01:00
aco: implement nir_op_isign on SI/CI
Reviewed-by: Rhys Perry <pendingchaos02@gmail.com>
This commit is contained in:
parent
b8783973cd
commit
a8195bdf2e
1 changed files with 7 additions and 2 deletions
|
|
@ -835,8 +835,13 @@ void visit_alu_instr(isel_context *ctx, nir_alu_instr *instr)
|
|||
bld.sop2(aco_opcode::s_add_i32, Definition(dst), bld.def(s1, scc), gtz, tmp);
|
||||
} else if (dst.regClass() == s2) {
|
||||
Temp neg = bld.sop2(aco_opcode::s_ashr_i64, bld.def(s2), bld.def(s1, scc), src, Operand(63u));
|
||||
Temp neqz = bld.sopc(aco_opcode::s_cmp_lg_u64, bld.def(s1, scc), src, Operand(0u));
|
||||
bld.sop2(aco_opcode::s_or_b64, Definition(dst), bld.def(s1, scc), neg, neqz);
|
||||
Temp neqz;
|
||||
if (ctx->program->chip_class >= GFX8)
|
||||
neqz = bld.sopc(aco_opcode::s_cmp_lg_u64, bld.def(s1, scc), src, Operand(0u));
|
||||
else
|
||||
neqz = bld.sop2(aco_opcode::s_or_b64, bld.def(s2), bld.def(s1, scc), src, Operand(0u)).def(1).getTemp();
|
||||
/* SCC gets zero-extended to 64 bit */
|
||||
bld.sop2(aco_opcode::s_or_b64, Definition(dst), bld.def(s1, scc), neg, bld.scc(neqz));
|
||||
} else if (dst.regClass() == v1) {
|
||||
Temp tmp = bld.vop2(aco_opcode::v_ashrrev_i32, bld.def(v1), Operand(31u), src);
|
||||
Temp gtz = bld.vopc(aco_opcode::v_cmp_ge_i32, bld.hint_vcc(bld.def(bld.lm)), Operand(0u), src);
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue