mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-01-04 17:50:11 +01:00
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:
parent
937625c391
commit
9d3102048e
5 changed files with 35 additions and 0 deletions
|
|
@ -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 */
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -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); }
|
||||
|
|
|
|||
|
|
@ -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"),
|
||||
|
|
|
|||
|
|
@ -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>
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue