pan/bi: Pack round opcodes (FMA, either 16 or 32)
Signed-off-by: Alyssa Rosenzweig <alyssa.rosenzweig@collabora.com> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/4844>
This commit is contained in:
parent
5f35cdaa8d
commit
130a3fba1c
|
@ -1128,6 +1128,19 @@ bi_pack_fma_bitwise(bi_instruction *ins, struct bi_registers *regs)
|
|||
RETURN_PACKED(pack);
|
||||
}
|
||||
|
||||
static unsigned
|
||||
bi_pack_fma_round(bi_instruction *ins, struct bi_registers *regs)
|
||||
{
|
||||
bool fp16 = ins->dest_type == nir_type_float16;
|
||||
assert(fp16 || ins->dest_type == nir_type_float32);
|
||||
|
||||
unsigned op = fp16
|
||||
? BIFROST_FMA_ROUND_16(ins->roundmode, bi_swiz16(ins, 0))
|
||||
: BIFROST_FMA_ROUND_32(ins->roundmode);
|
||||
|
||||
return bi_pack_fma_1src(ins, regs, op);
|
||||
}
|
||||
|
||||
static unsigned
|
||||
bi_pack_fma(bi_clause *clause, bi_bundle bundle, struct bi_registers *regs)
|
||||
{
|
||||
|
@ -1160,7 +1173,7 @@ bi_pack_fma(bi_clause *clause, bi_bundle bundle, struct bi_registers *regs)
|
|||
case BI_SELECT:
|
||||
return bi_pack_fma_select(bundle.fma, regs);
|
||||
case BI_ROUND:
|
||||
return BIFROST_FMA_NOP;
|
||||
return bi_pack_fma_round(bundle.fma, regs);
|
||||
case BI_REDUCE_FMA:
|
||||
return bi_pack_fma_reduce(bundle.fma, regs);
|
||||
default:
|
||||
|
|
|
@ -101,6 +101,9 @@ enum bifrost_packed_src {
|
|||
#define BIFROST_FMA_OP_ADD_FREXPM ((BIFROST_FMA_EXT | 0x1e80) >> 3)
|
||||
#define BIFROST_FMA_SEL_16(swiz) (((BIFROST_FMA_EXT | 0x1e00) >> 3) | (swiz))
|
||||
|
||||
#define BIFROST_FMA_ROUND_16(mode, swiz) (BIFROST_FMA_EXT | 0x1800 | (swiz) | ((mode) << 6))
|
||||
#define BIFROST_FMA_ROUND_32(mode) (BIFROST_FMA_EXT | 0x1805 | ((mode) << 6))
|
||||
|
||||
struct bifrost_fma_inst {
|
||||
unsigned src0 : 3;
|
||||
unsigned op : 20;
|
||||
|
|
Loading…
Reference in New Issue