add enum of disp8N
diff --git a/gen/avx_type.hpp b/gen/avx_type.hpp
index b205c90..a319a95 100644
--- a/gen/avx_type.hpp
+++ b/gen/avx_type.hpp
@@ -1,30 +1,35 @@
// copy CodeGenerator::AVXtype
-enum {
- T_66 = 1 << 1,
- T_F3 = 1 << 2,
- T_F2 = 1 << 3,
- T_0F = 1 << 5,
- T_0F38 = 1 << 6,
- T_0F3A = 1 << 7,
- T_L0 = 1 << 8,
- T_L1 = 1 << 9,
- T_WIG = 1 << 10, // default
- T_W0 = 1 << 11,
- T_W1 = 1 << 12,
- T_EW0 = 1 << 13,
- T_EW1 = 1 << 14,
- T_YMM = 1 << 15,
- T_EVEX = 1 << 16,
- T_ER_X = 1 << 17, // xmm{er}
- T_ER_Y = 1 << 18, // ymm{er}
- T_ER_Z = 1 << 19, // zmm{er}
- T_SAE_X = 1 << 20, // xmm{sae}
- T_SAE_Y = 1 << 21, // ymm{sae}
- T_SAE_Z = 1 << 22, // zmm{sae}
- T_MUST_EVEX = 1 << 23,
- T_B32 = 1 << 24, // m32bcst
- T_B64 = 1 << 25, // m64bcst
- T_M_K = 1 << 26, // mem{k}
+enum AVXtype {
+ T_66 = 1 << 0,
+ T_F3 = 1 << 1,
+ T_F2 = 1 << 2,
+ T_0F = 1 << 3,
+ T_0F38 = 1 << 4,
+ T_0F3A = 1 << 5,
+ T_L0 = 1 << 6,
+ T_L1 = 1 << 7,
+ T_W0 = 1 << 8,
+ T_W1 = 1 << 9,
+ T_EW0 = 1 << 10,
+ T_EW1 = 1 << 11,
+ T_YMM = 1 << 12, // support YMM, ZMM
+ T_EVEX = 1 << 13,
+ T_ER_X = 1 << 14, // xmm{er}
+ T_ER_Y = 1 << 15, // ymm{er}
+ T_ER_Z = 1 << 16, // zmm{er}
+ T_SAE_X = 1 << 17, // xmm{sae}
+ T_SAE_Y = 1 << 18, // ymm{sae}
+ T_SAE_Z = 1 << 19, // zmm{sae}
+ T_MUST_EVEX = 1 << 20, // contains T_EVEX
+ T_B32 = 1 << 21, // m32bcst
+ T_B64 = 1 << 22, // m64bcst
+ T_M_K = 1 << 23, // mem{k}
+ T_N2 = 1 << 24,
+ T_N4 = 1 << 25,
+ T_N8 = 1 << 26,
+ T_N16 = 1 << 27,
+ T_N_VL = 1 << 28, // N * (1, 2, 4) for VL
+ T_DUP = 1 << 29, // N = (8, 32, 64)
T_XXX
};
@@ -33,18 +38,6 @@
std::string type2String(int type)
{
std::string str;
- if (type & T_0F) {
- if (!str.empty()) str += " | ";
- str += "T_0F";
- }
- if (type & T_0F38) {
- if (!str.empty()) str += " | ";
- str = "T_0F38";
- }
- if (type & T_0F3A) {
- if (!str.empty()) str += " | ";
- str = "T_0F3A";
- }
if (type & T_66) {
if (!str.empty()) str += " | ";
str += "T_66";
@@ -57,6 +50,18 @@
if (!str.empty()) str += " | ";
str += "T_F2";
}
+ if (type & T_0F) {
+ if (!str.empty()) str += " | ";
+ str += "T_0F";
+ }
+ if (type & T_0F38) {
+ if (!str.empty()) str += " | ";
+ str = "T_0F38";
+ }
+ if (type & T_0F3A) {
+ if (!str.empty()) str += " | ";
+ str = "T_0F3A";
+ }
if (type & T_L0) {
if (!str.empty()) str += " | ";
str += "VEZ_L0";
@@ -129,5 +134,29 @@
if (!str.empty()) str += " | ";
str += "T_M_K";
}
+ if (type & T_N2) {
+ if (!str.empty()) str += " | ";
+ str += "T_N2";
+ }
+ if (type & T_N4) {
+ if (!str.empty()) str += " | ";
+ str += "T_N4";
+ }
+ if (type & T_N8) {
+ if (!str.empty()) str += " | ";
+ str += "T_N8";
+ }
+ if (type & T_N16) {
+ if (!str.empty()) str += " | ";
+ str += "T_N16";
+ }
+ if (type & T_N_VL) {
+ if (!str.empty()) str += " | ";
+ str += "T_N_VL";
+ }
+ if (type & T_DUP) {
+ if (!str.empty()) str += " | ";
+ str += "T_DUP";
+ }
return str;
}
\ No newline at end of file
diff --git a/xbyak/xbyak.h b/xbyak/xbyak.h
index f926736..2b18ab8 100644
--- a/xbyak/xbyak.h
+++ b/xbyak/xbyak.h
@@ -1351,31 +1351,36 @@
if (rex) db(rex);
}
enum AVXtype {
- T_66 = 1 << 1,
- T_F3 = 1 << 2,
- T_F2 = 1 << 3,
- T_0F = 1 << 5,
- T_0F38 = 1 << 6,
- T_0F3A = 1 << 7,
- T_L0 = 1 << 8,
- T_L1 = 1 << 9,
- T_WIG = 1 << 10, // default
- T_W0 = 1 << 11,
- T_W1 = 1 << 12,
- T_EW0 = 1 << 13,
- T_EW1 = 1 << 14,
- T_YMM = 1 << 15, // support YMM, ZMM
- T_EVEX = 1 << 16,
- T_ER_X = 1 << 17, // xmm{er}
- T_ER_Y = 1 << 18, // ymm{er}
- T_ER_Z = 1 << 19, // zmm{er}
- T_SAE_X = 1 << 20, // xmm{sae}
- T_SAE_Y = 1 << 21, // ymm{sae}
- T_SAE_Z = 1 << 22, // zmm{sae}
- T_MUST_EVEX = 1 << 23, // contains T_EVEX
- T_B32 = 1 << 24, // m32bcst
- T_B64 = 1 << 25, // m64bcst
- T_M_K = 1 << 26, // mem{k}
+ T_66 = 1 << 0,
+ T_F3 = 1 << 1,
+ T_F2 = 1 << 2,
+ T_0F = 1 << 3,
+ T_0F38 = 1 << 4,
+ T_0F3A = 1 << 5,
+ T_L0 = 1 << 6,
+ T_L1 = 1 << 7,
+ T_W0 = 1 << 8,
+ T_W1 = 1 << 9,
+ T_EW0 = 1 << 10,
+ T_EW1 = 1 << 11,
+ T_YMM = 1 << 12, // support YMM, ZMM
+ T_EVEX = 1 << 13,
+ T_ER_X = 1 << 14, // xmm{er}
+ T_ER_Y = 1 << 15, // ymm{er}
+ T_ER_Z = 1 << 16, // zmm{er}
+ T_SAE_X = 1 << 17, // xmm{sae}
+ T_SAE_Y = 1 << 18, // ymm{sae}
+ T_SAE_Z = 1 << 19, // zmm{sae}
+ T_MUST_EVEX = 1 << 20, // contains T_EVEX
+ T_B32 = 1 << 21, // m32bcst
+ T_B64 = 1 << 22, // m64bcst
+ T_M_K = 1 << 23, // mem{k}
+ T_N2 = 1 << 24,
+ T_N4 = 1 << 25,
+ T_N8 = 1 << 26,
+ T_N16 = 1 << 27,
+ T_N_VL = 1 << 28, // N * (1, 2, 4) for VL
+ T_DUP = 1 << 29, // N = (8, 32, 64)
T_XXX
};
void vex(const Reg& reg, const Reg& base, const Operand *v, int type, int code, bool x = false)