intel/gen/compact: Add compact tables from brw/brw_eu_compact.c

Signed-off-by: Jordan Justen <jordan.l.justen@intel.com>
Acked-by: Caio Oliveira <caio.oliveira@intel.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/41413>
This commit is contained in:
Jordan Justen 2026-03-19 11:28:49 -07:00 committed by Marge Bot
parent a07f953c2f
commit bae944fc98
2 changed files with 938 additions and 0 deletions

View file

@ -0,0 +1,937 @@
/*
* Copyright © 2025 Intel Corporation
* SPDX-License-Identifier: MIT
*/
#include <array>
#include <stdio.h>
#include <string.h>
#include "util/ralloc.h"
#include "gen_private.h"
static const uint32_t gfx8_control_index_table[32] = {
0b0000000000000000010,
0b0000100000000000000,
0b0000100000000000001,
0b0000100000000000010,
0b0000100000000000011,
0b0000100000000000100,
0b0000100000000000101,
0b0000100000000000111,
0b0000100000000001000,
0b0000100000000001001,
0b0000100000000001101,
0b0000110000000000000,
0b0000110000000000001,
0b0000110000000000010,
0b0000110000000000011,
0b0000110000000000100,
0b0000110000000000101,
0b0000110000000000111,
0b0000110000000001001,
0b0000110000000001101,
0b0000110000000010000,
0b0000110000100000000,
0b0001000000000000000,
0b0001000000000000010,
0b0001000000000000100,
0b0001000000100000000,
0b0010110000000000000,
0b0010110000000010000,
0b0011000000000000000,
0b0011000000100000000,
0b0101000000000000000,
0b0101000000100000000,
};
static const uint32_t gfx8_datatype_table[32] = {
0b001000000000000000001,
0b001000000000001000000,
0b001000000000001000001,
0b001000000000011000001,
0b001000000000101011101,
0b001000000010111011101,
0b001000000011101000001,
0b001000000011101000101,
0b001000000011101011101,
0b001000001000001000001,
0b001000011000001000000,
0b001000011000001000001,
0b001000101000101000101,
0b001000111000101000100,
0b001000111000101000101,
0b001011100011101011101,
0b001011101011100011101,
0b001011101011101011100,
0b001011101011101011101,
0b001011111011101011100,
0b000000000010000001100,
0b001000000000001011101,
0b001000000000101000101,
0b001000001000001000000,
0b001000101000101000100,
0b001000111000100000100,
0b001001001001000001001,
0b001010111011101011101,
0b001011111011101011101,
0b001001111001101001100,
0b001001001001001001000,
0b001001011001001001000,
};
static const uint16_t gfx8_subreg_table[32] = {
0b000000000000000,
0b000000000000001,
0b000000000001000,
0b000000000001111,
0b000000000010000,
0b000000010000000,
0b000000100000000,
0b000000110000000,
0b000001000000000,
0b000001000010000,
0b000001010000000,
0b001000000000000,
0b001000000000001,
0b001000010000001,
0b001000010000010,
0b001000010000011,
0b001000010000100,
0b001000010000111,
0b001000010001000,
0b001000010001110,
0b001000010001111,
0b001000110000000,
0b001000111101000,
0b010000000000000,
0b010000110000000,
0b011000000000000,
0b011110010000111,
0b100000000000000,
0b101000000000000,
0b110000000000000,
0b111000000000000,
0b111000000011100,
};
static const uint16_t gfx8_src_index_table[32] = {
0b000000000000,
0b000000000010,
0b000000010000,
0b000000010010,
0b000000011000,
0b000000100000,
0b000000101000,
0b000001001000,
0b000001010000,
0b000001110000,
0b000001111000,
0b001100000000,
0b001100000010,
0b001100001000,
0b001100010000,
0b001100010010,
0b001100100000,
0b001100101000,
0b001100111000,
0b001101000000,
0b001101000010,
0b001101001000,
0b001101010000,
0b001101100000,
0b001101101000,
0b001101110000,
0b001101110001,
0b001101111000,
0b010001101000,
0b010001101001,
0b010001101010,
0b010110001000,
};
static const uint32_t gfx11_datatype_table[32] = {
0b001000000000000000001,
0b001000000000001000000,
0b001000000000001000001,
0b001000000000011000001,
0b001000000000101100101,
0b001000000101111100101,
0b001000000100101000001,
0b001000000100101000101,
0b001000000100101100101,
0b001000001000001000001,
0b001000011000001000000,
0b001000011000001000001,
0b001000101000101000101,
0b001000111000101000100,
0b001000111000101000101,
0b001100100100101100101,
0b001100101100100100101,
0b001100101100101100100,
0b001100101100101100101,
0b001100111100101100100,
0b000000000010000001100,
0b001000000000001100101,
0b001000000000101000101,
0b001000001000001000000,
0b001000101000101000100,
0b001000111000100000100,
0b001001001001000001001,
0b001101111100101100101,
0b001100111100101100101,
0b001001111001101001100,
0b001001001001001001000,
0b001001011001001001000,
};
static const uint32_t gfx12_control_index_table[32] = {
0b000000000000000000100, /* (16|M0) */
0b000000000000000000011, /* (8|M0) */
0b000000010000000000000, /* (W) (1|M0) */
0b000000010000000000100, /* (W) (16|M0) */
0b000000010000000000011, /* (W) (8|M0) */
0b010000000000000000100, /* (16|M0) (ge)f0.0 */
0b000000000000000100100, /* (16|M16) */
0b010100000000000000100, /* (16|M0) (lt)f0.0 */
0b000000000000000000000, /* (1|M0) */
0b000010000000000000100, /* (16|M0) (sat) */
0b000000000000000010011, /* (8|M8) */
0b001100000000000000100, /* (16|M0) (gt)f0.0 */
0b000100000000000000100, /* (16|M0) (eq)f0.0 */
0b000100010000000000100, /* (W) (16|M0) (eq)f0.0 */
0b001000000000000000100, /* (16|M0) (ne)f0.0 */
0b000000000000100000100, /* (f0.0) (16|M0) */
0b010100000000000000011, /* (8|M0) (lt)f0.0 */
0b000000000000110000100, /* (f1.0) (16|M0) */
0b000000010000000000001, /* (W) (2|M0) */
0b000000000000101000100, /* (f0.1) (16|M0) */
0b000000000000111000100, /* (f1.1) (16|M0) */
0b010000010000000000100, /* (W) (16|M0) (ge)f0.0 */
0b000000000000000100011, /* (8|M16) */
0b000000000000000110011, /* (8|M24) */
0b010100010000000000100, /* (W) (16|M0) (lt)f0.0 */
0b010000000000000000011, /* (8|M0) (ge)f0.0 */
0b000100010000000000000, /* (W) (1|M0) (eq)f0.0 */
0b000010000000000000011, /* (8|M0) (sat) */
0b010100000000010000100, /* (16|M0) (lt)f1.0 */
0b000100000000000000011, /* (8|M0) (eq)f0.0 */
0b000001000000000000011, /* (8|M0) {AccWrEn} */
0b000000010000000100100, /* (W) (16|M16) */
};
static const uint32_t gfx12_datatype_table[32] = {
0b11010110100101010100, /* grf<1>:f grf:f grf:f */
0b00000110100101010100, /* grf<1>:f grf:f arf:ub */
0b00000010101101010100, /* grf<1>:f imm:f arf:ub */
0b01010110110101010100, /* grf<1>:f grf:f imm:f */
0b11010100100101010100, /* arf<1>:f grf:f grf:f */
0b11010010100101010100, /* grf<1>:f arf:f grf:f */
0b01010100110101010100, /* arf<1>:f grf:f imm:f */
0b00000000100000000000, /* arf<1>:ub arf:ub arf:ub */
0b11010000100101010100, /* arf<1>:f arf:f grf:f */
0b00101110110011001100, /* grf<1>:d grf:d imm:w */
0b10110110100011001100, /* grf<1>:d grf:d grf:d */
0b01010010110101010100, /* grf<1>:f arf:f imm:f */
0b10010110100001000100, /* grf<1>:ud grf:ud grf:ud */
0b01010000110101010100, /* arf<1>:f arf:f imm:f */
0b00110110110011001100, /* grf<1>:d grf:d imm:d */
0b00010110110001000100, /* grf<1>:ud grf:ud imm:ud */
0b00000111000101010100, /* grf<2>:f grf:f arf:ub */
0b00101100110011001100, /* arf<1>:d grf:d imm:w */
0b00000000100000100010, /* arf<1>:uw arf:uw arf:ub */
0b00000010100001000100, /* grf<1>:ud arf:ud arf:ub */
0b00100110110000101010, /* grf<1>:w grf:uw imm:uv */
0b00001110110000100010, /* grf<1>:uw grf:uw imm:uw */
0b10010111000001000100, /* grf<2>:ud grf:ud grf:ud */
0b00000110100101001100, /* grf<1>:d grf:f arf:ub */
0b10001100100011001100, /* arf<1>:d grf:d grf:uw */
0b00000110100001010100, /* grf<1>:f grf:ud arf:ub */
0b00101110110001001100, /* grf<1>:d grf:ud imm:w */
0b00000010100000100010, /* grf<1>:uw arf:uw arf:ub */
0b00000110100000110100, /* grf<1>:f grf:uw arf:ub */
0b00000110100000010100, /* grf<1>:f grf:ub arf:ub */
0b00000110100011010100, /* grf<1>:f grf:d arf:ub */
0b00000010100101010100, /* grf<1>:f arf:f arf:ub */
};
static const uint16_t gfx12_subreg_table[32] = {
0b000000000000000, /* .0 .0 .0 */
0b100000000000000, /* .0 .0 .16 */
0b001000000000000, /* .0 .0 .4 */
0b011000000000000, /* .0 .0 .12 */
0b000000010000000, /* .0 .4 .0 */
0b010000000000000, /* .0 .0 .8 */
0b101000000000000, /* .0 .0 .20 */
0b000000000001000, /* .8 .0 .0 */
0b000000100000000, /* .0 .8 .0 */
0b110000000000000, /* .0 .0 .24 */
0b111000000000000, /* .0 .0 .28 */
0b000001000000000, /* .0 .16 .0 */
0b000000000000100, /* .4 .0 .0 */
0b000001100000000, /* .0 .24 .0 */
0b000001010000000, /* .0 .20 .0 */
0b000000110000000, /* .0 .12 .0 */
0b000001110000000, /* .0 .28 .0 */
0b000000000011100, /* .28 .0 .0 */
0b000000000010000, /* .16 .0 .0 */
0b000000000001100, /* .12 .0 .0 */
0b000000000011000, /* .24 .0 .0 */
0b000000000010100, /* .20 .0 .0 */
0b000000000000010, /* .2 .0 .0 */
0b000000101000000, /* .0 .10 .0 */
0b000000001000000, /* .0 .2 .0 */
0b000000010000100, /* .4 .4 .0 */
0b000000001011100, /* .28 .2 .0 */
0b000000001000010, /* .2 .2 .0 */
0b000000110001100, /* .12 .12 .0 */
0b000000000100000, /* .0 .1 .0 */
0b000000001100000, /* .0 .3 .0 */
0b110001100000000, /* .0 .24 .24 */
};
static const uint16_t gfx12_src0_index_table[16] = {
0b010001100100, /* r<8;8,1> */
0b000000000000, /* r<0;1,0> */
0b010001100110, /* -r<8;8,1> */
0b010001100101, /* (abs)r<8;8,1> */
0b000000000010, /* -r<0;1,0> */
0b001000000000, /* r<2;1,0> */
0b001001000000, /* r<2;4,0> */
0b001101000000, /* r<4;4,0> */
0b001000100100, /* r<2;2,1> */
0b001100000000, /* r<4;1,0> */
0b001000100110, /* -r<2;2,1> */
0b001101000100, /* r<4;4,1> */
0b010001100111, /* -(abs)r<8;8,1> */
0b000100000000, /* r<1;1,0> */
0b000000000001, /* (abs)r<0;1,0> */
0b111100010000, /* r[a]<1,0> */
};
static const uint16_t gfx12_src1_index_table[16] = {
0b000100011001, /* r<8;8,1> */
0b000000000000, /* r<0;1,0> */
0b100100011001, /* -r<8;8,1> */
0b100000000000, /* -r<0;1,0> */
0b010100011001, /* (abs)r<8;8,1> */
0b100011010000, /* -r<4;4,0> */
0b000010000000, /* r<2;1,0> */
0b000010001001, /* r<2;2,1> */
0b100010001001, /* -r<2;2,1> */
0b000011010000, /* r<4;4,0> */
0b000011010001, /* r<4;4,1> */
0b000011000000, /* r<4;1,0> */
0b110100011001, /* -(abs)r<8;8,1> */
0b010000000000, /* (abs)r<0;1,0> */
0b110000000000, /* -(abs)r<0;1,0> */
0b100011010001, /* -r<4;4,1> */
};
static const uint16_t xehp_src0_index_table[16] = {
0b000100000000, /* r<1;1,0> */
0b000000000000, /* r<0;1,0> */
0b000100000010, /* -r<1;1,0> */
0b000100000001, /* (abs)r<1;1,0> */
0b000000000010, /* -r<0;1,0> */
0b001000000000, /* r<2;1,0> */
0b001001000000, /* r<2;4,0> */
0b001101000000, /* r<4;4,0> */
0b001100000000, /* r<4;1,0> */
0b000100000011, /* -(abs)r<1;1,0> */
0b000000000001, /* (abs)r<0;1,0> */
0b111100010000, /* r[a]<1,0> */
0b010001100000, /* r<8;8,0> */
0b000101000000, /* r<1;4,0> */
0b010001001000, /* r<8;4,2> */
0b001000000010, /* -r<2;1,0> */
};
static const uint16_t xehp_src1_index_table[16] = {
0b000001000000, /* r<1;1,0> */
0b000000000000, /* r<0;1,0> */
0b100001000000, /* -r<1;1,0> */
0b100000000000, /* -r<0;1,0> */
0b010001000000, /* (abs)r<1;1,0> */
0b100011010000, /* -r<4;4,0> */
0b000010000000, /* r<2;1,0> */
0b000011010000, /* r<4;4,0> */
0b000011000000, /* r<4;1,0> */
0b110001000000, /* -(abs)r<1;1,0> */
0b010000000000, /* (abs)r<0;1,0> */
0b110000000000, /* -(abs)r<0;1,0> */
0b000100011000, /* r<8;8,0> */
0b100010000000, /* -r<2;1,0> */
0b100000001001, /* -r<0;2,1> */
0b100001000100, /* -r[a]<1;1,0> */
};
static const uint32_t xe2_control_index_table[32] = {
0b000000000000000100, /* (16|M0) */
0b000000100000000000, /* (W) (1|M0) */
0b000000000010000100, /* (16|M16) */
0b000000000000000000, /* (1|M0) */
0b000000100000000100, /* (W) (16|M0) */
0b010000000000000100, /* (16|M0) (.ge)f0.0 */
0b010100000000000100, /* (16|M0) (.lt)f0.0 */
0b000000100000000010, /* (W) (4|M0) */
0b000000000000000101, /* (32|M0) */
0b000000100000000011, /* (W) (8|M0) */
0b001100100000000000, /* (W) (1|M0) (.gt)f0.0 */
0b000010000000000100, /* (16|M0) (sat) */
0b000100000000000100, /* (16|M0) (.eq)f0.0 */
0b000000100000000001, /* (W) (2|M0) */
0b001100000000000100, /* (16|M0) (.gt)f0.0 */
0b000100100000000000, /* (W) (1|M0) (.eq)f0.0 */
0b010100100000000010, /* (W) (4|M0) (.lt)f0.0 */
0b010000100000000000, /* (W) (1|M0) (.ge)f0.0 */
0b010000100000000010, /* (W) (4|M0) (.ge)f0.0 */
0b010100100000000000, /* (W) (1|M0) (.lt)f0.0 */
0b001000000000000100, /* (16|M0) (.ne)f0.0 */
0b000000000100100100, /* (f2.0) (16|M0) */
0b010100100000000011, /* (W) (8|M0) (.lt)f0.0 */
0b000000000100011100, /* (f1.1) (16|M0) */
0b010000100000000011, /* (W) (8|M0) (.ge)f0.0 */
0b000000000100001100, /* (f0.1) (16|M0) */
0b000000000100010100, /* (f1.0) (16|M0) */
0b000000000100110100, /* (f3.0) (16|M0) */
0b000000000100111100, /* (f3.1) (16|M0) */
0b000000000100101100, /* (f2.1) (16|M0) */
0b000000000100000100, /* (f0.0) (16|M0) */
0b010100000000100100, /* (16|M0) (.lt)f2.0 */
};
static const uint32_t xe2_datatype_table[32] = {
0b11010110100101010100, /* grf<1>:f grf:f grf:f */
0b11010100100101010100, /* arf<1>:f grf:f grf:f */
0b00000110100101010100, /* grf<1>:f grf:f arf:ub */
0b00000110100001000100, /* grf<1>:ud grf:ud arf:ub */
0b01010110110101010100, /* grf<1>:f grf:f imm:f */
0b11010010100101010100, /* grf<1>:f arf:f grf:f */
0b10111110100011101110, /* grf<1>:q grf:q grf:q */
0b00000000100000000000, /* arf<1>:ub arf:ub arf:ub */
0b01010110100101010100, /* grf<1>:f grf:f arf:f */
0b00000010101001000100, /* grf<1>:ud imm:ud */
0b00101110110011001100, /* grf<1>:d grf:d imm:w */
0b11010000100101010100, /* arf<1>:f arf:f grf:f */
0b01010100100101010100, /* arf<1>:f grf:f arf:f */
0b01010100110101010100, /* arf<1>:f grf:f imm:f */
0b00000010101101010100, /* grf<1>:f imm:f */
0b00000110100011001100, /* grf<1>:d grf:d arf:ub */
0b00101110110011101110, /* grf<1>:q grf:q imm:w */
0b00000110100001100110, /* grf<1>:uq grf:uq arf:ub */
0b01010000100101010100, /* arf<1>:f arf:f arf:f */
0b10110110100011001100, /* grf<1>:d grf:d grf:d */
0b01010010100101010100, /* grf<1>:f arf:f arf:f */
0b00000111000001000100, /* grf<2>:ud grf:ud arf:ub */
0b00110110110011001110, /* grf<1>:q grf:d imm:d */
0b00101100110011001100, /* arf<1>:d grf:d imm:w */
0b11011110100101110110, /* grf<1>:df grf:df grf:df */
0b01010010110101010100, /* grf<1>:f arf:f imm:f */
0b10010110100001000100, /* grf<1>:ud grf:ud grf:ud */
0b00000010100001000100, /* grf<1>:ud arf:ud arf:ub */
0b00001110110001000100, /* grf<1>:ud grf:ud imm:uw */
0b00000010101010101100, /* grf<1>:d imm:w */
0b01010000110101010100, /* arf<1>:f arf:f imm:f */
0b00000100100001000100, /* arf<1>:ud grf:ud arf:ub */
};
static const uint16_t xe2_subreg_table[16] = {
0b000000000000, /* .0 .0 */
0b000010000000, /* .0 .4 */
0b000000000100, /* .4 .0 */
0b010000000000, /* .0 .32 */
0b001000000000, /* .0 .16 */
0b000000001000, /* .8 .0 */
0b000100000000, /* .0 .8 */
0b010100000000, /* .0 .40 */
0b011000000000, /* .0 .48 */
0b000110000000, /* .0 .12 */
0b000000010000, /* .16 .0 */
0b011010000000, /* .0 .52 */
0b001100000000, /* .0 .24 */
0b011100000000, /* .0 .56 */
0b010110000000, /* .0 .44 */
0b010010000000, /* .0 .36 */
};
static const uint16_t xe2_src0_index_table[8] = {
0b00100000000, /* r<1;1,0> */
0b00000000000, /* r<0;1,0> */
0b01000000000, /* r<2;1,0> */
0b00100000010, /* -r<1;1,0> */
0b01100000000, /* r<4;1,0> */
0b00100000001, /* (abs)r<1;1,0> */
0b00000000010, /* -r<0;1,0> */
0b01001000000, /* r<2;4,0> */
};
static const uint16_t xe2_src1_index_table[16] = {
0b0000100000000000, /* r<1;1,0>.0 */
0b0000000000000000, /* r<0;1,0>.0 */
0b1000100000000000, /* -r<1;1,0>.0 */
0b0000000000010000, /* r<0;1,0>.8 */
0b0000000000001000, /* r<0;1,0>.4 */
0b0000000000011000, /* r<0;1,0>.12 */
0b0000000001010000, /* r<0;1,0>.40 */
0b0000000001000000, /* r<0;1,0>.32 */
0b0000000000100000, /* r<0;1,0>.16 */
0b0000000001111000, /* r<0;1,0>.60 */
0b0000000000111000, /* r<0;1,0>.28 */
0b0000000000101000, /* r<0;1,0>.20 */
0b0000000001011000, /* r<0;1,0>.44 */
0b0000000001001000, /* r<0;1,0>.36 */
0b0000000001110000, /* r<0;1,0>.56 */
0b0000000000110000, /* r<0;1,0>.24 */
};
/* This is actually the control index table for Cherryview (26 bits), but the
* only difference from Broadwell (24 bits) is that it has two extra 0-bits at
* the start.
*
* The low 24 bits have the same mappings on both hardware.
*/
static const uint32_t gfx8_3src_control_index_table[4] = {
0b00100000000110000000000001,
0b00000000000110000000000001,
0b00000000001000000000000001,
0b00000000001000000000100001,
};
/* This is actually the control index table for Cherryview (49 bits), but the
* only difference from Broadwell (46 bits) is that it has three extra 0-bits
* at the start.
*
* The low 44 bits have the same mappings on both hardware, and since the high
* three bits on Broadwell are zero, we can reuse Cherryview's table.
*/
static const uint64_t gfx8_3src_source_index_table[4] = {
0b0000001110010011100100111001000001111000000000000,
0b0000001110010011100100111001000001111000000000010,
0b0000001110010011100100111001000001111000000001000,
0b0000001110010011100100111001000001111000000100000,
};
static const uint64_t gfx12_3src_control_index_table[32] = {
0b000001001010010101000000000000000100, /* (16|M0) grf<1>:f :f :f :f */
0b000001001010010101000000000000000011, /* (8|M0) grf<1>:f :f :f :f */
0b000001001000010101000000000000000011, /* (8|M0) arf<1>:f :f :f :f */
0b000001001010010101000010000000000011, /* (W) (8|M0) grf<1>:f :f :f :f */
0b000001001000010101000010000000000011, /* (W) (8|M0) arf<1>:f :f :f :f */
0b000001001000010101000000000000010011, /* (8|M8) arf<1>:f :f :f :f */
0b000001001010010101000000000000010011, /* (8|M8) grf<1>:f :f :f :f */
0b000001001000010101000010000000010011, /* (W) (8|M8) arf<1>:f :f :f :f */
0b000001001010010101000010000000010011, /* (W) (8|M8) grf<1>:f :f :f :f */
0b000001001010010101000010000000000100, /* (W) (16|M0) grf<1>:f :f :f :f */
0b000001001000010101000000000000000100, /* (16|M0) arf<1>:f :f :f :f */
0b000001001010010101010000000000000100, /* (16|M0) (sat)grf<1>:f :f :f :f */
0b000001001010010101000000000000100100, /* (16|M16) grf<1>:f :f :f :f */
0b000001001000010101000010000000000100, /* (W) (16|M0) arf<1>:f :f :f :f */
0b000001001010010101000010000000000000, /* (W) (1|M0) grf<1>:f :f :f :f */
0b000001001010010101010000000000000011, /* (8|M0) (sat)grf<1>:f :f :f :f */
0b000001001000010101000010000000110011, /* (W) (8|M24) arf<1>:f :f :f :f */
0b000001001000010101000010000000100011, /* (W) (8|M16) arf<1>:f :f :f :f */
0b000001001010010101000010000000110011, /* (W) (8|M24) grf<1>:f :f :f :f */
0b000001001010010101000010000000100011, /* (W) (8|M16) grf<1>:f :f :f :f */
0b000001001000010101000000000000100011, /* (8|M16) arf<1>:f :f :f :f */
0b000001001000010101000000000000110011, /* (8|M24) arf<1>:f :f :f :f */
0b000001001010010101000000000000100011, /* (8|M16) grf<1>:f :f :f :f */
0b000001001010010101000000000000110011, /* (8|M24) grf<1>:f :f :f :f */
0b000001001000010101010000000000000100, /* (16|M0) (sat)arf<1>:f :f :f :f */
0b000001001010010101010010000000000100, /* (W) (16|M0) (sat)grf<1>:f :f :f :f */
0b000001001010010101000010000000100100, /* (W) (16|M16) grf<1>:f :f :f :f */
0b000001001010010001000010000000000000, /* (W) (1|M0) grf<1>:ud :ud :ud :ud */
0b000001001000010101000000000000100100, /* (16|M16) arf<1>:f :f :f :f */
0b000001001010010101010000000000100100, /* (16|M16) (sat)grf<1>:f :f :f :f */
0b000001001010010101000010000000000010, /* (W) (4|M0) grf<1>:f :f :f :f */
0b000001001000010101010000000000000011, /* (8|M0) (sat)arf<1>:f :f :f :f */
};
static const uint64_t xehp_3src_control_index_table[32] = {
0b0000010010100010101000000000000000100, /* (16|M0) grf<1>:f :f :f :f */
0b0000010010100010101000000000000000011, /* (8|M0) grf<1>:f :f :f :f */
0b0000010010000010101000000000000000011, /* (8|M0) arf<1>:f :f :f :f */
0b0000010010100010101000010000000000011, /* (W) (8|M0) grf<1>:f :f :f :f */
0b0000010010000010101000010000000000011, /* (W) (8|M0) arf<1>:f :f :f :f */
0b0000010010000010101000000000000010011, /* (8|M8) arf<1>:f :f :f :f */
0b0000010010100010101000000000000010011, /* (8|M8) grf<1>:f :f :f :f */
0b0000010010000010101000010000000010011, /* (W) (8|M8) arf<1>:f :f :f :f */
0b0000010010100010101000010000000010011, /* (W) (8|M8) grf<1>:f :f :f :f */
0b0000010010100010101000010000000000100, /* (W) (16|M0) grf<1>:f :f :f :f */
0b0000010010000010101000000000000000100, /* (16|M0) arf<1>:f :f :f :f */
0b0000010010100010101010000000000000100, /* (16|M0) (sat)grf<1>:f :f :f :f */
0b0000010010100010101000000000000100100, /* (16|M16) grf<1>:f :f :f :f */
0b0000010010000010101000010000000000100, /* (W) (16|M0) arf<1>:f :f :f :f */
0b0000010010100010101000010000000000000, /* (W) (1|M0) grf<1>:f :f :f :f */
0b0000010010100010101010000000000000011, /* (8|M0) (sat)grf<1>:f :f :f :f */
0b0000010010000010101000010000000100011, /* (W) (8|M16) arf<1>:f :f :f :f */
0b0000010010000010101000010000000110011, /* (W) (8|M24) arf<1>:f :f :f :f */
0b0000010010100010101000010000000100011, /* (W) (8|M16) grf<1>:f :f :f :f */
0b0000010010100010101000010000000110011, /* (W) (8|M24) grf<1>:f :f :f :f */
0b0000010010000010101000000000000110011, /* (8|M24) arf<1>:f :f :f :f */
0b0000010010000010101000000000000100011, /* (8|M16) arf<1>:f :f :f :f */
0b0000000100111110011000000000000000011, /* dpas.8x* (8|M0) grf<1>:d :d :ub :b */
0b0000000000111110011000100000000000011, /* dpas.8x* (8|M0) grf<1>:d :d :ub :ub {Atomic} */
0b0000100100111110011000100000000000011, /* dpas.8x* (8|M0) grf<1>:d :d :b :b {Atomic} */
0b0000100000111110011000100000000000011, /* dpas.8x* (8|M0) grf<1>:d :d :b :ub {Atomic} */
0b0000100100111110011000000000000000011, /* dpas.8x* (8|M0) grf<1>:d :d :b :b */
0b0000000000111110011000000000000000011, /* dpas.8x* (8|M0) grf<1>:d :d :ub :ub */
0b0000000100111110011000100000000000011, /* dpas.8x* (8|M0) grf<1>:d :d :ub :b {Atomic} */
0b0000100000111110011000000000000000011, /* dpas.8x* (8|M0) grf<1>:d :d :b :ub */
0b0000101101111010101000100000000000011, /* dpas.8x* (8|M0) grf<1>:f :f :bf :bf {Atomic} */
0b0000101101111010101000000000000000011, /* dpas.8x* (8|M0) grf<1>:f :f :bf :bf */
};
static const uint64_t xe2_3src_control_index_table[16] = {
0b0000010010100010101000000000000100, /* (16|M0) grf<1>:f :f :f :f */
0b0000010010000010101000000000000100, /* (16|M0) arf<1>:f :f :f :f */
0b0000010010100010101000100000000100, /* (W)(16|M0) grf<1>:f :f :f :f */
0b0000010010000010101000100000000100, /* (W)(16|M0) arf<1>:f :f :f :f */
0b0000011011100011101100000000000100, /* (16|M0) grf<1>:df :df :df :df */
0b0000011011100011101100000010000100, /* (16|M16) grf<1>:df :df :df :df */
0b0000011011000011101100000000000100, /* (16|M0) arf<1>:df :df :df :df */
0b0000010010100010101000000000000101, /* (32|M0) grf<1>:f :f :f :f */
0b0000010010000010101000000000000101, /* (32|M0) arf<1>:f :f :f :f */
0b0000010010000010101010000000000100, /* (16|M0) (sat)arf<1>:f :f :f :f */
0b0000010010100010101010000000000100, /* (16|M0) (sat)grf<1>:f :f :f :f */
0b0000011011000011101100000010000100, /* (16|M16) arf<1>:df :df :df :df */
0b0000010010100010101000100000000000, /* (W)(1|M0) grf<1>:f :f :f :f */
0b0000010010100010001000000000000100, /* (16|M0) grf<1>:ud :ud :ud :ud */
0b0000110110100110011000000000000101, /* (32|M0) grf<1>:d :d :d :d */
0b0000011011000011101100000000000011, /* (8|M0) arf<1>:df :df :df :df */
};
static const uint64_t xe2_3src_dpas_control_index_table[16] = {
0b0000000000111110011001000000000100, /* dpas.8x* (16|M0) grf:d :d :ub :ub Atomic */
0b0000000100111110011001000000000100, /* dpas.8x* (16|M0) grf:d :d :ub :b Atomic */
0b0000100000111110011001000000000100, /* dpas.8x* (16|M0) grf:d :d :b :ub Atomic */
0b0000100100111110011001000000000100, /* dpas.8x* (16|M0) grf:d :d :b :b Atomic */
0b0000000000111110011000000000000100, /* dpas.8x* (16|M0) grf:d :d :ub :ub */
0b0000100100111110011000000000000100, /* dpas.8x* (16|M0) grf:d :d :b :b */
0b0000101101111010101001000000000100, /* dpas.8x* (16|M0) grf:f :f :bf :bf Atomic */
0b0000101101111101101001000000000100, /* dpas.8x* (16|M0) grf:f :bf :bf :bf Atomic */
0b0000101101111010110101000000000100, /* dpas.8x* (16|M0) grf:bf :f :bf :bf Atomic */
0b0000101101111101110101000000000100, /* dpas.8x* (16|M0) grf:bf :bf :bf :bf Atomic */
0b0000101101111010101000000000000100, /* dpas.8x* (16|M0) grf:f :f :bf :bf */
0b0000001001111010101001000000000100, /* dpas.8x* (16|M0) grf:f :f :hf :hf Atomic */
0b0000001001111001101001000000000100, /* dpas.8x* (16|M0) grf:f :hf :hf :hf Atomic */
0b0000001001111010100101000000000100, /* dpas.8x* (16|M0) grf:hf :f :hf :hf Atomic */
0b0000001001111001100101000000000100, /* dpas.8x* (16|M0) grf:hf :hf :hf :hf Atomic */
0b0000001001111010101000000000000100, /* dpas.8x* (16|M0) grf:f :f :hf :hf */
};
static const uint32_t gfx12_3src_source_index_table[32] = {
0b100101100001100000000, /* grf<0;0> grf<8;1> grf<0> */
0b100101100001001000010, /* arf<4;1> grf<8;1> grf<0> */
0b101101100001101000011, /* grf<8;1> grf<8;1> grf<1> */
0b100101100001101000011, /* grf<8;1> grf<8;1> grf<0> */
0b101100000000101000011, /* grf<8;1> grf<0;0> grf<1> */
0b101101100001101001011, /* -grf<8;1> grf<8;1> grf<1> */
0b101001100001101000011, /* grf<8;1> arf<8;1> grf<1> */
0b100001100001100000000, /* grf<0;0> arf<8;1> grf<0> */
0b101101100001100000000, /* grf<0;0> grf<8;1> grf<1> */
0b101101100101101000011, /* grf<8;1> grf<8;1> -grf<1> */
0b101101110001101000011, /* grf<8;1> -grf<8;1> grf<1> */
0b101100000000100000000, /* grf<0;0> grf<0;0> grf<1> */
0b100001100001101000011, /* grf<8;1> arf<8;1> grf<0> */
0b100101110001100000000, /* grf<0;0> -grf<8;1> grf<0> */
0b100101110001101000011, /* grf<8;1> -grf<8;1> grf<0> */
0b100101100001101001011, /* -grf<8;1> grf<8;1> grf<0> */
0b100100000000101000011, /* grf<8;1> grf<0;0> grf<0> */
0b100101100001100001000, /* -grf<0;0> grf<8;1> grf<0> */
0b100100000000100000000, /* grf<0;0> grf<0;0> grf<0> */
0b101101110001100000000, /* grf<0;0> -grf<8;1> grf<1> */
0b100101100101100000000, /* grf<0;0> grf<8;1> -grf<0> */
0b101001100001100000000, /* grf<0;0> arf<8;1> grf<1> */
0b100101100101101000011, /* grf<8;1> grf<8;1> -grf<0> */
0b101101100101101001011, /* -grf<8;1> grf<8;1> -grf<1> */
0b101001100001101001011, /* -grf<8;1> arf<8;1> grf<1> */
0b101101110001101001011, /* -grf<8;1> -grf<8;1> grf<1> */
0b101100010000101000011, /* grf<8;1> -grf<0;0> grf<1> */
0b101100000100101000011, /* grf<8;1> grf<0;0> -grf<1> */
0b101101100001100001000, /* -grf<0;0> grf<8;1> grf<1> */
0b101101100101100000000, /* grf<0;0> grf<8;1> -grf<1> */
0b100100000100101000011, /* grf<8;1> grf<0;0> -grf<0> */
0b101001100101101000011, /* grf<8;1> arf<8;1> -grf<1> */
};
static const uint32_t xehp_3src_source_index_table[32] = {
0b100100000001100000000, /* grf<0;0> grf<1;0> grf<0> */
0b100100000001000000001, /* arf<1;0> grf<1;0> grf<0> */
0b101100000001100000001, /* grf<1;0> grf<1;0> grf<1> */
0b100100000001100000001, /* grf<1;0> grf<1;0> grf<0> */
0b101100000000100000001, /* grf<1;0> grf<0;0> grf<1> */
0b101100000001100001001, /* -grf<1;0> grf<1;0> grf<1> */
0b101000000001100000001, /* grf<1;0> arf<1;0> grf<1> */
0b101100000001100000000, /* grf<0;0> grf<1;0> grf<1> */
0b100000000001100000000, /* grf<0;0> arf<1;0> grf<0> */
0b101100000101100000001, /* grf<1;0> grf<1;0> -grf<1> */
0b101100010001100000001, /* grf<1;0> -grf<1;0> grf<1> */
0b101100000000100000000, /* grf<0;0> grf<0;0> grf<1> */
0b100000000001100000001, /* grf<1;0> arf<1;0> grf<0> */
0b100100010001100000000, /* grf<0;0> -grf<1;0> grf<0> */
0b100100010001100000001, /* grf<1;0> -grf<1;0> grf<0> */
0b100100000001100001001, /* -grf<1;0> grf<1;0> grf<0> */
0b100100000000100000001, /* grf<1;0> grf<0;0> grf<0> */
0b100100000001100001000, /* -grf<0;0> grf<1;0> grf<0> */
0b100100000000100000000, /* grf<0;0> grf<0;0> grf<0>
* dpas.*x1 grf:d grf:[ub,b] grf:[ub,b]
* dpas.*x1 grf:f grf:bf grf:bf
*/
0b101100010001100000000, /* grf<0;0> -grf<1;0> grf<1> */
0b100100000101100000000, /* grf<0;0> grf<1;0> -grf<0> */
0b101000000001100000000, /* grf<0;0> arf<1;0> grf<1> */
0b100100000101100000001, /* grf<1;0> grf<1;0> -grf<0> */
0b101100000101100001001, /* -grf<1;0> grf<1;0> -grf<1> */
0b100100010000100000000, /* dpas.*x1 grf:d grf:[u2,s2] grf:[ub,b] */
0b100100000100100000000, /* dpas.*x1 grf:d grf:[ub,b] grf:[u2,s2] */
0b100100010100100000000, /* dpas.*x1 grf:d grf:[u2,s2] grf:[u2,s2] */
0b100100001000100000000, /* dpas.*x1 grf:d grf:[u4,s4] grf:[ub,b] */
0b100100001100100000000, /* dpas.*x1 grf:d grf:[u4,s4] grf:[u2,s2] */
0b100100000010100000000, /* dpas.*x1 grf:d grf:[ub,b] grf:[u4,s4] */
0b100100001010100000000, /* dpas.*x1 grf:d grf:[u4,s4] grf:[u4,s4] */
0b100100010010100000000, /* dpas.*x1 grf:d grf:[u2,s2] grf:[u4,s4] */
};
static const uint32_t xe2_3src_source_index_table[16] = {
0b101100000001100000001, /* grf<1;0> grf<1;0> grf<1> */
0b101100000001000000001, /* arf<1;0> grf<1;0> grf<1> */
0b100100000001100000000, /* grf<0;0> grf<1;0> grf<0> */
0b100100000001000000001, /* arf<1;0> grf<1;0> grf<0> */
0b100100000001100000001, /* grf<1;0> grf<1;0> grf<0> */
0b100000000001100000000, /* grf<0;0> arf<1;0> grf<0> */
0b100000000001100000001, /* grf<1;0> arf<1;0> grf<0> */
0b101100000101100000001, /* grf<1;0> grf<1;0> -grf<1> */
0b101000000001100000001, /* grf<1;0> arf<1;0> grf<1> */
0b101000000001000000001, /* arf<1;0> arf<1;0> grf<1> */
0b100000000001000000001, /* arf<1;0> arf<1;0> grf<0> */
0b100100000000100000000, /* grf<0;0> grf<0;0> grf<0> */
0b100100000000100000001, /* grf<1;0> grf<0;0> grf<0> */
0b101100000101000000001, /* arf<1;0> grf<1;0> -grf<1> */
0b100100010001100000001, /* grf<1;0> -grf<1;0> grf<0> */
0b100100010001000000001, /* arf<1;0> -grf<1;0> grf<0> */
};
static const uint32_t xe2_3src_dpas_source_index_table[16] = {
0b100100000000100000000, /* dpas.*x1 grf:d grf:[ub,b] grf:[ub,b]
* dpas.*x1 grf:[f,bf] grf:bf grf:bf
* dpas.*x1 grf:[f,hf] grf:hf grf:hf
*/
0b100100000010100000000, /* dpas.*x1 grf:d grf:[ub,b] grf:[u4,s4] */
0b100100000100100000000, /* dpas.*x1 grf:d grf:[ub,b] grf:[u2,s2] */
0b100100001000100000000, /* dpas.*x1 grf:d grf:[u4,s4] grf:[ub,b] */
0b100100001010100000000, /* dpas.*x1 grf:d grf:[u4,s4] grf:[u4,s4] */
0b100100001100100000000, /* dpas.*x1 grf:d grf:[u4,s4] grf:[u2,s2] */
0b100100010000100000000, /* dpas.*x1 grf:d grf:[u2,s2] grf:[ub,b] */
0b100100010010100000000, /* dpas.*x1 grf:d grf:[u2,s2] grf:[u4,s4] */
0b100100010100100000000, /* dpas.*x1 grf:d grf:[u2,s2] grf:[u2,s2] */
0b100100000000100000010, /* dpas.*x2 grf:d grf:[ub,b] grf:[ub,b] */
0b100100000010100000010, /* dpas.*x2 grf:d grf:[ub,b] grf:[u4,s4] */
0b100100001000100000010, /* dpas.*x2 grf:d grf:[u4,s4] grf:[ub,b] */
0b100100001010100000010, /* dpas.*x2 grf:d grf:[u4,s4] grf:[u4,s4] */
0b100100010100100000010, /* dpas.*x2 grf:d grf:[u2,s2] grf:[u2,s2] */
0b100100000000100001110, /* dpas.*x8 grf:d grf:[ub,b] grf:[ub,b] */
0b100100001010100001110, /* dpas.*x8 grf:d grf:[u4,s4] grf:[u4,s4] */
};
static const uint32_t gfx12_3src_subreg_table[32] = {
0b00000000000000000000, /* .0 .0 .0 .0 */
0b00100000000000000000, /* .0 .0 .0 .4 */
0b00000000000110000000, /* .0 .12 .0 .0 */
0b10100000000000000000, /* .0 .0 .0 .20 */
0b10000000001110000000, /* .0 .28 .0 .16 */
0b01100000000000000000, /* .0 .0 .0 .12 */
0b01000000000000000000, /* .0 .0 .0 .8 */
0b00000010000000000000, /* .0 .0 .8 .0 */
0b00000001000000000000, /* .0 .0 .4 .0 */
0b11000000000000000000, /* .0 .0 .0 .24 */
0b10000000000000000000, /* .0 .0 .0 .16 */
0b11100000000000000000, /* .0 .0 .0 .28 */
0b00000110000000000000, /* .0 .0 .24 .0 */
0b00000000000010000000, /* .0 .4 .0 .0 */
0b00000100000000000000, /* .0 .0 .16 .0 */
0b00000011000000000000, /* .0 .0 .12 .0 */
0b00000101000000000000, /* .0 .0 .20 .0 */
0b00000111000000000000, /* .0 .0 .28 .0 */
0b00000000000100000000, /* .0 .8 .0 .0 */
0b00000000001000000000, /* .0 .16 .0 .0 */
0b00000000001100000000, /* .0 .24 .0 .0 */
0b00000000001010000000, /* .0 .20 .0 .0 */
0b00000000001110000000, /* .0 .28 .0 .0 */
0b11000000001110000000, /* .0 .28 .0 .24 */
0b00100000000100000000, /* .0 .8 .0 .4 */
0b00100000000110000000, /* .0 .12 .0 .4 */
0b01000000000110000000, /* .0 .12 .0 .8 */
0b10000000001100000000, /* .0 .24 .0 .16 */
0b10000000001010000000, /* .0 .20 .0 .16 */
0b01100000000010000000, /* .0 .4 .0 .12 */
0b10100000001110000000, /* .0 .28 .0 .20 */
0b01000000000010000000, /* .0 .4 .0 .8 */
};
static const uint32_t xe2_3src_subreg_table[32] = {
0b00000000000000000000, /* .0 .0 .0 .0 */
0b00100000000000000000, /* .0 .0 .0 .8 */
0b10000000000000000000, /* .0 .0 .0 .32 */
0b00010000000000000000, /* .0 .0 .0 .4 */
0b11100000000000000000, /* .0 .0 .0 .56 */
0b01010000000000000000, /* .0 .0 .0 .20 */
0b10110000000000000000, /* .0 .0 .0 .44 */
0b01000000000011000000, /* .0 .12 .0 .16 */
0b01100000000000000000, /* .0 .0 .0 .24 */
0b10100000000000000000, /* .0 .0 .0 .40 */
0b11000000000000000000, /* .0 .0 .0 .48 */
0b01000000000000000000, /* .0 .0 .0 .16 */
0b01110000000110000000, /* .0 .24 .0 .28 */
0b10100000001001000000, /* .0 .36 .0 .40 */
0b11010000001100000000, /* .0 .48 .0 .52 */
0b01110000000000000000, /* .0 .0 .0 .28 */
0b11110000000000000000, /* .0 .0 .0 .60 */
0b10010000000000000000, /* .0 .0 .0 .36 */
0b00110000000000000000, /* .0 .0 .0 .12 */
0b00100000000010000000, /* .0 .8 .0 .8 */
0b00010000000001000000, /* .0 .4 .0 .4 */
0b00110000000011000000, /* .0 .12 .0 .12 */
0b11010000000000000000, /* .0 .0 .0 .52 */
0b00000000000001000000, /* .0 .4 .0 .0 */
0b00000101100000000000, /* .0 .0 .44 .0 */
0b00000100000000000000, /* .0 .0 .32 .0 */
0b00000000000010000000, /* .0 .8 .0 .0 */
0b00000000001100000000, /* .0 .48 .0 .0 */
0b00000000001101000000, /* .0 .52 .0 .0 */
0b00000110100000000000, /* .0 .0 .52 .0 */
0b00000000001000000000, /* .0 .32 .0 .0 */
0b00000000001111000000, /* .0 .60 .0 .0 */
};
typedef struct compact_table_info {
uint64_t
read(unsigned index) const
{
assert(index < length);
switch (element_size) {
case sizeof(uint64_t):
return ((uint64_t*)ptr)[index];
case sizeof(uint32_t):
return ((uint32_t*)ptr)[index];
case sizeof(uint16_t):
return ((uint16_t*)ptr)[index];
case sizeof(uint8_t):
return ((uint8_t*)ptr)[index];
default:
UNREACHABLE("Unsupported size in compact_table_info::read()");
return UINT64_MAX;
}
}
const void *ptr;
uint32_t length;
uint8_t element_size;
} compact_table_info;
struct compact_tables {
struct compact_table_info control;
struct compact_table_info datatype;
struct compact_table_info subreg;
struct compact_table_info src0;
struct compact_table_info src1;
struct compact_table_info control_3src;
struct compact_table_info control_dpas_3src;
struct compact_table_info source_3src;
struct compact_table_info source_dpas_3src;
struct compact_table_info subreg_3src;
};
#define declare_tables(NAME, INIT) \
static constexpr struct compact_tables NAME = []() { \
struct compact_tables tables = {}; \
INIT \
return tables; \
}()
#define set_table(FIELD, TABLE) { \
tables.FIELD.ptr = TABLE; \
tables.FIELD.length = ARRAY_SIZE(TABLE); \
tables.FIELD.element_size = sizeof(TABLE[0]); \
}
declare_tables(gen9_tables, {
set_table(control, gfx8_control_index_table);
set_table(datatype, gfx8_datatype_table);
set_table(subreg, gfx8_subreg_table);
set_table(src0, gfx8_src_index_table);
set_table(src1, gfx8_src_index_table);
set_table(control_3src, gfx8_3src_control_index_table);
set_table(source_3src, gfx8_3src_source_index_table);
return tables;
});
declare_tables(gen11_tables, {
tables = gen9_tables;
set_table(datatype, gfx11_datatype_table);
});
declare_tables(gen12_tables, {
set_table(control, gfx12_control_index_table);
set_table(datatype, gfx12_datatype_table);
set_table(subreg, gfx12_subreg_table);
set_table(src0, gfx12_src0_index_table);
set_table(src1, gfx12_src1_index_table);
set_table(control_3src, gfx12_3src_control_index_table);
set_table(source_3src, gfx12_3src_source_index_table);
set_table(subreg_3src, gfx12_3src_subreg_table);
});
declare_tables(genx125_tables, {
tables = gen12_tables;
set_table(src0, xehp_src0_index_table);
set_table(src1, xehp_src1_index_table);
set_table(control_3src, xehp_3src_control_index_table);
set_table(source_3src, xehp_3src_source_index_table);
});
declare_tables(xe2_tables, {
set_table(control, xe2_control_index_table);
set_table(datatype, xe2_datatype_table);
set_table(subreg, xe2_subreg_table);
set_table(src0, xe2_src0_index_table);
set_table(src1, xe2_src1_index_table);
set_table(control_3src, xe2_3src_control_index_table);
set_table(control_dpas_3src, xe2_3src_dpas_control_index_table);
set_table(source_3src, xe2_3src_source_index_table);
set_table(source_dpas_3src, xe2_3src_dpas_source_index_table);
set_table(subreg_3src, xe2_3src_subreg_table);
});
#undef declare_tables
#undef set_table
static constexpr struct compact_tables empty_tables = {};
static const struct compact_tables&
get_compact_tables(const struct intel_device_info *devinfo)
{
switch (devinfo->verx10) {
case 90:
return gen9_tables;
case 110:
return gen11_tables;
case 120:
return gen12_tables;
case 125:
return genx125_tables;
case 200:
case 300:
return xe2_tables;
default:
UNREACHABLE("Unknown platform in get_compact_tables()");
return empty_tables;
}
}

View file

@ -12,6 +12,7 @@ libintel_compiler_gen_files = files(
'gen_private.h',
'gen_names.c',
'gen_compact.cpp',
'gen_control_flow.cpp',
'gen_parse.cpp',
'gen_print.cpp',