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
