ir3: Add new cat2 instructions

Signed-off-by: Rob Clark <rob.clark@oss.qualcomm.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/38450>
This commit is contained in:
Rob Clark 2025-10-28 18:32:03 -07:00 committed by Marge Bot
parent 937625c391
commit 9d3102048e
5 changed files with 35 additions and 0 deletions

View file

@ -153,6 +153,10 @@ typedef enum {
/* 32 - invalid */
OPC_CMPV_U = _OPC(2, 33),
OPC_CMPV_S = _OPC(2, 34),
OPC_MUL_F_MUL2 = _OPC(2, 35),
OPC_ADD_F_MUL2 = _OPC(2, 36),
OPC_MUL_F_DIV2 = _OPC(2, 37),
OPC_ADD_F_DIV2 = _OPC(2, 38),
/* 35-47 - invalid */
OPC_MUL_U24 = _OPC(2, 48), /* 24b mul into 32b result */
OPC_MUL_S24 = _OPC(2, 49), /* 24b mul into 32b result with sign extension */

View file

@ -234,6 +234,9 @@ static int parse_reg(const char *str)
"movs" return TOKEN(T_OP_MOVS);
("f16"|"f32"|"u16"|"u32"|"s16"|"s32"|"u8"|"u8_32"|"u64"){2} ir3_yylval.str = yytext; return T_CAT1_TYPE_TYPE;
".mul2" return TOKEN(T_MUL2);
".div2" return TOKEN(T_DIV2);
/* category 2: */
"add.f" return TOKEN(T_OP_ADD_F);
"min.f" return TOKEN(T_OP_MIN_F);

View file

@ -177,6 +177,9 @@ static void print_token(FILE *file, int type, YYSTYPE value)
%token <tok> T_OP_SCT
%token <tok> T_OP_MOVS
%token <tok> T_MUL2
%token <tok> T_DIV2
/* category 2: */
%token <tok> T_OP_ADD_F
%token <tok> T_OP_MIN_F
@ -777,6 +780,10 @@ cat2_opc_2src_cnd: T_OP_CMPS_F { new_instr(OPC_CMPS_F); }
| T_OP_CMPV_F { new_instr(OPC_CMPV_F); }
| T_OP_CMPV_U { new_instr(OPC_CMPV_U); }
| T_OP_CMPV_S { new_instr(OPC_CMPV_S); }
| T_OP_ADD_F T_DIV2 { new_instr(OPC_ADD_F_DIV2); }
| T_OP_ADD_F T_MUL2 { new_instr(OPC_ADD_F_MUL2); }
| T_OP_MUL_F T_DIV2 { new_instr(OPC_MUL_F_DIV2); }
| T_OP_MUL_F T_MUL2 { new_instr(OPC_MUL_F_MUL2); }
cat2_opc_2src: T_OP_ADD_F { new_instr(OPC_ADD_F); }
| T_OP_MIN_F { new_instr(OPC_MIN_F); }

View file

@ -128,6 +128,7 @@ static const struct test {
INSTR_7XX(42930000_04000406, "cmps.u.ge r0.x, (last)r1.z, (last)r0.x"),
INSTR_7XX(429000f5_100600c1, "cmps.u.lt up0.y, r48.y, c1.z"),
INSTR_7XX(4490000c_10534007, "add.f.mul2.lt r3.x, (neg)r1.w, c20.w"),
/* cat3 */
INSTR_6XX(66000000_10421041, "sel.f16 hr0.x, hc16.y, hr0.x, hc16.z"),

View file

@ -347,6 +347,26 @@ SOFTWARE.
<pattern low="53" high="58">100010</pattern>
</bitset>
<bitset name="mul.f.mul2" extends="#instruction-cat2-2src-cond">
<gen min="700"/>
<pattern low="53" high="58">100011</pattern>
</bitset>
<bitset name="add.f.mul2" extends="#instruction-cat2-2src-cond">
<gen min="700"/>
<pattern low="53" high="58">100100</pattern>
</bitset>
<bitset name="mul.f.div2" extends="#instruction-cat2-2src-cond">
<gen min="700"/>
<pattern low="53" high="58">100101</pattern>
</bitset>
<bitset name="add.f.div2" extends="#instruction-cat2-2src-cond">
<gen min="700"/>
<pattern low="53" high="58">100110</pattern>
</bitset>
<bitset name="mul.u24" extends="#instruction-cat2-2src">
<pattern low="53" high="58">110000</pattern>
</bitset>