diff --git a/src/freedreno/ir3/ir3.h b/src/freedreno/ir3/ir3.h
index 65734ea1d13..28596825b34 100644
--- a/src/freedreno/ir3/ir3.h
+++ b/src/freedreno/ir3/ir3.h
@@ -435,6 +435,7 @@ struct ir3_instruction {
unsigned g : 1; /* global */
ir3_alias_scope alias_scope;
+ unsigned alias_table_size_minus_one;
bool alias_type_float;
} cat7;
/* for meta-instructions, just used to hold extra data
diff --git a/src/freedreno/ir3/ir3_parser.y b/src/freedreno/ir3/ir3_parser.y
index d457d0de6dc..ca823f9ea64 100644
--- a/src/freedreno/ir3/ir3_parser.y
+++ b/src/freedreno/ir3/ir3_parser.y
@@ -1459,6 +1459,8 @@ cat7_alias_float_type: T_TYPE_F16
cat7_alias_type: cat7_alias_int_type
| cat7_alias_float_type { instr->cat7.alias_type_float = true; }
+cat7_alias_table_size_minus_one: T_INT { instr->cat7.alias_table_size_minus_one = $1; }
+
cat7_instr: cat7_barrier
| cat7_data_cache
| T_OP_SLEEP { new_instr(OPC_SLEEP); }
@@ -1468,9 +1470,7 @@ cat7_instr: cat7_barrier
| T_OP_UNLOCK { new_instr(OPC_UNLOCK); }
| T_OP_ALIAS {
new_instr(OPC_ALIAS);
- } '.' cat7_alias_scope '.' cat7_alias_type '.' integer dst_reg ',' cat7_alias_src {
- new_src(0, IR3_REG_IMMED)->uim_val = $8;
- }
+ } '.' cat7_alias_scope '.' cat7_alias_type '.' cat7_alias_table_size_minus_one dst_reg ',' cat7_alias_src
raw_instr: T_RAW {new_instr(OPC_META_RAW)->raw.value = $1;}
diff --git a/src/freedreno/isa/ir3-cat7.xml b/src/freedreno/isa/ir3-cat7.xml
index 368e09cb218..75be2f92cbd 100644
--- a/src/freedreno/isa/ir3-cat7.xml
+++ b/src/freedreno/isa/ir3-cat7.xml
@@ -306,10 +306,14 @@ SOFTWARE.
Notice the lack of nops between alias and the instruction
that uses it.
+
+ In this case, the size of the table is bounded (max 16 entries)
+ and the number of entries in the table is indicated by
+ the first alias instruction in the TABLE_SIZE_MINUS_ONE field.
- {SY}{SS}{JP}{NAME}.{SCOPE}.{TYPE}{TYPE_SIZE}.{UNK} {DST_HALF}{DST}, {SRC}
+ {SY}{SS}{JP}{NAME}.{SCOPE}.{TYPE}{TYPE_SIZE}.{TABLE_SIZE_MINUS_ONE} {DST_HALF}{DST}, {SRC}
@@ -332,7 +336,7 @@ SOFTWARE.
-
+
xx
@@ -354,7 +358,7 @@ SOFTWARE.
-
+