1 /*========================== begin_copyright_notice ============================
2 
3 Copyright (C) 2017-2021 Intel Corporation
4 
5 SPDX-License-Identifier: MIT
6 
7 ============================= end_copyright_notice ===========================*/
8 
9 #include "visa_igc_common_header.h"
10 #include "VISADefines.h"
11 #include "PreDefinedVars.h"
12 #include "common.h"
13 
14 static const PreDefinedVarInfo preDefinedVarTable[static_cast<int>(PreDefinedVarsInternal::VAR_LAST)] =
15 {
16     { PreDefinedVarsInternal::VAR_NULL,      ISA_TYPE_UD, 1, true,  false,  0, 1,   "%null" },
17     { PreDefinedVarsInternal::X,             ISA_TYPE_UW, 1, true,  false,  4,  1,   "%thread_x" },
18     { PreDefinedVarsInternal::Y,             ISA_TYPE_UW, 1, true,  false,  6,  1,   "%thread_y" },
19     { PreDefinedVarsInternal::LOCAL_ID_X,    ISA_TYPE_UD, 2, false, true,   16, 1,   "%local_id_x" },
20     { PreDefinedVarsInternal::LOCAL_ID_Y,    ISA_TYPE_UD, 2, false, true,   20, 1,   "%local_id_y" },
21     { PreDefinedVarsInternal::LOCAL_SIZE_X,  ISA_TYPE_UD, 2, false, true,   0,  1,   "%local_size_x" },
22     { PreDefinedVarsInternal::LOCAL_SIZE_Y,  ISA_TYPE_UD, 2, false, true,   4,  1,   "%local_size_y" },
23     { PreDefinedVarsInternal::GROUP_ID_X,    ISA_TYPE_UD, 2, true,  true,   4,  1,   "%group_id_x" },
24     { PreDefinedVarsInternal::GROUP_ID_Y,    ISA_TYPE_UD, 2, true,  true,   24, 1,   "%group_id_y" },
25     { PreDefinedVarsInternal::GROUP_ID_Z,    ISA_TYPE_UD, 3, true,  true,   28, 1,   "%group_id_z" },
26     { PreDefinedVarsInternal::GROUP_COUNT_X, ISA_TYPE_UD, 2, false, true,   8,  1,   "%group_count_x" },
27     { PreDefinedVarsInternal::GROUP_COUNT_Y, ISA_TYPE_UD, 2, false, true,   12, 1,   "%group_count_y" },
28     { PreDefinedVarsInternal::TSC,           ISA_TYPE_UD, 2, false, false,  0,  5,   "%tsc" },
29     { PreDefinedVarsInternal::R0,            ISA_TYPE_UD, 2, true,  false,  0,  8,   "%r0" },
30     { PreDefinedVarsInternal::ARG,           ISA_TYPE_UD, 3, false, false,  0,  256, "%arg" },
31     { PreDefinedVarsInternal::RET,           ISA_TYPE_UD, 3, false, false,  0,  96,  "%retval" },
32     { PreDefinedVarsInternal::FE_SP,         ISA_TYPE_UQ, 3, false, false,  0,  1,   "%sp" },
33     { PreDefinedVarsInternal::FE_FP,         ISA_TYPE_UQ, 3, false, false,  0,  1,   "%fp" },
34     { PreDefinedVarsInternal::HW_TID,        ISA_TYPE_UD, 3, false, false,  0,  1,   "%hw_id" },
35     { PreDefinedVarsInternal::SR0,           ISA_TYPE_UD, 3, false, false,  0,  4,   "%sr0" },
36     { PreDefinedVarsInternal::CR0,           ISA_TYPE_UD, 3, false, false,  0,  1,   "%cr0" },
37     { PreDefinedVarsInternal::CE0,           ISA_TYPE_UD, 3, false, false,  0,  1,   "%ce0" },
38     { PreDefinedVarsInternal::DBG,           ISA_TYPE_UD, 3, false, false,  0,  2,   "%dbg0" },
39     { PreDefinedVarsInternal::COLOR,         ISA_TYPE_UW, 3, true,  false,  0,  1,   "%color" },
40     { PreDefinedVarsInternal::IMPL_ARG_BUF_PTR, ISA_TYPE_UQ, 3, false, false,  0,  1,   "%impl_arg_buf_ptr" },
41     { PreDefinedVarsInternal::LOCAL_ID_BUF_PTR, ISA_TYPE_UQ, 3, false, false,  0,  1,   "%local_id_buf_ptr" }
42 };
43 
44 enum class PreDefinedVarsInternal_3_4
45 {
46     VAR_NULL = 0,
47     X = 1,
48     Y = 2,
49     GROUP_ID_X = 3,
50     GROUP_ID_Y = 4,
51     GROUP_ID_Z = 5,
52     TSC = 6,
53     R0 = 7,
54     ARG = 8,
55     RET = 9,
56     FE_SP = 10,
57     FE_FP = 11,
58     HW_TID = 12,
59     SR0 = 13,
60     CR0 = 14,
61     CE0 = 15,
62     DBG = 16,
63     COLOR = 17,
64     IMPL_ARG_BUF_PTR = 18,
65     LOCAL_ID_BUF_PTR = 19,
66     VAR_LAST = LOCAL_ID_BUF_PTR
67 };
68 
mapExternalToInternalPreDefVar(int id)69 PreDefinedVarsInternal mapExternalToInternalPreDefVar(int id)
70 {
71     PreDefinedVarsInternal newIndex = PreDefinedVarsInternal::VAR_LAST;
72 
73     if (id <= static_cast<int>(PreDefinedVarsInternal_3_4::VAR_LAST))
74         {
75             PreDefinedVarsInternal_3_4 internalIndex = static_cast<PreDefinedVarsInternal_3_4>(id);
76             switch (internalIndex)
77             {
78             case PreDefinedVarsInternal_3_4::VAR_NULL:
79                 newIndex = PreDefinedVarsInternal::VAR_NULL;
80                 break;
81             case PreDefinedVarsInternal_3_4::X:
82                 newIndex = PreDefinedVarsInternal::X;
83                 break;
84             case PreDefinedVarsInternal_3_4::Y:
85                 newIndex = PreDefinedVarsInternal::Y;
86                 break;
87             case PreDefinedVarsInternal_3_4::GROUP_ID_X:
88                 newIndex = PreDefinedVarsInternal::GROUP_ID_X;
89                 break;
90             case PreDefinedVarsInternal_3_4::GROUP_ID_Y:
91                 newIndex = PreDefinedVarsInternal::GROUP_ID_Y;
92                 break;
93             case PreDefinedVarsInternal_3_4::GROUP_ID_Z:
94                 newIndex = PreDefinedVarsInternal::GROUP_ID_Z;
95                 break;
96             case PreDefinedVarsInternal_3_4::TSC:
97                 newIndex = PreDefinedVarsInternal::TSC;
98                 break;
99             case PreDefinedVarsInternal_3_4::R0:
100                 newIndex = PreDefinedVarsInternal::R0;
101                 break;
102             case PreDefinedVarsInternal_3_4::ARG:
103                 newIndex = PreDefinedVarsInternal::ARG;
104                 break;
105             case PreDefinedVarsInternal_3_4::RET:
106                 newIndex = PreDefinedVarsInternal::RET;
107                 break;
108             case PreDefinedVarsInternal_3_4::FE_SP:
109                 newIndex = PreDefinedVarsInternal::FE_SP;
110                 break;
111             case PreDefinedVarsInternal_3_4::FE_FP:
112                 newIndex = PreDefinedVarsInternal::FE_FP;
113                 break;
114             case PreDefinedVarsInternal_3_4::HW_TID:
115                 newIndex = PreDefinedVarsInternal::HW_TID;
116                 break;
117             case PreDefinedVarsInternal_3_4::SR0:
118                 newIndex = PreDefinedVarsInternal::SR0;
119                 break;
120             case PreDefinedVarsInternal_3_4::CR0:
121                 newIndex = PreDefinedVarsInternal::CR0;
122                 break;
123             case PreDefinedVarsInternal_3_4::CE0:
124                 newIndex = PreDefinedVarsInternal::CE0;
125                 break;
126             case PreDefinedVarsInternal_3_4::DBG:
127                 newIndex = PreDefinedVarsInternal::DBG;
128                 break;
129             case PreDefinedVarsInternal_3_4::COLOR:
130                 newIndex = PreDefinedVarsInternal::COLOR;
131                 break;
132             case PreDefinedVarsInternal_3_4::IMPL_ARG_BUF_PTR:
133                 newIndex = PreDefinedVarsInternal::IMPL_ARG_BUF_PTR;
134                 break;
135             case PreDefinedVarsInternal_3_4::LOCAL_ID_BUF_PTR:
136                 newIndex = PreDefinedVarsInternal::LOCAL_ID_BUF_PTR;
137                 break;
138             default:
139                 break;
140             }
141         }
142 
143     return newIndex;
144 }
145 
getPredefinedVarType(PreDefinedVarsInternal id)146 VISA_Type getPredefinedVarType(PreDefinedVarsInternal id)
147 {
148     return preDefinedVarTable[(int)id].type;
149 }
150 
getPredefinedVarString(PreDefinedVarsInternal id)151 const char * getPredefinedVarString(PreDefinedVarsInternal id)
152 {
153     return preDefinedVarTable[(int)id].str;
154 }
155 
getPredefinedVarID(PreDefinedVarsInternal id)156 PreDefinedVarsInternal getPredefinedVarID(PreDefinedVarsInternal id)
157 {
158     return preDefinedVarTable[(int)id].id;
159 }
160 
isPredefinedVarInR0(PreDefinedVarsInternal id)161 bool isPredefinedVarInR0(PreDefinedVarsInternal id)
162 {
163     return preDefinedVarTable[(int)id].isInR0;
164 }
165 
predefinedVarNeedGRF(PreDefinedVarsInternal id)166 bool predefinedVarNeedGRF(PreDefinedVarsInternal id)
167 {
168     return preDefinedVarTable[(int)id].needsGRF;
169 }
170 
getPredefinedVarByteOffset(PreDefinedVarsInternal id)171 uint16_t getPredefinedVarByteOffset(PreDefinedVarsInternal id)
172 {
173     return preDefinedVarTable[(int)id].byteOffset;
174 }
175