agx: Add agx_alu_src_index helper for emit_alu

Since we don't use abs/neg in NIR, this just needs to construct
p_extract ops to deal with swizzles.

Signed-off-by: Alyssa Rosenzweig <alyssa@rosenzweig.io>
Acked-by: Jason Ekstrand <jason@jlekstrand.net>
Acked-by: Bas Nieuwenhuizen <bas@basnieuwenhuizen.nl>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/10582>
This commit is contained in:
Alyssa Rosenzweig 2021-04-11 15:09:36 -04:00 committed by Alyssa Rosenzweig
parent 22886f50f9
commit 7ad11e3923
1 changed files with 21 additions and 0 deletions

View File

@ -137,6 +137,27 @@ agx_emit_intrinsic(agx_builder *b, nir_intrinsic_instr *instr)
}
}
static agx_index
agx_alu_src_index(agx_builder *b, nir_alu_src src)
{
/* Check well-formedness of the input NIR */
ASSERTED unsigned bitsize = nir_src_bit_size(src.src);
unsigned comps = nir_src_num_components(src.src);
unsigned channel = src.swizzle[0];
assert(bitsize == 16 || bitsize == 32 || bitsize == 64);
assert(!(src.negate || src.abs));
assert(channel < comps);
agx_index idx = agx_src_index(&src.src);
/* We only deal with scalars, emit p_extract if needed */
if (comps > 1)
return agx_p_extract(b, idx, channel);
else
return idx;
}
static agx_instr *
agx_emit_alu(agx_builder *b, nir_alu_instr *instr)
{