From d5e464ffc731de42a1b0c9ccf384771cb6ebb1b5 Mon Sep 17 00:00:00 2001 From: Simon Perretta Date: Wed, 1 Jan 2025 13:31:46 +0000 Subject: [PATCH] pco, pygen: differentiate between int and float ref mods Removing modifier-derived constants until we better track ref mod types. Signed-off-by: Simon Perretta Acked-by: Erik Faye-Lund Part-of: --- src/imagination/pco/pco_const_imms.c | 199 +++++++++++++-------------- src/imagination/pco/pco_ops.py | 6 +- src/imagination/pco/pco_opt.c | 16 +-- src/imagination/pco/pco_trans_nir.c | 7 +- 4 files changed, 113 insertions(+), 115 deletions(-) diff --git a/src/imagination/pco/pco_const_imms.c b/src/imagination/pco/pco_const_imms.c index 81670da297c..6860e041e88 100644 --- a/src/imagination/pco/pco_const_imms.c +++ b/src/imagination/pco/pco_const_imms.c @@ -29,105 +29,102 @@ struct const_reg_def { /** Constant register values (sorted for bsearch). */ static const struct const_reg_def const_reg_defs[] = { - { 0x00000000, 0, false, false }, { 0x00000001, 1, false, false }, - { 0x00000002, 2, false, false }, { 0x00000003, 3, false, false }, - { 0x00000004, 4, false, false }, { 0x00000005, 5, false, false }, - { 0x00000006, 6, false, false }, { 0x00000007, 7, false, false }, - { 0x00000008, 8, false, false }, { 0x00000009, 9, false, false }, - { 0x0000000a, 10, false, false }, { 0x0000000b, 11, false, false }, - { 0x0000000c, 12, false, false }, { 0x0000000d, 13, false, false }, - { 0x0000000e, 14, false, false }, { 0x0000000f, 15, false, false }, - { 0x00000010, 16, false, false }, { 0x00000011, 17, false, false }, - { 0x00000012, 18, false, false }, { 0x00000013, 19, false, false }, - { 0x00000014, 20, false, false }, { 0x00000015, 21, false, false }, - { 0x00000016, 22, false, false }, { 0x00000017, 23, false, false }, - { 0x00000018, 24, false, false }, { 0x00000019, 25, false, false }, - { 0x0000001a, 26, false, false }, { 0x0000001b, 27, false, false }, - { 0x0000001c, 28, false, false }, { 0x0000001d, 29, false, false }, - { 0x0000001e, 30, false, false }, { 0x0000001f, 31, false, false }, - { 0x0000007f, 147, false, false }, { 0x37800000, 134, false, false }, - { 0x38000000, 135, false, false }, { 0x38800000, 88, false, false }, - { 0x39000000, 87, false, false }, { 0x39800000, 86, false, false }, - { 0x3a000000, 85, false, false }, { 0x3a800000, 84, false, false }, - { 0x3b000000, 83, false, false }, { 0x3b4d2e1c, 136, false, false }, - { 0x3b800000, 82, false, false }, { 0x3c000000, 81, false, false }, - { 0x3c800000, 80, false, false }, { 0x3d000000, 79, false, false }, - { 0x3d25aee6, 156, false, false }, { 0x3d6147ae, 140, false, false }, - { 0x3d800000, 78, false, false }, { 0x3d9e8391, 157, false, false }, - { 0x3e000000, 77, false, false }, { 0x3e2aaaab, 153, false, false }, - { 0x3e800000, 76, false, false }, { 0x3e9a209b, 145, false, false }, - { 0x3ea2f983, 128, false, false }, { 0x3eaaaaab, 152, false, false }, - { 0x3ebc5ab2, 90, false, false }, { 0x3ed55555, 138, false, false }, - { 0x3f000000, 75, false, false }, { 0x3f22f983, 129, false, false }, - { 0x3f317218, 146, false, false }, { 0x3f3504f3, 92, false, false }, - { 0x3f490fdb, 93, false, false }, { 0x3f72a76f, 158, false, false }, - { 0x3f800000, 64, false, false }, { 0x3f860a92, 151, false, false }, - { 0x3f870a3d, 139, false, false }, { 0x3fa2f983, 130, false, false }, - { 0x3fb504f3, 91, false, false }, { 0x3fb8aa3b, 155, false, false }, - { 0x3fc90fdb, 94, false, false }, { 0x40000000, 65, false, false }, - { 0x4019999a, 159, false, false }, { 0x402df854, 89, false, false }, - { 0x40400000, 95, true, false }, { 0x40490fdb, 95, false, false }, - { 0x40549a78, 154, false, false }, { 0x40800000, 66, false, false }, - { 0x40c00000, 131, true, false }, { 0x40c90fdb, 131, false, false }, - { 0x41000000, 67, false, false }, { 0x41400000, 132, true, false }, - { 0x41490fdb, 132, false, false }, { 0x414eb852, 137, false, false }, - { 0x41800000, 68, false, false }, { 0x41c80000, 133, true, false }, - { 0x41c90fdb, 133, false, false }, { 0x42000000, 69, false, false }, - { 0x42800000, 70, false, false }, { 0x43000000, 71, false, false }, - { 0x43800000, 72, false, false }, { 0x44000000, 73, false, false }, - { 0x44800000, 74, false, false }, { 0x4b000000, 149, false, false }, - { 0x4b800000, 150, false, false }, { 0x7f7fffff, 148, false, false }, - { 0x7f800000, 142, false, false }, { 0x7fff7fff, 144, false, false }, - { 0x7fffffff, 143, false, true }, { 0x80000000, 141, false, false }, - { 0x80000001, 1, false, true }, { 0x80000002, 2, false, true }, - { 0x80000003, 3, false, true }, { 0x80000004, 4, false, true }, - { 0x80000005, 5, false, true }, { 0x80000006, 6, false, true }, - { 0x80000007, 7, false, true }, { 0x80000008, 8, false, true }, - { 0x80000009, 9, false, true }, { 0x8000000a, 10, false, true }, - { 0x8000000b, 11, false, true }, { 0x8000000c, 12, false, true }, - { 0x8000000d, 13, false, true }, { 0x8000000e, 14, false, true }, - { 0x8000000f, 15, false, true }, { 0x80000010, 16, false, true }, - { 0x80000011, 17, false, true }, { 0x80000012, 18, false, true }, - { 0x80000013, 19, false, true }, { 0x80000014, 20, false, true }, - { 0x80000015, 21, false, true }, { 0x80000016, 22, false, true }, - { 0x80000017, 23, false, true }, { 0x80000018, 24, false, true }, - { 0x80000019, 25, false, true }, { 0x8000001a, 26, false, true }, - { 0x8000001b, 27, false, true }, { 0x8000001c, 28, false, true }, - { 0x8000001d, 29, false, true }, { 0x8000001e, 30, false, true }, - { 0x8000001f, 31, false, true }, { 0x8000007f, 147, false, true }, - { 0xb7800000, 134, false, true }, { 0xb8000000, 135, false, true }, - { 0xb8800000, 88, false, true }, { 0xb9000000, 87, false, true }, - { 0xb9800000, 86, false, true }, { 0xba000000, 85, false, true }, - { 0xba800000, 84, false, true }, { 0xbb000000, 83, false, true }, - { 0xbb4d2e1c, 136, false, true }, { 0xbb800000, 82, false, true }, - { 0xbc000000, 81, false, true }, { 0xbc800000, 80, false, true }, - { 0xbd000000, 79, false, true }, { 0xbd25aee6, 156, false, true }, - { 0xbd6147ae, 140, false, true }, { 0xbd800000, 78, false, true }, - { 0xbd9e8391, 157, false, true }, { 0xbe000000, 77, false, true }, - { 0xbe2aaaab, 153, false, true }, { 0xbe800000, 76, false, true }, - { 0xbe9a209b, 145, false, true }, { 0xbea2f983, 128, false, true }, - { 0xbeaaaaab, 152, false, true }, { 0xbebc5ab2, 90, false, true }, - { 0xbed55555, 138, false, true }, { 0xbf000000, 75, false, true }, - { 0xbf22f983, 129, false, true }, { 0xbf317218, 146, false, true }, - { 0xbf3504f3, 92, false, true }, { 0xbf490fdb, 93, false, true }, - { 0xbf72a76f, 158, false, true }, { 0xbf800000, 64, false, true }, - { 0xbf860a92, 151, false, true }, { 0xbf870a3d, 139, false, true }, - { 0xbfa2f983, 130, false, true }, { 0xbfb504f3, 91, false, true }, - { 0xbfb8aa3b, 155, false, true }, { 0xbfc90fdb, 94, false, true }, - { 0xc0000000, 65, false, true }, { 0xc019999a, 159, false, true }, - { 0xc02df854, 89, false, true }, { 0xc0400000, 95, true, true }, - { 0xc0490fdb, 95, false, true }, { 0xc0549a78, 154, false, true }, - { 0xc0800000, 66, false, true }, { 0xc0c00000, 131, true, true }, - { 0xc0c90fdb, 131, false, true }, { 0xc1000000, 67, false, true }, - { 0xc1400000, 132, true, true }, { 0xc1490fdb, 132, false, true }, - { 0xc14eb852, 137, false, true }, { 0xc1800000, 68, false, true }, - { 0xc1c80000, 133, true, true }, { 0xc1c90fdb, 133, false, true }, - { 0xc2000000, 69, false, true }, { 0xc2800000, 70, false, true }, - { 0xc3000000, 71, false, true }, { 0xc3800000, 72, false, true }, - { 0xc4000000, 73, false, true }, { 0xc4800000, 74, false, true }, - { 0xcb000000, 149, false, true }, { 0xcb800000, 150, false, true }, - { 0xff7fffff, 148, false, true }, { 0xff800000, 142, false, true }, - { 0xffff7fff, 144, false, true }, { 0xffffffff, 143, false, false }, + { 0x00000000, 0, false, false }, /* */ + { 0x00000001, 1, false, false }, /* */ + { 0x00000002, 2, false, false }, /* */ + { 0x00000003, 3, false, false }, /* */ + { 0x00000004, 4, false, false }, /* */ + { 0x00000005, 5, false, false }, /* */ + { 0x00000006, 6, false, false }, /* */ + { 0x00000007, 7, false, false }, /* */ + { 0x00000008, 8, false, false }, /* */ + { 0x00000009, 9, false, false }, /* */ + { 0x0000000a, 10, false, false }, /* */ + { 0x0000000b, 11, false, false }, /* */ + { 0x0000000c, 12, false, false }, /* */ + { 0x0000000d, 13, false, false }, /* */ + { 0x0000000e, 14, false, false }, /* */ + { 0x0000000f, 15, false, false }, /* */ + { 0x00000010, 16, false, false }, /* */ + { 0x00000011, 17, false, false }, /* */ + { 0x00000012, 18, false, false }, /* */ + { 0x00000013, 19, false, false }, /* */ + { 0x00000014, 20, false, false }, /* */ + { 0x00000015, 21, false, false }, /* */ + { 0x00000016, 22, false, false }, /* */ + { 0x00000017, 23, false, false }, /* */ + { 0x00000018, 24, false, false }, /* */ + { 0x00000019, 25, false, false }, /* */ + { 0x0000001a, 26, false, false }, /* */ + { 0x0000001b, 27, false, false }, /* */ + { 0x0000001c, 28, false, false }, /* */ + { 0x0000001d, 29, false, false }, /* */ + { 0x0000001e, 30, false, false }, /* */ + { 0x0000001f, 31, false, false }, /* */ + { 0x0000007f, 147, false, false }, /* */ + { 0x37800000, 134, false, false }, /* */ + { 0x38000000, 135, false, false }, /* */ + { 0x38800000, 88, false, false }, /* */ + { 0x39000000, 87, false, false }, /* */ + { 0x39800000, 86, false, false }, /* */ + { 0x3a000000, 85, false, false }, /* */ + { 0x3a800000, 84, false, false }, /* */ + { 0x3b000000, 83, false, false }, /* */ + { 0x3b4d2e1c, 136, false, false }, /* */ + { 0x3b800000, 82, false, false }, /* */ + { 0x3c000000, 81, false, false }, /* */ + { 0x3c800000, 80, false, false }, /* */ + { 0x3d000000, 79, false, false }, /* */ + { 0x3d25aee6, 156, false, false }, /* */ + { 0x3d6147ae, 140, false, false }, /* */ + { 0x3d800000, 78, false, false }, /* */ + { 0x3d9e8391, 157, false, false }, /* */ + { 0x3e000000, 77, false, false }, /* */ + { 0x3e2aaaab, 153, false, false }, /* */ + { 0x3e800000, 76, false, false }, /* */ + { 0x3e9a209b, 145, false, false }, /* */ + { 0x3ea2f983, 128, false, false }, /* */ + { 0x3eaaaaab, 152, false, false }, /* */ + { 0x3ebc5ab2, 90, false, false }, /* */ + { 0x3ed55555, 138, false, false }, /* */ + { 0x3f000000, 75, false, false }, /* */ + { 0x3f22f983, 129, false, false }, /* */ + { 0x3f317218, 146, false, false }, /* */ + { 0x3f3504f3, 92, false, false }, /* */ + { 0x3f490fdb, 93, false, false }, /* */ + { 0x3f72a76f, 158, false, false }, /* */ + { 0x3f800000, 64, false, false }, /* */ + { 0x3f860a92, 151, false, false }, /* */ + { 0x3f870a3d, 139, false, false }, /* */ + { 0x3fa2f983, 130, false, false }, /* */ + { 0x3fb504f3, 91, false, false }, /* */ + { 0x3fb8aa3b, 155, false, false }, /* */ + { 0x3fc90fdb, 94, false, false }, /* */ + { 0x40000000, 65, false, false }, /* */ + { 0x4019999a, 159, false, false }, /* */ + { 0x402df854, 89, false, false }, /* */ + { 0x40490fdb, 95, false, false }, /* */ + { 0x40549a78, 154, false, false }, /* */ + { 0x40800000, 66, false, false }, /* */ + { 0x40c90fdb, 131, false, false }, /* */ + { 0x41000000, 67, false, false }, /* */ + { 0x41490fdb, 132, false, false }, /* */ + { 0x414eb852, 137, false, false }, /* */ + { 0x41800000, 68, false, false }, /* */ + { 0x41c90fdb, 133, false, false }, /* */ + { 0x42000000, 69, false, false }, /* */ + { 0x42800000, 70, false, false }, /* */ + { 0x43000000, 71, false, false }, /* */ + { 0x43800000, 72, false, false }, /* */ + { 0x44000000, 73, false, false }, /* */ + { 0x44800000, 74, false, false }, /* */ + { 0x4b000000, 149, false, false }, /* */ + { 0x4b800000, 150, false, false }, /* */ + { 0x7f7fffff, 148, false, false }, /* */ + { 0x7f800000, 142, false, false }, /* */ + { 0x7fff7fff, 144, false, false }, /* */ + { 0x80000000, 141, false, false }, /* */ + { 0xffffffff, 143, false, false }, /* */ }; /** @@ -197,9 +194,9 @@ bool pco_const_imms(pco_shader *shader) if (!const_reg_def->flr && !const_reg_def->neg) { pco_mov(&b, dest, const_reg); } else if (!const_reg_def->flr && const_reg_def->neg) { - pco_neg(&b, dest, const_reg); + pco_fneg(&b, dest, const_reg); } else if (const_reg_def->flr && !const_reg_def->neg) { - pco_flr(&b, dest, const_reg); + pco_fflr(&b, dest, const_reg); } else { /* TODO: use floor and neg mods when support for > 1 is added. */ const_reg = pco_ref_flr(const_reg); diff --git a/src/imagination/pco/pco_ops.py b/src/imagination/pco/pco_ops.py index e9a1fe28709..ac6ebb62d80 100644 --- a/src/imagination/pco/pco_ops.py +++ b/src/imagination/pco/pco_ops.py @@ -365,9 +365,9 @@ O_IADD32 = hw_op('iadd32', OM_ALU + [OM_S], 1, 3, [], [[RM_ABS, RM_NEG], [RM_ABS O_IMUL32 = hw_op('imul32', OM_ALU + [OM_S], 1, 3, [], [[RM_ABS, RM_NEG], [RM_ABS, RM_NEG]]) # Pseudo-ops (unmapped). -O_NEG = pseudo_op('neg', OM_ALU, 1, 1) -O_ABS = pseudo_op('abs', OM_ALU, 1, 1) -O_FLR = pseudo_op('flr', OM_ALU, 1, 1) +O_FNEG = pseudo_op('fneg', OM_ALU, 1, 1) +O_FABS = pseudo_op('fabs', OM_ALU, 1, 1) +O_FFLR = pseudo_op('fflr', OM_ALU, 1, 1) O_MOV = pseudo_op('mov', OM_ALU, 1, 1) O_VEC = pseudo_op('vec', [], 1, VARIABLE, [], [[RM_ABS, RM_NEG]]) O_COMP = pseudo_op('comp', [], 1, 2) diff --git a/src/imagination/pco/pco_opt.c b/src/imagination/pco/pco_opt.c index 267947e8b74..8fd5e42993c 100644 --- a/src/imagination/pco/pco_opt.c +++ b/src/imagination/pco/pco_opt.c @@ -57,8 +57,8 @@ static inline bool pco_opt_prep_mods(pco_shader *shader, */ pco_foreach_func_in_shader (func, shader) { pco_foreach_instr_in_func_safe (mod, func) { - if (mod->op != PCO_OP_NEG && mod->op != PCO_OP_ABS && - mod->op != PCO_OP_FLR) + if (mod->op != PCO_OP_FNEG && mod->op != PCO_OP_FABS && + mod->op != PCO_OP_FFLR) continue; pco_foreach_instr_in_func_from (instr, mod) { @@ -89,17 +89,17 @@ static inline bool pco_opt_prep_mods(pco_shader *shader, bool other_has_mod = false; switch (mod->op) { - case PCO_OP_NEG: + case PCO_OP_FNEG: match_has_mod = pco_instr_src_has_neg(instr, match_src_index); other_has_mod = pco_instr_src_has_neg(instr, other_src_index); break; - case PCO_OP_ABS: + case PCO_OP_FABS: match_has_mod = pco_instr_src_has_abs(instr, match_src_index); other_has_mod = pco_instr_src_has_abs(instr, other_src_index); break; - case PCO_OP_FLR: + case PCO_OP_FFLR: match_has_mod = pco_instr_src_has_flr(instr, match_src_index); other_has_mod = pco_instr_src_has_flr(instr, other_src_index); break; @@ -127,15 +127,15 @@ static inline bool pco_opt_prep_mods(pco_shader *shader, /* Rewrite the mod op to a mov. */ pco_ref src = mod->src[0]; switch (mod->op) { - case PCO_OP_NEG: + case PCO_OP_FNEG: src = pco_ref_neg(src); break; - case PCO_OP_ABS: + case PCO_OP_FABS: src = pco_ref_abs(src); break; - case PCO_OP_FLR: + case PCO_OP_FFLR: src = pco_ref_flr(src); break; diff --git a/src/imagination/pco/pco_trans_nir.c b/src/imagination/pco/pco_trans_nir.c index f30486eb522..bfc59d7aa45 100644 --- a/src/imagination/pco/pco_trans_nir.c +++ b/src/imagination/pco/pco_trans_nir.c @@ -1007,15 +1007,16 @@ static pco_instr *trans_alu(trans_ctx *tctx, nir_alu_instr *alu) pco_instr *instr; switch (alu->op) { case nir_op_fneg: - instr = pco_neg(&tctx->b, dest, src[0]); + instr = pco_fneg(&tctx->b, dest, src[0]); break; case nir_op_fabs: - instr = pco_abs(&tctx->b, dest, src[0]); + instr = pco_fabs(&tctx->b, dest, src[0]); break; case nir_op_ffloor: - instr = pco_flr(&tctx->b, dest, src[0]); + instr = pco_fflr(&tctx->b, dest, src[0]); + break; break; case nir_op_fadd: