diff --git a/src/intel/compiler/gen/gen_compact.cpp b/src/intel/compiler/gen/gen_compact.cpp index fbd037990ed..a79990d9877 100644 --- a/src/intel/compiler/gen/gen_compact.cpp +++ b/src/intel/compiler/gen/gen_compact.cpp @@ -1430,78 +1430,24 @@ private: bool set_3src_control_index(bool is_dpas) { - gen_range bits = { 127, 0 }; - const compact_table_info &table = is_dpas ? compact_tables.control_dpas_3src : compact_tables.control_3src; uint64_t uncompacted = 0; - if constexpr (E::TYPE >= GEN_ENCODING_XE2) { - assert(is_dpas || !uc_get(bits(49, 49))); - - uncompacted = /* 34b/Xe2+ */ - (uc_get(bits(95, 92)) << 30) | /* 4b */ - (uc_get(bits(90, 88)) << 27) | /* 3b */ - (uc_get(bits(82, 80)) << 24) | /* 3b */ - (uc_get(bits(50, 50)) << 23) | /* 1b */ - (uc_get(bits(49, 48)) << 21) | /* 2b */ - (uc_get(bits(42, 40)) << 18) | /* 3b */ - (uc_get(bits(39, 39)) << 17) | /* 1b */ - (uc_get(bits(38, 36)) << 14) | /* 3b */ - (uc_get(bits(34, 34)) << 13) | /* 1b */ - (uc_get(bits(32, 32)) << 12) | /* 1b */ - (uc_get(bits(31, 31)) << 11) | /* 1b */ - (uc_get(bits(28, 28)) << 10) | /* 1b */ - (uc_get(bits(27, 26)) << 8) | /* 2b */ - (uc_get(bits(25, 24)) << 6) | /* 2b */ - (uc_get(bits(23, 21)) << 3) | /* 3b */ - (uc_get(bits(20, 18))); /* 3b */ - } else if (devinfo->verx10 >= 125) { - uncompacted = /* 37b/XeHP+ */ - (uc_get(bits(95, 92)) << 33) | /* 4b */ - (uc_get(bits(90, 88)) << 30) | /* 3b */ - (uc_get(bits(82, 80)) << 27) | /* 3b */ - (uc_get(bits(50, 50)) << 26) | /* 1b */ - (uc_get(bits(49, 48)) << 24) | /* 2b */ - (uc_get(bits(42, 40)) << 21) | /* 3b */ - (uc_get(bits(39, 39)) << 20) | /* 1b */ - (uc_get(bits(38, 36)) << 17) | /* 3b */ - (uc_get(bits(34, 34)) << 16) | /* 1b */ - (uc_get(bits(33, 33)) << 15) | /* 1b */ - (uc_get(bits(32, 32)) << 14) | /* 1b */ - (uc_get(bits(31, 31)) << 13) | /* 1b */ - (uc_get(bits(28, 28)) << 12) | /* 1b */ - (uc_get(bits(27, 24)) << 8) | /* 4b */ - (uc_get(bits(23, 23)) << 7) | /* 1b */ - (uc_get(bits(22, 22)) << 6) | /* 1b */ - (uc_get(bits(21, 19)) << 3) | /* 3b */ - (uc_get(bits(18, 16))); /* 3b */ - } else if constexpr (E::TYPE >= GEN_ENCODING_XE) { - uncompacted = /* 36b/TGL+ */ - (uc_get(bits(95, 92)) << 32) | /* 4b */ - (uc_get(bits(90, 88)) << 29) | /* 3b */ - (uc_get(bits(82, 80)) << 26) | /* 3b */ - (uc_get(bits(50, 50)) << 25) | /* 1b */ - (uc_get(bits(48, 48)) << 24) | /* 1b */ - (uc_get(bits(42, 40)) << 21) | /* 3b */ - (uc_get(bits(39, 39)) << 20) | /* 1b */ - (uc_get(bits(38, 36)) << 17) | /* 3b */ - (uc_get(bits(34, 34)) << 16) | /* 1b */ - (uc_get(bits(33, 33)) << 15) | /* 1b */ - (uc_get(bits(32, 32)) << 14) | /* 1b */ - (uc_get(bits(31, 31)) << 13) | /* 1b */ - (uc_get(bits(28, 28)) << 12) | /* 1b */ - (uc_get(bits(27, 24)) << 8) | /* 4b */ - (uc_get(bits(23, 23)) << 7) | /* 1b */ - (uc_get(bits(22, 22)) << 6) | /* 1b */ - (uc_get(bits(21, 19)) << 3) | /* 3b */ - (uc_get(bits(18, 16))); /* 3b */ + if constexpr (E::TYPE == GEN_ENCODING_XE) { + if (devinfo->verx10 == 125) { + uncompacted = uc_get(E::UNCOMP_3SRC_CONTROL_125); + } else { + uncompacted = uc_get(E::UNCOMP_3SRC_CONTROL); + } } else { - uncompacted = /* 26b/SKL+ */ - (uc_get(bits(36, 35)) << 24) | /* 2b */ - (uc_get(bits(34, 32)) << 21) | /* 3b */ - (uc_get(bits(28, 8))); /* 21b */ + uncompacted = uc_get(E::UNCOMP_3SRC_CONTROL); + } + + if constexpr (E::TYPE >= GEN_ENCODING_XE2) { + gen_range bits = { 127, 0 }; + assert(is_dpas || !uc_get(bits(49, 49))); } for (unsigned i = 0; i < table.length; i++) { @@ -2229,68 +2175,15 @@ private: auto compacted = c_get(E::C_3SRC_CONTROL_INDEX); auto uncompacted = table.read(compacted); - gen_range bits = { 127, 0 }; - if constexpr (E::TYPE >= GEN_ENCODING_XE2) { - uc_set(bits(95, 92), (uncompacted >> 30) & 0xf); - uc_set(bits(90, 88), (uncompacted >> 27) & 0x7); - uc_set(bits(82, 80), (uncompacted >> 24) & 0x7); - uc_set(bits(50, 50), (uncompacted >> 23) & 0x1); - uc_set(bits(49, 48), (uncompacted >> 21) & 0x3); - uc_set(bits(42, 40), (uncompacted >> 18) & 0x7); - uc_set(bits(39, 39), (uncompacted >> 17) & 0x1); - uc_set(bits(38, 36), (uncompacted >> 14) & 0x7); - uc_set(bits(34, 34), (uncompacted >> 13) & 0x1); - uc_set(bits(32, 32), (uncompacted >> 12) & 0x1); - uc_set(bits(31, 31), (uncompacted >> 11) & 0x1); - uc_set(bits(28, 28), (uncompacted >> 10) & 0x1); - uc_set(bits(27, 26), (uncompacted >> 8) & 0x3); - uc_set(bits(25, 24), (uncompacted >> 6) & 0x3); - uc_set(bits(23, 21), (uncompacted >> 3) & 0x7); - uc_set(bits(20, 18), (uncompacted >> 0) & 0x7); - } else if (devinfo->verx10 >= 125) { - uc_set(bits(95, 92), (uncompacted >> 33)); - uc_set(bits(90, 88), (uncompacted >> 30) & 0x7); - uc_set(bits(82, 80), (uncompacted >> 27) & 0x7); - uc_set(bits(50, 50), (uncompacted >> 26) & 0x1); - uc_set(bits(49, 48), (uncompacted >> 24) & 0x3); - uc_set(bits(42, 40), (uncompacted >> 21) & 0x7); - uc_set(bits(39, 39), (uncompacted >> 20) & 0x1); - uc_set(bits(38, 36), (uncompacted >> 17) & 0x7); - uc_set(bits(34, 34), (uncompacted >> 16) & 0x1); - uc_set(bits(33, 33), (uncompacted >> 15) & 0x1); - uc_set(bits(32, 32), (uncompacted >> 14) & 0x1); - uc_set(bits(31, 31), (uncompacted >> 13) & 0x1); - uc_set(bits(28, 28), (uncompacted >> 12) & 0x1); - uc_set(bits(27, 24), (uncompacted >> 8) & 0xf); - uc_set(bits(23, 23), (uncompacted >> 7) & 0x1); - uc_set(bits(22, 22), (uncompacted >> 6) & 0x1); - uc_set(bits(21, 19), (uncompacted >> 3) & 0x7); - uc_set(bits(18, 16), (uncompacted >> 0) & 0x7); - } else if constexpr (E::TYPE >= GEN_ENCODING_XE) { - uc_set(bits(95, 92), (uncompacted >> 32)); - uc_set(bits(90, 88), (uncompacted >> 29) & 0x7); - uc_set(bits(82, 80), (uncompacted >> 26) & 0x7); - uc_set(bits(50, 50), (uncompacted >> 25) & 0x1); - uc_set(bits(48, 48), (uncompacted >> 24) & 0x1); - uc_set(bits(42, 40), (uncompacted >> 21) & 0x7); - uc_set(bits(39, 39), (uncompacted >> 20) & 0x1); - uc_set(bits(38, 36), (uncompacted >> 17) & 0x7); - uc_set(bits(34, 34), (uncompacted >> 16) & 0x1); - uc_set(bits(33, 33), (uncompacted >> 15) & 0x1); - uc_set(bits(32, 32), (uncompacted >> 14) & 0x1); - uc_set(bits(31, 31), (uncompacted >> 13) & 0x1); - uc_set(bits(28, 28), (uncompacted >> 12) & 0x1); - uc_set(bits(27, 24), (uncompacted >> 8) & 0xf); - uc_set(bits(23, 23), (uncompacted >> 7) & 0x1); - uc_set(bits(22, 22), (uncompacted >> 6) & 0x1); - uc_set(bits(21, 19), (uncompacted >> 3) & 0x7); - uc_set(bits(18, 16), (uncompacted >> 0) & 0x7); + if constexpr (E::TYPE == GEN_ENCODING_XE) { + if (devinfo->verx10 == 125) { + uc_set(E::UNCOMP_3SRC_CONTROL_125, uncompacted); + } else { + uc_set(E::UNCOMP_3SRC_CONTROL, uncompacted); + } } else { - uc_set(bits(34, 32), (uncompacted >> 21) & 0x7); - uc_set(bits(28, 8), (uncompacted >> 0) & 0x1fffff); - - uc_set(bits(36, 35), (uncompacted >> 24) & 0x3); + uc_set(E::UNCOMP_3SRC_CONTROL, uncompacted); } } diff --git a/src/intel/compiler/gen/pre_xe.json b/src/intel/compiler/gen/pre_xe.json index 87a5550fce3..18a632228ed 100644 --- a/src/intel/compiler/gen/pre_xe.json +++ b/src/intel/compiler/gen/pre_xe.json @@ -105,7 +105,10 @@ 68, 64, 52, 48 ], "UNCOMP_SRC0": [ 88, 77 ], - "UNCOMP_SRC1": [ 120, 109 ] + "UNCOMP_SRC1": [ 120, 109 ], + "UNCOMP_3SRC_CONTROL": [ 36, 35, + 34, 32, + 28, 8 ] }, "sub-fields": { "# Relative to EU_INSTRUCTION_SOURCES_* sub-structures":"#", diff --git a/src/intel/compiler/gen/xe.json b/src/intel/compiler/gen/xe.json index 09c2d3dd717..9a7904d8930 100644 --- a/src/intel/compiler/gen/xe.json +++ b/src/intel/compiler/gen/xe.json @@ -131,7 +131,43 @@ 119, 116, 115, 113, 112, 112, - 97, 96 ] + 97, 96 ], + "UNCOMP_3SRC_CONTROL": [ 95, 92, + 90, 88, + 82, 80, + 50, 50, + 48, 48, + 42, 40, + 39, 39, + 38, 36, + 34, 34, + 33, 33, + 32, 32, + 31, 31, + 28, 28, + 27, 24, + 23, 23, + 22, 22, + 21, 19, + 18, 16 ], + "UNCOMP_3SRC_CONTROL_125": [ 95, 92, + 90, 88, + 82, 80, + 50, 50, + 49, 48, + 42, 40, + 39, 39, + 38, 36, + 34, 34, + 33, 33, + 32, 32, + 31, 31, + 28, 28, + 27, 24, + 23, 23, + 22, 22, + 21, 19, + 18, 16 ] }, "sub-fields": { "# Relative to OPERAND sub-structures":"#", @@ -216,7 +252,23 @@ 115, 113, 112, 112, 103, 99, - 97, 96 ] + 97, 96 ], + "UNCOMP_3SRC_CONTROL": [ 95, 92, + 90, 88, + 82, 80, + 50, 50, + 49, 48, + 42, 40, + 39, 39, + 38, 36, + 34, 34, + 32, 32, + 31, 31, + 28, 28, + 27, 26, + 25, 24, + 23, 21, + 20, 18 ] }, "compact-fields": { "DST_REG_NR": [ 39, 32 ],