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