Import the HMX instruction encodings and definitions.  The semantics are
no-ops for now.

Signed-off-by: Brian Cain <[email protected]>
---
 target/hexagon/tag_rev_info.c.inc          | 349 +++++++++++++++++++++
 target/hexagon/imported/allext.idef        |   6 +
 target/hexagon/imported/allextenc.def      |   4 +
 target/hexagon/imported/hmx/encode_ext.def | 149 +++++++++
 target/hexagon/imported/hmx/ext.idef       | 175 +++++++++++
 5 files changed, 683 insertions(+)
 create mode 100644 target/hexagon/imported/hmx/encode_ext.def
 create mode 100644 target/hexagon/imported/hmx/ext.idef

diff --git a/target/hexagon/tag_rev_info.c.inc 
b/target/hexagon/tag_rev_info.c.inc
index da0b1a648cf..9bb6afa4bc6 100644
--- a/target/hexagon/tag_rev_info.c.inc
+++ b/target/hexagon/tag_rev_info.c.inc
@@ -620,6 +620,355 @@ static const struct tag_rev_info 
tag_rev_info[XX_LAST_OPCODE] = {
     [V6_vcombine_tmp] = { .introduced = HEX_VER_V69, .removed = HEX_VER_NONE },
     [V6_vmpyuhvs] = { .introduced = HEX_VER_V69, .removed = HEX_VER_NONE },
 
+    /* HMX (matrix) coprocessor extension */
+    [M8_cvt_rs_f8] = { .introduced = HEX_VER_V81, .removed = HEX_VER_NONE },
+    [M8_cvt_rs_hf] = { .introduced = HEX_VER_V73, .removed = HEX_VER_NONE },
+    [M8_cvt_rs_ub] = { .introduced = HEX_VER_V73, .removed = HEX_VER_NONE },
+    [M8_cvt_rs_ub_sc0] = {
+        .introduced = HEX_VER_V73, .removed = HEX_VER_NONE
+    },
+    [M8_cvt_rs_ub_sc1] = {
+        .introduced = HEX_VER_V73, .removed = HEX_VER_NONE
+    },
+    [M8_cvt_rs_uh_2x1] = {
+        .introduced = HEX_VER_V73, .removed = HEX_VER_NONE
+    },
+    [M8_cvt_rs_uh_2x2] = {
+        .introduced = HEX_VER_V73, .removed = HEX_VER_NONE
+    },
+    [M8_mxaccshl] = { .introduced = HEX_VER_V68, .removed = HEX_VER_V79 },
+    [M8_mxclracc] = { .introduced = HEX_VER_V68, .removed = HEX_VER_NONE },
+    [M8_mxclracc_hf] = { .introduced = HEX_VER_V68, .removed = HEX_VER_NONE },
+    [M8_mxcvta_sat_uh] = {
+        .introduced = HEX_VER_V68, .removed = HEX_VER_NONE
+    },
+    [M8_mxcvta_sat_uh2x2] = {
+        .introduced = HEX_VER_V69, .removed = HEX_VER_NONE
+    },
+    [M8_mxcvta_sat_uh2x2_r] = {
+        .introduced = HEX_VER_V69, .removed = HEX_VER_NONE
+    },
+    [M8_mxcvta_sat_uh_r] = {
+        .introduced = HEX_VER_V68, .removed = HEX_VER_NONE
+    },
+    [M8_mxcvta_uh] = { .introduced = HEX_VER_V68, .removed = HEX_VER_NONE },
+    [M8_mxcvta_uh2x2] = { .introduced = HEX_VER_V69, .removed = HEX_VER_NONE },
+    [M8_mxcvta_uh2x2_r] = {
+        .introduced = HEX_VER_V69, .removed = HEX_VER_NONE
+    },
+    [M8_mxcvta_uh_r] = { .introduced = HEX_VER_V68, .removed = HEX_VER_NONE },
+    [M8_mxcvtb_sat_uh] = {
+        .introduced = HEX_VER_V68, .removed = HEX_VER_NONE
+    },
+    [M8_mxcvtb_sat_uh2x2] = {
+        .introduced = HEX_VER_V69, .removed = HEX_VER_NONE
+    },
+    [M8_mxcvtb_sat_uh2x2_r] = {
+        .introduced = HEX_VER_V69, .removed = HEX_VER_NONE
+    },
+    [M8_mxcvtb_sat_uh_r] = {
+        .introduced = HEX_VER_V68, .removed = HEX_VER_NONE
+    },
+    [M8_mxcvtb_uh] = { .introduced = HEX_VER_V68, .removed = HEX_VER_NONE },
+    [M8_mxcvtb_uh2x2] = { .introduced = HEX_VER_V69, .removed = HEX_VER_NONE },
+    [M8_mxcvtb_uh2x2_r] = {
+        .introduced = HEX_VER_V69, .removed = HEX_VER_NONE
+    },
+    [M8_mxcvtb_uh_r] = { .introduced = HEX_VER_V68, .removed = HEX_VER_NONE },
+    [M8_mxcvtl_dm_sat_ub] = {
+        .introduced = HEX_VER_V68, .removed = HEX_VER_NONE
+    },
+    [M8_mxcvtl_dm_sat_ub_r] = {
+        .introduced = HEX_VER_V68, .removed = HEX_VER_NONE
+    },
+    [M8_mxcvtl_dm_ub] = { .introduced = HEX_VER_V68, .removed = HEX_VER_NONE },
+    [M8_mxcvtl_dm_ub_r] = {
+        .introduced = HEX_VER_V68, .removed = HEX_VER_NONE
+    },
+    [M8_mxcvtl_sat_hf] = {
+        .introduced = HEX_VER_V68, .removed = HEX_VER_NONE
+    },
+    [M8_mxcvtl_sat_hf_r] = {
+        .introduced = HEX_VER_V68, .removed = HEX_VER_NONE
+    },
+    [M8_mxcvtl_sat_pos_hf] = {
+        .introduced = HEX_VER_V68, .removed = HEX_VER_NONE
+    },
+    [M8_mxcvtl_sat_pos_hf_r] = {
+        .introduced = HEX_VER_V68, .removed = HEX_VER_NONE
+    },
+    [M8_mxcvtl_sat_ub] = {
+        .introduced = HEX_VER_V68, .removed = HEX_VER_NONE
+    },
+    [M8_mxcvtl_sat_ub_r] = {
+        .introduced = HEX_VER_V68, .removed = HEX_VER_NONE
+    },
+    [M8_mxcvtl_ub] = { .introduced = HEX_VER_V68, .removed = HEX_VER_NONE },
+    [M8_mxcvtl_ub_r] = { .introduced = HEX_VER_V68, .removed = HEX_VER_NONE },
+    [M8_mxcvtr_dm_sat_ub] = {
+        .introduced = HEX_VER_V68, .removed = HEX_VER_NONE
+    },
+    [M8_mxcvtr_dm_sat_ub_r] = {
+        .introduced = HEX_VER_V68, .removed = HEX_VER_NONE
+    },
+    [M8_mxcvtr_dm_ub] = { .introduced = HEX_VER_V68, .removed = HEX_VER_NONE },
+    [M8_mxcvtr_dm_ub_r] = {
+        .introduced = HEX_VER_V68, .removed = HEX_VER_NONE
+    },
+    [M8_mxcvtr_sat_hf] = {
+        .introduced = HEX_VER_V68, .removed = HEX_VER_NONE
+    },
+    [M8_mxcvtr_sat_hf_r] = {
+        .introduced = HEX_VER_V68, .removed = HEX_VER_NONE
+    },
+    [M8_mxcvtr_sat_pos_hf] = {
+        .introduced = HEX_VER_V68, .removed = HEX_VER_NONE
+    },
+    [M8_mxcvtr_sat_pos_hf_r] = {
+        .introduced = HEX_VER_V68, .removed = HEX_VER_NONE
+    },
+    [M8_mxcvtr_sat_ub] = {
+        .introduced = HEX_VER_V68, .removed = HEX_VER_NONE
+    },
+    [M8_mxcvtr_sat_ub_r] = {
+        .introduced = HEX_VER_V68, .removed = HEX_VER_NONE
+    },
+    [M8_mxcvtr_ub] = { .introduced = HEX_VER_V68, .removed = HEX_VER_NONE },
+    [M8_mxcvtr_ub_r] = { .introduced = HEX_VER_V68, .removed = HEX_VER_NONE },
+    [M8_mxmem] = { .introduced = HEX_VER_V73, .removed = HEX_VER_NONE },
+    [M8_mxmem2_bias] = { .introduced = HEX_VER_V68, .removed = HEX_VER_NONE },
+    [M8_mxmem2_st_bias] = {
+        .introduced = HEX_VER_V68, .removed = HEX_VER_NONE
+    },
+    [M8_mxmem_2x2] = { .introduced = HEX_VER_V73, .removed = HEX_VER_NONE },
+    [M8_mxmema_wei_b] = { .introduced = HEX_VER_V68, .removed = HEX_VER_NONE },
+    [M8_mxmema_wei_b1] = {
+        .introduced = HEX_VER_V68, .removed = HEX_VER_NONE
+    },
+    [M8_mxmema_wei_c] = { .introduced = HEX_VER_V68, .removed = HEX_VER_NONE },
+    [M8_mxmema_wei_f8] = {
+        .introduced = HEX_VER_V79, .removed = HEX_VER_NONE
+    },
+    [M8_mxmema_wei_hf] = {
+        .introduced = HEX_VER_V68, .removed = HEX_VER_NONE
+    },
+    [M8_mxmema_wei_n] = { .introduced = HEX_VER_V68, .removed = HEX_VER_NONE },
+    [M8_mxmema_wei_n_2x] = {
+        .introduced = HEX_VER_V73, .removed = HEX_VER_NONE
+    },
+    [M8_mxmema_wei_sb1] = {
+        .introduced = HEX_VER_V68, .removed = HEX_VER_NONE
+    },
+    [M8_mxmema_wei_sc] = {
+        .introduced = HEX_VER_V68, .removed = HEX_VER_NONE
+    },
+    [M8_mxmema_wei_sm] = {
+        .introduced = HEX_VER_V68, .removed = HEX_VER_NONE
+    },
+    [M8_mxmem_bias] = { .introduced = HEX_VER_V68, .removed = HEX_VER_NONE },
+    [M8_mxmem_blk_dm_act_ub] = {
+        .introduced = HEX_VER_V68, .removed = HEX_VER_NONE
+    },
+    [M8_mxmem_blk_sm_act_f8] = {
+        .introduced = HEX_VER_V79, .removed = HEX_VER_NONE
+    },
+    [M8_mxmem_blk_sm_act_hf] = {
+        .introduced = HEX_VER_V68, .removed = HEX_VER_NONE
+    },
+    [M8_mxmem_blk_sm_act_ub] = {
+        .introduced = HEX_VER_V68, .removed = HEX_VER_NONE
+    },
+    [M8_mxmem_cm] = { .introduced = HEX_VER_V73, .removed = HEX_VER_NONE },
+    [M8_mxmem_cm_deep] = {
+        .introduced = HEX_VER_V79, .removed = HEX_VER_NONE
+    },
+    [M8_mxmemd_blk_dm_act_ub] = {
+        .introduced = HEX_VER_V68, .removed = HEX_VER_NONE
+    },
+    [M8_mxmemd_blk_sm_act_f8] = {
+        .introduced = HEX_VER_V79, .removed = HEX_VER_NONE
+    },
+    [M8_mxmemd_blk_sm_act_hf] = {
+        .introduced = HEX_VER_V68, .removed = HEX_VER_NONE
+    },
+    [M8_mxmemd_blk_sm_act_ub] = {
+        .introduced = HEX_VER_V68, .removed = HEX_VER_NONE
+    },
+    [M8_mxmem_deep] = { .introduced = HEX_VER_V79, .removed = HEX_VER_NONE },
+    [M8_mxmem_deep_f8] = {
+        .introduced = HEX_VER_V81, .removed = HEX_VER_NONE
+    },
+    [M8_mxmemdi_wei_b] = {
+        .introduced = HEX_VER_V68, .removed = HEX_VER_NONE
+    },
+    [M8_mxmemdi_wei_b1] = {
+        .introduced = HEX_VER_V68, .removed = HEX_VER_NONE
+    },
+    [M8_mxmemdi_wei_c] = {
+        .introduced = HEX_VER_V68, .removed = HEX_VER_NONE
+    },
+    [M8_mxmemdi_wei_f8] = {
+        .introduced = HEX_VER_V79, .removed = HEX_VER_NONE
+    },
+    [M8_mxmemdi_wei_hf] = {
+        .introduced = HEX_VER_V68, .removed = HEX_VER_NONE
+    },
+    [M8_mxmemdi_wei_n] = {
+        .introduced = HEX_VER_V68, .removed = HEX_VER_NONE
+    },
+    [M8_mxmemdi_wei_n_2x] = {
+        .introduced = HEX_VER_V73, .removed = HEX_VER_NONE
+    },
+    [M8_mxmemdi_wei_sb1] = {
+        .introduced = HEX_VER_V68, .removed = HEX_VER_NONE
+    },
+    [M8_mxmemdi_wei_sc] = {
+        .introduced = HEX_VER_V68, .removed = HEX_VER_NONE
+    },
+    [M8_mxmemdi_wei_sm] = {
+        .introduced = HEX_VER_V68, .removed = HEX_VER_NONE
+    },
+    [M8_mxmem_dm_act_ub] = {
+        .introduced = HEX_VER_V68, .removed = HEX_VER_NONE
+    },
+    [M8_mxmemdp_wei_b] = {
+        .introduced = HEX_VER_V68, .removed = HEX_VER_NONE
+    },
+    [M8_mxmemdp_wei_b1] = {
+        .introduced = HEX_VER_V68, .removed = HEX_VER_NONE
+    },
+    [M8_mxmemdp_wei_c] = {
+        .introduced = HEX_VER_V68, .removed = HEX_VER_NONE
+    },
+    [M8_mxmemdp_wei_f8] = {
+        .introduced = HEX_VER_V79, .removed = HEX_VER_NONE
+    },
+    [M8_mxmemdp_wei_hf] = {
+        .introduced = HEX_VER_V68, .removed = HEX_VER_NONE
+    },
+    [M8_mxmemdp_wei_n] = {
+        .introduced = HEX_VER_V68, .removed = HEX_VER_NONE
+    },
+    [M8_mxmemdp_wei_n_2x] = {
+        .introduced = HEX_VER_V73, .removed = HEX_VER_NONE
+    },
+    [M8_mxmemdp_wei_sb1] = {
+        .introduced = HEX_VER_V68, .removed = HEX_VER_NONE
+    },
+    [M8_mxmemdp_wei_sc] = {
+        .introduced = HEX_VER_V68, .removed = HEX_VER_NONE
+    },
+    [M8_mxmemdp_wei_sm] = {
+        .introduced = HEX_VER_V68, .removed = HEX_VER_NONE
+    },
+    [M8_mxmemdr_wei_b] = {
+        .introduced = HEX_VER_V68, .removed = HEX_VER_NONE
+    },
+    [M8_mxmemdr_wei_b1] = {
+        .introduced = HEX_VER_V68, .removed = HEX_VER_NONE
+    },
+    [M8_mxmemdr_wei_c] = {
+        .introduced = HEX_VER_V68, .removed = HEX_VER_NONE
+    },
+    [M8_mxmemdr_wei_f8] = {
+        .introduced = HEX_VER_V79, .removed = HEX_VER_NONE
+    },
+    [M8_mxmemdr_wei_hf] = {
+        .introduced = HEX_VER_V68, .removed = HEX_VER_NONE
+    },
+    [M8_mxmemdr_wei_n] = {
+        .introduced = HEX_VER_V68, .removed = HEX_VER_NONE
+    },
+    [M8_mxmemdr_wei_n_2x] = {
+        .introduced = HEX_VER_V73, .removed = HEX_VER_NONE
+    },
+    [M8_mxmemdr_wei_sb1] = {
+        .introduced = HEX_VER_V68, .removed = HEX_VER_NONE
+    },
+    [M8_mxmemdr_wei_sc] = {
+        .introduced = HEX_VER_V68, .removed = HEX_VER_NONE
+    },
+    [M8_mxmemdr_wei_sm] = {
+        .introduced = HEX_VER_V68, .removed = HEX_VER_NONE
+    },
+    [M8_mxmem_f8] = { .introduced = HEX_VER_V81, .removed = HEX_VER_NONE },
+    [M8_mxmems_blk_dm_act_ub] = {
+        .introduced = HEX_VER_V68, .removed = HEX_VER_NONE
+    },
+    [M8_mxmems_blk_sm_act_f8] = {
+        .introduced = HEX_VER_V79, .removed = HEX_VER_NONE
+    },
+    [M8_mxmems_blk_sm_act_hf] = {
+        .introduced = HEX_VER_V68, .removed = HEX_VER_NONE
+    },
+    [M8_mxmems_blk_sm_act_ub] = {
+        .introduced = HEX_VER_V68, .removed = HEX_VER_NONE
+    },
+    [M8_mxmem_sm_act_f8] = {
+        .introduced = HEX_VER_V79, .removed = HEX_VER_NONE
+    },
+    [M8_mxmem_sm_act_hf] = {
+        .introduced = HEX_VER_V68, .removed = HEX_VER_NONE
+    },
+    [M8_mxmem_sm_act_ub] = {
+        .introduced = HEX_VER_V68, .removed = HEX_VER_NONE
+    },
+    [M8_mxmem_st_bias] = {
+        .introduced = HEX_VER_V68, .removed = HEX_VER_NONE
+    },
+    [M8_mxmems_wei_b] = { .introduced = HEX_VER_V68, .removed = HEX_VER_NONE },
+    [M8_mxmems_wei_b1] = {
+        .introduced = HEX_VER_V68, .removed = HEX_VER_NONE
+    },
+    [M8_mxmems_wei_c] = { .introduced = HEX_VER_V68, .removed = HEX_VER_NONE },
+    [M8_mxmems_wei_f8] = {
+        .introduced = HEX_VER_V79, .removed = HEX_VER_NONE
+    },
+    [M8_mxmems_wei_hf] = {
+        .introduced = HEX_VER_V68, .removed = HEX_VER_NONE
+    },
+    [M8_mxmems_wei_n] = { .introduced = HEX_VER_V68, .removed = HEX_VER_NONE },
+    [M8_mxmems_wei_n_2x] = {
+        .introduced = HEX_VER_V73, .removed = HEX_VER_NONE
+    },
+    [M8_mxmems_wei_sb1] = {
+        .introduced = HEX_VER_V68, .removed = HEX_VER_NONE
+    },
+    [M8_mxmems_wei_sc] = {
+        .introduced = HEX_VER_V68, .removed = HEX_VER_NONE
+    },
+    [M8_mxmems_wei_sm] = {
+        .introduced = HEX_VER_V68, .removed = HEX_VER_NONE
+    },
+    [M8_mxmemu_blk_dm_act_ub] = {
+        .introduced = HEX_VER_V68, .removed = HEX_VER_NONE
+    },
+    [M8_mxmemu_blk_sm_act_f8] = {
+        .introduced = HEX_VER_V79, .removed = HEX_VER_NONE
+    },
+    [M8_mxmemu_blk_sm_act_hf] = {
+        .introduced = HEX_VER_V68, .removed = HEX_VER_NONE
+    },
+    [M8_mxmemu_blk_sm_act_ub] = {
+        .introduced = HEX_VER_V68, .removed = HEX_VER_NONE
+    },
+    [M8_mxmem_wei_b] = { .introduced = HEX_VER_V68, .removed = HEX_VER_NONE },
+    [M8_mxmem_wei_b1] = { .introduced = HEX_VER_V68, .removed = HEX_VER_NONE },
+    [M8_mxmem_wei_c] = { .introduced = HEX_VER_V68, .removed = HEX_VER_NONE },
+    [M8_mxmem_wei_f8] = { .introduced = HEX_VER_V79, .removed = HEX_VER_NONE },
+    [M8_mxmem_wei_hf] = { .introduced = HEX_VER_V68, .removed = HEX_VER_NONE },
+    [M8_mxmem_wei_n] = { .introduced = HEX_VER_V68, .removed = HEX_VER_NONE },
+    [M8_mxmem_wei_n_2x] = {
+        .introduced = HEX_VER_V73, .removed = HEX_VER_NONE
+    },
+    [M8_mxmem_wei_sb1] = {
+        .introduced = HEX_VER_V68, .removed = HEX_VER_NONE
+    },
+    [M8_mxmem_wei_sc] = { .introduced = HEX_VER_V68, .removed = HEX_VER_NONE },
+    [M8_mxmem_wei_sm] = { .introduced = HEX_VER_V68, .removed = HEX_VER_NONE },
+    [M8_mxswap] = { .introduced = HEX_VER_V68, .removed = HEX_VER_NONE },
+    [M8_mxswap_hf] = { .introduced = HEX_VER_V68, .removed = HEX_VER_NONE },
+
     [S2_pstorerbf_pi_nt] = { .introduced = HEX_VER_V79,
                              .removed = HEX_VER_NONE },
     [S2_pstorerbt_pi_nt] = { .introduced = HEX_VER_V79,
diff --git a/target/hexagon/imported/allext.idef 
b/target/hexagon/imported/allext.idef
index 9d4b23e9de6..32f6fb04a9b 100644
--- a/target/hexagon/imported/allext.idef
+++ b/target/hexagon/imported/allext.idef
@@ -23,3 +23,9 @@
 #include "mmvec/ext.idef"
 #undef EXTNAME
 #undef EXTSTR
+
+#define EXTNAME hmx
+#define EXTSTR "hmx"
+#include "hmx/ext.idef"
+#undef EXTNAME
+#undef EXTSTR
diff --git a/target/hexagon/imported/allextenc.def 
b/target/hexagon/imported/allextenc.def
index 39a3e93fad6..1d143149a9c 100644
--- a/target/hexagon/imported/allextenc.def
+++ b/target/hexagon/imported/allextenc.def
@@ -18,3 +18,7 @@
 #define EXTNAME mmvec
 #include "mmvec/encode_ext.def"
 #undef EXTNAME
+
+#define EXTNAME hmx
+#include "hmx/encode_ext.def"
+#undef EXTNAME
diff --git a/target/hexagon/imported/hmx/encode_ext.def 
b/target/hexagon/imported/hmx/encode_ext.def
new file mode 100644
index 00000000000..25eb43307fb
--- /dev/null
+++ b/target/hexagon/imported/hmx/encode_ext.def
@@ -0,0 +1,149 @@
+/*
+ *  Copyright (c) Qualcomm Technologies, Inc. and/or its subsidiaries.
+ *
+ *  SPDX-License-Identifier: GPL-2.0-or-later
+ */
+
+DEF_ENC32(M8_mxmem_sm_act_ub,"10010010000sssssPP0ttttt11100000")
+DEF_ENC32(M8_mxmem_dm_act_ub,"10010010000sssssPP0ttttt11100001")
+DEF_ENC32(M8_mxmem_sm_act_hf,"10010010000sssssPP0ttttt11100010")
+DEF_ENC32(M8_mxmem_sm_act_f8,"10010010000sssssPP0ttttt11100011")
+DEF_ENC32(M8_mxmem_blk_sm_act_hf,"10010010000sssssPP0ttttt11100100")
+DEF_ENC32(M8_mxmem_blk_sm_act_f8,"10010010000sssssPP0ttttt11100101")
+DEF_ENC32(M8_mxaccshl,"10100110111-----PP0-------010111")
+DEF_ENC32(M8_mxmemu_blk_sm_act_hf,"10010010000sssssPP0ttttt11100110")
+DEF_ENC32(M8_mxmemu_blk_sm_act_f8,"10010010000sssssPP0ttttt11100111")
+DEF_ENC32(M8_mxmemd_blk_sm_act_ub,"10010010000sssssPP0ttttt11101000")
+DEF_ENC32(M8_mxmemd_blk_dm_act_ub,"10010010000sssssPP0ttttt11101001")
+DEF_ENC32(M8_mxmem_blk_sm_act_ub,"10010010000sssssPP0ttttt11101100")
+DEF_ENC32(M8_mxmem_blk_dm_act_ub,"10010010000sssssPP0ttttt11101101")
+DEF_ENC32(M8_mxmemu_blk_sm_act_ub,"10010010000sssssPP0ttttt11101110")
+DEF_ENC32(M8_mxmemu_blk_dm_act_ub,"10010010000sssssPP0ttttt11101111")
+DEF_ENC32(M8_mxmems_blk_sm_act_ub,"10010010000sssssPP0ttttt11110000")
+DEF_ENC32(M8_mxmems_blk_dm_act_ub,"10010010000sssssPP0ttttt11110001")
+DEF_ENC32(M8_mxmems_blk_sm_act_hf,"10010010000sssssPP0ttttt11111000")
+DEF_ENC32(M8_mxmems_blk_sm_act_f8,"10010010000sssssPP0ttttt11111001")
+DEF_ENC32(M8_mxmemd_blk_sm_act_hf,"10010010000sssssPP0ttttt11111010")
+DEF_ENC32(M8_mxmemd_blk_sm_act_f8,"10010010000sssssPP0ttttt11111011")
+DEF_ENC32(M8_mxmems_wei_sc,"10010010000sssssPP1ttttt11000000")
+DEF_ENC32(M8_mxmemdr_wei_sc,"10010010000sssssPP1ttttt11000001")
+DEF_ENC32(M8_mxmemdp_wei_sc,"10010010000sssssPP1ttttt11000010")
+DEF_ENC32(M8_mxmema_wei_sc,"10010010000sssssPP1ttttt11000011")
+DEF_ENC32(M8_mxmemdi_wei_sc,"10010010000sssssPP1ttttt11000100")
+DEF_ENC32(M8_mxmems_wei_b1,"10010010000sssssPP1ttttt11000101")
+DEF_ENC32(M8_mxmemdr_wei_b1,"10010010000sssssPP1ttttt11000110")
+DEF_ENC32(M8_mxmemdp_wei_b1,"10010010000sssssPP1ttttt11000111")
+DEF_ENC32(M8_mxmema_wei_b1,"10010010000sssssPP1ttttt11001000")
+DEF_ENC32(M8_mxmemdi_wei_b1,"10010010000sssssPP1ttttt11001001")
+DEF_ENC32(M8_mxmems_wei_sb1,"10010010000sssssPP1ttttt11001010")
+DEF_ENC32(M8_mxmemdr_wei_sb1,"10010010000sssssPP1ttttt11001011")
+DEF_ENC32(M8_mxmemdp_wei_sb1,"10010010000sssssPP1ttttt11001100")
+DEF_ENC32(M8_mxmema_wei_sb1,"10010010000sssssPP1ttttt11001101")
+DEF_ENC32(M8_mxmemdi_wei_sb1,"10010010000sssssPP1ttttt11001110")
+DEF_ENC32(M8_mxmems_wei_sm,"10010010000sssssPP1ttttt11001111")
+DEF_ENC32(M8_mxmemdr_wei_sm,"10010010000sssssPP1ttttt11010000")
+DEF_ENC32(M8_mxmemdp_wei_sm,"10010010000sssssPP1ttttt11010001")
+DEF_ENC32(M8_mxmema_wei_sm,"10010010000sssssPP1ttttt11010010")
+DEF_ENC32(M8_mxmemdi_wei_sm,"10010010000sssssPP1ttttt11010011")
+DEF_ENC32(M8_mxmem_wei_b,"10010010000sssssPP1ttttt11100000")
+DEF_ENC32(M8_mxmem_wei_n,"10010010000sssssPP1ttttt11100001")
+DEF_ENC32(M8_mxmem_wei_c,"10010010000sssssPP1ttttt11100010")
+DEF_ENC32(M8_mxmem_wei_b1,"10010010000sssssPP1ttttt11100011")
+DEF_ENC32(M8_mxmem_wei_sb1,"10010010000sssssPP1ttttt11100100")
+DEF_ENC32(M8_mxmems_wei_b,"10010010000sssssPP1ttttt11100110")
+DEF_ENC32(M8_mxmemdr_wei_b,"10010010000sssssPP1ttttt11100111")
+DEF_ENC32(M8_mxmemdp_wei_b,"10010010000sssssPP1ttttt11101000")
+DEF_ENC32(M8_mxmema_wei_b,"10010010000sssssPP1ttttt11101001")
+DEF_ENC32(M8_mxmemdi_wei_b,"10010010000sssssPP1ttttt11101011")
+DEF_ENC32(M8_mxmems_wei_n,"10010010000sssssPP1ttttt11101100")
+DEF_ENC32(M8_mxmemdr_wei_n,"10010010000sssssPP1ttttt11101101")
+DEF_ENC32(M8_mxmemdp_wei_n,"10010010000sssssPP1ttttt11101110")
+DEF_ENC32(M8_mxmem_wei_hf,"10010010000sssssPP1ttttt11101111")
+DEF_ENC32(M8_mxmem_wei_sc,"10010010000sssssPP1ttttt11110000")
+DEF_ENC32(M8_mxmem_wei_sm,"10010010000sssssPP1ttttt11110001")
+DEF_ENC32(M8_mxmems_wei_hf,"10010010000sssssPP1ttttt11110010")
+DEF_ENC32(M8_mxmemdr_wei_hf,"10010010000sssssPP1ttttt11110011")
+DEF_ENC32(M8_mxmemdp_wei_hf,"10010010000sssssPP1ttttt11110100")
+DEF_ENC32(M8_mxmema_wei_hf,"10010010000sssssPP1ttttt11110101")
+DEF_ENC32(M8_mxmemdi_wei_hf,"10010010000sssssPP1ttttt11110110")
+DEF_ENC32(M8_mxmema_wei_n,"10010010000sssssPP1ttttt11110111")
+DEF_ENC32(M8_mxmemdi_wei_n,"10010010000sssssPP1ttttt11111000")
+DEF_ENC32(M8_mxmems_wei_c,"10010010000sssssPP1ttttt11111001")
+DEF_ENC32(M8_mxmemdr_wei_c,"10010010000sssssPP1ttttt11111010")
+DEF_ENC32(M8_mxmemdp_wei_c,"10010010000sssssPP1ttttt11111011")
+DEF_ENC32(M8_mxmema_wei_c,"10010010000sssssPP1ttttt11111100")
+DEF_ENC32(M8_mxmemdi_wei_c,"10010010000sssssPP1ttttt11111101")
+DEF_ENC32(M8_mxmem2_bias,"10010010000sssssPP--001111111110")
+DEF_ENC32(M8_mxmem_bias,"10010010000sssssPP--001111111111")
+DEF_ENC32(M8_mxmems_wei_n_2x,"10010010000sssssPP1ttttt01000001")
+DEF_ENC32(M8_mxmemdr_wei_n_2x,"10010010000sssssPP1ttttt01000010")
+DEF_ENC32(M8_mxmemdp_wei_n_2x,"10010010000sssssPP1ttttt01000011")
+DEF_ENC32(M8_mxmemdi_wei_n_2x,"10010010000sssssPP1ttttt01000100")
+DEF_ENC32(M8_mxmema_wei_n_2x,"10010010000sssssPP1ttttt01000101")
+DEF_ENC32(M8_mxmem_wei_n_2x,"10010010000sssssPP1ttttt01000110")
+DEF_ENC32(M8_mxmem_wei_f8,"10010010000sssssPP1ttttt01000111")
+DEF_ENC32(M8_mxmems_wei_f8,"10010010000sssssPP1ttttt01001000")
+DEF_ENC32(M8_mxmemdr_wei_f8,"10010010000sssssPP1ttttt01001001")
+DEF_ENC32(M8_mxmemdp_wei_f8,"10010010000sssssPP1ttttt01001010")
+DEF_ENC32(M8_mxmema_wei_f8,"10010010000sssssPP1ttttt01001011")
+DEF_ENC32(M8_mxmemdi_wei_f8,"10010010000sssssPP1ttttt01001100")
+DEF_ENC32(M8_mxcvtl_sat_ub,"10100110111sssssPP0ttttt--000000")
+DEF_ENC32(M8_mxcvtl_dm_sat_ub,"10100110111sssssPP0ttttt--000001")
+DEF_ENC32(M8_mxcvtl_ub,"10100110111sssssPP0ttttt--000010")
+DEF_ENC32(M8_mxcvtl_dm_ub,"10100110111sssssPP0ttttt--000011")
+DEF_ENC32(M8_mxcvtr_sat_ub,"10100110111sssssPP0ttttt--000100")
+DEF_ENC32(M8_mxcvtr_dm_sat_ub,"10100110111sssssPP0ttttt--000101")
+DEF_ENC32(M8_mxcvtr_ub,"10100110111sssssPP0ttttt--000110")
+DEF_ENC32(M8_mxcvtr_dm_ub,"10100110111sssssPP0ttttt--000111")
+DEF_ENC32(M8_mxcvtl_sat_ub_r,"10100110111sssssPP0ttttt--001000")
+DEF_ENC32(M8_mxcvtl_dm_sat_ub_r,"10100110111sssssPP0ttttt--001001")
+DEF_ENC32(M8_mxcvtl_ub_r,"10100110111sssssPP0ttttt--001010")
+DEF_ENC32(M8_mxcvtl_dm_ub_r,"10100110111sssssPP0ttttt--001011")
+DEF_ENC32(M8_mxcvtr_sat_ub_r,"10100110111sssssPP0ttttt--001100")
+DEF_ENC32(M8_mxcvtr_dm_sat_ub_r,"10100110111sssssPP0ttttt--001101")
+DEF_ENC32(M8_mxcvtr_ub_r,"10100110111sssssPP0ttttt--001110")
+DEF_ENC32(M8_mxcvtr_dm_ub_r,"10100110111sssssPP0ttttt--001111")
+DEF_ENC32(M8_mxmem_st_bias,"10100110111sssssPP000000--010000")
+DEF_ENC32(M8_cvt_rs_ub,"10100110111sssssPP010111--010000")
+DEF_ENC32(M8_cvt_rs_uh_2x1,"10100110111sssssPP011000--010000")
+DEF_ENC32(M8_cvt_rs_uh_2x2,"10100110111sssssPP011001--010000")
+DEF_ENC32(M8_cvt_rs_hf,"10100110111sssssPP011010--010000")
+DEF_ENC32(M8_cvt_rs_f8,"10100110111sssssPP011011--010000")
+DEF_ENC32(M8_cvt_rs_ub_sc0,"10100110111sssssPP011100--010000")
+DEF_ENC32(M8_cvt_rs_ub_sc1,"10100110111sssssPP011101--010000")
+DEF_ENC32(M8_mxclracc,"10100110111-----PP0-------010001")
+DEF_ENC32(M8_mxclracc_hf,"10100110111-----PP0-------010011")
+DEF_ENC32(M8_mxswap,"10100110111-----PP0-------010100")
+DEF_ENC32(M8_mxswap_hf,"10100110111-----PP0-------010101")
+DEF_ENC32(M8_mxmem2_st_bias,"10100110111sssssPP0-------010110")
+DEF_ENC32(M8_mxmem,"10100110111sssssPP0ttttt--011000")
+DEF_ENC32(M8_mxmem_cm,"10100110111sssssPP0ttttt--011001")
+DEF_ENC32(M8_mxmem_2x2,"10100110111sssssPP0ttttt--011010")
+DEF_ENC32(M8_mxmem_deep,"10100110111sssssPP0ttttt--011011")
+DEF_ENC32(M8_mxmem_cm_deep,"10100110111sssssPP0ttttt--011100")
+DEF_ENC32(M8_mxmem_f8,"10100110111sssssPP0ttttt--011101")
+DEF_ENC32(M8_mxmem_deep_f8,"10100110111sssssPP0ttttt--011110")
+DEF_ENC32(M8_mxcvtl_sat_hf,"10100110111sssssPP1ttttt--000000")
+DEF_ENC32(M8_mxcvtl_sat_pos_hf,"10100110111sssssPP1ttttt--000001")
+DEF_ENC32(M8_mxcvtb_sat_uh,"10100110111sssssPP1ttttt--000010")
+DEF_ENC32(M8_mxcvtb_uh,"10100110111sssssPP1ttttt--000011")
+DEF_ENC32(M8_mxcvtr_sat_hf,"10100110111sssssPP1ttttt--000100")
+DEF_ENC32(M8_mxcvtl_sat_pos_hf_r,"10100110111sssssPP1ttttt--000101")
+DEF_ENC32(M8_mxcvtb_sat_uh_r,"10100110111sssssPP1ttttt--000110")
+DEF_ENC32(M8_mxcvtb_uh_r,"10100110111sssssPP1ttttt--000111")
+DEF_ENC32(M8_mxcvtl_sat_hf_r,"10100110111sssssPP1ttttt--001000")
+DEF_ENC32(M8_mxcvtr_sat_pos_hf,"10100110111sssssPP1ttttt--001001")
+DEF_ENC32(M8_mxcvta_sat_uh,"10100110111sssssPP1ttttt--001010")
+DEF_ENC32(M8_mxcvta_uh,"10100110111sssssPP1ttttt--001011")
+DEF_ENC32(M8_mxcvtr_sat_hf_r,"10100110111sssssPP1ttttt--001100")
+DEF_ENC32(M8_mxcvtr_sat_pos_hf_r,"10100110111sssssPP1ttttt--001101")
+DEF_ENC32(M8_mxcvta_sat_uh_r,"10100110111sssssPP1ttttt--001110")
+DEF_ENC32(M8_mxcvta_uh_r,"10100110111sssssPP1ttttt--001111")
+DEF_ENC32(M8_mxcvtb_sat_uh2x2,"10100110111sssssPP1ttttt--010010")
+DEF_ENC32(M8_mxcvtb_uh2x2,"10100110111sssssPP1ttttt--010011")
+DEF_ENC32(M8_mxcvtb_sat_uh2x2_r,"10100110111sssssPP1ttttt--010110")
+DEF_ENC32(M8_mxcvtb_uh2x2_r,"10100110111sssssPP1ttttt--010111")
+DEF_ENC32(M8_mxcvta_sat_uh2x2,"10100110111sssssPP1ttttt--011010")
+DEF_ENC32(M8_mxcvta_uh2x2,"10100110111sssssPP1ttttt--011011")
+DEF_ENC32(M8_mxcvta_sat_uh2x2_r,"10100110111sssssPP1ttttt--011110")
+DEF_ENC32(M8_mxcvta_uh2x2_r,"10100110111sssssPP1ttttt--011111")
diff --git a/target/hexagon/imported/hmx/ext.idef 
b/target/hexagon/imported/hmx/ext.idef
new file mode 100644
index 00000000000..c8b4470140f
--- /dev/null
+++ b/target/hexagon/imported/hmx/ext.idef
@@ -0,0 +1,175 @@
+/*
+ *  Copyright (c) Qualcomm Technologies, Inc. and/or its subsidiaries.
+ *
+ *  SPDX-License-Identifier: GPL-2.0-or-later
+ */
+
+#ifndef EXTINSN
+#define EXTINSN Q6INSN
+#define __SELF_DEF_EXTINSN 1
+#endif
+
+
+#define MX_ACT(TAG,SYNTAX, TYPE, FORMAT_OFFSET, BLOCK_TYPE, EXTRA_ATTRIBS) \
+EXTINSN(TAG,SYNTAX,ATTRIBS(A_SHARED_EXTENSION,A_HMX,A_LOAD,A_MEMLIKE,A_VTCM_ALLBANK_ACCESS,A_EA_PAGECROSS,A_HMX_BLOCK_ALIGN,A_PAIR_1OF2),"Matrix
 Multiply",  \
+{ RsV = RsV; RtV = RtV; })
+
+#define 
MXMEM_WGT(TAG,SYNTAX,TYPE,WEIGHTS_PER_BYTE_LOG,WGT_PER_WORD,UNPACK,BLOCK_TYPE,MULT_TYPE,OUTPUT_CHANNEL_SCALE,EXTRA_ATTRIBS)
 \
+EXTINSN(TAG,SYNTAX,ATTRIBS(A_SHARED_EXTENSION,A_HMX,A_LOAD,A_RESTRICT_SLOT0ONLY,A_MEMLIKE,A_MPY,A_VTCM_ALLBANK_ACCESS,A_EA_PAGECROSS,A_HMX_128B_ALIGN,A_PAIR_2OF2),"Matrix
 Multiply",  \
+{ RsV = RsV; RtV = RtV; })
+
+#define FORMAT_DM 0
+#define FORMAT_SM 2
+
+#define MULTI_BLOCK 0
+#define SINGLE_BLOCK_ONLY 1
+
+#define MX_ALIGNED 0
+#define MX_ABOVE 1
+
+
+#define MXMEM_ACT_INSN(TYPE, TYPE2, ELEMENT, EXTRA_ATTRIBS) \
+MX_ACT(M8_mxmem_blk_sm_act_##TYPE,  "activation." TYPE2 "=mxmem(Rs32,Rt32)",   
           ELEMENT, FORMAT_SM, COPROC_ACT_BLOCK,  EXTRA_ATTRIBS)\
+MX_ACT(M8_mxmem_sm_act_##TYPE,      "activation." TYPE2 
"=mxmem(Rs32,Rt32):deep",         ELEMENT, FORMAT_SM, COPROC_ACT_DEEP,   
EXTRA_ATTRIBS)\
+MX_ACT(M8_mxmemu_blk_sm_act_##TYPE, "activation." TYPE2 
"=mxmem(Rs32,Rt32):above",        ELEMENT, FORMAT_SM, COPROC_ACT_ABOVE,  
EXTRA_ATTRIBS)\
+MX_ACT(M8_mxmems_blk_sm_act_##TYPE, "activation." TYPE2 
"=mxmem(Rs32,Rt32):single",       ELEMENT, FORMAT_SM, COPROC_ACT_SINGLE, 
EXTRA_ATTRIBS)\
+MX_ACT(M8_mxmemd_blk_sm_act_##TYPE, "activation." TYPE2 
"=mxmem(Rs32,Rt32):dilate",       ELEMENT, FORMAT_SM, COPROC_ACT_DILATE, 
EXTRA_ATTRIBS)
+
+MXMEM_ACT_INSN(ub, "ub", COPROC_UB,   fMX_NONE)
+MXMEM_ACT_INSN(hf, "hf", COPROC_FP16, fMX_COPROC_FLT)
+MXMEM_ACT_INSN(f8, "f8", COPROC_FP8,  fMX_COPROC_FLT)
+
+// channel/depth major doesn't fix nicely withe macro...
+MX_ACT(M8_mxmem_blk_dm_act_ub,  "activation.ub=mxmem(Rs32,Rt32):cm",           
COPROC_UB, FORMAT_DM, COPROC_ACT_BLOCK,  fMX_NONE)
+MX_ACT(M8_mxmem_dm_act_ub,      "activation.ub=mxmem(Rs32,Rt32):deep:cm",      
COPROC_UB, FORMAT_DM, COPROC_ACT_DEEP,   fMX_NONE)
+MX_ACT(M8_mxmemu_blk_dm_act_ub, "activation.ub=mxmem(Rs32,Rt32):above:cm",     
COPROC_UB, FORMAT_DM, COPROC_ACT_ABOVE,  fMX_NONE)
+MX_ACT(M8_mxmems_blk_dm_act_ub, "activation.ub=mxmem(Rs32,Rt32):single:cm",    
COPROC_UB, FORMAT_DM, COPROC_ACT_SINGLE, fMX_NONE)
+MX_ACT(M8_mxmemd_blk_dm_act_ub, "activation.ub=mxmem(Rs32,Rt32):dilate:cm",    
COPROC_UB, FORMAT_DM, COPROC_ACT_DILATE, fMX_NONE)
+
+
+#define MXMEM_WGT_INSN(TYPE, TYPE2, TYPE3, SCALE, WGT_PER_WORD, UNPACK, 
ELEMENT,  MULT_TYPE,  OUTPUT_CHANNEL_SCALE, EXTRA_ATTRIBS) \
+MXMEM_WGT(M8_mxmem_wei_##TYPE,        "weight." TYPE2 "=mxmem(Rs32,Rt32)" 
TYPE3 ,          ELEMENT,  SCALE, WGT_PER_WORD, UNPACK, COPROC_WEI_NORMAL, 
MULT_TYPE,  OUTPUT_CHANNEL_SCALE, EXTRA_ATTRIBS) \
+MXMEM_WGT(M8_mxmems_wei_##TYPE,       "weight." TYPE2 "=mxmem(Rs32,Rt32)" 
TYPE3 ":single", ELEMENT,  SCALE, WGT_PER_WORD, UNPACK, COPROC_WEI_SINGLE, 
MULT_TYPE,  OUTPUT_CHANNEL_SCALE, EXTRA_ATTRIBS) \
+MXMEM_WGT(M8_mxmemdr_wei_##TYPE,      "weight." TYPE2 "=mxmem(Rs32,Rt32)" 
TYPE3 ":drop",   ELEMENT,  SCALE, WGT_PER_WORD, UNPACK, COPROC_WEI_DROP,   
MULT_TYPE,  OUTPUT_CHANNEL_SCALE, EXTRA_ATTRIBS) \
+MXMEM_WGT(M8_mxmemdp_wei_##TYPE,      "weight." TYPE2 "=mxmem(Rs32,Rt32)" 
TYPE3 ":deep",   ELEMENT,  SCALE, WGT_PER_WORD, UNPACK, COPROC_WEI_DEEP,   
MULT_TYPE,  OUTPUT_CHANNEL_SCALE, EXTRA_ATTRIBS) \
+MXMEM_WGT(M8_mxmema_wei_##TYPE,       "weight." TYPE2 "=mxmem(Rs32,Rt32)" 
TYPE3 ":after",  ELEMENT,  SCALE, WGT_PER_WORD, UNPACK, COPROC_WEI_AFTER,  
MULT_TYPE,  OUTPUT_CHANNEL_SCALE, EXTRA_ATTRIBS) \
+MXMEM_WGT(M8_mxmemdi_wei_##TYPE,      "weight." TYPE2 "=mxmem(Rs32,Rt32)" 
TYPE3 ":dilate", ELEMENT,  SCALE, WGT_PER_WORD, UNPACK, COPROC_WEI_DILATE, 
MULT_TYPE,  OUTPUT_CHANNEL_SCALE, EXTRA_ATTRIBS)
+
+#define OUTPUT_CHANNELS_1X 1
+#define OUTPUT_CHANNELS_2X 2
+
+MXMEM_WGT_INSN(b,   "b",,        0,  4, COPROC_UNPACK_BYTE_FROM_BYTE,   
COPROC_B,     COPROC_MULT_FXP,         OUTPUT_CHANNELS_1X, fMX_NONE)
+MXMEM_WGT_INSN(sm,  "sm",,       0,  4, COPROC_UNPACK_SM_FROM_BYTE,     
COPROC_B,     COPROC_MULT_FXP,         OUTPUT_CHANNELS_1X, fMX_NONE)
+MXMEM_WGT_INSN(n,   "n",,        1,  8, COPROC_UNPACK_NIBBLE_FROM_BYTE, 
COPROC_B,     COPROC_MULT_FXP,         OUTPUT_CHANNELS_1X, fMX_NONE)
+MXMEM_WGT_INSN(c,   "c",,        2, 16, COPROC_UNPACK_CRUMB_FROM_BYTE,  
COPROC_B,     COPROC_MULT_FXP,         OUTPUT_CHANNELS_1X, fMX_NONE)
+MXMEM_WGT_INSN(sc,  "sc",,       2, 16, COPROC_UNPACK_SCRUMB_FROM_BYTE, 
COPROC_B,     COPROC_MULT_FXP,         OUTPUT_CHANNELS_1X, fMX_NONE)
+MXMEM_WGT_INSN(b1,  "ubit",,     3, 32, COPROC_UNPACK_1BIT_FROM_BYTE,   
COPROC_B,     COPROC_MULT_FXP,         OUTPUT_CHANNELS_1X, fMX_NONE)
+MXMEM_WGT_INSN(sb1, "sbit",,     3, 32, COPROC_UNPACK_1SBIT_FROM_BYTE,  
COPROC_B,     COPROC_MULT_FXP,         OUTPUT_CHANNELS_1X, fMX_NONE)
+MXMEM_WGT_INSN(n_2x, "n", ":2x", 1,  8, COPROC_UNPACK_NIBBLE_FROM_BYTE, 
COPROC_B,     COPROC_MULT_FXP_SUBBYTE, OUTPUT_CHANNELS_2X, fMX_SUB_COLS)
+MXMEM_WGT_INSN(hf,  "hf",,       0,  2, COPROC_UNPACK_NONE,             
COPROC_FP16,  COPROC_MULT_XFP,         OUTPUT_CHANNELS_1X, fMX_COPROC_FLT)
+MXMEM_WGT_INSN(f8,  "f8",,       0,  4, COPROC_UNPACK_BYTE_FROM_BYTE,   
COPROC_FP8,   COPROC_MULT_XFP,         OUTPUT_CHANNELS_1X, fMX_COPROC_FLT)
+
+
+///// CONVERTS //////
+
+// Based on Rs32 from CVT transfer
+#define SUBCHANNEL0 0
+#define SUBCHANNEL1 2
+#define POLY_CONVERT 0
+#define LEGACY_CONVERT 1
+#define BF16_BIT_UNUSED 0
+#define XFP_RND_BIT_UNUSED 0
+#define COPROC_ACC_CLEAR 0
+#define COPROC_ACC_RETAIN 1
+
+#define COPROC_RELU 0
+#define COPROC_NO_RELU 1
+
+#define OLD_INDEX0 0
+#define OLD_INDEX1 1
+
+#define 
MXMEM_CONVERT_LEGACY(TAG,OPCODE,TYPE,SAT,FORMAT_OFFSET,RSV,RTV,DIRECTION,CLEAR_ACC,EXTRA_ATTRIB)
 \
+EXTINSN(TAG, OPCODE,  
ATTRIBS(A_SHARED_EXTENSION,A_RESTRICT_SLOT0ONLY,A_HMX,A_HMX_CVT,A_MEMLIKE,A_HMX_BLOCK_ALIGN,A_STORE,A_VTCM_ALLBANK_ACCESS,A_EA_PAGECROSS),"Matrix
 Convert",  \
+{ RsV = RsV; RtV = RtV; })
+
+#define MXCVT_RS(TAG,OPCODE,TYPE,RSV, SUBCHANNEL_SELECT,EXTRA_ATTRIB) \
+EXTINSN(TAG, OPCODE,  
ATTRIBS(A_SHARED_EXTENSION,A_RESTRICT_SLOT0ONLY,A_HMX,A_HMX_CVT,A_HMX_CU_SCALAR,A_MEMLIKE),"Matrix
 Convert",  \
+{ RsV = RsV; })
+
+#define MXST(TAG,OPCODE,FORMAT,TYPE,RSV,RTV,OLD_INDEX) \
+EXTINSN(TAG, OPCODE,  
ATTRIBS(A_SHARED_EXTENSION,A_RESTRICT_SLOT0ONLY,A_EA_REG_ONLY,A_HMX,A_MEMLIKE,A_VTCM_ALLBANK_ACCESS,A_EA_PAGECROSS,A_HMX_BLOCK_ALIGN,A_STORE),"Matrix
 Convert",  \
+{ RsV = RsV; RtV = RtV; })
+
+#define MXMEMCVT_LEGACY(TAGL, TAGR, TAGTYPE, TAGPOS, FORMAT_TYPE, FORMAT, 
DTYPE, TYPE, ACC, POS,EXTRA_ATTRIB)\
+MXMEM_CONVERT_LEGACY(M8_mxcvt##TAGL##_sat_##TAGTYPE,         
"mxmem(Rs32,Rt32):before"        FORMAT_TYPE ":sat" DTYPE "=acc" ACC, TYPE, 
COPROC_RELU,    FORMAT, RsV, RtV, COPROC_CVT_BEFORE, COPROC_ACC_CLEAR,  
EXTRA_ATTRIB)\
+MXMEM_CONVERT_LEGACY(M8_mxcvt##TAGL##_##TAGPOS##TAGTYPE,     
"mxmem(Rs32,Rt32):before"        FORMAT_TYPE    POS DTYPE "=acc" ACC, TYPE, 
COPROC_NO_RELU, FORMAT, RsV, RtV, COPROC_CVT_BEFORE, COPROC_ACC_CLEAR,  
EXTRA_ATTRIB)\
+MXMEM_CONVERT_LEGACY(M8_mxcvt##TAGL##_sat_##TAGTYPE##_r,     
"mxmem(Rs32,Rt32):before:retain" FORMAT_TYPE ":sat" DTYPE "=acc" ACC, TYPE, 
COPROC_RELU,    FORMAT, RsV, RtV, COPROC_CVT_BEFORE, COPROC_ACC_RETAIN, 
EXTRA_ATTRIB)\
+MXMEM_CONVERT_LEGACY(M8_mxcvt##TAGL##_##TAGPOS##TAGTYPE##_r, 
"mxmem(Rs32,Rt32):before:retain" FORMAT_TYPE    POS DTYPE "=acc" ACC, TYPE, 
COPROC_NO_RELU, FORMAT, RsV, RtV, COPROC_CVT_BEFORE, COPROC_ACC_RETAIN, 
EXTRA_ATTRIB)\
+MXMEM_CONVERT_LEGACY(M8_mxcvt##TAGR##_sat_##TAGTYPE,         
"mxmem(Rs32,Rt32):after"         FORMAT_TYPE ":sat" DTYPE "=acc" ACC, TYPE, 
COPROC_RELU,    FORMAT, RsV, RtV, COPROC_CVT_AFTER,  COPROC_ACC_CLEAR,  
EXTRA_ATTRIB)\
+MXMEM_CONVERT_LEGACY(M8_mxcvt##TAGR##_##TAGPOS##TAGTYPE,     
"mxmem(Rs32,Rt32):after"         FORMAT_TYPE   POS  DTYPE "=acc" ACC, TYPE, 
COPROC_NO_RELU, FORMAT, RsV, RtV, COPROC_CVT_AFTER,  COPROC_ACC_CLEAR,  
EXTRA_ATTRIB)\
+MXMEM_CONVERT_LEGACY(M8_mxcvt##TAGR##_sat_##TAGTYPE##_r,     
"mxmem(Rs32,Rt32):after:retain"  FORMAT_TYPE ":sat" DTYPE "=acc" ACC, TYPE, 
COPROC_RELU,    FORMAT, RsV, RtV, COPROC_CVT_AFTER,  COPROC_ACC_RETAIN, 
EXTRA_ATTRIB)\
+MXMEM_CONVERT_LEGACY(M8_mxcvt##TAGR##_##TAGPOS##TAGTYPE##_r, 
"mxmem(Rs32,Rt32):after:retain"  FORMAT_TYPE    POS DTYPE "=acc" ACC, TYPE, 
COPROC_NO_RELU, FORMAT, RsV, RtV, COPROC_CVT_AFTER,  COPROC_ACC_RETAIN, 
EXTRA_ATTRIB)
+
+MXMEMCVT_LEGACY(l_dm, r_dm, ub,           , ":cm", FORMAT_DM, ".ub", 
COPROC_UB,    "",     "",     fMX_NONE)
+MXMEMCVT_LEGACY(l,    r,    ub,           ,    "", FORMAT_SM, ".ub", 
COPROC_UB,    "",     "",     fMX_NONE)
+MXMEMCVT_LEGACY(b,    a,    uh,           ,    "", FORMAT_SM, ".uh", 
COPROC_UH,    ":2x1", "",     fMX_NONE)
+MXMEMCVT_LEGACY(b,    a,    uh2x2,        ,    "", FORMAT_SM, ".uh", 
COPROC_UH_UH, ":2x2", "",     fMX_NONE)
+//MXMEMCVT_LEGACY(l,    r,    hf,   sat_pos_,    "", FORMAT_SM, ".hf", 
COPROC_FP16,  "",     ":pos", fMX_COPROC_FLT)
+
+MXMEM_CONVERT_LEGACY(M8_mxcvtl_sat_hf,       "mxmem(Rs32,Rt32):before.hf=acc", 
           COPROC_FP16, COPROC_NO_RELU, FORMAT_SM, RsV, RtV, COPROC_CVT_BEFORE, 
COPROC_ACC_CLEAR,  fMX_COPROC_FLT)
+MXMEM_CONVERT_LEGACY(M8_mxcvtl_sat_pos_hf,   
"mxmem(Rs32,Rt32):before:pos.hf=acc",        COPROC_FP16, COPROC_RELU,    
FORMAT_SM, RsV, RtV, COPROC_CVT_BEFORE, COPROC_ACC_CLEAR,  fMX_COPROC_FLT)
+MXMEM_CONVERT_LEGACY(M8_mxcvtl_sat_hf_r,     
"mxmem(Rs32,Rt32):before:retain.hf=acc",     COPROC_FP16, COPROC_NO_RELU, 
FORMAT_SM, RsV, RtV, COPROC_CVT_BEFORE, COPROC_ACC_RETAIN, fMX_COPROC_FLT)
+MXMEM_CONVERT_LEGACY(M8_mxcvtl_sat_pos_hf_r, 
"mxmem(Rs32,Rt32):before:retain:pos.hf=acc", COPROC_FP16, COPROC_RELU,    
FORMAT_SM, RsV, RtV, COPROC_CVT_BEFORE, COPROC_ACC_RETAIN, fMX_COPROC_FLT)
+MXMEM_CONVERT_LEGACY(M8_mxcvtr_sat_hf,       "mxmem(Rs32,Rt32):after.hf=acc",  
           COPROC_FP16, COPROC_NO_RELU, FORMAT_SM, RsV, RtV, COPROC_CVT_AFTER,  
COPROC_ACC_CLEAR,  fMX_COPROC_FLT)
+MXMEM_CONVERT_LEGACY(M8_mxcvtr_sat_pos_hf,   
"mxmem(Rs32,Rt32):after:pos.hf=acc",         COPROC_FP16, COPROC_RELU,    
FORMAT_SM, RsV, RtV, COPROC_CVT_AFTER,  COPROC_ACC_CLEAR,  fMX_COPROC_FLT)
+MXMEM_CONVERT_LEGACY(M8_mxcvtr_sat_hf_r,     
"mxmem(Rs32,Rt32):after:retain.hf=acc",      COPROC_FP16, COPROC_NO_RELU, 
FORMAT_SM, RsV, RtV, COPROC_CVT_AFTER,  COPROC_ACC_RETAIN, fMX_COPROC_FLT)
+MXMEM_CONVERT_LEGACY(M8_mxcvtr_sat_pos_hf_r, 
"mxmem(Rs32,Rt32):after:retain:pos.hf=acc",  COPROC_FP16, COPROC_RELU,    
FORMAT_SM, RsV, RtV, COPROC_CVT_AFTER,  COPROC_ACC_RETAIN, fMX_COPROC_FLT)
+
+MXCVT_RS(M8_cvt_rs_ub,     "cvt.ub=acc(Rs32)",     COPROC_UB,      RsV, 
SUBCHANNEL0, fMX_NONE)
+MXCVT_RS(M8_cvt_rs_ub_sc0, "cvt.ub=acc(Rs32):sc0", COPROC_UB4,     RsV, 
SUBCHANNEL0, fMX_SUB_COLS)
+MXCVT_RS(M8_cvt_rs_ub_sc1, "cvt.ub=acc(Rs32):sc1", COPROC_UB4,     RsV, 
SUBCHANNEL1, fMX_SUB_COLS)
+MXCVT_RS(M8_cvt_rs_uh_2x1, "cvt.uh=acc(Rs32):2x1", COPROC_UH,      RsV, 
SUBCHANNEL0, fMX_NONE)
+MXCVT_RS(M8_cvt_rs_uh_2x2, "cvt.uh=acc(Rs32):2x2", COPROC_UH_UH,   RsV, 
SUBCHANNEL0, fMX_NONE)
+MXCVT_RS(M8_cvt_rs_hf,     "cvt.hf=acc(Rs32)",     COPROC_FP16,    RsV, 
SUBCHANNEL0, fMX_COPROC_FLT)
+MXCVT_RS(M8_cvt_rs_f8,     "cvt.f8=acc(Rs32)",     COPROC_FP8,     RsV, 
SUBCHANNEL0, fMX_COPROC_FLT)
+
+MXST(M8_mxmem,          "mxmem(Rs32,Rt32)=cvt",          FORMAT_SM, COPROC_UB, 
   RsV, RtV, OLD_INDEX0)
+MXST(M8_mxmem_deep,     "mxmem(Rs32,Rt32):deep=cvt",     FORMAT_SM, COPROC_UB, 
   RsV, RtV, OLD_INDEX1)
+MXST(M8_mxmem_cm,       "mxmem(Rs32,Rt32):cm=cvt",       FORMAT_DM, COPROC_UB, 
   RsV, RtV, OLD_INDEX0)
+MXST(M8_mxmem_2x2,      "mxmem(Rs32,Rt32):2x2=cvt",      FORMAT_SM, 
COPROC_UH_UH, RsV, RtV, OLD_INDEX0)
+MXST(M8_mxmem_cm_deep,  "mxmem(Rs32,Rt32):cm:deep=cvt",  FORMAT_DM, COPROC_UB, 
   RsV, RtV, OLD_INDEX1)
+MXST(M8_mxmem_f8,        "mxmem(Rs32,Rt32).f8=cvt",      FORMAT_SM, 
COPROC_FP8,   RsV, RtV, OLD_INDEX0)
+MXST(M8_mxmem_deep_f8,   "mxmem(Rs32,Rt32):deep.f8=cvt", FORMAT_SM, 
COPROC_FP8,   RsV, RtV, OLD_INDEX1) // generic byte that behaves kind of like FP
+
+/// MISC INSNS ////
+
+
+EXTINSN(M8_mxmem_bias, "bias=mxmem(Rs32)", \
+        ATTRIBS(A_SHARED_EXTENSION,A_MEMLIKE,A_LOAD,A_HMX, \
+                A_RESTRICT_NOSLOT1_STORE,A_RESTRICT_SLOT0ONLY), \
+        "Matrix Bias and Scale", { RsV = RsV; })
+EXTINSN(M8_mxmem_st_bias,    "mxmem(Rs32)=bias", 
ATTRIBS(A_SHARED_EXTENSION,A_MEMLIKE,A_STORE,A_RESTRICT_NOSLOT1_STORE,A_RESTRICT_SLOT0ONLY,A_HMX),
 "Store Matrix Bias and Scale", \
+{ RsV = RsV; })
+
+EXTINSN(M8_mxmem2_bias, "bias=mxmem2(Rs32)", \
+        ATTRIBS(A_SHARED_EXTENSION,A_VTCM_ALLBANK_ACCESS,A_MEMLIKE, \
+                A_LOAD,A_HMX,A_RESTRICT_NOSLOT1_STORE, \
+                A_RESTRICT_SLOT0ONLY), "Matrix Bias and Scale", \
+        { RsV = RsV; })
+EXTINSN(M8_mxmem2_st_bias,    "mxmem2(Rs32)=bias", 
ATTRIBS(A_SHARED_EXTENSION,A_VTCM_ALLBANK_ACCESS,A_MEMLIKE,A_STORE,A_RESTRICT_NOSLOT1_STORE,A_RESTRICT_SLOT0ONLY,A_HMX),
 "Store Matrix Bias and Scale", \
+{ RsV = RsV; })
+
+
+
+EXTINSN(M8_mxclracc,    "mxclracc",     
ATTRIBS(A_SHARED_EXTENSION,A_HMX,A_MEMLIKE_PACKET_RULES,A_RESTRICT_SLOT0ONLY), 
"Clear both fxp accumulators", { })
+EXTINSN(M8_mxclracc_hf, "mxclracc.hf",  
ATTRIBS(A_SHARED_EXTENSION,A_HMX,A_HMX_FLT,A_MEMLIKE_PACKET_RULES,A_RESTRICT_SLOT0ONLY),
 "Clear both flt accumulators", { })
+EXTINSN(M8_mxswap,      "mxswapacc",    
ATTRIBS(A_SHARED_EXTENSION,A_HMX,A_MEMLIKE_PACKET_RULES,A_RESTRICT_SLOT0ONLY), 
"Swap fxp accumulators", { })
+EXTINSN(M8_mxswap_hf,   "mxswapacc.hf", 
ATTRIBS(A_SHARED_EXTENSION,A_HMX,A_HMX_FLT,A_MEMLIKE_PACKET_RULES,A_RESTRICT_SLOT0ONLY),
 "Swap flt accumulators", { })
+
+// Removed in v79
+EXTINSN(M8_mxaccshl,    "acc=mxshl(acc,#16)",     
ATTRIBS(A_HMX,A_MEMLIKE,A_MEMLIKE_PACKET_RULES,A_RESTRICT_SLOT0ONLY), "", {})
+
+#ifdef __SELF_DEF_EXTINSN
+#undef EXTINSN
+#undef __SELF_DEF_EXTINSN
+#endif
-- 
2.34.1

Reply via email to