rpcsx/rpcsx-gpu/lib/gcn-shader/include/shader/dialect/vopc.hpp
2024-10-01 22:04:40 +03:00

522 lines
15 KiB
C++

#pragma once
namespace shader::ir::vopc {
enum Op {
CMP_F_F32,
CMP_LT_F32,
CMP_EQ_F32,
CMP_LE_F32,
CMP_GT_F32,
CMP_LG_F32,
CMP_GE_F32,
CMP_O_F32,
CMP_U_F32,
CMP_NGE_F32,
CMP_NLG_F32,
CMP_NGT_F32,
CMP_NLE_F32,
CMP_NEQ_F32,
CMP_NLT_F32,
CMP_TRU_F32,
CMPX_F_F32,
CMPX_LT_F32,
CMPX_EQ_F32,
CMPX_LE_F32,
CMPX_GT_F32,
CMPX_LG_F32,
CMPX_GE_F32,
CMPX_O_F32,
CMPX_U_F32,
CMPX_NGE_F32,
CMPX_NLG_F32,
CMPX_NGT_F32,
CMPX_NLE_F32,
CMPX_NEQ_F32,
CMPX_NLT_F32,
CMPX_TRU_F32,
CMP_F_F64,
CMP_LT_F64,
CMP_EQ_F64,
CMP_LE_F64,
CMP_GT_F64,
CMP_LG_F64,
CMP_GE_F64,
CMP_O_F64,
CMP_U_F64,
CMP_NGE_F64,
CMP_NLG_F64,
CMP_NGT_F64,
CMP_NLE_F64,
CMP_NEQ_F64,
CMP_NLT_F64,
CMP_TRU_F64,
CMPX_F_F64,
CMPX_LT_F64,
CMPX_EQ_F64,
CMPX_LE_F64,
CMPX_GT_F64,
CMPX_LG_F64,
CMPX_GE_F64,
CMPX_O_F64,
CMPX_U_F64,
CMPX_NGE_F64,
CMPX_NLG_F64,
CMPX_NGT_F64,
CMPX_NLE_F64,
CMPX_NEQ_F64,
CMPX_NLT_F64,
CMPX_TRU_F64,
CMPS_F_F32,
CMPS_LT_F32,
CMPS_EQ_F32,
CMPS_LE_F32,
CMPS_GT_F32,
CMPS_LG_F32,
CMPS_GE_F32,
CMPS_O_F32,
CMPS_U_F32,
CMPS_NGE_F32,
CMPS_NLG_F32,
CMPS_NGT_F32,
CMPS_NLE_F32,
CMPS_NEQ_F32,
CMPS_NLT_F32,
CMPS_TRU_F32,
CMPSX_F_F32,
CMPSX_LT_F32,
CMPSX_EQ_F32,
CMPSX_LE_F32,
CMPSX_GT_F32,
CMPSX_LG_F32,
CMPSX_GE_F32,
CMPSX_O_F32,
CMPSX_U_F32,
CMPSX_NGE_F32,
CMPSX_NLG_F32,
CMPSX_NGT_F32,
CMPSX_NLE_F32,
CMPSX_NEQ_F32,
CMPSX_NLT_F32,
CMPSX_TRU_F32,
CMPS_F_F64,
CMPS_LT_F64,
CMPS_EQ_F64,
CMPS_LE_F64,
CMPS_GT_F64,
CMPS_LG_F64,
CMPS_GE_F64,
CMPS_O_F64,
CMPS_U_F64,
CMPS_NGE_F64,
CMPS_NLG_F64,
CMPS_NGT_F64,
CMPS_NLE_F64,
CMPS_NEQ_F64,
CMPS_NLT_F64,
CMPS_TRU_F64,
CMPSX_F_F64,
CMPSX_LT_F64,
CMPSX_EQ_F64,
CMPSX_LE_F64,
CMPSX_GT_F64,
CMPSX_LG_F64,
CMPSX_GE_F64,
CMPSX_O_F64,
CMPSX_U_F64,
CMPSX_NGE_F64,
CMPSX_NLG_F64,
CMPSX_NGT_F64,
CMPSX_NLE_F64,
CMPSX_NEQ_F64,
CMPSX_NLT_F64,
CMPSX_TRU_F64,
CMP_F_I32,
CMP_LT_I32,
CMP_EQ_I32,
CMP_LE_I32,
CMP_GT_I32,
CMP_NE_I32,
CMP_GE_I32,
CMP_T_I32,
CMP_CLASS_F32,
CMP_LT_I16,
CMP_EQ_I16,
CMP_LE_I16,
CMP_GT_I16,
CMP_NE_I16,
CMP_GE_I16,
CMP_CLASS_F16,
CMPX_F_I32,
CMPX_LT_I32,
CMPX_EQ_I32,
CMPX_LE_I32,
CMPX_GT_I32,
CMPX_NE_I32,
CMPX_GE_I32,
CMPX_T_I32,
CMPX_CLASS_F32,
CMPX_LT_I16,
CMPX_EQ_I16,
CMPX_LE_I16,
CMPX_GT_I16,
CMPX_NE_I16,
CMPX_GE_I16,
CMPX_CLASS_F16,
CMP_F_I64,
CMP_LT_I64,
CMP_EQ_I64,
CMP_LE_I64,
CMP_GT_I64,
CMP_NE_I64,
CMP_GE_I64,
CMP_T_I64,
CMP_CLASS_F64,
CMP_LT_U16,
CMP_EQ_U16,
CMP_LE_U16,
CMP_GT_U16,
CMP_NE_U16,
CMP_GE_U16,
CMPX_F_I64 = 176,
CMPX_LT_I64,
CMPX_EQ_I64,
CMPX_LE_I64,
CMPX_GT_I64,
CMPX_NE_I64,
CMPX_GE_I64,
CMPX_T_I64,
CMPX_CLASS_F64,
CMPX_LT_U16,
CMPX_EQ_U16,
CMPX_LE_U16,
CMPX_GT_U16,
CMPX_NE_U16,
CMPX_GE_U16,
CMP_F_U32 = 192,
CMP_LT_U32,
CMP_EQ_U32,
CMP_LE_U32,
CMP_GT_U32,
CMP_NE_U32,
CMP_GE_U32,
CMP_T_U32,
CMP_F_F16,
CMP_LT_F16,
CMP_EQ_F16,
CMP_LE_F16,
CMP_GT_F16,
CMP_LG_F16,
CMP_GE_F16,
CMP_O_F16,
CMPX_F_U32,
CMPX_LT_U32,
CMPX_EQ_U32,
CMPX_LE_U32,
CMPX_GT_U32,
CMPX_NE_U32,
CMPX_GE_U32,
CMPX_T_U32,
CMPX_F_F16,
CMPX_LT_F16,
CMPX_EQ_F16,
CMPX_LE_F16,
CMPX_GT_F16,
CMPX_LG_F16,
CMPX_GE_F16,
CMPX_O_F16,
CMP_F_U64,
CMP_LT_U64,
CMP_EQ_U64,
CMP_LE_U64,
CMP_GT_U64,
CMP_NE_U64,
CMP_GE_U64,
CMP_T_U64,
CMP_U_F16,
CMP_NGE_F16,
CMP_NLG_F16,
CMP_NGT_F16,
CMP_NLE_F16,
CMP_NEQ_F16,
CMP_NLT_F16,
CMP_TRU_F16,
CMPX_F_U64,
CMPX_LT_U64,
CMPX_EQ_U64,
CMPX_LE_U64,
CMPX_GT_U64,
CMPX_NE_U64,
CMPX_GE_U64,
CMPX_T_U64,
CMPX_U_F16,
CMPX_NGE_F16,
CMPX_NLG_F16,
CMPX_NGT_F16,
CMPX_NLE_F16,
CMPX_NEQ_F16,
CMPX_NLT_F16,
CMPX_TRU_F16,
OpCount
};
inline const char *getInstructionName(unsigned id) {
switch (id) {
case CMP_F_F32: return "v_cmp_f_f32";
case CMP_LT_F32: return "v_cmp_lt_f32";
case CMP_EQ_F32: return "v_cmp_eq_f32";
case CMP_LE_F32: return "v_cmp_le_f32";
case CMP_GT_F32: return "v_cmp_gt_f32";
case CMP_LG_F32: return "v_cmp_lg_f32";
case CMP_GE_F32: return "v_cmp_ge_f32";
case CMP_O_F32: return "v_cmp_o_f32";
case CMP_U_F32: return "v_cmp_u_f32";
case CMP_NGE_F32: return "v_cmp_nge_f32";
case CMP_NLG_F32: return "v_cmp_nlg_f32";
case CMP_NGT_F32: return "v_cmp_ngt_f32";
case CMP_NLE_F32: return "v_cmp_nle_f32";
case CMP_NEQ_F32: return "v_cmp_neq_f32";
case CMP_NLT_F32: return "v_cmp_nlt_f32";
case CMP_TRU_F32: return "v_cmp_tru_f32";
case CMPX_F_F32: return "v_cmpx_f_f32";
case CMPX_LT_F32: return "v_cmpx_lt_f32";
case CMPX_EQ_F32: return "v_cmpx_eq_f32";
case CMPX_LE_F32: return "v_cmpx_le_f32";
case CMPX_GT_F32: return "v_cmpx_gt_f32";
case CMPX_LG_F32: return "v_cmpx_lg_f32";
case CMPX_GE_F32: return "v_cmpx_ge_f32";
case CMPX_O_F32: return "v_cmpx_o_f32";
case CMPX_U_F32: return "v_cmpx_u_f32";
case CMPX_NGE_F32: return "v_cmpx_nge_f32";
case CMPX_NLG_F32: return "v_cmpx_nlg_f32";
case CMPX_NGT_F32: return "v_cmpx_ngt_f32";
case CMPX_NLE_F32: return "v_cmpx_nle_f32";
case CMPX_NEQ_F32: return "v_cmpx_neq_f32";
case CMPX_NLT_F32: return "v_cmpx_nlt_f32";
case CMPX_TRU_F32: return "v_cmpx_tru_f32";
case CMP_F_F64: return "v_cmp_f_f64";
case CMP_LT_F64: return "v_cmp_lt_f64";
case CMP_EQ_F64: return "v_cmp_eq_f64";
case CMP_LE_F64: return "v_cmp_le_f64";
case CMP_GT_F64: return "v_cmp_gt_f64";
case CMP_LG_F64: return "v_cmp_lg_f64";
case CMP_GE_F64: return "v_cmp_ge_f64";
case CMP_O_F64: return "v_cmp_o_f64";
case CMP_U_F64: return "v_cmp_u_f64";
case CMP_NGE_F64: return "v_cmp_nge_f64";
case CMP_NLG_F64: return "v_cmp_nlg_f64";
case CMP_NGT_F64: return "v_cmp_ngt_f64";
case CMP_NLE_F64: return "v_cmp_nle_f64";
case CMP_NEQ_F64: return "v_cmp_neq_f64";
case CMP_NLT_F64: return "v_cmp_nlt_f64";
case CMP_TRU_F64: return "v_cmp_tru_f64";
case CMPX_F_F64: return "v_cmpx_f_f64";
case CMPX_LT_F64: return "v_cmpx_lt_f64";
case CMPX_EQ_F64: return "v_cmpx_eq_f64";
case CMPX_LE_F64: return "v_cmpx_le_f64";
case CMPX_GT_F64: return "v_cmpx_gt_f64";
case CMPX_LG_F64: return "v_cmpx_lg_f64";
case CMPX_GE_F64: return "v_cmpx_ge_f64";
case CMPX_O_F64: return "v_cmpx_o_f64";
case CMPX_U_F64: return "v_cmpx_u_f64";
case CMPX_NGE_F64: return "v_cmpx_nge_f64";
case CMPX_NLG_F64: return "v_cmpx_nlg_f64";
case CMPX_NGT_F64: return "v_cmpx_ngt_f64";
case CMPX_NLE_F64: return "v_cmpx_nle_f64";
case CMPX_NEQ_F64: return "v_cmpx_neq_f64";
case CMPX_NLT_F64: return "v_cmpx_nlt_f64";
case CMPX_TRU_F64: return "v_cmpx_tru_f64";
case CMPS_F_F32: return "v_cmps_f_f32";
case CMPS_LT_F32: return "v_cmps_lt_f32";
case CMPS_EQ_F32: return "v_cmps_eq_f32";
case CMPS_LE_F32: return "v_cmps_le_f32";
case CMPS_GT_F32: return "v_cmps_gt_f32";
case CMPS_LG_F32: return "v_cmps_lg_f32";
case CMPS_GE_F32: return "v_cmps_ge_f32";
case CMPS_O_F32: return "v_cmps_o_f32";
case CMPS_U_F32: return "v_cmps_u_f32";
case CMPS_NGE_F32: return "v_cmps_nge_f32";
case CMPS_NLG_F32: return "v_cmps_nlg_f32";
case CMPS_NGT_F32: return "v_cmps_ngt_f32";
case CMPS_NLE_F32: return "v_cmps_nle_f32";
case CMPS_NEQ_F32: return "v_cmps_neq_f32";
case CMPS_NLT_F32: return "v_cmps_nlt_f32";
case CMPS_TRU_F32: return "v_cmps_tru_f32";
case CMPSX_F_F32: return "v_cmpsx_f_f32";
case CMPSX_LT_F32: return "v_cmpsx_lt_f32";
case CMPSX_EQ_F32: return "v_cmpsx_eq_f32";
case CMPSX_LE_F32: return "v_cmpsx_le_f32";
case CMPSX_GT_F32: return "v_cmpsx_gt_f32";
case CMPSX_LG_F32: return "v_cmpsx_lg_f32";
case CMPSX_GE_F32: return "v_cmpsx_ge_f32";
case CMPSX_O_F32: return "v_cmpsx_o_f32";
case CMPSX_U_F32: return "v_cmpsx_u_f32";
case CMPSX_NGE_F32: return "v_cmpsx_nge_f32";
case CMPSX_NLG_F32: return "v_cmpsx_nlg_f32";
case CMPSX_NGT_F32: return "v_cmpsx_ngt_f32";
case CMPSX_NLE_F32: return "v_cmpsx_nle_f32";
case CMPSX_NEQ_F32: return "v_cmpsx_neq_f32";
case CMPSX_NLT_F32: return "v_cmpsx_nlt_f32";
case CMPSX_TRU_F32: return "v_cmpsx_tru_f32";
case CMPS_F_F64: return "v_cmps_f_f64";
case CMPS_LT_F64: return "v_cmps_lt_f64";
case CMPS_EQ_F64: return "v_cmps_eq_f64";
case CMPS_LE_F64: return "v_cmps_le_f64";
case CMPS_GT_F64: return "v_cmps_gt_f64";
case CMPS_LG_F64: return "v_cmps_lg_f64";
case CMPS_GE_F64: return "v_cmps_ge_f64";
case CMPS_O_F64: return "v_cmps_o_f64";
case CMPS_U_F64: return "v_cmps_u_f64";
case CMPS_NGE_F64: return "v_cmps_nge_f64";
case CMPS_NLG_F64: return "v_cmps_nlg_f64";
case CMPS_NGT_F64: return "v_cmps_ngt_f64";
case CMPS_NLE_F64: return "v_cmps_nle_f64";
case CMPS_NEQ_F64: return "v_cmps_neq_f64";
case CMPS_NLT_F64: return "v_cmps_nlt_f64";
case CMPS_TRU_F64: return "v_cmps_tru_f64";
case CMPSX_F_F64: return "v_cmpsx_f_f64";
case CMPSX_LT_F64: return "v_cmpsx_lt_f64";
case CMPSX_EQ_F64: return "v_cmpsx_eq_f64";
case CMPSX_LE_F64: return "v_cmpsx_le_f64";
case CMPSX_GT_F64: return "v_cmpsx_gt_f64";
case CMPSX_LG_F64: return "v_cmpsx_lg_f64";
case CMPSX_GE_F64: return "v_cmpsx_ge_f64";
case CMPSX_O_F64: return "v_cmpsx_o_f64";
case CMPSX_U_F64: return "v_cmpsx_u_f64";
case CMPSX_NGE_F64: return "v_cmpsx_nge_f64";
case CMPSX_NLG_F64: return "v_cmpsx_nlg_f64";
case CMPSX_NGT_F64: return "v_cmpsx_ngt_f64";
case CMPSX_NLE_F64: return "v_cmpsx_nle_f64";
case CMPSX_NEQ_F64: return "v_cmpsx_neq_f64";
case CMPSX_NLT_F64: return "v_cmpsx_nlt_f64";
case CMPSX_TRU_F64: return "v_cmpsx_tru_f64";
case CMP_F_I32: return "v_cmp_f_i32";
case CMP_LT_I32: return "v_cmp_lt_i32";
case CMP_EQ_I32: return "v_cmp_eq_i32";
case CMP_LE_I32: return "v_cmp_le_i32";
case CMP_GT_I32: return "v_cmp_gt_i32";
case CMP_NE_I32: return "v_cmp_ne_i32";
case CMP_GE_I32: return "v_cmp_ge_i32";
case CMP_T_I32: return "v_cmp_t_i32";
case CMP_CLASS_F32: return "v_cmp_class_f32";
case CMP_LT_I16: return "v_cmp_lt_i16";
case CMP_EQ_I16: return "v_cmp_eq_i16";
case CMP_LE_I16: return "v_cmp_le_i16";
case CMP_GT_I16: return "v_cmp_gt_i16";
case CMP_NE_I16: return "v_cmp_ne_i16";
case CMP_GE_I16: return "v_cmp_ge_i16";
case CMP_CLASS_F16: return "v_cmp_class_f16";
case CMPX_F_I32: return "v_cmpx_f_i32";
case CMPX_LT_I32: return "v_cmpx_lt_i32";
case CMPX_EQ_I32: return "v_cmpx_eq_i32";
case CMPX_LE_I32: return "v_cmpx_le_i32";
case CMPX_GT_I32: return "v_cmpx_gt_i32";
case CMPX_NE_I32: return "v_cmpx_ne_i32";
case CMPX_GE_I32: return "v_cmpx_ge_i32";
case CMPX_T_I32: return "v_cmpx_t_i32";
case CMPX_CLASS_F32: return "v_cmpx_class_f32";
case CMPX_LT_I16: return "v_cmpx_lt_i16";
case CMPX_EQ_I16: return "v_cmpx_eq_i16";
case CMPX_LE_I16: return "v_cmpx_le_i16";
case CMPX_GT_I16: return "v_cmpx_gt_i16";
case CMPX_NE_I16: return "v_cmpx_ne_i16";
case CMPX_GE_I16: return "v_cmpx_ge_i16";
case CMPX_CLASS_F16: return "v_cmpx_class_f16";
case CMP_F_I64: return "v_cmp_f_i64";
case CMP_LT_I64: return "v_cmp_lt_i64";
case CMP_EQ_I64: return "v_cmp_eq_i64";
case CMP_LE_I64: return "v_cmp_le_i64";
case CMP_GT_I64: return "v_cmp_gt_i64";
case CMP_NE_I64: return "v_cmp_ne_i64";
case CMP_GE_I64: return "v_cmp_ge_i64";
case CMP_T_I64: return "v_cmp_t_i64";
case CMP_CLASS_F64: return "v_cmp_class_f64";
case CMP_LT_U16: return "v_cmp_lt_u16";
case CMP_EQ_U16: return "v_cmp_eq_u16";
case CMP_LE_U16: return "v_cmp_le_u16";
case CMP_GT_U16: return "v_cmp_gt_u16";
case CMP_NE_U16: return "v_cmp_ne_u16";
case CMP_GE_U16: return "v_cmp_ge_u16";
case CMPX_F_I64: return "v_cmpx_f_i64";
case CMPX_LT_I64: return "v_cmpx_lt_i64";
case CMPX_EQ_I64: return "v_cmpx_eq_i64";
case CMPX_LE_I64: return "v_cmpx_le_i64";
case CMPX_GT_I64: return "v_cmpx_gt_i64";
case CMPX_NE_I64: return "v_cmpx_ne_i64";
case CMPX_GE_I64: return "v_cmpx_ge_i64";
case CMPX_T_I64: return "v_cmpx_t_i64";
case CMPX_CLASS_F64: return "v_cmpx_class_f64";
case CMPX_LT_U16: return "v_cmpx_lt_u16";
case CMPX_EQ_U16: return "v_cmpx_eq_u16";
case CMPX_LE_U16: return "v_cmpx_le_u16";
case CMPX_GT_U16: return "v_cmpx_gt_u16";
case CMPX_NE_U16: return "v_cmpx_ne_u16";
case CMPX_GE_U16: return "v_cmpx_ge_u16";
case CMP_F_U32: return "v_cmp_f_u32";
case CMP_LT_U32: return "v_cmp_lt_u32";
case CMP_EQ_U32: return "v_cmp_eq_u32";
case CMP_LE_U32: return "v_cmp_le_u32";
case CMP_GT_U32: return "v_cmp_gt_u32";
case CMP_NE_U32: return "v_cmp_ne_u32";
case CMP_GE_U32: return "v_cmp_ge_u32";
case CMP_T_U32: return "v_cmp_t_u32";
case CMP_F_F16: return "v_cmp_f_f16";
case CMP_LT_F16: return "v_cmp_lt_f16";
case CMP_EQ_F16: return "v_cmp_eq_f16";
case CMP_LE_F16: return "v_cmp_le_f16";
case CMP_GT_F16: return "v_cmp_gt_f16";
case CMP_LG_F16: return "v_cmp_lg_f16";
case CMP_GE_F16: return "v_cmp_ge_f16";
case CMP_O_F16: return "v_cmp_o_f16";
case CMPX_F_U32: return "v_cmpx_f_u32";
case CMPX_LT_U32: return "v_cmpx_lt_u32";
case CMPX_EQ_U32: return "v_cmpx_eq_u32";
case CMPX_LE_U32: return "v_cmpx_le_u32";
case CMPX_GT_U32: return "v_cmpx_gt_u32";
case CMPX_NE_U32: return "v_cmpx_ne_u32";
case CMPX_GE_U32: return "v_cmpx_ge_u32";
case CMPX_T_U32: return "v_cmpx_t_u32";
case CMPX_F_F16: return "v_cmpx_f_f16";
case CMPX_LT_F16: return "v_cmpx_lt_f16";
case CMPX_EQ_F16: return "v_cmpx_eq_f16";
case CMPX_LE_F16: return "v_cmpx_le_f16";
case CMPX_GT_F16: return "v_cmpx_gt_f16";
case CMPX_LG_F16: return "v_cmpx_lg_f16";
case CMPX_GE_F16: return "v_cmpx_ge_f16";
case CMPX_O_F16: return "v_cmpx_o_f16";
case CMP_F_U64: return "v_cmp_f_u64";
case CMP_LT_U64: return "v_cmp_lt_u64";
case CMP_EQ_U64: return "v_cmp_eq_u64";
case CMP_LE_U64: return "v_cmp_le_u64";
case CMP_GT_U64: return "v_cmp_gt_u64";
case CMP_NE_U64: return "v_cmp_ne_u64";
case CMP_GE_U64: return "v_cmp_ge_u64";
case CMP_T_U64: return "v_cmp_t_u64";
case CMP_U_F16: return "v_cmp_u_f16";
case CMP_NGE_F16: return "v_cmp_nge_f16";
case CMP_NLG_F16: return "v_cmp_nlg_f16";
case CMP_NGT_F16: return "v_cmp_ngt_f16";
case CMP_NLE_F16: return "v_cmp_nle_f16";
case CMP_NEQ_F16: return "v_cmp_neq_f16";
case CMP_NLT_F16: return "v_cmp_nlt_f16";
case CMP_TRU_F16: return "v_cmp_tru_f16";
case CMPX_F_U64: return "v_cmpx_f_u64";
case CMPX_LT_U64: return "v_cmpx_lt_u64";
case CMPX_EQ_U64: return "v_cmpx_eq_u64";
case CMPX_LE_U64: return "v_cmpx_le_u64";
case CMPX_GT_U64: return "v_cmpx_gt_u64";
case CMPX_NE_U64: return "v_cmpx_ne_u64";
case CMPX_GE_U64: return "v_cmpx_ge_u64";
case CMPX_T_U64: return "v_cmpx_t_u64";
case CMPX_U_F16: return "v_cmpx_u_f16";
case CMPX_NGE_F16: return "v_cmpx_nge_f16";
case CMPX_NLG_F16: return "v_cmpx_nlg_f16";
case CMPX_NGT_F16: return "v_cmpx_ngt_f16";
case CMPX_NLE_F16: return "v_cmpx_nle_f16";
case CMPX_NEQ_F16: return "v_cmpx_neq_f16";
case CMPX_NLT_F16: return "v_cmpx_nlt_f16";
case CMPX_TRU_F16: return "v_cmpx_tru_f16";
}
return nullptr;
}
}