Handled consistently with computational atomics.
Signed-off-by: Alyssa Rosenzweig <alyssa@collabora.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/15223>
<opt>aand</opt>
<opt>aor</opt>
<opt>axor</opt>
+ <opt>axchg</opt> <!-- For Valhall -->
+ <opt>acmpxchg</opt> <!-- For Valhall -->
</mod>
<!-- not actually encoded, but used for IR -->
<immediate name="sr_count" size="4" pseudo="true"/>
unsigned
bi_count_read_registers(const bi_instr *ins, unsigned s)
{
- /* ATOM reads 1 but writes 2 */
+ /* ATOM reads 1 but writes 2. Exception for ACMPXCHG */
if (s == 0 && ins->op == BI_OPCODE_ATOM_RETURN_I32)
- return 1;
+ return (ins->atom_opc == BI_ATOM_OPC_ACMPXCHG) ? 2 : 1;
else if (s == 0 && bi_opcode_props[ins->op].sr_read)
return bi_count_staging_registers(ins);
else if (s == 4 && ins->op == BI_OPCODE_BLEND)