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 #if !defined(__IGFXHWEUISA_H__)
10 #define __IGFXHWEUISA_H__
11 
12 
13 __CODEGEN_FILE_DIRECTIVES_OPEN
14 __CODEGEN_NAMESPACE_OPEN
15 
16 typedef enum tagEU_OPCODE {
17     EU_OPCODE_ILLEGAL = 0x0,
18     EU_OPCODE_MOV = 0x1,
19     EU_OPCODE_SEL = 0x2,
20     EU_OPCODE_MOVI = 0x3,
21     EU_OPCODE_NOT = 0x4,
22     EU_OPCODE_AND = 0x5,
23     EU_OPCODE_OR = 0x6,
24     EU_OPCODE_XOR = 0x7,
25     EU_OPCODE_SHR = 0x8,
26     EU_OPCODE_SHL = 0x9,
27     EU_OPCODE_SMOV = 0xA,
28     EU_OPCODE_ASR = 0xC,
29     EU_OPCODE_ROR = 0xE, // ICL+
30     EU_OPCODE_ROL = 0xF, // ICL+
31     EU_OPCODE_CMP     = 0x10,
32     EU_OPCODE_CMPN    = 0x11,
33     EU_OPCODE_CSEL    = 0x12,
34     EU_OPCODE_BFREV   = 0x17,
35     EU_OPCODE_BFE     = 0x18,
36     EU_OPCODE_BFI1    = 0x19,
37     EU_OPCODE_BFI2    = 0x1A,
38     EU_OPCODE_JMPI    = 0x20,
39     EU_OPCODE_BRD     = 0x21,
40     EU_OPCODE_IF      = 0x22,
41     EU_OPCODE_BRC     = 0x23,
42     EU_OPCODE_ELSE    = 0x24,
43     EU_OPCODE_ENDIF   = 0x25,
44     EU_OPCODE_WHILE   = 0x27,
45     EU_OPCODE_BREAK   = 0x28,
46     EU_OPCODE_CONT    = 0x29,
47     EU_OPCODE_HALT    = 0x2A,
48     EU_OPCODE_CALLA   = 0x2B,
49     EU_OPCODE_CALL    = 0x2C,
50     EU_OPCODE_RET     = 0x2D,
51     EU_OPCODE_GOTO    = 0x2E,
52     EU_OPCODE_JOIN    = 0x2F,
53     EU_OPCODE_WAIT    = 0x30,
54     EU_OPCODE_SEND    = 0x31,
55     EU_OPCODE_SENDC   = 0x32,
56     EU_OPCODE_SENDS   = 0x33,
57     EU_OPCODE_SENDSC  = 0x34,
58     EU_OPCODE_MATH    = 0x38,
59     EU_OPCODE_ADD     = 0x40,
60     EU_OPCODE_MUL     = 0x41,
61     EU_OPCODE_AVG     = 0x42,
62     EU_OPCODE_FRC     = 0x43,
63     EU_OPCODE_RNDU    = 0x44,
64     EU_OPCODE_RNDD    = 0x45,
65     EU_OPCODE_RNDE    = 0x46,
66     EU_OPCODE_RNDZ    = 0x47,
67     EU_OPCODE_MAC     = 0x48,
68     EU_OPCODE_MACH    = 0x49,
69     EU_OPCODE_LZD     = 0x4A,
70     EU_OPCODE_FBH     = 0x4B,
71     EU_OPCODE_FBL     = 0x4C,
72     EU_OPCODE_CBIT    = 0x4D,
73     EU_OPCODE_ADDC    = 0x4E,
74     EU_OPCODE_SUBB    = 0x4F,
75     EU_OPCODE_SAD2    = 0x50,
76     EU_OPCODE_SADA2   = 0x51,
77     EU_OPCODE_DP4     = 0x54,
78     EU_OPCODE_DPH     = 0x55,
79     EU_OPCODE_DP3     = 0x56,
80     EU_OPCODE_DP2     = 0x57,
81     EU_OPCODE_DP4A    = 0x58,
82     EU_OPCODE_LINE    = 0x59,
83     EU_OPCODE_PLN     = 0x5A,
84     EU_OPCODE_MAD     = 0x5B,
85     EU_OPCODE_LRP     = 0x5C,
86     EU_OPCODE_MADM    = 0x5D,
87     EU_OPCODE_NOP     = 0x7E,
88 } EU_OPCODE;
89 
90 typedef enum tagREGFILE {
91     REGFILE_ARF = 0x0,   // Architecture Register File
92     REGFILE_GRF = 0x1,   // General Register File - allowed for any source or destination
93     REGFILE_IMM = 0x3,   // Immediate operand
94 } REGFILE;
95 
96 /*****************************************************************************\
97 Destination Type
98 Numeric data type of the destination operand dst. The bits of the destination operand are interpreted as the identified numeric data type, rather than coerced into a type implied by the operator. For a send or sendc instruction, this field applies to CurrDst, the current destination operand. Three source instructions use a 3-bit encoding that allows fewer data types.
99 \*****************************************************************************/
100 typedef enum tagDSTTYPE {
101     DSTTYPE_UD = 0x0,   // Unsigned Doubleword integer
102     DSTTYPE_D  = 0x1,   // signed Doubleword integer
103     DSTTYPE_UW = 0x2,   // Unsigned Word integer
104     DSTTYPE_W  = 0x3,   // signed Word integer
105     DSTTYPE_UB = 0x4,   // Unsigned Byte integer
106     DSTTYPE_B  = 0x5,   // signed Byte integer
107     DSTTYPE_DF = 0x6,   // Double precision Float (64-bit)
108     DSTTYPE_F  = 0x7,   // single precision Float (32-bit)
109     DSTTYPE_UQ = 0x8,   // Unsigned Quadword integer
110     DSTTYPE_Q  = 0x9,   // signed Quadword integer
111     DSTTYPE_HF = 0xA,   // Half Float (16-bit)
112 } DSTTYPE;
113 
114 /*****************************************************************************\
115 Specifies the numeric data type of a source operand. In a two-source instruction, each source operand has its own source type field. In a three-source instruction, one source type is used for all three source operands.
116 The bits of a source operand are interpreted as the identified numeric data type, rather than coerced into a type implied by the operator.
117 Depending on the RegFile field for the source, this field uses one of two encodings. For a non-immediate source (from a register file), use the Source Register Type Encoding, which is identical to the Destination Type encoding. For an immediate source, use the Source Immediate Type Encoding, which does not support signed or unsigned byte immediate values and does support the three packed vector types, V, UV, and VF.
118 Note that three-source instructions do not support immediate operands, that only the second source (src1) of a two-source instruction can be immediate, and that 64-bit immediate values (DF, Q, or UQ) can only be used with one-source instructions.
119 In a two-source instruction with a V (Packed Signed Half-Byte Integer Vector) or UV (Packed Unsigned Half-Byte Integer Vector) immediate operand, the other source operand must have a type compatible with packed word execution mode, one of B, UB, W, or UW.
120 Note that DF (Double Float) and HF (Half Float) have different encodings in the Source Regster Type Encoding and the Source Immediate Type Encoding.
121 The Source Register Type Encoding and Source Immediate Type Encoding lists apply to instructions with one or two source operands.
122 \*****************************************************************************/
123 typedef enum tagSRCTYPE {
124     SRCTYPE_UD = 0x0,   // Unsigned Doubleword
125     SRCTYPE_D  = 0x1,   // signed Doubleword
126     SRCTYPE_UW = 0x2,   // Unsigned Word integer
127     SRCTYPE_W  = 0x3,   // signed Word integer
128     SRCTYPE_UB = 0x4,   // unsigned Byte integer
129     SRCTYPE_B  = 0x5,   // signed Byte integer
130     SRCTYPE_DF = 0x6,   // Double precision Float (64-bit)
131     SRCTYPE_F  = 0x7,   // single precision Float (32-bit)
132     SRCTYPE_UQ = 0x8,   // Unsigned Quadword integer
133     SRCTYPE_Q  = 0x9,   // signed Quadword integer
134     SRCTYPE_HF = 0xA,   // Half Float (16-bit)
135 } SRCTYPE;
136 
137 /*****************************************************************************\
138 Specifies the numeric data type of a source operand. In a two-source instruction, each source operand has its own source type field. In a three-source instruction, one source type is used for all three source operands.
139 The bits of a source operand are interpreted as the identified numeric data type, rather than coerced into a type implied by the operator.
140 Depending on the RegFile field for the source, this field uses one of two encodings. For a non-immediate source (from a register file), use the Source Register Type Encoding, which is identical to the Destination Type encoding. For an immediate source, use the Source Immediate Type Encoding, which does not support signed or unsigned byte immediate values and does support the three packed vector types, V, UV, and VF.
141 Note that three-source instructions do not support immediate operands, that only the second source (src1) of a two-source instruction can be immediate, and that 64-bit immediate values (DF, Q, or UQ) can only be used with one-source instructions.
142 In a two-source instruction with a V (Packed Signed Half-Byte Integer Vector) or UV (Packed Unsigned Half-Byte Integer Vector) immediate operand, the other source operand must have a type compatible with packed word execution mode, one of B, UB, W, or UW.
143 Note that DF (Double Float) and HF (Half Float) have different encodings in the Source Regster Type Encoding and the Source Immediate Type Encoding.
144 The Source Register Type Encoding and Source Immediate Type Encoding lists apply to instructions with one or two source operands.
145 \*****************************************************************************/
146 typedef enum tagSRCIMMTYPE {
147     SRCIMMTYPE_UD = 0x0,   // Unsigned Doubleword
148     SRCIMMTYPE_D  = 0x1,   // signed Doubleword
149     SRCIMMTYPE_UW = 0x2,   // Unsigned Word integer
150     SRCIMMTYPE_W  = 0x3,   // signed Word integer
151     SRCIMMTYPE_UV = 0x4,   // Packed Unsigned Half-Byte Integer Vector, 8 x 4-Bit Unsigned Integer.
152     SRCIMMTYPE_VF = 0x5,   // Packed Restricted Float Vector, 4 x 8-Bit Restricted Precision Floating-Point Number
153     SRCIMMTYPE_V  = 0x6,   // Packed Signed Half-Byte Integer Vector, 8 x 4-Bit Signed Integer
154     SRCIMMTYPE_F  = 0x7,   // single precision Float (32-bit)
155     SRCIMMTYPE_UQ = 0x8,   // Unsigned Quadword integer
156     SRCIMMTYPE_Q  = 0x9,   // signed Quadword integer
157     SRCIMMTYPE_DF = 0xA,   // Double precision Float (64-bit)
158     SRCIMMTYPE_HF = 0xB,   // Half Float (16-bit)
159 } SRCIMMTYPE;
160 
161 /*****************************************************************************\
162 Horizontal Stride
163 This field provides the distance in unit of data elements between two adjacent data elements within a row (horizontal) in the register region for the operand.
164 This field applies to both destination and source operands.
165 This field is not present for an immediate source operand.
166 
167 A horizontal stride of 0 is used for a row that is one-element wide, useful when an instruction repeats a column value or repeats a scalar value. For example, adding a single column to every column in a 2D array or adding a scalar to every element in a 2D array uses HorzStride of 0.
168 A horizontal stride of 1 indicates that elements are adjacent within a row.
169 References to HorzStride in this volume normally reference the value not the encoding, so there are references to HorzStride of 4, which is encoded as 11b.
170 \*****************************************************************************/
171 typedef enum tagHORZSTRIDE {
172     HORZSTRIDE_0_ELEMENTS = 0x0,
173     HORZSTRIDE_1_ELEMENTS = 0x1,
174     HORZSTRIDE_2_ELEMENTS = 0x2,
175     HORZSTRIDE_4_ELEMENTS = 0x3,
176 } HORZSTRIDE;
177 
178 /*****************************************************************************\
179 Addressing Mode
180 This field determines the addressing method of the operand. Normally the destination operand and each source operand each have a distinct addressing mode field.
181 When it is cleared, the register address of the operand is directly provided by bits in the instruction word. It is called a direct register addressing mode. When it is set, the register address of the operand is computed based on the address register value and an address immediate field in the instruction word. This is referred to as a register-indirect register addressing mode.
182 This field applies to the destination operand and the first source operand, src0. Support for src1 is device dependent. See Table XX (Indirect source addressing support available in device hardware) in ISA Execution Environment for details.
183 
184 Programming Notes:
185 Instructions with 3 source operands use Direct Addressing.
186 \*****************************************************************************/
187 typedef enum tagADDRMODE {
188     ADDRMODE_DIRECT   = 0x0,   // 'Direct' register addressing
189     ADDRMODE_INDIRECT = 0x1,   // 'Register-Indirect' (or in short 'Indirect'). Register-indirect register addressing
190 } ADDRMODE;
191 
192 /*****************************************************************************\
193 Source Modifier
194 This field specifies the numeric modification of a source operand. The value of each data element of a source operand can optionally have its absolute value taken and/or its sign inverted prior to delivery to the execution pipe. The absolute value is prior to negate such that a guaranteed negative value can be produced.
195 This field only applies to source operand. It does not apply to destination.
196 This field is not present for an immediate source operand.
197 
198 When used with logic instructions (and, not, or, xor), this field indicates whether the source bits are inverted (bitwise NOT) before delivery to the execution pipe, regardless of the source type.
199 \*****************************************************************************/
200 typedef enum tagSRCMOD {
201     SRCMOD_NO_MODIFICATION = 0x0,
202     SRCMOD_ABS             = 0x1,   // Absolute value,Logic instructions: No modification (This encoding cannot be selected in the assembler syntax)
203     SRCMOD_NEGATE          = 0x2,   // Negate,Logic instructions: Bitwise NOT, inverting the source bits
204     SRCMOD_NEGATE_OF_ABS   = 0x3,   // Negate of the absolute (forced negative value),Logic instructions: No modification (This encoding cannot be selected in the assembler syntax)
205 } SRCMOD;
206 
207 /*****************************************************************************\
208 This field specifies the number of elements in the horizontal dimension of the region for a source operand. This field cannot exceed the ExecSize field of the instruction.
209 This field only applies to source operand. It does not apply to destination.
210 This field is not present for an immediate source operand.
211 
212 Programming Notes:
213 Note that with ExecSize of 32, because the maximum Width is 16, there are at least two rows in a source region.
214 \*****************************************************************************/
215 typedef enum tagWIDTH {
216     WIDTH_1_ELEMENTS  = 0x0,
217     WIDTH_2_ELEMENTS  = 0x1,
218     WIDTH_4_ELEMENTS  = 0x2,
219     WIDTH_8_ELEMENTS  = 0x3,
220     WIDTH_16_ELEMENTS = 0x4,
221 } WIDTH;
222 
223 /*****************************************************************************\
224 Vertical Stride
225 The field provides the vertical stride of the register region in unit of data elements for an operand.
226 Encoding of this field provides values of 0 or powers of 2, ranging from 1 to 32 elements. Larger values are not supported due to the restriction that a source operand must reside within two adjacent 256-bit registers (64 bytes total).
227 Special encoding 1111b (0xF) is only valid when the operand is in register-indirect addressing mode (AddrMode = 1). If this field is set to 0xF, one or more sub-registers of the address registers may be used to compute the addresses. Each address sub-register provides the origin for a row of data element. The number of address sub-registers used is determined by the division of ExecSize of the instruction by the Width fields of the operand.
228 This field only applies to source operand. It does not apply to destination.
229 This field is not present for an immediate source operand.
230 
231 Programming Notes:
232 Note 1: Vertical Stride larger than 32 is not allowed due to the restriction that a source operand must reside within two adjacent 256-bit registers (64 bytes total).
233 
234 Note 2: In  Align16 access mode, as encoding 0xF is reserved, only single-index indirect addressing is supported.
235 
236 Note 3: If indirect address is supported for src1, encoding 0xF is reserved for src1 and only single-index indirect addressing is supported.
237 
238 Note 4: Encoding 0010 applies for QWord-size operands.
239 \*****************************************************************************/
240 typedef enum tagVERTSTRIDE {
241     VERTSTRIDE_0_ELEMENTS      = 0x0,
242     VERTSTRIDE_1_ELEMENT       = 0x1,
243     VERTSTRIDE_2_ELEMENTS      = 0x2,
244     VERTSTRIDE_4_ELEMENTS      = 0x3,
245     VERTSTRIDE_8_ELEMENTS      = 0x4,
246     VERTSTRIDE_16_ELEMENTS     = 0x5,
247     VERTSTRIDE_32_ELEMENTS     = 0x6,
248     VERTSTRIDE_VXH_OR_VX1_MODE = 0xF,
249 } VERTSTRIDE;
250 
251 /*****************************************************************************\
252 Replicate Control
253 This field is only present in three-source instructions, for each of the three source operands. It controls replication of the starting channel to all channels in the execution size. This is applicable to 32b datatypes. 16b and 64b datatypes cannot use the replicate control.
254 \*****************************************************************************/
255 typedef enum tagREPCTRL {
256     REPCTRL_NO_REPLICATION                = 0x0,
257     REPCTRL_REPLICATE_ACROSS_ALL_CHANNELS = 0x1,
258 } REPCTRL;
259 
260 /*****************************************************************************\
261 Destination Dependency Control
262 This field selectively disables destination dependency check and clear for this instruction.
263 When it is set to 00, normal destination dependency control is performed for the instruction and hardware checks for destination hazards to ensure data integrity. Specifically, destination register dependency check is conducted before the instruction is made ready for execution. After the instruction is executed, the destination register scoreboard will be cleared when the destination operands retire.
264 When bit 10 is set (NoDDClr), the destination register scoreboard will NOT be cleared when the destination operands retire.  When bit 11 is set (NoDDChk), hardware does not check for destination register dependency before the instruction is made ready for execution.  NoDDClr and NoDDChk are not mutual exclusive.
265 When this field is not all-zero, hardware does not protect against destination hazards for the instruction.  This is typically used to assemble data in a fine grained fashion (e.g. matrix-vector compute with dot-product instructions), where the data integrity is guaranteed by software based on the intended usage of instruction sequences.
266 \*****************************************************************************/
267 typedef enum tagDEPCTRL {
268     DEPCTRL_NONE            = 0x0,    // Destination dependency checked and cleared (normal)
269     DEPCTRL_NODDCLR         = 0x1,    // Destination dependency checked but not cleared
270     DEPCTRL_NODDCHK         = 0x2,    // Destination dependency not checked but cleared
271     DEPCTRL_NODDCLR_NODDCHK = 0x3,    // Destination dependency not checked and not cleared
272 } DEPCTRL;
273 
274 /*****************************************************************************\
275 Thread Control
276 This field provides explicit control for thread switching.
277 \*****************************************************************************/
278 typedef enum tagTHREADCTRL {
279     THREADCTRL_NORMAL = 0x0,   // Up to the GEN execution units to manage thread switching. This is the normal (and unnamed) mode. In this mode, for example, if the current instruction cannot proceed due to operand dependencies, the EU switches to the next available thread to fill the compute pipe. In another example, if the current instruction is ready to go, however, there is another thread with higher priority that also has an instruction ready, the EU switches to that thread.,            Execution may or may not be preempted by another thread following this instruction.
280     THREADCTRL_ATOMIC = 0x1,   // Prevent any thread switch immediately following this instruction. Always execute the next instruction (which may not be next sequentially if the current instruction branches).,            The next instruction gets highest priority in the thread arbitration for the execution pipelines.
281     THREADCTRL_SWITCH = 0x2,   // A forced thread switch occurs after the current instruction is executed and before the next instruction. In addition, a long delay (longer than the execution pipe latency) is introduced for the current thread. Particularly, the instruction queue of the current thread is flushed after the current instruction is dispatched for execution. ,            Switch is designed primarily as a safety feature in case there are race conditions for certain instructions.,            Force a switch to another thread after this instruction and before the next instruction.
282     THREADCTRL_NOPREEMPT = 0x3,  // A thread wont stop on this instruction even after receiving a pre-emption request.
283 } THREADCTRL;
284 
285 /*****************************************************************************\
286 Execution Size
287 This field determines the number of channels operating in parallel for this instruction.
288 The size cannot exceed the maximum number of channels allowed for the given data type.
289 
290 Programming Notes:
291 Restriction : An operand's Width must be less-than-or-equal to ExecSize
292 \*****************************************************************************/
293 typedef enum tagEXECSIZE {
294     EXECSIZE_1_CHANNEL_SCALAR_OPERATION = 0x0,
295     EXECSIZE_2_CHANNELS                 = 0x1,
296     EXECSIZE_4_CHANNELS                 = 0x2,
297     EXECSIZE_8_CHANNELS                 = 0x3,
298     EXECSIZE_16_CHANNELS                = 0x4,
299     EXECSIZE_32_CHANNELS                = 0x5,
300 } EXECSIZE;
301 
302 typedef enum tagPREDCTRL {
303     PREDCTRL_NO_PREDICATION_NORMAL                       = 0x0,
304     PREDCTRL_SEQUENTIAL_FLAG_CHANNEL_MAPPING             = 0x1,
305     PREDCTRL_ANYV_ANY_FROM_F0_0_F0_1_ON_THE_SAME_CHANNEL = 0x2,
306     PREDCTRL_REPLICATION_SWIZZLE_X                       = 0x2,
307     PREDCTRL_ALLV_ALL_OF_F0_0_F0_1_ON_THE_SAME_CHANNEL   = 0x3,
308     PREDCTRL_REPLICATION_SWIZZLE_Y                       = 0x3,
309     PREDCTRL_ANY2H_ANY_IN_GROUP_OF_2_CHANNELS            = 0x4,
310     PREDCTRL_REPLICATION_SWIZZLE_Z                       = 0x4,
311     PREDCTRL_ALL2H_ALL_IN_GROUP_OF_2_CHANNELS            = 0x5,
312     PREDCTRL_REPLICATION_SWIZZLE_W                       = 0x5,
313     PREDCTRL_ANY4H                                       = 0x6,
314     PREDCTRL_ALL4H                                       = 0x7,
315     PREDCTRL_ANY8H_ANY_IN_GROUP_OF_8_CHANNELS            = 0x8,
316     PREDCTRL_ALL8H_ALL_IN_GROUP_OF_8_CHANNELS            = 0x9,
317     PREDCTRL_ANY16H_ANY_IN_GROUP_OF_16_CHANNELS          = 0xA,
318     PREDCTRL_ALL16H_ALL_IN_GROUP_OF_16_CHANNELS          = 0xB,
319     PREDCTRL_ANY32H_ANY_IN_GROUP_OF_32_CHANNELS          = 0xC,
320     PREDCTRL_ALL32H_ALL_IN_GROUP_OF_32_CHANNELS          = 0xD,
321 } PREDCTRL;
322 
323 /*****************************************************************************\
324 Conditional Modifier
325 This field sets the flag register based on the internal conditional signals output from the execution pipe such as sign, zero, overflow and NaNs, etc.  If this field is set to 0000, no flag registers are updated.  Flag registers are not updated for instructions with embedded compares.
326 This field may also be referred to as the flag destination control field.
327 This field applies to all instructions except send, sendc, and math.
328 \*****************************************************************************/
329 typedef enum tagCONDMODIFIER {
330     CONDMODIFIER_NONE = 0x0,   // Do Not modify Flag Register
331     CONDMODIFIER_E    = 0x1,   // Equal
332     CONDMODIFIER_Z    = 0x1,   // Zero
333     CONDMODIFIER_NE   = 0x2,   // NotEqual
334     CONDMODIFIER_NZ   = 0x2,   // NotZero
335     CONDMODIFIER_G    = 0x3,   // Greater-than
336     CONDMODIFIER_GE   = 0x4,   // Greater-than-or-equal
337     CONDMODIFIER_L    = 0x5,   // Less-than
338     CONDMODIFIER_LE   = 0x6,   // Less-than-or-equal
339     CONDMODIFIER_O    = 0x8,   // Overflow
340     CONDMODIFIER_U    = 0x9,   // Unordered with Computed NaN
341 } CONDMODIFIER;
342 
343 /*****************************************************************************\
344 Quarter Control
345 This field provides explicit control for ARF selection.
346 This field combined with ExecSize determines which channels are used for the ARF registers.
347 Along with NibCtrl, 1/8 DMask/VMask and ARF can be selected.
348 
349 Programming Notes:
350 NibCtrl is only allowed for SIMD4 instructions with a DF (Double Float) source or destination type.
351 \*****************************************************************************/
352 typedef enum tagQTRCTRL {
353     QTRCTRL_1Q = 0x0,   // Use first quarter for DMask/VMask. Use first half for everything else.
354     QTRCTRL_2N = 0x0,   // Use second 1/8th for DMask/VMask and ARF.
355     QTRCTRL_1N = 0x0,   // Use first 1/8th for DMask/VMask and ARF.
356     QTRCTRL_1H = 0x0,   // Use first half for DMask/VMask. Use all channels for everything else.
357     QTRCTRL_4N = 0x1,   // Use fourth 1/8th for DMask/VMask and ARF.
358     QTRCTRL_2Q = 0x1,   // Use second quarter for DMask/VMask. Use second half for everything else.
359     QTRCTRL_3N = 0x1,   // Use third 1/8th for DMask/VMask and ARF.
360     QTRCTRL_2H = 0x2,   // Use second half for DMask/VMask. Use all channels for everything else.
361     QTRCTRL_6N = 0x2,   // Use sixth 1/8th for DMask/VMask and ARF.
362     QTRCTRL_5N = 0x2,   // Use fifth 1/8th for DMask/VMask and ARF.
363     QTRCTRL_3Q = 0x2,   // Use third quarter for DMask/VMask. Use first half for everything else.
364     QTRCTRL_8N = 0x3,   // Use eighth 1/8th for DMask/VMask and ARF.
365     QTRCTRL_4Q = 0x3,   // Use fourth quarter for DMask/VMask. Use second half for everything else.
366     QTRCTRL_7N = 0x3,   // Use seventh 1/8th for DMask/VMask and ARF.
367 } QTRCTRL;
368 
369 /*****************************************************************************\
370 Math Function Control
371 \*****************************************************************************/
372 typedef enum tagFC {
373     FC_INV_RECIPROCAL    = 0x1,
374     FC_LOG               = 0x2,
375     FC_EXP               = 0x3,
376     FC_SQRT              = 0x4,
377     FC_RSQ               = 0x5,
378     FC_SIN               = 0x6,
379     FC_COS               = 0x7,
380     FC_FDIV              = 0x9,
381     FC_POW               = 0xA,
382     FC_INT_DIV_BOTH      = 0xB,   // Return Quotient and Remainder
383     FC_INT_DIV_QUOTIENT  = 0xC,   // Return Quotient Only
384     FC_INT_DIV_REMAINDER = 0xD,   // Return Remainder
385     FC_INVM              = 0xE,
386     FC_RSQRTM            = 0xF,
387 } FC;
388 
389 /*****************************************************************************\
390 The following table lists the assignments (encodings) of the Shared Function and Fixed Function IDs used within the GPE. A Shared Function is a valid target of a message initiated via a 'send' instruction. A Fixed Function is an identifiable unit of the 3D or Media pipeline. Note that the Thread Spawner is both a Shared Function and Fixed Function.
391 Note: The initial intention was to combine these two ID namespaces, so that (theoretically) an agent (such as the Thread Spawner) that served both as a Shared Function and Fixed Function would have a single, unique 4-bit ID encoding. However, this combination is not a requirement of the architecture.
392 
393 Programming Notes:
394 SFID_DP_DC1 is an extension of SFID_DP_DC0 to allow for more message types. They act as a single logical entity.
395 
396 SFID_DP_DC1, SFID_DP_DC2, SFID_DP_DC3 are extensions of SFID_DP_DC0 to allow for more message types. They act as a single logical entity.
397 \*****************************************************************************/
398 typedef enum tagSFID {
399     SFID_SFID_NULL    = 0x0,   // Null
400     SFID_SFID_SAMPLER = 0x2,   // Sampler
401     SFID_SFID_GATEWAY = 0x3,   // Message Gateway
402     SFID_SFID_DP_DC2  = 0x4,   // Data Cache Data Port 2
403     SFID_SFID_DP_RC   = 0x5,   // Render Cache Data Port
404     SFID_SFID_URB     = 0x6,   // URB
405     SFID_SFID_SPAWNER = 0x7,   // Thread Spawner
406     SFID_SFID_VME     = 0x8,   // Video Motion Estimation
407     SFID_SFID_DP_DCRO = 0x9,   // Data Cache Read Only Data Port
408     SFID_SFID_DP_DC0  = 0xA,   // Data Cache Data Port
409     SFID_SFID_PI      = 0xB,   // Pixel Interpolator
410     SFID_SFID_DP_DC1  = 0xC,   // Data Cache Data Port 1
411     SFID_SFID_CRE     = 0xD,   // Check and Refinement Engine
412 } SFID;
413 
414 /*****************************************************************************\
415 Datatype for Ternary Align1 instruction.
416 \*****************************************************************************/
417 typedef enum tagTERNARYALIGN1DATATYPE {
418     TERNARYALIGN1DATATYPE_UD = 0x0,   // Unsigned Doubleword Integer (32-bit).
419     TERNARYALIGN1DATATYPE_HF = 0x0,   // Half Precision Float (16-bit).
420     TERNARYALIGN1DATATYPE_D = 0x1,   // <span style="color: rgb(0, 0, 0); font-family: Arial, sans-serif; line-height: normal;">Signed Doubleword Integer (32-bit).</span>
421     TERNARYALIGN1DATATYPE_F = 0x1,   // Single Precision Float (32-bit).
422     TERNARYALIGN1DATATYPE_UW = 0x2,   // Unsigned Word Integer (16-bit).
423     TERNARYALIGN1DATATYPE_DF = 0x2,   // Double precision Float (64-bit).
424     TERNARYALIGN1DATATYPE_W = 0x3,   // Signed Word Integer (16-bit).
425     TERNARYALIGN1DATATYPE_NF = 0x3,     // Native Precision Float (66-bit)
426     TERNARYALIGN1DATATYPE_UB = 0x4,   // Unsigned Byte Integer (8-bit).
427     TERNARYALIGN1DATATYPE_B = 0x5,   // Signed Byte Integer (8-bit).
428 } TERNARYALIGN1DATATYPE;
429 
430 /*****************************************************************************\
431 Source Vertical Stride is required for regioning/accessing datatypes of varied size. It is one way to obtain a vector of scalars.
432 \*****************************************************************************/
433 typedef enum tagTERNARYALIGN1VERTSTRIDE {
434     TERNARYALIGN1VERTSTRIDE_0_ELEMENTS = 0x0,
435     TERNARYALIGN1VERTSTRIDE_2_ELEMENTS = 0x1,
436     TERNARYALIGN1VERTSTRIDE_4_ELEMENTS = 0x2,
437     TERNARYALIGN1VERTSTRIDE_8_ELEMENTS = 0x3,
438 } TERNARYALIGN1VERTSTRIDE;
439 
440 typedef enum tagSATURATE {
441     SATURATE_NO_DESTINATION_MODIFICATION = 0x0,
442     SATURATE_SAT                         = 0x1,    // Saturate the output
443 } SATURATE;
444 
445 typedef enum tagACCWRCTRL {
446     ACCWRCTRL_DON_T_WRITE_TO_ACC = 0x0,
447     ACCWRCTRL_UPDATE_ACC         = 0x1,    // Write result to the ACC, and destination
448 } ACCWRCTRL;
449 
450 typedef enum tagACCESSMODE {
451     ACCESSMODE_ALIGN1  = 0x0,
452     ACCESSMODE_ALIGN16 = 0x1,
453 } ACCESSMODE;
454 
455 typedef enum tagNIBCTRL {
456     NIBCTRL_ODD  = 0x0,   // Use an odd 1/8th for DMask/VMask and ARF (first, third, fifth, or seventh depending on QtrCtrl).
457     NIBCTRL_EVEN = 0x1,   // Use an even 1/8th for DMask/VMask and ARF (second, fourth, sixth, or eighth depending on QtrCtrl).
458 } NIBCTRL;
459 
460 typedef enum tagPREDINV {
461     PREDINV_POSITIVE = 0x0,   // Positive polarity of predication. Use the predication mask produced by PredCtrl
462     PREDINV_NEGATIVE = 0x1,   // Negative polarity of predication. If PredCtrl is nonzero, invert the predication mask.
463 } PREDINV;
464 
465 
466 typedef enum tagCMPTCTRL {
467     CMPTCTRL_NOCOMPACTION = 0x0,   // No compaction. 128-bit native instruction supporting all instruction options.
468     CMPTCTRL_COMPACTED    = 0x1,   // Compaction is enabled. 64-bit compact instruction supporting only some instruction variations.
469 } CMPTCTRL;
470 
471 typedef enum tagDEBUGCTRL {
472     DEBUGCTRL_NO_BREAKPOINT = 0x0,
473     DEBUGCTRL_BREAKPOINT    = 0x1,
474 } DEBUGCTRL;
475 
476 typedef enum tagEOT {
477     EOT_THREAD_IS_NOT_TERMINATED = 0x0,
478     EOT_EOT                      = 0x1,
479 } EOT;
480 
481 typedef enum tagMASKCTRL {
482     MASKCTRL_NORMAL             = 0x0,
483     MASKCTRL_WRITE_ALL_CHANNELS = 0x1,   // Except channels killed with predication control
484 } MASKCTRL;
485 
486 typedef struct tagEU_INSTRUCTION_CONTROLS_A {
487     __CODEGEN_ACCESS_SPECIFIER_DEFINITION
488     union tagTheStructure {
489         struct tagCommon {
490 
491             /*****************************************************************************\
492             Access Mode. This field determines the operand access for the instruction. It applies to all source and destination operands.
493             When it is cleared (Align1), the instruction uses byte-aligned addressing for source and destination operands. Source swizzle control and destination mask control are not supported.
494             When it is set (Align16), the instruction uses 16-byte-aligned addressing for all source and destination operands. Source swizzle control and destination mask control are supported in this mode.
495             \*****************************************************************************/
496             BYTE Accessmode                   : BITFIELD_BIT(        0); // ACCESSMODE
497 
498             /*****************************************************************************\
499             Destination Dependency Control. This field selectively disables destination dependency check and clear for this instruction.
500             When it is set to 00, normal destination dependency control is performed for the instruction  - hardware checks for destination hazards to ensure data integrity. Specifically, destination register dependency check is conducted before the instruction is made ready for execution. After the instruction is executed, the destination register scoreboard will be cleared when the destination operands retire.
501             When bit 10 is set (NoDDClr), the destination register scoreboard will NOT be cleared when the destination operands retire.  When bit 11 is set (NoDDChk), hardware does not check for destination register dependency before the instruction is made ready for execution.  NoDDClr and NoDDChk are not mutual exclusive.
502             When this field is not all-zero, hardware does not protect against destination hazards for the instruction.  This is typically used to assemble data in a fine grained fashion (e.g. matrix-vector compute with dot-product instructions), where the data integrity is guaranteed by software based on the intended usage of instruction sequences.
503             \*****************************************************************************/
504             BYTE Depctrl                      : BITFIELD_RANGE(  1,  2); // DEPCTRL
505 
506             /*****************************************************************************\
507             Nibble Control. This field is used in some instructions along with QtrCtrl. See the description of QtrCtrl below. NibCtrl is only used for SIMD4 instructions with a DF (Double Float) source or destination.
508 
509             Programming Notes:
510             Note that if eighths are given zero-based indices from 0 to 7, then NibCtrl = 0 indicates even indices and NibCtrl = 1 indicates odd indices.
511             \*****************************************************************************/
512             BYTE Nibctrl                      : BITFIELD_BIT(        3); // NIBCTRL
513 
514             /*****************************************************************************\
515              - Quarter Control. This field provides explicit control for ARF selection.
516             This field combined with NibCtrl and ExecSize determines which channels are used for the ARF registers.
517             \*****************************************************************************/
518             BYTE Qtrctrl                      : BITFIELD_RANGE(  4,  5); // QTRCTRL
519 
520             /*****************************************************************************\
521             Thread Control. This field provides explicit control for thread switching.
522             If this field is set to 00b, it is up to the GEN execution units to manage thread switching. This is the normal (and unnamed) mode. In this mode, for example, if the current instruction cannot proceed due to operand dependencies, the EU switches to the next available thread to fill the compute pipe. In another example, if the current instruction is ready to go, however, there is another thread with higher priority that also has an instruction ready, the EU switches to that thread.
523             If this field is set to Switch, a forced thread switch occurs after the current instruction is executed and before the next instruction. In addition, a long delay (longer than the execution pipe latency) is introduced for the current thread. Particularly, the instruction queue of the current thread is flushed after the current instruction is dispatched for execution. Switch is designed primarily as a safety feature in case there are race conditions for certain instructions.
524             \*****************************************************************************/
525             BYTE ThreadControl                : BITFIELD_RANGE(  6,  7); // THREADCTRL
526             BYTE __CODEGEN_UNIQUE(Overridden) : BITFIELD_RANGE(  8, 12); // Override
527 
528             /*****************************************************************************\
529             This field determines the number of channels operating in parallel for this instruction.  The size cannot exceed the maximum number of channels allowed for the given data type.
530             \*****************************************************************************/
531             BYTE Execsize                     : BITFIELD_RANGE( 13, 15); // EXECSIZE
532         } Common;
533         struct tagPropertyPredicationIsFalse {
534             BYTE __CODEGEN_UNIQUE(Overridden) : BITFIELD_RANGE(  0,  7); // Override
535             BYTE _                            : BITFIELD_RANGE(  8, 11); // PREDCTRL
536             BYTE __CODEGEN_UNIQUE(Reserved)   : BITFIELD_BIT(       12); //
537             BYTE __CODEGEN_UNIQUE(Overridden) : BITFIELD_RANGE( 13, 15); // Override
538         } PropertyPredicationIsFalse;
539         struct tagPropertyPredicationIsTrue {
540             BYTE __CODEGEN_UNIQUE(Overridden) : BITFIELD_RANGE(  0,  7); // Override
541 
542             /*****************************************************************************\
543             This field, together with PredInv, enables and controls the generation of the predication mask for the instruction.  It allows per-channel conditional execution of the instruction based on the content of the selected flag register.  Encoding depends on the access mode.
544             In Align16 access mode, there are eight encodings (including no predication). All encodings are based on group-of-4 predicate bits, including channel sequential, replication swizzles and horizontal any|all operations.  The same configuration is repeated for each group-of-4 execution channels.
545             \*****************************************************************************/
546             BYTE Predctrl                     : BITFIELD_RANGE(  8, 11); // PREDCTRL
547 
548             /*****************************************************************************\
549             This field, together with PredCtrl, enables and controls the generation of the predication mask for the instruction.  When it is set, the predication uses the inverse of the predication bits generated according to setting of Predicate Control. In other BYTEs, effect of PredInv happens after PredCtrl.
550             This field is ignored by hardware if Predicate Control is set to 0000  - there is no predication.
551             PMask is the final predication mask produced by the effects of both fields.
552             \*****************************************************************************/
553             BYTE Predinv                      : BITFIELD_BIT(       12); // PREDINV
554             BYTE __CODEGEN_UNIQUE(Overridden) : BITFIELD_RANGE( 13, 15); // Override
555         } PropertyPredicationIsTrue;
556         BYTE RawData[1];
557     } TheStructure;
558 
559     __CODEGEN_ACCESS_SPECIFIER_METHODS
560 
561     // INITIALIZATION
562     //
InittagEU_INSTRUCTION_CONTROLS_A563     __CODEGEN_INLINE void Init() {
564         TheStructure.RawData[0]           = 0x0;
565         TheStructure.Common.Accessmode    = ACCESSMODE_ALIGN1;
566         TheStructure.Common.Depctrl       = 0x0;
567         TheStructure.Common.Nibctrl       = NIBCTRL_ODD;
568         TheStructure.Common.Qtrctrl       = 0x0;
569         TheStructure.Common.ThreadControl = 0x0;
570         TheStructure.Common.Execsize      = 0x0;
571     }
572 
sInittagEU_INSTRUCTION_CONTROLS_A573     static tagEU_INSTRUCTION_CONTROLS_A sInit() {
574         tagEU_INSTRUCTION_CONTROLS_A state;
575         state.Init();
576         return state;
577     }
578 
579     // ACCESSORS
580     //
GetRawDatatagEU_INSTRUCTION_CONTROLS_A581     __CODEGEN_INLINE BYTE& GetRawData(UINT const index) {
582         return TheStructure.RawData[index];
583     }
584 
GetAccessmodetagEU_INSTRUCTION_CONTROLS_A585     __CODEGEN_INLINE ACCESSMODE GetAccessmode() const {
586         __CODEGEN_GET_MACRO();
587         return (ACCESSMODE)TheStructure.Common.Accessmode;
588     }
589 
SetAccessmodetagEU_INSTRUCTION_CONTROLS_A590     __CODEGEN_INLINE void SetAccessmode(ACCESSMODE AccessmodeValue) {
591         __CODEGEN_SET_MACRO(AccessmodeValue);
592         TheStructure.Common.Accessmode = AccessmodeValue;
593     }
594 
GetDepctrltagEU_INSTRUCTION_CONTROLS_A595     __CODEGEN_INLINE DEPCTRL GetDepctrl() const {
596         __CODEGEN_GET_MACRO();
597         return (DEPCTRL)TheStructure.Common.Depctrl;
598     }
599 
SetDepctrltagEU_INSTRUCTION_CONTROLS_A600     __CODEGEN_INLINE void SetDepctrl(DEPCTRL DepctrlValue) {
601         __CODEGEN_SET_MACRO(DepctrlValue);
602         TheStructure.Common.Depctrl = DepctrlValue;
603     }
604 
GetNibctrltagEU_INSTRUCTION_CONTROLS_A605     __CODEGEN_INLINE NIBCTRL GetNibctrl() const {
606         __CODEGEN_GET_MACRO();
607         return (NIBCTRL)TheStructure.Common.Nibctrl;
608     }
609 
SetNibctrltagEU_INSTRUCTION_CONTROLS_A610     __CODEGEN_INLINE void SetNibctrl(NIBCTRL NibctrlValue) {
611         __CODEGEN_SET_MACRO(NibctrlValue);
612         TheStructure.Common.Nibctrl = NibctrlValue;
613     }
614 
GetQtrctrltagEU_INSTRUCTION_CONTROLS_A615     __CODEGEN_INLINE QTRCTRL GetQtrctrl() const {
616         __CODEGEN_GET_MACRO();
617         return (QTRCTRL)TheStructure.Common.Qtrctrl;
618     }
619 
SetQtrctrltagEU_INSTRUCTION_CONTROLS_A620     __CODEGEN_INLINE void SetQtrctrl(QTRCTRL QtrctrlValue) {
621         __CODEGEN_SET_MACRO(QtrctrlValue);
622         TheStructure.Common.Qtrctrl = QtrctrlValue;
623     }
624 
GetThreadControltagEU_INSTRUCTION_CONTROLS_A625     __CODEGEN_INLINE THREADCTRL GetThreadControl() const {
626         __CODEGEN_GET_MACRO();
627         return (THREADCTRL)TheStructure.Common.ThreadControl;
628     }
629 
SetThreadControltagEU_INSTRUCTION_CONTROLS_A630     __CODEGEN_INLINE void SetThreadControl(THREADCTRL ThreadControlValue) {
631         __CODEGEN_SET_MACRO(ThreadControlValue);
632         TheStructure.Common.ThreadControl = ThreadControlValue;
633     }
634 
GetExecsizetagEU_INSTRUCTION_CONTROLS_A635     __CODEGEN_INLINE EXECSIZE GetExecsize() const {
636         __CODEGEN_GET_MACRO();
637         return (EXECSIZE)TheStructure.Common.Execsize;
638     }
639 
SetExecsizetagEU_INSTRUCTION_CONTROLS_A640     __CODEGEN_INLINE void SetExecsize(EXECSIZE ExecsizeValue) {
641         __CODEGEN_SET_MACRO(ExecsizeValue);
642         TheStructure.Common.Execsize = ExecsizeValue;
643     }
644 
Get_tagEU_INSTRUCTION_CONTROLS_A645     __CODEGEN_INLINE PREDCTRL Get_() const {
646         __CODEGEN_GET_MACRO();
647         return (PREDCTRL)TheStructure.PropertyPredicationIsFalse._;
648     }
649 
Set_tagEU_INSTRUCTION_CONTROLS_A650     __CODEGEN_INLINE void Set_(PREDCTRL _Value) {
651         __CODEGEN_SET_MACRO(_Value);
652         TheStructure.PropertyPredicationIsFalse._ = _Value;
653     }
654 
GetPredctrltagEU_INSTRUCTION_CONTROLS_A655     __CODEGEN_INLINE PREDCTRL GetPredctrl() const {
656         __CODEGEN_GET_MACRO();
657         return (PREDCTRL)TheStructure.PropertyPredicationIsTrue.Predctrl;
658     }
659 
SetPredctrltagEU_INSTRUCTION_CONTROLS_A660     __CODEGEN_INLINE void SetPredctrl(PREDCTRL PredctrlValue) {
661         __CODEGEN_SET_MACRO(PredctrlValue);
662         TheStructure.PropertyPredicationIsTrue.Predctrl = PredctrlValue;
663     }
664 
GetPredinvtagEU_INSTRUCTION_CONTROLS_A665     __CODEGEN_INLINE PREDINV GetPredinv() const {
666         __CODEGEN_GET_MACRO();
667         return (PREDINV)TheStructure.PropertyPredicationIsTrue.Predinv;
668     }
669 
SetPredinvtagEU_INSTRUCTION_CONTROLS_A670     __CODEGEN_INLINE void SetPredinv(PREDINV PredinvValue) {
671         __CODEGEN_SET_MACRO(PredinvValue);
672         TheStructure.PropertyPredicationIsTrue.Predinv = PredinvValue;
673     }
674 
675 } __CODEGEN_ATTRIBUTES_STRUCTURE EU_INSTRUCTION_CONTROLS_A;
676 
677 C_ASSERT(2 == sizeof(EU_INSTRUCTION_CONTROLS_A));
678 
679 typedef struct tagEU_INSTRUCTION_CONTROLS {
680     __CODEGEN_ACCESS_SPECIFIER_DEFINITION
681     union tagTheStructure {
682         struct tagCommon {
683             EU_INSTRUCTION_CONTROLS_A ControlsA;
684             BYTE __CODEGEN_UNIQUE(Overridden) : BITFIELD_RANGE( 16, 19); // Override
685 
686             /*****************************************************************************\
687             AccWrCtrl. This field allows per instruction accumulator write control.
688             \*****************************************************************************/
689             BYTE ControlsB_Accwrctrl          : BITFIELD_BIT(       20); // ACCWRCTRL
690 
691             /*****************************************************************************\
692             Compaction Control
693             Indicates whether the instruction is compacted to the 64-bit compact instruction format. When this bit is set, the 64-bit compact instruction format is used. The EU decodes the compact format using lookup tables internal to the hardware, but documented for use by software tools. Only some instruction variations can be compacted, the variations supported by those lookup tables and the compact format. See EU Compact Instruction Format [DevBDW+] for more information.
694             \*****************************************************************************/
695             BYTE ControlsB_Cmptctrl           : BITFIELD_BIT(       21); // CMPTCTRL
696 
697             /*****************************************************************************\
698             This field allows the insertion of a breakpoint at the current instruction. When the bit is set, hardware automatically stores the current IP in CR register and jumps to the System IP (SIP) BEFORE executing the current instruction.
699             \*****************************************************************************/
700             BYTE ControlsB_Debugctrl          : BITFIELD_BIT(       22); // DEBUGCTRL
701             BYTE __CODEGEN_UNIQUE(Overridden) : BITFIELD_BIT(       23); // Override
702         } Common;
703         struct tagPropertyConditionalModifierIsFalse {
704             BYTE __CODEGEN_UNIQUE(Overridden) : BITFIELD_RANGE(  0, 7); // Override
705             BYTE __CODEGEN_UNIQUE(Overridden) : BITFIELD_RANGE(  8, 15); // Override
706             BYTE __CODEGEN_UNIQUE(Reserved)   : BITFIELD_RANGE( 16, 19); // MBZ
707             BYTE __CODEGEN_UNIQUE(Overridden) : BITFIELD_RANGE( 20, 23); // Override
708         } PropertyConditionalModifierIsFalse;
709         struct tagPropertyConditionalModifierIsTrue {
710 //            BYTE __CODEGEN_UNIQUE(Overridden) : BITFIELD_RANGE(  0, 15); // Override
711             BYTE __CODEGEN_UNIQUE(Overridden) : BITFIELD_RANGE(  0, 7); // Override
712             BYTE __CODEGEN_UNIQUE(Overridden) : BITFIELD_RANGE(  8, 15); // Override
713             /*****************************************************************************\
714             Does not exist for send/sendc/math/branch/break-continue opcodes
715             \*****************************************************************************/
716             BYTE Condmodifier                 : BITFIELD_RANGE( 16, 19); // CONDMODIFIER
717             BYTE __CODEGEN_UNIQUE(Overridden) : BITFIELD_RANGE( 20, 23); // Override
718         } PropertyConditionalModifierIsTrue;
719         struct tagPropertySaturationIsFalse {
720             //BYTE __CODEGEN_UNIQUE(Overridden) : BITFIELD_RANGE(  0, 15); // Override
721             BYTE __CODEGEN_UNIQUE(Overridden) : BITFIELD_RANGE(  0, 7); // Override
722             BYTE __CODEGEN_UNIQUE(Overridden) : BITFIELD_RANGE(  8, 15); // Override
723             BYTE __CODEGEN_UNIQUE(Overridden) : BITFIELD_RANGE(  16, 22); // Override
724             BYTE __CODEGEN_UNIQUE(Reserved)   : BITFIELD_BIT(       23); // MBZ
725         } PropertySaturationIsFalse;
726         struct tagPropertySaturationIsTrue {
727             //BYTE __CODEGEN_UNIQUE(Overridden) : BITFIELD_RANGE(  0, 15); // Override
728             BYTE __CODEGEN_UNIQUE(Overridden) : BITFIELD_RANGE(  0, 7); // Override
729             BYTE __CODEGEN_UNIQUE(Overridden) : BITFIELD_RANGE(  8, 15); // Override
730             BYTE __CODEGEN_UNIQUE(Overridden) : BITFIELD_RANGE(  16, 22); // Override
731 
732             /*****************************************************************************\
733             Enables or disables destination saturation.
734             When it is set, output values to the destination register are saturated. The saturation operation depends on the destination data type. Saturation is the operation that converts any value outside the saturation target range for the data type to the closest value in the target range.
735             For a floating-point destination type, the saturation target range is [0.0, 1.0]. For a floating-point NaN, there is no  -closest value -; any NaN saturates to 0.0. Note that enabling Saturate overrides all of the NaN propagation behaviors described for various numeric instructions. Any floating-point number greater than 1.0, including +INF, saturates to 1.0. Any negative floating-point number, including -INF, saturates to 0.0. Any floating-point number in the range 0.0 to 1.0 is not changed by saturation.
736             For an integer destination type, the maximum range for that type is the saturation target range. For example, the saturation range for B (Signed Byte Integer) is [-128, 127].
737             When Saturate is clear, destination values are not saturated. For example, a wrapped result (modulo) is output to the destination for an overflowed integer value. See the Numeric Data Typessection for information about data types and their ranges.
738             \*****************************************************************************/
739             BYTE ControlsB_Saturate           : BITFIELD_BIT(       23); // SATURATE
740         } PropertySaturationIsTrue;
741         BYTE RawData[3];
742     } TheStructure;
743 
744     __CODEGEN_ACCESS_SPECIFIER_METHODS
745 
746     // INITIALIZATION
747     //
InittagEU_INSTRUCTION_CONTROLS748     __CODEGEN_INLINE void Init() {
749         TheStructure.RawData[0]                 = 0x0;
750         TheStructure.Common.ControlsA.Init();
751         TheStructure.Common.ControlsB_Accwrctrl = ACCWRCTRL_DON_T_WRITE_TO_ACC;
752         TheStructure.Common.ControlsB_Cmptctrl  = CMPTCTRL_NOCOMPACTION;
753         TheStructure.Common.ControlsB_Debugctrl = DEBUGCTRL_NO_BREAKPOINT;
754     }
755 
sInittagEU_INSTRUCTION_CONTROLS756     static tagEU_INSTRUCTION_CONTROLS sInit() {
757         tagEU_INSTRUCTION_CONTROLS state;
758         state.Init();
759         return state;
760     }
761 
762     // ACCESSORS
763     //
GetRawDatatagEU_INSTRUCTION_CONTROLS764     __CODEGEN_INLINE BYTE& GetRawData(UINT const index) {
765         return TheStructure.RawData[index];
766     }
767 
GetControlsAtagEU_INSTRUCTION_CONTROLS768     __CODEGEN_INLINE EU_INSTRUCTION_CONTROLS_A& GetControlsA() {
769         __CODEGEN_GET_MACRO();
770         return TheStructure.Common.ControlsA;
771     }
772 
GetControlsB_AccwrctrltagEU_INSTRUCTION_CONTROLS773     __CODEGEN_INLINE ACCWRCTRL GetControlsB_Accwrctrl() const {
774         __CODEGEN_GET_MACRO();
775         return (ACCWRCTRL)TheStructure.Common.ControlsB_Accwrctrl;
776     }
777 
SetControlsB_AccwrctrltagEU_INSTRUCTION_CONTROLS778     __CODEGEN_INLINE void SetControlsB_Accwrctrl(ACCWRCTRL ControlsB_AccwrctrlValue) {
779         __CODEGEN_SET_MACRO(ControlsB_AccwrctrlValue);
780         TheStructure.Common.ControlsB_Accwrctrl = ControlsB_AccwrctrlValue;
781     }
782 
GetControlsB_CmptctrltagEU_INSTRUCTION_CONTROLS783     __CODEGEN_INLINE CMPTCTRL GetControlsB_Cmptctrl() const {
784         __CODEGEN_GET_MACRO();
785         return (CMPTCTRL)TheStructure.Common.ControlsB_Cmptctrl;
786     }
787 
SetControlsB_CmptctrltagEU_INSTRUCTION_CONTROLS788     __CODEGEN_INLINE void SetControlsB_Cmptctrl(CMPTCTRL ControlsB_CmptctrlValue) {
789         __CODEGEN_SET_MACRO(ControlsB_CmptctrlValue);
790         TheStructure.Common.ControlsB_Cmptctrl = ControlsB_CmptctrlValue;
791     }
792 
GetControlsB_DebugctrltagEU_INSTRUCTION_CONTROLS793     __CODEGEN_INLINE DEBUGCTRL GetControlsB_Debugctrl() const {
794         __CODEGEN_GET_MACRO();
795         return (DEBUGCTRL)TheStructure.Common.ControlsB_Debugctrl;
796     }
797 
SetControlsB_DebugctrltagEU_INSTRUCTION_CONTROLS798     __CODEGEN_INLINE void SetControlsB_Debugctrl(DEBUGCTRL ControlsB_DebugctrlValue) {
799         __CODEGEN_SET_MACRO(ControlsB_DebugctrlValue);
800         TheStructure.Common.ControlsB_Debugctrl = ControlsB_DebugctrlValue;
801     }
802 
GetCondmodifiertagEU_INSTRUCTION_CONTROLS803     __CODEGEN_INLINE CONDMODIFIER GetCondmodifier() const {
804         __CODEGEN_GET_MACRO();
805         return (CONDMODIFIER)TheStructure.PropertyConditionalModifierIsTrue.Condmodifier;
806     }
807 
SetCondmodifiertagEU_INSTRUCTION_CONTROLS808     __CODEGEN_INLINE void SetCondmodifier(CONDMODIFIER CondmodifierValue) {
809         __CODEGEN_SET_MACRO(CondmodifierValue);
810         TheStructure.PropertyConditionalModifierIsTrue.Condmodifier = CondmodifierValue;
811     }
812 
GetControlsB_SaturatetagEU_INSTRUCTION_CONTROLS813     __CODEGEN_INLINE SATURATE GetControlsB_Saturate() const {
814         __CODEGEN_GET_MACRO();
815         return (SATURATE)TheStructure.PropertySaturationIsTrue.ControlsB_Saturate;
816     }
817 
SetControlsB_SaturatetagEU_INSTRUCTION_CONTROLS818     __CODEGEN_INLINE void SetControlsB_Saturate(SATURATE ControlsB_SaturateValue) {
819         __CODEGEN_SET_MACRO(ControlsB_SaturateValue);
820         TheStructure.PropertySaturationIsTrue.ControlsB_Saturate = ControlsB_SaturateValue;
821     }
822 
823 } __CODEGEN_ATTRIBUTES_STRUCTURE EU_INSTRUCTION_CONTROLS;
824 
825 C_ASSERT(3 == sizeof(EU_INSTRUCTION_CONTROLS));
826 
827 typedef struct tagEU_INSTRUCTION_HEADER {
828     __CODEGEN_ACCESS_SPECIFIER_DEFINITION
829     union tagTheStructure {
830         struct tagCommon {
831             BYTE Opcode                     : BITFIELD_RANGE(  0,  6); // EU_OPCODE
832             BYTE __CODEGEN_UNIQUE(Reserved) : BITFIELD_BIT(        7); // MBZ
833             EU_INSTRUCTION_CONTROLS Control;
834         } Common;
835         BYTE RawData[4];
836     } TheStructure;
837 
838     __CODEGEN_ACCESS_SPECIFIER_METHODS
839 
840     // INITIALIZATION
841     //
InittagEU_INSTRUCTION_HEADER842     __CODEGEN_INLINE void Init() {
843         TheStructure.RawData[0]    = 0x0;
844         TheStructure.Common.Opcode = 0x0;
845         TheStructure.RawData[1]    = 0x0;
846         TheStructure.Common.Control.Init();
847     }
848 
sInittagEU_INSTRUCTION_HEADER849     static tagEU_INSTRUCTION_HEADER sInit() {
850         tagEU_INSTRUCTION_HEADER state;
851         state.Init();
852         return state;
853     }
854 
855     // ACCESSORS
856     //
GetRawDatatagEU_INSTRUCTION_HEADER857     __CODEGEN_INLINE BYTE& GetRawData(UINT const index) {
858         return TheStructure.RawData[index];
859     }
860 
GetOpcodetagEU_INSTRUCTION_HEADER861     __CODEGEN_INLINE EU_OPCODE GetOpcode() const {
862         __CODEGEN_GET_MACRO();
863         return (EU_OPCODE)TheStructure.Common.Opcode;
864     }
865 
SetOpcodetagEU_INSTRUCTION_HEADER866     __CODEGEN_INLINE void SetOpcode(EU_OPCODE OpcodeValue) {
867         __CODEGEN_SET_MACRO(OpcodeValue);
868         TheStructure.Common.Opcode = OpcodeValue;
869     }
870 
GetControltagEU_INSTRUCTION_HEADER871     __CODEGEN_INLINE EU_INSTRUCTION_CONTROLS& GetControl() {
872         __CODEGEN_GET_MACRO();
873         return TheStructure.Common.Control;
874     }
875 
876 } __CODEGEN_ATTRIBUTES_STRUCTURE EU_INSTRUCTION_HEADER;
877 
878 C_ASSERT(4 == sizeof(EU_INSTRUCTION_HEADER));
879 
880 typedef struct tagEU_INSTRUCTION_OPERAND_DST_ALIGN1 {
881     __CODEGEN_ACCESS_SPECIFIER_DEFINITION
882     union tagTheStructure {
883         struct tagCommon {
884             WORD __CODEGEN_UNIQUE(Overridden) : BITFIELD_RANGE(  0, 12); // Override
885 
886             /*****************************************************************************\
887             For a send instruction, this field applies to CurrDst. PostDst only uses the register number.
888             \*****************************************************************************/
889             WORD DestinationHorizontalStride  : BITFIELD_RANGE( 13, 14); // HORZSTRIDE
890 
891             /*****************************************************************************\
892             For a send instruction, this field applies to PostDst - the post destination operand. Addressing mode for CurrDst (current destination operand) is fixed as Direct. (See Instruction Reference chapter for CurrDst and PostDst.)
893             \*****************************************************************************/
894             WORD DestinationAddressingMode    : BITFIELD_BIT(       15); // ADDRMODE
895         } Common;
896         struct tagDestinationAddressingModeIsDirect {
897             WORD DestinationSubregisterNumber_DestinationSubRegisterNumber : BITFIELD_RANGE(  0,  4); //
898             WORD DestinationRegisterNumber_DestinationRegisterNumber       : BITFIELD_RANGE(  5, 12); //
899             WORD __CODEGEN_UNIQUE(Overridden)                              : BITFIELD_RANGE( 13, 15); // Override
900         } DestinationAddressingModeIsDirect;
901         struct tagDestinationAddressingModeIsIndirect {
902 
903             /*****************************************************************************\
904             For a send instruction, this field applies to PostDst.
905             \*****************************************************************************/
906             WORD DestinationAddressImmediate                                  : BITFIELD_RANGE(  0,  8); // S8
907             WORD DestinationAddressSubregisterNumber_AddressSubregisterNumber : BITFIELD_RANGE(  9, 12); //
908             WORD __CODEGEN_UNIQUE(Overridden)                                 : BITFIELD_RANGE( 13, 15); // Override
909         } DestinationAddressingModeIsIndirect;
910         WORD RawData[1];
911     } TheStructure;
912 
913     __CODEGEN_ACCESS_SPECIFIER_METHODS
914 
915     // INITIALIZATION
916     //
InittagEU_INSTRUCTION_OPERAND_DST_ALIGN1917     __CODEGEN_INLINE void Init() {
918         TheStructure.RawData[0]                         = 0x0;
919         TheStructure.Common.DestinationHorizontalStride = 0x0;
920         TheStructure.Common.DestinationAddressingMode   = 0x0;
921     }
922 
sInittagEU_INSTRUCTION_OPERAND_DST_ALIGN1923     static tagEU_INSTRUCTION_OPERAND_DST_ALIGN1 sInit() {
924         tagEU_INSTRUCTION_OPERAND_DST_ALIGN1 state;
925         state.Init();
926         return state;
927     }
928 
929     // ACCESSORS
930     //
GetRawDatatagEU_INSTRUCTION_OPERAND_DST_ALIGN1931     __CODEGEN_INLINE __CODEGEN_PACKED WORD& GetRawData(UINT const index) {
932         return TheStructure.RawData[index];
933     }
934 
GetDestinationHorizontalStridetagEU_INSTRUCTION_OPERAND_DST_ALIGN1935     __CODEGEN_INLINE HORZSTRIDE GetDestinationHorizontalStride() const {
936         __CODEGEN_GET_MACRO();
937         return (HORZSTRIDE)TheStructure.Common.DestinationHorizontalStride;
938     }
939 
SetDestinationHorizontalStridetagEU_INSTRUCTION_OPERAND_DST_ALIGN1940     __CODEGEN_INLINE void SetDestinationHorizontalStride(HORZSTRIDE DestinationHorizontalStrideValue) {
941         __CODEGEN_SET_MACRO(DestinationHorizontalStrideValue);
942         TheStructure.Common.DestinationHorizontalStride = DestinationHorizontalStrideValue;
943     }
944 
GetDestinationAddressingModetagEU_INSTRUCTION_OPERAND_DST_ALIGN1945     __CODEGEN_INLINE ADDRMODE GetDestinationAddressingMode() const {
946         __CODEGEN_GET_MACRO();
947         return (ADDRMODE)TheStructure.Common.DestinationAddressingMode;
948     }
949 
SetDestinationAddressingModetagEU_INSTRUCTION_OPERAND_DST_ALIGN1950     __CODEGEN_INLINE void SetDestinationAddressingMode(ADDRMODE DestinationAddressingModeValue) {
951         __CODEGEN_SET_MACRO(DestinationAddressingModeValue);
952         TheStructure.Common.DestinationAddressingMode = DestinationAddressingModeValue;
953     }
954 
GetDestinationSubregisterNumber_DestinationSubRegisterNumbertagEU_INSTRUCTION_OPERAND_DST_ALIGN1955     __CODEGEN_INLINE WORD GetDestinationSubregisterNumber_DestinationSubRegisterNumber() const {
956         __CODEGEN_GET_MACRO();
957         return (WORD)TheStructure.DestinationAddressingModeIsDirect.DestinationSubregisterNumber_DestinationSubRegisterNumber;
958     }
959 
SetDestinationSpecialAcctagEU_INSTRUCTION_OPERAND_DST_ALIGN1960     __CODEGEN_INLINE void SetDestinationSpecialAcc(WORD SpecialAccValue) {
961         __CODEGEN_SET_MACRO(DestinationSubregisterNumber_DestinationSubRegisterNumberValue);
962         TheStructure.DestinationAddressingModeIsDirect.DestinationSubregisterNumber_DestinationSubRegisterNumber = SpecialAccValue;
963     }
964 
SetDestinationSubregisterNumber_DestinationSubRegisterNumbertagEU_INSTRUCTION_OPERAND_DST_ALIGN1965     __CODEGEN_INLINE void SetDestinationSubregisterNumber_DestinationSubRegisterNumber(WORD DestinationSubregisterNumber_DestinationSubRegisterNumberValue) {
966         __CODEGEN_SET_MACRO(DestinationSubregisterNumber_DestinationSubRegisterNumberValue);
967         TheStructure.DestinationAddressingModeIsDirect.DestinationSubregisterNumber_DestinationSubRegisterNumber = DestinationSubregisterNumber_DestinationSubRegisterNumberValue;
968     }
969 
GetDestinationRegisterNumber_DestinationRegisterNumbertagEU_INSTRUCTION_OPERAND_DST_ALIGN1970     __CODEGEN_INLINE WORD GetDestinationRegisterNumber_DestinationRegisterNumber() const {
971         __CODEGEN_GET_MACRO();
972         return (WORD)TheStructure.DestinationAddressingModeIsDirect.DestinationRegisterNumber_DestinationRegisterNumber;
973     }
974 
SetDestinationRegisterNumber_DestinationRegisterNumbertagEU_INSTRUCTION_OPERAND_DST_ALIGN1975     __CODEGEN_INLINE void SetDestinationRegisterNumber_DestinationRegisterNumber(WORD DestinationRegisterNumber_DestinationRegisterNumberValue) {
976         __CODEGEN_SET_MACRO(DestinationRegisterNumber_DestinationRegisterNumberValue);
977         TheStructure.DestinationAddressingModeIsDirect.DestinationRegisterNumber_DestinationRegisterNumber = DestinationRegisterNumber_DestinationRegisterNumberValue;
978     }
979 
GetDestinationAddressImmediatetagEU_INSTRUCTION_OPERAND_DST_ALIGN1980     __CODEGEN_INLINE WORD GetDestinationAddressImmediate() const {
981         __CODEGEN_GET_MACRO();
982         return (WORD)TheStructure.DestinationAddressingModeIsIndirect.DestinationAddressImmediate;
983     }
984 
SetDestinationAddressImmediatetagEU_INSTRUCTION_OPERAND_DST_ALIGN1985     __CODEGEN_INLINE void SetDestinationAddressImmediate(WORD DestinationAddressImmediateValue) {
986         __CODEGEN_SET_MACRO(DestinationAddressImmediateValue);
987         TheStructure.DestinationAddressingModeIsIndirect.DestinationAddressImmediate = DestinationAddressImmediateValue;
988     }
989 
GetDestinationAddressSubregisterNumber_AddressSubregisterNumbertagEU_INSTRUCTION_OPERAND_DST_ALIGN1990     __CODEGEN_INLINE WORD GetDestinationAddressSubregisterNumber_AddressSubregisterNumber() const {
991         __CODEGEN_GET_MACRO();
992         return (WORD)TheStructure.DestinationAddressingModeIsIndirect.DestinationAddressSubregisterNumber_AddressSubregisterNumber;
993     }
994 
SetDestinationAddressSubregisterNumber_AddressSubregisterNumbertagEU_INSTRUCTION_OPERAND_DST_ALIGN1995     __CODEGEN_INLINE void SetDestinationAddressSubregisterNumber_AddressSubregisterNumber(WORD DestinationAddressSubregisterNumber_AddressSubregisterNumberValue) {
996         __CODEGEN_SET_MACRO(DestinationAddressSubregisterNumber_AddressSubregisterNumberValue);
997         TheStructure.DestinationAddressingModeIsIndirect.DestinationAddressSubregisterNumber_AddressSubregisterNumber = DestinationAddressSubregisterNumber_AddressSubregisterNumberValue;
998     }
999 
1000 } __CODEGEN_ATTRIBUTES_STRUCTURE EU_INSTRUCTION_OPERAND_DST_ALIGN1;
1001 
1002 C_ASSERT(2 == sizeof(EU_INSTRUCTION_OPERAND_DST_ALIGN1));
1003 
1004 typedef struct tagEU_INSTRUCTION_OPERAND_DST_ALIGN16 {
1005     __CODEGEN_ACCESS_SPECIFIER_DEFINITION
1006     union tagTheStructure {
1007         struct tagCommon {
1008 
1009             /*****************************************************************************\
1010             For a send instruction, this field applies to the CurrDst
1011             \*****************************************************************************/
1012             WORD DestinationChannelEnable     : BITFIELD_RANGE(  0,  3); // ChanEn[4]
1013             WORD __CODEGEN_UNIQUE(Overridden) : BITFIELD_RANGE(  4, 12); // Override
1014 
1015             /*****************************************************************************\
1016 
1017 
1018             Programming Notes:
1019             Although Dst.HorzStride is a don?t care for Align16, HW needs this to be programmed as ?01?.
1020             \*****************************************************************************/
1021             WORD __CODEGEN_UNIQUE(Reserved)   : BITFIELD_RANGE( 13, 14); //
1022 
1023             /*****************************************************************************\
1024             For a send instruction, this field applies to PostDst - the post destination operand. Addressing mode for CurrDst (current destination operand) is fixed as Direct. (See Instruction Reference chapter for CurrDst and PostDst.)
1025             \*****************************************************************************/
1026             WORD DestinationAddressingMode    : BITFIELD_BIT(       15); // ADDRMODE
1027         } Common;
1028         struct tagDestinationAddressingModeIsDirect {
1029             WORD __CODEGEN_UNIQUE(Overridden)                        : BITFIELD_RANGE(  0,  3); // Override
1030 
1031             /*****************************************************************************\
1032             For a send instruction, this field applies to CurrDst.
1033             \*****************************************************************************/
1034             WORD DestinationSubregisterNumber                        : BITFIELD_BIT(        4); // DstSubRegNum[4:4]
1035             WORD DestinationRegisterNumber_DestinationRegisterNumber : BITFIELD_RANGE(  5, 12); //
1036             WORD __CODEGEN_UNIQUE(Overridden)                        : BITFIELD_RANGE( 13, 15); // Override
1037         } DestinationAddressingModeIsDirect;
1038         struct tagDestinationAddressingModeIsIndirect {
1039             WORD __CODEGEN_UNIQUE(Overridden)                                 : BITFIELD_RANGE(  0,  3); // Override
1040 
1041             /*****************************************************************************\
1042             For a send instruction, this field applies to PostDst
1043             \*****************************************************************************/
1044             WORD DestinationAddressImmediate84                                : BITFIELD_RANGE(  4,  8); // S8[8:4]
1045             WORD DestinationAddressSubregisterNumber_AddressSubregisterNumber : BITFIELD_RANGE(  9, 12); //
1046             WORD __CODEGEN_UNIQUE(Overridden)                                 : BITFIELD_RANGE( 13, 15); // Override
1047         } DestinationAddressingModeIsIndirect;
1048         WORD RawData[1];
1049     } TheStructure;
1050 
1051     __CODEGEN_ACCESS_SPECIFIER_METHODS
1052 
1053     // INITIALIZATION
1054     //
InittagEU_INSTRUCTION_OPERAND_DST_ALIGN161055     __CODEGEN_INLINE void Init() {
1056         TheStructure.RawData[0]                       = 0x0;
1057         TheStructure.Common.DestinationChannelEnable  = 0x0;
1058         TheStructure.Common.DestinationAddressingMode = 0x0;
1059     }
1060 
sInittagEU_INSTRUCTION_OPERAND_DST_ALIGN161061     static tagEU_INSTRUCTION_OPERAND_DST_ALIGN16 sInit() {
1062         tagEU_INSTRUCTION_OPERAND_DST_ALIGN16 state;
1063         state.Init();
1064         return state;
1065     }
1066 
1067     // ACCESSORS
1068     //
GetRawDatatagEU_INSTRUCTION_OPERAND_DST_ALIGN161069     __CODEGEN_INLINE __CODEGEN_PACKED WORD& GetRawData(UINT const index) {
1070         return TheStructure.RawData[index];
1071     }
1072 
GetDestinationChannelEnabletagEU_INSTRUCTION_OPERAND_DST_ALIGN161073     __CODEGEN_INLINE WORD GetDestinationChannelEnable() const {
1074         __CODEGEN_GET_MACRO();
1075         return (WORD)TheStructure.Common.DestinationChannelEnable;
1076     }
1077 
SetDestinationChannelEnabletagEU_INSTRUCTION_OPERAND_DST_ALIGN161078     __CODEGEN_INLINE void SetDestinationChannelEnable(WORD DestinationChannelEnableValue) {
1079         __CODEGEN_SET_MACRO(DestinationChannelEnableValue);
1080         TheStructure.Common.DestinationChannelEnable = DestinationChannelEnableValue;
1081     }
1082 
GetDestinationAddressingModetagEU_INSTRUCTION_OPERAND_DST_ALIGN161083     __CODEGEN_INLINE ADDRMODE GetDestinationAddressingMode() const {
1084         __CODEGEN_GET_MACRO();
1085         return (ADDRMODE)TheStructure.Common.DestinationAddressingMode;
1086     }
1087 
SetDestinationAddressingModetagEU_INSTRUCTION_OPERAND_DST_ALIGN161088     __CODEGEN_INLINE void SetDestinationAddressingMode(ADDRMODE DestinationAddressingModeValue) {
1089         __CODEGEN_SET_MACRO(DestinationAddressingModeValue);
1090         TheStructure.Common.DestinationAddressingMode = DestinationAddressingModeValue;
1091     }
1092 
1093     typedef enum tagDESTINATIONSUBREGISTERNUMBER {
1094         DESTINATIONSUBREGISTERNUMBER_BIT_SHIFT  = 0x4,
1095         DESTINATIONSUBREGISTERNUMBER_ALIGN_SIZE = 0x10,
1096     } DESTINATIONSUBREGISTERNUMBER;
1097 
GetDestinationSubregisterNumbertagEU_INSTRUCTION_OPERAND_DST_ALIGN161098     __CODEGEN_INLINE WORD GetDestinationSubregisterNumber() const {
1099         __CODEGEN_GET_MACRO();
1100         return (WORD)TheStructure.DestinationAddressingModeIsDirect.DestinationSubregisterNumber << DESTINATIONSUBREGISTERNUMBER_BIT_SHIFT;
1101     }
1102 
SetDestinationSubregisterNumbertagEU_INSTRUCTION_OPERAND_DST_ALIGN161103     __CODEGEN_INLINE void SetDestinationSubregisterNumber(WORD DestinationSubregisterNumberValue) {
1104         __CODEGEN_SET_MACRO(DestinationSubregisterNumberValue);
1105         TheStructure.DestinationAddressingModeIsDirect.DestinationSubregisterNumber = DestinationSubregisterNumberValue >> DESTINATIONSUBREGISTERNUMBER_BIT_SHIFT;
1106     }
1107 
GetDestinationRegisterNumber_DestinationRegisterNumbertagEU_INSTRUCTION_OPERAND_DST_ALIGN161108     __CODEGEN_INLINE WORD GetDestinationRegisterNumber_DestinationRegisterNumber() const {
1109         __CODEGEN_GET_MACRO();
1110         return (WORD)TheStructure.DestinationAddressingModeIsDirect.DestinationRegisterNumber_DestinationRegisterNumber;
1111     }
1112 
SetDestinationRegisterNumber_DestinationRegisterNumbertagEU_INSTRUCTION_OPERAND_DST_ALIGN161113     __CODEGEN_INLINE void SetDestinationRegisterNumber_DestinationRegisterNumber(WORD DestinationRegisterNumber_DestinationRegisterNumberValue) {
1114         __CODEGEN_SET_MACRO(DestinationRegisterNumber_DestinationRegisterNumberValue);
1115         TheStructure.DestinationAddressingModeIsDirect.DestinationRegisterNumber_DestinationRegisterNumber = DestinationRegisterNumber_DestinationRegisterNumberValue;
1116     }
1117 
1118     typedef enum tagDESTINATIONADDRESSIMMEDIATE84 {
1119         DESTINATIONADDRESSIMMEDIATE84_BIT_SHIFT  = 0x4,
1120         DESTINATIONADDRESSIMMEDIATE84_ALIGN_SIZE = 0x10,
1121     } DESTINATIONADDRESSIMMEDIATE84;
1122 
GetDestinationAddressImmediate84tagEU_INSTRUCTION_OPERAND_DST_ALIGN161123     __CODEGEN_INLINE WORD GetDestinationAddressImmediate84() const {
1124         __CODEGEN_GET_MACRO();
1125         return (WORD)TheStructure.DestinationAddressingModeIsIndirect.DestinationAddressImmediate84 << DESTINATIONADDRESSIMMEDIATE84_BIT_SHIFT;
1126     }
1127 
SetDestinationAddressImmediate84tagEU_INSTRUCTION_OPERAND_DST_ALIGN161128     __CODEGEN_INLINE void SetDestinationAddressImmediate84(WORD DestinationAddressImmediate84Value) {
1129         __CODEGEN_SET_MACRO(DestinationAddressImmediate84Value);
1130         TheStructure.DestinationAddressingModeIsIndirect.DestinationAddressImmediate84 = DestinationAddressImmediate84Value >> DESTINATIONADDRESSIMMEDIATE84_BIT_SHIFT;
1131     }
1132 
GetDestinationAddressSubregisterNumber_AddressSubregisterNumbertagEU_INSTRUCTION_OPERAND_DST_ALIGN161133     __CODEGEN_INLINE WORD GetDestinationAddressSubregisterNumber_AddressSubregisterNumber() const {
1134         __CODEGEN_GET_MACRO();
1135         return (WORD)TheStructure.DestinationAddressingModeIsIndirect.DestinationAddressSubregisterNumber_AddressSubregisterNumber;
1136     }
1137 
SetDestinationAddressSubregisterNumber_AddressSubregisterNumbertagEU_INSTRUCTION_OPERAND_DST_ALIGN161138     __CODEGEN_INLINE void SetDestinationAddressSubregisterNumber_AddressSubregisterNumber(WORD DestinationAddressSubregisterNumber_AddressSubregisterNumberValue) {
1139         __CODEGEN_SET_MACRO(DestinationAddressSubregisterNumber_AddressSubregisterNumberValue);
1140         TheStructure.DestinationAddressingModeIsIndirect.DestinationAddressSubregisterNumber_AddressSubregisterNumber = DestinationAddressSubregisterNumber_AddressSubregisterNumberValue;
1141     }
1142 
1143 } __CODEGEN_ATTRIBUTES_STRUCTURE EU_INSTRUCTION_OPERAND_DST_ALIGN16;
1144 
1145 C_ASSERT(2 == sizeof(EU_INSTRUCTION_OPERAND_DST_ALIGN16));
1146 
1147 typedef struct tagEU_INSTRUCTION_OPERAND_CONTROLS {
1148     __CODEGEN_ACCESS_SPECIFIER_DEFINITION
1149     union tagTheStructure {
1150         struct tagCommon {
1151             DWORD FlagRegisterNumberSubregisterNumber : BITFIELD_RANGE(  0,  1); //
1152 
1153             /*****************************************************************************\
1154             Mask Control (formerly Write Enable Control). This field determines if the the per channel write enables are used to generate the final write enable. This field should be normally "0".
1155 
1156             Programming Notes:
1157             MaskCtrl = NoMask skips the check for PcIP[n] == ExIP before enabling a channel, as described in the Evaluate Write Enable section.
1158             \*****************************************************************************/
1159             DWORD Maskctrl                            : BITFIELD_BIT(        2); // MASKCTRL
1160             DWORD DestinationRegisterFile             : BITFIELD_RANGE(  3,  4); // REGFILE
1161 
1162             /*****************************************************************************\
1163             This field specifies the numeric data type of the destination operand dst. The bits of the destination operand are interpreted as the identified numeric data type, rather than coerced into a type implied by the operator. For a send instruction, this field applies to the CurrDst  - the current destination operand.
1164             \*****************************************************************************/
1165             DWORD DestinationDataType                 : BITFIELD_RANGE(  5,  8); // DSTTYPE
1166             DWORD Src0Regfile                         : BITFIELD_RANGE(  9, 10); // REGFILE
1167             DWORD __CODEGEN_UNIQUE(Overridden)        : BITFIELD_RANGE( 11, 31); // Override
1168         } Common;
1169         struct tagSrc0RegfileNotImm {
1170             DWORD __CODEGEN_UNIQUE(Overridden) : BITFIELD_RANGE(  0, 10); // Override
1171             DWORD Src0Srctype                  : BITFIELD_RANGE( 11, 14); // SRCTYPE
1172             DWORD __CODEGEN_UNIQUE(Overridden) : BITFIELD_RANGE( 15, 31); // Override
1173         } Src0RegfileNotImm;
1174         struct tagSrc0RegfileIsImm {
1175             DWORD __CODEGEN_UNIQUE(Overridden) : BITFIELD_RANGE(  0, 10); // Override
1176             DWORD Src0Srctype                  : BITFIELD_RANGE( 11, 14); // SRCIMMTYPE
1177             DWORD __CODEGEN_UNIQUE(Overridden) : BITFIELD_RANGE( 15, 31); // Override
1178         } Src0RegfileIsImm;
1179         struct tagDestinationRegisterRegionDestinationAddressingModeIsDirect {
1180             DWORD __CODEGEN_UNIQUE(Overridden) : BITFIELD_RANGE(  0, 14); // Override
1181             DWORD __CODEGEN_UNIQUE(Reserved)   : BITFIELD_BIT(       15); // MBZ
1182             DWORD __CODEGEN_UNIQUE(Overridden) : BITFIELD_RANGE( 16, 31); // Override
1183         } DestinationRegisterRegionDestinationAddressingModeIsDirect;
1184         struct tagDestinationRegisterRegionDestinationAddressingModeIsIndirect {
1185             DWORD __CODEGEN_UNIQUE(Overridden)  : BITFIELD_RANGE(  0, 14); // Override
1186             DWORD DestinationAddressImmediate99 : BITFIELD_BIT(       15); // U1
1187             DWORD __CODEGEN_UNIQUE(Overridden)  : BITFIELD_RANGE( 16, 31); // Override
1188         } DestinationRegisterRegionDestinationAddressingModeIsIndirect;
1189         struct tagStructureEu_Instruction_Controls_AAccessmodeIsAlign16 {
1190             WORD __CODEGEN_UNIQUE(Overridden)  : BITFIELD_RANGE(  0, 15); // Override
1191             EU_INSTRUCTION_OPERAND_DST_ALIGN16 DestinationRegisterRegion;
1192             //EU_INSTRUCTION_OPERAND_DST_ALIGN16 __CODEGEN_UNIQUE(Overridden) : BITFIELD_RANGE( 16, 31); // Override
1193         } StructureEu_Instruction_Controls_AAccessmodeIsAlign16;
1194         struct tagStructureEu_Instruction_Controls_AAccessmodeIsAlign1 {
1195             WORD __CODEGEN_UNIQUE(Overridden)  : BITFIELD_RANGE(  0, 15); // Override
1196             EU_INSTRUCTION_OPERAND_DST_ALIGN1 DestinationRegisterRegion;
1197             //EU_INSTRUCTION_OPERAND_DST_ALIGN1 __CODEGEN_UNIQUE(Overridden) : BITFIELD_RANGE( 16, 31); // Override
1198         } StructureEu_Instruction_Controls_AAccessmodeIsAlign1;
1199         DWORD RawData[1];
1200     } TheStructure;
1201 
1202     __CODEGEN_ACCESS_SPECIFIER_METHODS
1203 
1204     // INITIALIZATION
1205     //
InittagEU_INSTRUCTION_OPERAND_CONTROLS1206     __CODEGEN_INLINE void Init() {
1207         TheStructure.RawData[0]                                 = 0x0;
1208         TheStructure.Common.FlagRegisterNumberSubregisterNumber = 0x0;
1209         TheStructure.Common.Maskctrl                            = MASKCTRL_NORMAL;
1210         TheStructure.Common.DestinationRegisterFile             = 0x0;
1211         TheStructure.Common.DestinationDataType                 = 0x0;
1212         TheStructure.Common.Src0Regfile                         = 0x0;
1213     }
1214 
sInittagEU_INSTRUCTION_OPERAND_CONTROLS1215     static tagEU_INSTRUCTION_OPERAND_CONTROLS sInit() {
1216         tagEU_INSTRUCTION_OPERAND_CONTROLS state;
1217         state.Init();
1218         return state;
1219     }
1220 
1221     // ACCESSORS
1222     //
GetRawDatatagEU_INSTRUCTION_OPERAND_CONTROLS1223     __CODEGEN_INLINE __CODEGEN_PACKED DWORD& GetRawData(UINT const index) {
1224         return TheStructure.RawData[index];
1225     }
1226 
GetFlagRegisterNumberSubregisterNumbertagEU_INSTRUCTION_OPERAND_CONTROLS1227     __CODEGEN_INLINE DWORD GetFlagRegisterNumberSubregisterNumber() const {
1228         __CODEGEN_GET_MACRO();
1229         return (DWORD)TheStructure.Common.FlagRegisterNumberSubregisterNumber;
1230     }
1231 
SetFlagRegisterNumberSubregisterNumbertagEU_INSTRUCTION_OPERAND_CONTROLS1232     __CODEGEN_INLINE void SetFlagRegisterNumberSubregisterNumber(DWORD FlagRegisterNumberSubregisterNumberValue) {
1233         __CODEGEN_SET_MACRO(FlagRegisterNumberSubregisterNumberValue);
1234         TheStructure.Common.FlagRegisterNumberSubregisterNumber = FlagRegisterNumberSubregisterNumberValue;
1235     }
1236 
GetMaskctrltagEU_INSTRUCTION_OPERAND_CONTROLS1237     __CODEGEN_INLINE MASKCTRL GetMaskctrl() const {
1238         __CODEGEN_GET_MACRO();
1239         return (MASKCTRL)TheStructure.Common.Maskctrl;
1240     }
1241 
SetMaskctrltagEU_INSTRUCTION_OPERAND_CONTROLS1242     __CODEGEN_INLINE void SetMaskctrl(MASKCTRL MaskctrlValue) {
1243         __CODEGEN_SET_MACRO(MaskctrlValue);
1244         TheStructure.Common.Maskctrl = MaskctrlValue;
1245     }
1246 
GetDestinationRegisterFiletagEU_INSTRUCTION_OPERAND_CONTROLS1247     __CODEGEN_INLINE REGFILE GetDestinationRegisterFile() const {
1248         __CODEGEN_GET_MACRO();
1249         return (REGFILE)TheStructure.Common.DestinationRegisterFile;
1250     }
1251 
SetDestinationRegisterFiletagEU_INSTRUCTION_OPERAND_CONTROLS1252     __CODEGEN_INLINE void SetDestinationRegisterFile(REGFILE DestinationRegisterFileValue) {
1253         __CODEGEN_SET_MACRO(DestinationRegisterFileValue);
1254         TheStructure.Common.DestinationRegisterFile = DestinationRegisterFileValue;
1255     }
1256 
GetDestinationDataTypetagEU_INSTRUCTION_OPERAND_CONTROLS1257     __CODEGEN_INLINE int GetDestinationDataType() const {
1258         __CODEGEN_GET_MACRO();
1259         return TheStructure.Common.DestinationDataType;
1260     }
1261 
SetDestinationDataTypetagEU_INSTRUCTION_OPERAND_CONTROLS1262     __CODEGEN_INLINE void SetDestinationDataType(int DestinationDataTypeValue) {
1263         __CODEGEN_SET_MACRO(DestinationDataTypeValue);
1264         TheStructure.Common.DestinationDataType = DestinationDataTypeValue;
1265     }
1266 
GetSrc0RegfiletagEU_INSTRUCTION_OPERAND_CONTROLS1267     __CODEGEN_INLINE REGFILE GetSrc0Regfile() const {
1268         __CODEGEN_GET_MACRO();
1269         return (REGFILE)TheStructure.Common.Src0Regfile;
1270     }
1271 
SetSrc0RegfiletagEU_INSTRUCTION_OPERAND_CONTROLS1272     __CODEGEN_INLINE void SetSrc0Regfile(REGFILE Src0RegfileValue) {
1273         __CODEGEN_SET_MACRO(Src0RegfileValue);
1274         TheStructure.Common.Src0Regfile = Src0RegfileValue;
1275     }
1276 
GetSrc0SrctypetagEU_INSTRUCTION_OPERAND_CONTROLS1277     __CODEGEN_INLINE int GetSrc0Srctype() const {
1278         __CODEGEN_GET_MACRO();
1279         return TheStructure.Src0RegfileNotImm.Src0Srctype;
1280     }
1281 
SetSrc0SrctypetagEU_INSTRUCTION_OPERAND_CONTROLS1282     __CODEGEN_INLINE void SetSrc0Srctype(int Src0SrctypeValue) {
1283         __CODEGEN_SET_MACRO(Src0SrctypeValue);
1284         TheStructure.Src0RegfileNotImm.Src0Srctype = Src0SrctypeValue;
1285     }
1286 
GetSrc0Srctype_ImmtagEU_INSTRUCTION_OPERAND_CONTROLS1287     __CODEGEN_INLINE int GetSrc0Srctype_Imm() const {
1288         __CODEGEN_GET_MACRO();
1289         return TheStructure.Src0RegfileIsImm.Src0Srctype;
1290     }
1291 
SetSrc0Srctype_ImmtagEU_INSTRUCTION_OPERAND_CONTROLS1292     __CODEGEN_INLINE void SetSrc0Srctype_Imm(int Src0SrctypeValue) {
1293         __CODEGEN_SET_MACRO(Src0SrctypeValue);
1294         TheStructure.Src0RegfileIsImm.Src0Srctype = Src0SrctypeValue;
1295     }
1296 
GetDestinationAddressImmediate99tagEU_INSTRUCTION_OPERAND_CONTROLS1297     __CODEGEN_INLINE DWORD GetDestinationAddressImmediate99() const {
1298         __CODEGEN_GET_MACRO();
1299         return (DWORD)TheStructure.DestinationRegisterRegionDestinationAddressingModeIsIndirect.DestinationAddressImmediate99;
1300     }
1301 
SetDestinationAddressImmediate99tagEU_INSTRUCTION_OPERAND_CONTROLS1302     __CODEGEN_INLINE void SetDestinationAddressImmediate99(DWORD DestinationAddressImmediate99Value) {
1303         __CODEGEN_SET_MACRO(DestinationAddressImmediate99Value);
1304         TheStructure.DestinationRegisterRegionDestinationAddressingModeIsIndirect.DestinationAddressImmediate99 = DestinationAddressImmediate99Value;
1305     }
1306 
GetDestinationRegisterRegion_Align16tagEU_INSTRUCTION_OPERAND_CONTROLS1307     __CODEGEN_INLINE EU_INSTRUCTION_OPERAND_DST_ALIGN16& GetDestinationRegisterRegion_Align16() {
1308         __CODEGEN_GET_MACRO();
1309         return TheStructure.StructureEu_Instruction_Controls_AAccessmodeIsAlign16.DestinationRegisterRegion;
1310     }
1311 
GetDestinationRegisterRegion_Align1tagEU_INSTRUCTION_OPERAND_CONTROLS1312     __CODEGEN_INLINE EU_INSTRUCTION_OPERAND_DST_ALIGN1& GetDestinationRegisterRegion_Align1() {
1313         __CODEGEN_GET_MACRO();
1314         return TheStructure.StructureEu_Instruction_Controls_AAccessmodeIsAlign1.DestinationRegisterRegion;
1315     }
1316 
SetDestinationAddressingModetagEU_INSTRUCTION_OPERAND_CONTROLS1317     __CODEGEN_INLINE void SetDestinationAddressingMode(ADDRMODE DestinationAddressingModeValue) {
1318 
1319         GetDestinationRegisterRegion_Align1().SetDestinationAddressingMode(DestinationAddressingModeValue);
1320     }
1321 
1322 } __CODEGEN_ATTRIBUTES_STRUCTURE EU_INSTRUCTION_OPERAND_CONTROLS;
1323 
1324 C_ASSERT(4 == sizeof(EU_INSTRUCTION_OPERAND_CONTROLS));
1325 
1326 
1327 /*****************************************************************************\
1328 Single source, immediate
1329 \*****************************************************************************/
1330 typedef union tagEU_INSTRUCTION_SOURCES_IMM32 {
1331     struct tagCommon {
1332         QWORD __CODEGEN_UNIQUE(Overridden) : BITFIELD_RANGE(  0, 24); // Override
1333         QWORD __CODEGEN_UNIQUE(Reserved)   : BITFIELD_RANGE( 25, 31); // MBZ
1334         QWORD Source0Immediate             : BITFIELD_RANGE( 32, 63); //
1335     } Common;
1336     struct tagStructureEu_Instruction_Controls_AAccessmodeIsAlign1AndStructureEu_Instruction_Operand_ControlsSrc0RegfileNotImmAndSource0SourceAddressingModeIsDirect {
1337         QWORD Source0_SourceSubRegisterNumber : BITFIELD_RANGE(  0,  4); //
1338         QWORD Source0_SourceRegisterNumber    : BITFIELD_RANGE(  5, 12); //
1339         QWORD __CODEGEN_UNIQUE(Overridden)    : BITFIELD_RANGE( 13, 63); // Override
1340     } StructureEu_Instruction_Controls_AAccessmodeIsAlign1AndStructureEu_Instruction_Operand_ControlsSrc0RegfileNotImmAndSource0SourceAddressingModeIsDirect;
1341     struct tagStructureEu_Instruction_Controls_AAccessmodeIsAlign1AndStructureEu_Instruction_Operand_ControlsSrc0RegfileNotImmAndSource0SourceAddressingModeIsIndirect {
1342         QWORD Source0_SourceAddressImmediate80 : BITFIELD_RANGE(0, 8); // S9[8:0]
1343         QWORD Source0_AddressSubregisterNumber : BITFIELD_RANGE(9, 12); //
1344         QWORD __CODEGEN_UNIQUE(Overridden)     : BITFIELD_RANGE(13, 30); // Override
1345         QWORD Source0_SourceAddressImmediate9  : BITFIELD_RANGE(31, 31); // S9[9:9]
1346         QWORD __CODEGEN_UNIQUE(Overridden)     : BITFIELD_RANGE(32, 63); // Override
1347     } StructureEu_Instruction_Controls_AAccessmodeIsAlign1AndStructureEu_Instruction_Operand_ControlsSrc0RegfileNotImmAndSource0SourceAddressingModeIsIndirect;
1348     struct tagStructureEu_Instruction_Controls_AAccessmodeIsAlign1AndStructureEu_Instruction_Operand_ControlsSrc0RegfileNotImmAndPropertySourceModifierIsFalse {
1349         QWORD __CODEGEN_UNIQUE(Overridden) : BITFIELD_RANGE(  0, 12); // Override
1350         QWORD __CODEGEN_UNIQUE(Reserved)   : BITFIELD_RANGE( 13, 14); // MBZ
1351         QWORD __CODEGEN_UNIQUE(Overridden) : BITFIELD_RANGE( 15, 63); // Override
1352     } StructureEu_Instruction_Controls_AAccessmodeIsAlign1AndStructureEu_Instruction_Operand_ControlsSrc0RegfileNotImmAndPropertySourceModifierIsFalse;
1353     struct tagStructureEu_Instruction_Controls_AAccessmodeIsAlign1AndStructureEu_Instruction_Operand_ControlsSrc0RegfileNotImmAndPropertySourceModifierIsTrue {
1354         QWORD __CODEGEN_UNIQUE(Overridden) : BITFIELD_RANGE(  0, 12); // Override
1355         QWORD Source0_SourceModifier       : BITFIELD_RANGE( 13, 14); // SRCMOD
1356         QWORD __CODEGEN_UNIQUE(Overridden) : BITFIELD_RANGE( 15, 63); // Override
1357     } StructureEu_Instruction_Controls_AAccessmodeIsAlign1AndStructureEu_Instruction_Operand_ControlsSrc0RegfileNotImmAndPropertySourceModifierIsTrue;
1358     struct tagStructureEu_Instruction_Controls_AAccessmodeIsAlign1AndStructureEu_Instruction_Operand_ControlsSrc0RegfileNotImm {
1359         QWORD __CODEGEN_UNIQUE(Overridden)   : BITFIELD_RANGE(  0, 14); // Override
1360         QWORD Source0_SourceAddressingMode   : BITFIELD_BIT(       15); // ADDRMODE
1361         QWORD Source0_SourceHorizontalStride : BITFIELD_RANGE( 16, 17); // HORZSTRIDE
1362         QWORD Source0_SourceWidth            : BITFIELD_RANGE( 18, 20); // WIDTH
1363         QWORD Source0_SourceVerticalStride   : BITFIELD_RANGE( 21, 24); // VERTSTRIDE
1364         QWORD __CODEGEN_UNIQUE(Overridden)   : BITFIELD_RANGE( 25, 63); // Override
1365     } StructureEu_Instruction_Controls_AAccessmodeIsAlign1AndStructureEu_Instruction_Operand_ControlsSrc0RegfileNotImm;
1366     struct tagStructureEu_Instruction_Controls_AAccessmodeIsAlign16AndStructureEu_Instruction_Operand_ControlsSrc0RegfileNotImm {
1367         QWORD Source0_SourceChannelSelect30 : BITFIELD_RANGE(  0,  3); // ChanSel[4][3:0]
1368         QWORD __CODEGEN_UNIQUE(Overridden)  : BITFIELD_RANGE(  4, 14); // Override
1369         QWORD Source0_SourceAddressingMode  : BITFIELD_BIT(       15); // ADDRMODE
1370         QWORD Source0_SourceChannelSelect74 : BITFIELD_RANGE( 16, 19); // ChanSel[4][7:4]
1371         QWORD __CODEGEN_UNIQUE(Reserved)    : BITFIELD_BIT(       20); // MBZ
1372         QWORD Source0_SourceVerticalStride  : BITFIELD_RANGE( 21, 24); // VERTSTRIDE
1373         QWORD __CODEGEN_UNIQUE(Overridden)  : BITFIELD_RANGE( 25, 63); // Override
1374     } StructureEu_Instruction_Controls_AAccessmodeIsAlign16AndStructureEu_Instruction_Operand_ControlsSrc0RegfileNotImm;
1375     struct tagStructureEu_Instruction_Controls_AAccessmodeIsAlign16AndStructureEu_Instruction_Operand_ControlsSrc0RegfileNotImmAndSource0SourceAddressingModeIsDirect {
1376         QWORD __CODEGEN_UNIQUE(Overridden)      : BITFIELD_RANGE(  0,  3); // Override
1377         QWORD Source0_SourceSubregisterNumber44 : BITFIELD_BIT(        4); // SrcSubRegNum[4:4]
1378         QWORD Source0_SourceRegisterNumber      : BITFIELD_RANGE(  5, 12); //
1379         QWORD __CODEGEN_UNIQUE(Overridden)      : BITFIELD_RANGE( 13, 63); // Override
1380     } StructureEu_Instruction_Controls_AAccessmodeIsAlign16AndStructureEu_Instruction_Operand_ControlsSrc0RegfileNotImmAndSource0SourceAddressingModeIsDirect;
1381     struct tagStructureEu_Instruction_Controls_AAccessmodeIsAlign16AndStructureEu_Instruction_Operand_ControlsSrc0RegfileNotImmAndSource0SourceAddressingModeIsIndirect {
1382         QWORD __CODEGEN_UNIQUE(Overridden)     : BITFIELD_RANGE(  0,  3); // Override
1383         QWORD Source0_SourceAddressImmediate84 : BITFIELD_RANGE(  4,  8); // S9[8:4]
1384         QWORD Source0_AddressSubregisterNumber : BITFIELD_RANGE(  9, 12); //
1385         QWORD __CODEGEN_UNIQUE(Overridden)     : BITFIELD_RANGE( 13, 63); // Override
1386     } StructureEu_Instruction_Controls_AAccessmodeIsAlign16AndStructureEu_Instruction_Operand_ControlsSrc0RegfileNotImmAndSource0SourceAddressingModeIsIndirect;
1387     struct tagStructureEu_Instruction_Controls_AAccessmodeIsAlign16AndStructureEu_Instruction_Operand_ControlsSrc0RegfileNotImmAndPropertySourceModifierIsFalse {
1388         QWORD __CODEGEN_UNIQUE(Overridden) : BITFIELD_RANGE(  0, 12); // Override
1389         QWORD __CODEGEN_UNIQUE(Reserved)   : BITFIELD_RANGE( 13, 14); // MBZ
1390         QWORD __CODEGEN_UNIQUE(Overridden) : BITFIELD_RANGE( 15, 63); // Override
1391     } StructureEu_Instruction_Controls_AAccessmodeIsAlign16AndStructureEu_Instruction_Operand_ControlsSrc0RegfileNotImmAndPropertySourceModifierIsFalse;
1392     struct tagStructureEu_Instruction_Controls_AAccessmodeIsAlign16AndStructureEu_Instruction_Operand_ControlsSrc0RegfileNotImmAndPropertySourceModifierIsTrue {
1393         QWORD __CODEGEN_UNIQUE(Overridden) : BITFIELD_RANGE(  0, 12); // Override
1394         QWORD Source0_SourceModifier       : BITFIELD_RANGE( 13, 14); // SRCMOD
1395         QWORD __CODEGEN_UNIQUE(Overridden) : BITFIELD_RANGE( 15, 63); // Override
1396     } StructureEu_Instruction_Controls_AAccessmodeIsAlign16AndStructureEu_Instruction_Operand_ControlsSrc0RegfileNotImmAndPropertySourceModifierIsTrue;
1397     DWORD RawData[2];
1398 
1399     // INITIALIZATION
1400     //
Init()1401     __CODEGEN_INLINE void Init() {
1402         RawData[0]              = 0x0;
1403         RawData[1]              = 0x0;
1404         Common.Source0Immediate = 0x0;
1405     }
1406 
sInit()1407     static tagEU_INSTRUCTION_SOURCES_IMM32 sInit() {
1408         tagEU_INSTRUCTION_SOURCES_IMM32 state;
1409         state.Init();
1410         return state;
1411     }
1412 
1413     // ACCESSORS
1414     //
GetDWord(UINT const index)1415     __CODEGEN_INLINE __CODEGEN_PACKED DWORD& GetDWord(UINT const index) {
1416         return RawData[index];
1417     }
1418 
1419     static size_t CalculateSize(UINT const entryCount = 0) {
1420         return 0;
1421     }
1422 
GetSize()1423     __CODEGEN_INLINE size_t GetSize() {
1424         return 0;
1425     }
1426 
GetSource0Immediate()1427     __CODEGEN_INLINE QWORD GetSource0Immediate() {
1428         __CODEGEN_GET_MACRO();
1429         return (QWORD)Common.Source0Immediate;
1430     }
1431 
SetSource0Immediate(QWORD Source0ImmediateValue)1432     __CODEGEN_INLINE void SetSource0Immediate(QWORD Source0ImmediateValue) {
1433         __CODEGEN_SET_MACRO(Source0ImmediateValue);
1434         Common.Source0Immediate = Source0ImmediateValue;
1435     }
1436 
GetSource0_SourceSubRegisterNumber()1437     __CODEGEN_INLINE QWORD GetSource0_SourceSubRegisterNumber() {
1438         __CODEGEN_GET_MACRO();
1439         return (QWORD)StructureEu_Instruction_Controls_AAccessmodeIsAlign1AndStructureEu_Instruction_Operand_ControlsSrc0RegfileNotImmAndSource0SourceAddressingModeIsDirect.Source0_SourceSubRegisterNumber;
1440     }
1441 
SetSource0_SourceSubRegisterNumber(QWORD Source0_SourceSubRegisterNumberValue)1442     __CODEGEN_INLINE void SetSource0_SourceSubRegisterNumber(QWORD Source0_SourceSubRegisterNumberValue) {
1443         __CODEGEN_SET_MACRO(Source0_SourceSubRegisterNumberValue);
1444         StructureEu_Instruction_Controls_AAccessmodeIsAlign1AndStructureEu_Instruction_Operand_ControlsSrc0RegfileNotImmAndSource0SourceAddressingModeIsDirect.Source0_SourceSubRegisterNumber = Source0_SourceSubRegisterNumberValue;
1445     }
1446 
GetSource0_SourceRegisterNumber()1447     __CODEGEN_INLINE QWORD GetSource0_SourceRegisterNumber() {
1448         __CODEGEN_GET_MACRO();
1449         return (QWORD)StructureEu_Instruction_Controls_AAccessmodeIsAlign1AndStructureEu_Instruction_Operand_ControlsSrc0RegfileNotImmAndSource0SourceAddressingModeIsDirect.Source0_SourceRegisterNumber;
1450     }
1451 
SetSource0_SourceRegisterNumber(QWORD Source0_SourceRegisterNumber_0Value)1452     __CODEGEN_INLINE void SetSource0_SourceRegisterNumber(QWORD Source0_SourceRegisterNumber_0Value) {
1453         __CODEGEN_SET_MACRO(Source0_SourceRegisterNumber_0Value);
1454         StructureEu_Instruction_Controls_AAccessmodeIsAlign1AndStructureEu_Instruction_Operand_ControlsSrc0RegfileNotImmAndSource0SourceAddressingModeIsDirect.Source0_SourceRegisterNumber = Source0_SourceRegisterNumber_0Value;
1455     }
1456 
GetSource0_SourceAddressImmediate80()1457     __CODEGEN_INLINE QWORD GetSource0_SourceAddressImmediate80() {
1458         __CODEGEN_GET_MACRO();
1459         return (QWORD)StructureEu_Instruction_Controls_AAccessmodeIsAlign1AndStructureEu_Instruction_Operand_ControlsSrc0RegfileNotImmAndSource0SourceAddressingModeIsIndirect.Source0_SourceAddressImmediate80;
1460     }
1461 
SetSource0_SourceAddressImmediate80(QWORD Source0_SourceAddressImmediate80Value)1462     __CODEGEN_INLINE void SetSource0_SourceAddressImmediate80(QWORD Source0_SourceAddressImmediate80Value) {
1463         __CODEGEN_SET_MACRO(Source0_SourceAddressImmediate80Value);
1464         StructureEu_Instruction_Controls_AAccessmodeIsAlign1AndStructureEu_Instruction_Operand_ControlsSrc0RegfileNotImmAndSource0SourceAddressingModeIsIndirect.Source0_SourceAddressImmediate80 = Source0_SourceAddressImmediate80Value;
1465     }
1466 
SetSource0_SourceAddressImmediate9(QWORD Source0_SourceAddressImmediate9Value)1467     __CODEGEN_INLINE void SetSource0_SourceAddressImmediate9(QWORD Source0_SourceAddressImmediate9Value) {
1468         __CODEGEN_SET_MACRO(Source0_SourceAddressImmediate9Value);
1469         StructureEu_Instruction_Controls_AAccessmodeIsAlign1AndStructureEu_Instruction_Operand_ControlsSrc0RegfileNotImmAndSource0SourceAddressingModeIsIndirect.Source0_SourceAddressImmediate9 = Source0_SourceAddressImmediate9Value;
1470     }
GetSource0_AddressSubregisterNumber_0()1471     __CODEGEN_INLINE QWORD GetSource0_AddressSubregisterNumber_0() {
1472         __CODEGEN_GET_MACRO();
1473         return (QWORD)StructureEu_Instruction_Controls_AAccessmodeIsAlign1AndStructureEu_Instruction_Operand_ControlsSrc0RegfileNotImmAndSource0SourceAddressingModeIsIndirect.Source0_AddressSubregisterNumber;
1474     }
1475 
SetSource0_AddressSubregisterNumber_0(QWORD Source0_AddressSubregisterNumber_0Value)1476     __CODEGEN_INLINE void SetSource0_AddressSubregisterNumber_0(QWORD Source0_AddressSubregisterNumber_0Value) {
1477         __CODEGEN_SET_MACRO(Source0_AddressSubregisterNumber_0Value);
1478         StructureEu_Instruction_Controls_AAccessmodeIsAlign1AndStructureEu_Instruction_Operand_ControlsSrc0RegfileNotImmAndSource0SourceAddressingModeIsIndirect.Source0_AddressSubregisterNumber = Source0_AddressSubregisterNumber_0Value;
1479     }
1480 
1481     //TODO: disabled, does not compile
1482     //__CODEGEN_INLINE SRCMOD GetSource0_SourceModifier_0() {
1483     //    __CODEGEN_GET_MACRO();
1484     //    return (SRCMOD)StructureEu_Instruction_Controls_AAccessmodeIsAlign1AndStructureEu_Instruction_Operand_ControlsSrc0RegfileNotImmAndPropertySourceModifierIsTrue.Source0_SourceModifier_0;
1485     //}
1486     //
1487     //__CODEGEN_INLINE void SetSource0_SourceModifier_0(SRCMOD Source0_SourceModifier_0Value) {
1488     //    __CODEGEN_SET_MACRO(Source0_SourceModifier_0Value);
1489     //    StructureEu_Instruction_Controls_AAccessmodeIsAlign1AndStructureEu_Instruction_Operand_ControlsSrc0RegfileNotImmAndPropertySourceModifierIsTrue.Source0_SourceModifier = Source0_SourceModifier_0Value;
1490     //}
1491 
GetSource0_SourceAddressingMode_0()1492     __CODEGEN_INLINE ADDRMODE GetSource0_SourceAddressingMode_0() {
1493         __CODEGEN_GET_MACRO();
1494         return (ADDRMODE)StructureEu_Instruction_Controls_AAccessmodeIsAlign1AndStructureEu_Instruction_Operand_ControlsSrc0RegfileNotImm.Source0_SourceAddressingMode;
1495     }
1496 
SetSource0_SourceAddressingMode_0(ADDRMODE Source0_SourceAddressingMode_0Value)1497     __CODEGEN_INLINE void SetSource0_SourceAddressingMode_0(ADDRMODE Source0_SourceAddressingMode_0Value) {
1498         __CODEGEN_SET_MACRO(Source0_SourceAddressingMode_0Value);
1499         StructureEu_Instruction_Controls_AAccessmodeIsAlign1AndStructureEu_Instruction_Operand_ControlsSrc0RegfileNotImm.Source0_SourceAddressingMode = Source0_SourceAddressingMode_0Value;
1500     }
1501 
GetSource0_SourceHorizontalStride()1502     __CODEGEN_INLINE HORZSTRIDE GetSource0_SourceHorizontalStride() {
1503         __CODEGEN_GET_MACRO();
1504         return (HORZSTRIDE)StructureEu_Instruction_Controls_AAccessmodeIsAlign1AndStructureEu_Instruction_Operand_ControlsSrc0RegfileNotImm.Source0_SourceHorizontalStride;
1505     }
1506 
SetSource0_SourceHorizontalStride(HORZSTRIDE Source0_SourceHorizontalStrideValue)1507     __CODEGEN_INLINE void SetSource0_SourceHorizontalStride(HORZSTRIDE Source0_SourceHorizontalStrideValue) {
1508         __CODEGEN_SET_MACRO(Source0_SourceHorizontalStrideValue);
1509         StructureEu_Instruction_Controls_AAccessmodeIsAlign1AndStructureEu_Instruction_Operand_ControlsSrc0RegfileNotImm.Source0_SourceHorizontalStride = Source0_SourceHorizontalStrideValue;
1510     }
1511 
GetSource0_SourceWidth()1512     __CODEGEN_INLINE WIDTH GetSource0_SourceWidth() {
1513         __CODEGEN_GET_MACRO();
1514         return (WIDTH)StructureEu_Instruction_Controls_AAccessmodeIsAlign1AndStructureEu_Instruction_Operand_ControlsSrc0RegfileNotImm.Source0_SourceWidth;
1515     }
1516 
SetSource0_SourceWidth(WIDTH Source0_SourceWidthValue)1517     __CODEGEN_INLINE void SetSource0_SourceWidth(WIDTH Source0_SourceWidthValue) {
1518         __CODEGEN_SET_MACRO(Source0_SourceWidthValue);
1519         StructureEu_Instruction_Controls_AAccessmodeIsAlign1AndStructureEu_Instruction_Operand_ControlsSrc0RegfileNotImm.Source0_SourceWidth = Source0_SourceWidthValue;
1520     }
1521 
GetSource0_SourceVerticalStride()1522     __CODEGEN_INLINE VERTSTRIDE GetSource0_SourceVerticalStride() {
1523         __CODEGEN_GET_MACRO();
1524         return (VERTSTRIDE)StructureEu_Instruction_Controls_AAccessmodeIsAlign1AndStructureEu_Instruction_Operand_ControlsSrc0RegfileNotImm.Source0_SourceVerticalStride;
1525     }
1526 
SetSource0_SourceVerticalStride(VERTSTRIDE Source0_SourceVerticalStride_0Value)1527     __CODEGEN_INLINE void SetSource0_SourceVerticalStride(VERTSTRIDE Source0_SourceVerticalStride_0Value) {
1528         __CODEGEN_SET_MACRO(Source0_SourceVerticalStride_0Value);
1529         StructureEu_Instruction_Controls_AAccessmodeIsAlign1AndStructureEu_Instruction_Operand_ControlsSrc0RegfileNotImm.Source0_SourceVerticalStride = Source0_SourceVerticalStride_0Value;
1530     }
1531 
GetSource0_SourceChannelSelect30()1532     __CODEGEN_INLINE QWORD GetSource0_SourceChannelSelect30() {
1533         __CODEGEN_GET_MACRO();
1534         return (QWORD)StructureEu_Instruction_Controls_AAccessmodeIsAlign16AndStructureEu_Instruction_Operand_ControlsSrc0RegfileNotImm.Source0_SourceChannelSelect30;
1535     }
1536 
SetSource0_SourceChannelSelect30(QWORD Source0_SourceChannelSelect30Value)1537     __CODEGEN_INLINE void SetSource0_SourceChannelSelect30(QWORD Source0_SourceChannelSelect30Value) {
1538         __CODEGEN_SET_MACRO(Source0_SourceChannelSelect30Value);
1539         StructureEu_Instruction_Controls_AAccessmodeIsAlign16AndStructureEu_Instruction_Operand_ControlsSrc0RegfileNotImm.Source0_SourceChannelSelect30 = Source0_SourceChannelSelect30Value;
1540     }
1541 
GetSource0_SourceAddressingMode_1()1542     __CODEGEN_INLINE ADDRMODE GetSource0_SourceAddressingMode_1() {
1543         __CODEGEN_GET_MACRO();
1544         return (ADDRMODE)StructureEu_Instruction_Controls_AAccessmodeIsAlign16AndStructureEu_Instruction_Operand_ControlsSrc0RegfileNotImm.Source0_SourceAddressingMode;
1545     }
1546 
SetSource0_SourceAddressingMode_1(ADDRMODE Source0_SourceAddressingMode_1Value)1547     __CODEGEN_INLINE void SetSource0_SourceAddressingMode_1(ADDRMODE Source0_SourceAddressingMode_1Value) {
1548         __CODEGEN_SET_MACRO(Source0_SourceAddressingMode_1Value);
1549         StructureEu_Instruction_Controls_AAccessmodeIsAlign16AndStructureEu_Instruction_Operand_ControlsSrc0RegfileNotImm.Source0_SourceAddressingMode = Source0_SourceAddressingMode_1Value;
1550     }
1551 
GetSource0_SourceChannelSelect74()1552     __CODEGEN_INLINE QWORD GetSource0_SourceChannelSelect74() {
1553         __CODEGEN_GET_MACRO();
1554         return (QWORD)StructureEu_Instruction_Controls_AAccessmodeIsAlign16AndStructureEu_Instruction_Operand_ControlsSrc0RegfileNotImm.Source0_SourceChannelSelect74 << 4;
1555     }
1556 
SetSource0_SourceChannelSelect74(QWORD Source0_SourceChannelSelect74Value)1557     __CODEGEN_INLINE void SetSource0_SourceChannelSelect74(QWORD Source0_SourceChannelSelect74Value) {
1558         __CODEGEN_SET_MACRO(Source0_SourceChannelSelect74Value);
1559         StructureEu_Instruction_Controls_AAccessmodeIsAlign16AndStructureEu_Instruction_Operand_ControlsSrc0RegfileNotImm.Source0_SourceChannelSelect74 = Source0_SourceChannelSelect74Value >> 4;
1560     }
1561 
GetSource0_SourceSubregisterNumber44()1562     __CODEGEN_INLINE QWORD GetSource0_SourceSubregisterNumber44() {
1563         __CODEGEN_GET_MACRO();
1564         return (QWORD)StructureEu_Instruction_Controls_AAccessmodeIsAlign16AndStructureEu_Instruction_Operand_ControlsSrc0RegfileNotImmAndSource0SourceAddressingModeIsDirect.Source0_SourceSubregisterNumber44 << 4;
1565     }
1566 
SetSource0_SourceSubregisterNumber44(QWORD Source0_SourceSubregisterNumber44Value)1567     __CODEGEN_INLINE void SetSource0_SourceSubregisterNumber44(QWORD Source0_SourceSubregisterNumber44Value) {
1568         __CODEGEN_SET_MACRO(Source0_SourceSubregisterNumber44Value);
1569         StructureEu_Instruction_Controls_AAccessmodeIsAlign16AndStructureEu_Instruction_Operand_ControlsSrc0RegfileNotImmAndSource0SourceAddressingModeIsDirect.Source0_SourceSubregisterNumber44 = Source0_SourceSubregisterNumber44Value >> 4;
1570     }
1571 
GetSource0_SourceAddressImmediate84()1572     __CODEGEN_INLINE QWORD GetSource0_SourceAddressImmediate84() {
1573         __CODEGEN_GET_MACRO();
1574         return (QWORD)StructureEu_Instruction_Controls_AAccessmodeIsAlign16AndStructureEu_Instruction_Operand_ControlsSrc0RegfileNotImmAndSource0SourceAddressingModeIsIndirect.Source0_SourceAddressImmediate84 << 4;
1575     }
1576 
SetSource0_SourceAddressImmediate84(QWORD Source0_SourceAddressImmediate84Value)1577     __CODEGEN_INLINE void SetSource0_SourceAddressImmediate84(QWORD Source0_SourceAddressImmediate84Value) {
1578         __CODEGEN_SET_MACRO(Source0_SourceAddressImmediate84Value);
1579         StructureEu_Instruction_Controls_AAccessmodeIsAlign16AndStructureEu_Instruction_Operand_ControlsSrc0RegfileNotImmAndSource0SourceAddressingModeIsIndirect.Source0_SourceAddressImmediate84 = Source0_SourceAddressImmediate84Value >> 4;
1580     }
1581 
GetSource0_SourceModifier()1582     __CODEGEN_INLINE SRCMOD GetSource0_SourceModifier() {
1583         __CODEGEN_GET_MACRO();
1584         return (SRCMOD)StructureEu_Instruction_Controls_AAccessmodeIsAlign16AndStructureEu_Instruction_Operand_ControlsSrc0RegfileNotImmAndPropertySourceModifierIsTrue.Source0_SourceModifier;
1585     }
1586 
SetSource0_SourceModifier(SRCMOD Source0_SourceModifier_1Value)1587     __CODEGEN_INLINE void SetSource0_SourceModifier(SRCMOD Source0_SourceModifier_1Value) {
1588         __CODEGEN_SET_MACRO(Source0_SourceModifier_1Value);
1589         StructureEu_Instruction_Controls_AAccessmodeIsAlign16AndStructureEu_Instruction_Operand_ControlsSrc0RegfileNotImmAndPropertySourceModifierIsTrue.Source0_SourceModifier = Source0_SourceModifier_1Value;
1590     }
1591 
1592 } __CODEGEN_ATTRIBUTES_STRUCTURE EU_INSTRUCTION_SOURCES_IMM32;
1593 
1594 C_ASSERT(8 == sizeof(EU_INSTRUCTION_SOURCES_IMM32));
1595 
1596 /*****************************************************************************\
1597 Single source, register
1598 \*****************************************************************************/
1599 typedef union tagEU_INSTRUCTION_SOURCES_REG {
1600     struct tagCommon {
1601         QWORD __CODEGEN_UNIQUE(Overridden) : BITFIELD_RANGE(  0, 24); // Override
1602         QWORD __CODEGEN_UNIQUE(Reserved)   : BITFIELD_RANGE( 25, 63); // MBZ
1603     } Common;
1604     struct tagStructureEu_Instruction_Controls_AAccessmodeIsAlign1AndStructureEu_Instruction_Operand_ControlsSrc0RegfileNotImmAndSource0SourceAddressingModeIsDirect {
1605         QWORD Source0_SourceSubRegisterNumber : BITFIELD_RANGE(  0,  4); //
1606         QWORD Source0_SourceRegisterNumber    : BITFIELD_RANGE(  5, 12); //
1607         QWORD __CODEGEN_UNIQUE(Overridden)    : BITFIELD_RANGE( 13, 63); // Override
1608     } StructureEu_Instruction_Controls_AAccessmodeIsAlign1AndStructureEu_Instruction_Operand_ControlsSrc0RegfileNotImmAndSource0SourceAddressingModeIsDirect;
1609     struct tagStructureEu_Instruction_Controls_AAccessmodeIsAlign1AndStructureEu_Instruction_Operand_ControlsSrc0RegfileNotImmAndSource0SourceAddressingModeIsIndirect {
1610         QWORD Source0_SourceAddressImmediate80 : BITFIELD_RANGE(  0,  8); // S9[8:0]
1611         QWORD Source0_AddressSubregisterNumber : BITFIELD_RANGE(  9, 12); //
1612         QWORD __CODEGEN_UNIQUE(Overridden)     : BITFIELD_RANGE( 13, 30); // Override
1613         QWORD Source0_SourceAddressImmediate9  : BITFIELD_RANGE( 31, 31); // S9[9:9]
1614         QWORD __CODEGEN_UNIQUE(Overridden)     : BITFIELD_RANGE( 32, 63); // Override
1615     } StructureEu_Instruction_Controls_AAccessmodeIsAlign1AndStructureEu_Instruction_Operand_ControlsSrc0RegfileNotImmAndSource0SourceAddressingModeIsIndirect;
1616     struct tagStructureEu_Instruction_Controls_AAccessmodeIsAlign1AndStructureEu_Instruction_Operand_ControlsSrc0RegfileNotImmAndPropertySourceModifierIsFalse {
1617         QWORD __CODEGEN_UNIQUE(Overridden) : BITFIELD_RANGE(  0, 12); // Override
1618         QWORD __CODEGEN_UNIQUE(Reserved)   : BITFIELD_RANGE( 13, 14); // MBZ
1619         QWORD __CODEGEN_UNIQUE(Overridden) : BITFIELD_RANGE( 15, 63); // Override
1620     } StructureEu_Instruction_Controls_AAccessmodeIsAlign1AndStructureEu_Instruction_Operand_ControlsSrc0RegfileNotImmAndPropertySourceModifierIsFalse;
1621     struct tagStructureEu_Instruction_Controls_AAccessmodeIsAlign1AndStructureEu_Instruction_Operand_ControlsSrc0RegfileNotImmAndPropertySourceModifierIsTrue {
1622         QWORD __CODEGEN_UNIQUE(Overridden) : BITFIELD_RANGE(  0, 12); // Override
1623         QWORD Source0_SourceModifier       : BITFIELD_RANGE( 13, 14); // SRCMOD
1624         QWORD __CODEGEN_UNIQUE(Overridden) : BITFIELD_RANGE( 15, 63); // Override
1625     } StructureEu_Instruction_Controls_AAccessmodeIsAlign1AndStructureEu_Instruction_Operand_ControlsSrc0RegfileNotImmAndPropertySourceModifierIsTrue;
1626     struct tagStructureEu_Instruction_Controls_AAccessmodeIsAlign1AndStructureEu_Instruction_Operand_ControlsSrc0RegfileNotImm {
1627         QWORD __CODEGEN_UNIQUE(Overridden)   : BITFIELD_RANGE(  0, 14); // Override
1628         QWORD Source0_SourceAddressingMode   : BITFIELD_BIT(       15); // ADDRMODE
1629         QWORD Source0_SourceHorizontalStride : BITFIELD_RANGE( 16, 17); // HORZSTRIDE
1630         QWORD Source0_SourceWidth            : BITFIELD_RANGE( 18, 20); // WIDTH
1631         QWORD Source0_SourceVerticalStride   : BITFIELD_RANGE( 21, 24); // VERTSTRIDE
1632         QWORD __CODEGEN_UNIQUE(Overridden)   : BITFIELD_RANGE( 25, 63); // Override
1633     } StructureEu_Instruction_Controls_AAccessmodeIsAlign1AndStructureEu_Instruction_Operand_ControlsSrc0RegfileNotImm;
1634     struct tagStructureEu_Instruction_Controls_AAccessmodeIsAlign16AndStructureEu_Instruction_Operand_ControlsSrc0RegfileNotImm {
1635         QWORD Source0_SourceChannelSelect30 : BITFIELD_RANGE(  0,  3); // ChanSel[4][3:0]
1636         QWORD __CODEGEN_UNIQUE(Overridden)  : BITFIELD_RANGE(  4, 14); // Override
1637         QWORD Source0_SourceAddressingMode  : BITFIELD_BIT(       15); // ADDRMODE
1638         QWORD Source0_SourceChannelSelect74 : BITFIELD_RANGE( 16, 19); // ChanSel[4][7:4]
1639         QWORD __CODEGEN_UNIQUE(Reserved)    : BITFIELD_BIT(       20); // MBZ
1640         QWORD Source0_SourceVerticalStride  : BITFIELD_RANGE( 21, 24); // VERTSTRIDE
1641         QWORD __CODEGEN_UNIQUE(Overridden)  : BITFIELD_RANGE( 25, 63); // Override
1642     } StructureEu_Instruction_Controls_AAccessmodeIsAlign16AndStructureEu_Instruction_Operand_ControlsSrc0RegfileNotImm;
1643     struct tagStructureEu_Instruction_Controls_AAccessmodeIsAlign16AndStructureEu_Instruction_Operand_ControlsSrc0RegfileNotImmAndSource0SourceAddressingModeIsDirect {
1644         QWORD __CODEGEN_UNIQUE(Overridden)      : BITFIELD_RANGE(  0,  3); // Override
1645         QWORD Source0_SourceSubregisterNumber44 : BITFIELD_BIT(        4); // SrcSubRegNum[4:4]
1646         QWORD Source0_SourceRegisterNumber      : BITFIELD_RANGE(  5, 12); //
1647         QWORD __CODEGEN_UNIQUE(Overridden)      : BITFIELD_RANGE( 13, 63); // Override
1648     } StructureEu_Instruction_Controls_AAccessmodeIsAlign16AndStructureEu_Instruction_Operand_ControlsSrc0RegfileNotImmAndSource0SourceAddressingModeIsDirect;
1649     struct tagStructureEu_Instruction_Controls_AAccessmodeIsAlign16AndStructureEu_Instruction_Operand_ControlsSrc0RegfileNotImmAndSource0SourceAddressingModeIsIndirect {
1650         QWORD __CODEGEN_UNIQUE(Overridden)     : BITFIELD_RANGE(  0,  3); // Override
1651         QWORD Source0_SourceAddressImmediate84 : BITFIELD_RANGE(  4,  8); // S9[8:4]
1652         QWORD Source0_AddressSubregisterNumber : BITFIELD_RANGE(  9, 12); //
1653         QWORD __CODEGEN_UNIQUE(Overridden)     : BITFIELD_RANGE( 13, 63); // Override
1654     } StructureEu_Instruction_Controls_AAccessmodeIsAlign16AndStructureEu_Instruction_Operand_ControlsSrc0RegfileNotImmAndSource0SourceAddressingModeIsIndirect;
1655     struct tagStructureEu_Instruction_Controls_AAccessmodeIsAlign16AndStructureEu_Instruction_Operand_ControlsSrc0RegfileNotImmAndPropertySourceModifierIsFalse {
1656         QWORD __CODEGEN_UNIQUE(Overridden) : BITFIELD_RANGE(  0, 12); // Override
1657         QWORD __CODEGEN_UNIQUE(Reserved)   : BITFIELD_RANGE( 13, 14); // MBZ
1658         QWORD __CODEGEN_UNIQUE(Overridden) : BITFIELD_RANGE( 15, 63); // Override
1659     } StructureEu_Instruction_Controls_AAccessmodeIsAlign16AndStructureEu_Instruction_Operand_ControlsSrc0RegfileNotImmAndPropertySourceModifierIsFalse;
1660     struct tagStructureEu_Instruction_Controls_AAccessmodeIsAlign16AndStructureEu_Instruction_Operand_ControlsSrc0RegfileNotImmAndPropertySourceModifierIsTrue {
1661         QWORD __CODEGEN_UNIQUE(Overridden) : BITFIELD_RANGE(  0, 12); // Override
1662         QWORD Source0_SourceModifier       : BITFIELD_RANGE( 13, 14); // SRCMOD
1663         QWORD __CODEGEN_UNIQUE(Overridden) : BITFIELD_RANGE( 15, 63); // Override
1664     } StructureEu_Instruction_Controls_AAccessmodeIsAlign16AndStructureEu_Instruction_Operand_ControlsSrc0RegfileNotImmAndPropertySourceModifierIsTrue;
1665     DWORD RawData[2];
1666 
1667     // INITIALIZATION
1668     //
Init()1669     __CODEGEN_INLINE void Init() {
1670         RawData[0] = 0x0;
1671         RawData[1] = 0x0;
1672     }
1673 
sInit()1674     static tagEU_INSTRUCTION_SOURCES_REG sInit() {
1675         tagEU_INSTRUCTION_SOURCES_REG state;
1676         state.Init();
1677         return state;
1678     }
1679 
1680     // ACCESSORS
1681     //
GetDWord(UINT const index)1682     __CODEGEN_INLINE __CODEGEN_PACKED DWORD& GetDWord(UINT const index) {
1683         return RawData[index];
1684     }
1685 
1686     static size_t CalculateSize(UINT const entryCount = 0) {
1687         return 0;
1688     }
1689 
GetSize()1690     __CODEGEN_INLINE size_t GetSize() {
1691         return 0;
1692     }
1693 
GetSource0_SourceSubRegisterNumber()1694     __CODEGEN_INLINE QWORD GetSource0_SourceSubRegisterNumber() {
1695         __CODEGEN_GET_MACRO();
1696         return (QWORD)StructureEu_Instruction_Controls_AAccessmodeIsAlign1AndStructureEu_Instruction_Operand_ControlsSrc0RegfileNotImmAndSource0SourceAddressingModeIsDirect.Source0_SourceSubRegisterNumber;
1697     }
1698 
SetSource0_SourceSubRegisterNumber(QWORD Source0_SourceSubRegisterNumberValue)1699     __CODEGEN_INLINE void SetSource0_SourceSubRegisterNumber(QWORD Source0_SourceSubRegisterNumberValue) {
1700         __CODEGEN_SET_MACRO(Source0_SourceSubRegisterNumberValue);
1701         StructureEu_Instruction_Controls_AAccessmodeIsAlign1AndStructureEu_Instruction_Operand_ControlsSrc0RegfileNotImmAndSource0SourceAddressingModeIsDirect.Source0_SourceSubRegisterNumber = Source0_SourceSubRegisterNumberValue;
1702     }
1703 
GetSource0_SourceRegisterNumber()1704     __CODEGEN_INLINE QWORD GetSource0_SourceRegisterNumber() {
1705         __CODEGEN_GET_MACRO();
1706         return (QWORD)StructureEu_Instruction_Controls_AAccessmodeIsAlign1AndStructureEu_Instruction_Operand_ControlsSrc0RegfileNotImmAndSource0SourceAddressingModeIsDirect.Source0_SourceRegisterNumber;
1707     }
1708 
SetSource0_SourceRegisterNumber(QWORD Source0_SourceRegisterNumber_0Value)1709     __CODEGEN_INLINE void SetSource0_SourceRegisterNumber(QWORD Source0_SourceRegisterNumber_0Value) {
1710         __CODEGEN_SET_MACRO(Source0_SourceRegisterNumber_0Value);
1711         StructureEu_Instruction_Controls_AAccessmodeIsAlign1AndStructureEu_Instruction_Operand_ControlsSrc0RegfileNotImmAndSource0SourceAddressingModeIsDirect.Source0_SourceRegisterNumber = Source0_SourceRegisterNumber_0Value;
1712     }
1713 
GetSource0_SourceAddressImmediate80()1714     __CODEGEN_INLINE QWORD GetSource0_SourceAddressImmediate80() {
1715         __CODEGEN_GET_MACRO();
1716         return (QWORD)StructureEu_Instruction_Controls_AAccessmodeIsAlign1AndStructureEu_Instruction_Operand_ControlsSrc0RegfileNotImmAndSource0SourceAddressingModeIsIndirect.Source0_SourceAddressImmediate80;
1717     }
1718 
SetSource0_SourceAddressImmediate80(QWORD Source0_SourceAddressImmediate80Value)1719     __CODEGEN_INLINE void SetSource0_SourceAddressImmediate80(QWORD Source0_SourceAddressImmediate80Value) {
1720         __CODEGEN_SET_MACRO(Source0_SourceAddressImmediate80Value);
1721         StructureEu_Instruction_Controls_AAccessmodeIsAlign1AndStructureEu_Instruction_Operand_ControlsSrc0RegfileNotImmAndSource0SourceAddressingModeIsIndirect.Source0_SourceAddressImmediate80 = Source0_SourceAddressImmediate80Value;
1722     }
1723 
SetSource0_SourceAddressImmediate9(QWORD Source0_SourceAddressImmediate9Value)1724     __CODEGEN_INLINE void SetSource0_SourceAddressImmediate9(QWORD Source0_SourceAddressImmediate9Value) {
1725         __CODEGEN_SET_MACRO(Source0_SourceAddressImmediate9Value);
1726         StructureEu_Instruction_Controls_AAccessmodeIsAlign1AndStructureEu_Instruction_Operand_ControlsSrc0RegfileNotImmAndSource0SourceAddressingModeIsIndirect.Source0_SourceAddressImmediate9 = Source0_SourceAddressImmediate9Value;
1727     }
1728 
GetSource0_AddressSubregisterNumber_0()1729     __CODEGEN_INLINE QWORD GetSource0_AddressSubregisterNumber_0() {
1730         __CODEGEN_GET_MACRO();
1731         return (QWORD)StructureEu_Instruction_Controls_AAccessmodeIsAlign1AndStructureEu_Instruction_Operand_ControlsSrc0RegfileNotImmAndSource0SourceAddressingModeIsIndirect.Source0_AddressSubregisterNumber;
1732     }
1733 
SetSource0_AddressSubregisterNumber_0(QWORD Source0_AddressSubregisterNumber_0Value)1734     __CODEGEN_INLINE void SetSource0_AddressSubregisterNumber_0(QWORD Source0_AddressSubregisterNumber_0Value) {
1735         __CODEGEN_SET_MACRO(Source0_AddressSubregisterNumber_0Value);
1736         StructureEu_Instruction_Controls_AAccessmodeIsAlign1AndStructureEu_Instruction_Operand_ControlsSrc0RegfileNotImmAndSource0SourceAddressingModeIsIndirect.Source0_AddressSubregisterNumber = Source0_AddressSubregisterNumber_0Value;
1737     }
1738 
GetSource0_SourceModifier()1739     __CODEGEN_INLINE SRCMOD GetSource0_SourceModifier() {
1740         __CODEGEN_GET_MACRO();
1741         return (SRCMOD)StructureEu_Instruction_Controls_AAccessmodeIsAlign1AndStructureEu_Instruction_Operand_ControlsSrc0RegfileNotImmAndPropertySourceModifierIsTrue.Source0_SourceModifier;
1742     }
1743 
SetSource0_SourceModifier(SRCMOD Source0_SourceModifier_0Value)1744     __CODEGEN_INLINE void SetSource0_SourceModifier(SRCMOD Source0_SourceModifier_0Value) {
1745         __CODEGEN_SET_MACRO(Source0_SourceModifier_0Value);
1746         StructureEu_Instruction_Controls_AAccessmodeIsAlign1AndStructureEu_Instruction_Operand_ControlsSrc0RegfileNotImmAndPropertySourceModifierIsTrue.Source0_SourceModifier = Source0_SourceModifier_0Value;
1747     }
1748 
GetSource0_SourceAddressingMode_0()1749     __CODEGEN_INLINE ADDRMODE GetSource0_SourceAddressingMode_0() {
1750         __CODEGEN_GET_MACRO();
1751         return (ADDRMODE)StructureEu_Instruction_Controls_AAccessmodeIsAlign1AndStructureEu_Instruction_Operand_ControlsSrc0RegfileNotImm.Source0_SourceAddressingMode;
1752     }
1753 
SetSource0_SourceAddressingMode(ADDRMODE Source0_SourceAddressingMode_0Value)1754     __CODEGEN_INLINE void SetSource0_SourceAddressingMode(ADDRMODE Source0_SourceAddressingMode_0Value) {
1755         __CODEGEN_SET_MACRO(Source0_SourceAddressingMode_0Value);
1756         StructureEu_Instruction_Controls_AAccessmodeIsAlign1AndStructureEu_Instruction_Operand_ControlsSrc0RegfileNotImm.Source0_SourceAddressingMode = Source0_SourceAddressingMode_0Value;
1757     }
1758 
GetSource0_SourceHorizontalStride()1759     __CODEGEN_INLINE HORZSTRIDE GetSource0_SourceHorizontalStride() {
1760         __CODEGEN_GET_MACRO();
1761         return (HORZSTRIDE)StructureEu_Instruction_Controls_AAccessmodeIsAlign1AndStructureEu_Instruction_Operand_ControlsSrc0RegfileNotImm.Source0_SourceHorizontalStride;
1762     }
1763 
SetSource0_SourceHorizontalStride(HORZSTRIDE Source0_SourceHorizontalStrideValue)1764     __CODEGEN_INLINE void SetSource0_SourceHorizontalStride(HORZSTRIDE Source0_SourceHorizontalStrideValue) {
1765         __CODEGEN_SET_MACRO(Source0_SourceHorizontalStrideValue);
1766         StructureEu_Instruction_Controls_AAccessmodeIsAlign1AndStructureEu_Instruction_Operand_ControlsSrc0RegfileNotImm.Source0_SourceHorizontalStride = Source0_SourceHorizontalStrideValue;
1767     }
1768 
GetSource0_SourceWidth()1769     __CODEGEN_INLINE WIDTH GetSource0_SourceWidth() {
1770         __CODEGEN_GET_MACRO();
1771         return (WIDTH)StructureEu_Instruction_Controls_AAccessmodeIsAlign1AndStructureEu_Instruction_Operand_ControlsSrc0RegfileNotImm.Source0_SourceWidth;
1772     }
1773 
SetSource0_SourceWidth(WIDTH Source0_SourceWidthValue)1774     __CODEGEN_INLINE void SetSource0_SourceWidth(WIDTH Source0_SourceWidthValue) {
1775         __CODEGEN_SET_MACRO(Source0_SourceWidthValue);
1776         StructureEu_Instruction_Controls_AAccessmodeIsAlign1AndStructureEu_Instruction_Operand_ControlsSrc0RegfileNotImm.Source0_SourceWidth = Source0_SourceWidthValue;
1777     }
1778 
GetSource0_SourceVerticalStride()1779     __CODEGEN_INLINE VERTSTRIDE GetSource0_SourceVerticalStride() {
1780         __CODEGEN_GET_MACRO();
1781         return (VERTSTRIDE)StructureEu_Instruction_Controls_AAccessmodeIsAlign1AndStructureEu_Instruction_Operand_ControlsSrc0RegfileNotImm.Source0_SourceVerticalStride;
1782     }
1783 
SetSource0_SourceVerticalStride(VERTSTRIDE Source0_SourceVerticalStride_0Value)1784     __CODEGEN_INLINE void SetSource0_SourceVerticalStride(VERTSTRIDE Source0_SourceVerticalStride_0Value) {
1785         __CODEGEN_SET_MACRO(Source0_SourceVerticalStride_0Value);
1786         StructureEu_Instruction_Controls_AAccessmodeIsAlign1AndStructureEu_Instruction_Operand_ControlsSrc0RegfileNotImm.Source0_SourceVerticalStride = Source0_SourceVerticalStride_0Value;
1787     }
1788 
GetSource0_SourceChannelSelect30()1789     __CODEGEN_INLINE QWORD GetSource0_SourceChannelSelect30() {
1790         __CODEGEN_GET_MACRO();
1791         return (QWORD)StructureEu_Instruction_Controls_AAccessmodeIsAlign16AndStructureEu_Instruction_Operand_ControlsSrc0RegfileNotImm.Source0_SourceChannelSelect30;
1792     }
1793 
SetSource0_SourceChannelSelect30(QWORD Source0_SourceChannelSelect30Value)1794     __CODEGEN_INLINE void SetSource0_SourceChannelSelect30(QWORD Source0_SourceChannelSelect30Value) {
1795         __CODEGEN_SET_MACRO(Source0_SourceChannelSelect30Value);
1796         StructureEu_Instruction_Controls_AAccessmodeIsAlign16AndStructureEu_Instruction_Operand_ControlsSrc0RegfileNotImm.Source0_SourceChannelSelect30 = Source0_SourceChannelSelect30Value;
1797     }
1798 
GetSource0_SourceAddressingMode_1()1799     __CODEGEN_INLINE ADDRMODE GetSource0_SourceAddressingMode_1() {
1800         __CODEGEN_GET_MACRO();
1801         return (ADDRMODE)StructureEu_Instruction_Controls_AAccessmodeIsAlign16AndStructureEu_Instruction_Operand_ControlsSrc0RegfileNotImm.Source0_SourceAddressingMode;
1802     }
1803 
SetSource0_SourceAddressingMode_1(ADDRMODE Source0_SourceAddressingMode_1Value)1804     __CODEGEN_INLINE void SetSource0_SourceAddressingMode_1(ADDRMODE Source0_SourceAddressingMode_1Value) {
1805         __CODEGEN_SET_MACRO(Source0_SourceAddressingMode_1Value);
1806         StructureEu_Instruction_Controls_AAccessmodeIsAlign16AndStructureEu_Instruction_Operand_ControlsSrc0RegfileNotImm.Source0_SourceAddressingMode = Source0_SourceAddressingMode_1Value;
1807     }
1808 
GetSource0_SourceChannelSelect74()1809     __CODEGEN_INLINE QWORD GetSource0_SourceChannelSelect74() {
1810         __CODEGEN_GET_MACRO();
1811         return (QWORD)StructureEu_Instruction_Controls_AAccessmodeIsAlign16AndStructureEu_Instruction_Operand_ControlsSrc0RegfileNotImm.Source0_SourceChannelSelect74 << 4;
1812     }
1813 
SetSource0_SourceChannelSelect74(QWORD Source0_SourceChannelSelect74Value)1814     __CODEGEN_INLINE void SetSource0_SourceChannelSelect74(QWORD Source0_SourceChannelSelect74Value) {
1815         __CODEGEN_SET_MACRO(Source0_SourceChannelSelect74Value);
1816         StructureEu_Instruction_Controls_AAccessmodeIsAlign16AndStructureEu_Instruction_Operand_ControlsSrc0RegfileNotImm.Source0_SourceChannelSelect74 = Source0_SourceChannelSelect74Value >> 4;
1817     }
1818 
GetSource0_SourceSubregisterNumber44()1819     __CODEGEN_INLINE QWORD GetSource0_SourceSubregisterNumber44() {
1820         __CODEGEN_GET_MACRO();
1821         return (QWORD)StructureEu_Instruction_Controls_AAccessmodeIsAlign16AndStructureEu_Instruction_Operand_ControlsSrc0RegfileNotImmAndSource0SourceAddressingModeIsDirect.Source0_SourceSubregisterNumber44 << 4;
1822     }
1823 
SetSource0_SourceSubregisterNumber44(QWORD Source0_SourceSubregisterNumber44Value)1824     __CODEGEN_INLINE void SetSource0_SourceSubregisterNumber44(QWORD Source0_SourceSubregisterNumber44Value) {
1825         __CODEGEN_SET_MACRO(Source0_SourceSubregisterNumber44Value);
1826         StructureEu_Instruction_Controls_AAccessmodeIsAlign16AndStructureEu_Instruction_Operand_ControlsSrc0RegfileNotImmAndSource0SourceAddressingModeIsDirect.Source0_SourceSubregisterNumber44 = Source0_SourceSubregisterNumber44Value >> 4;
1827     }
1828 
GetSource0_SourceAddressImmediate84()1829     __CODEGEN_INLINE QWORD GetSource0_SourceAddressImmediate84() {
1830         __CODEGEN_GET_MACRO();
1831         return (QWORD)StructureEu_Instruction_Controls_AAccessmodeIsAlign16AndStructureEu_Instruction_Operand_ControlsSrc0RegfileNotImmAndSource0SourceAddressingModeIsIndirect.Source0_SourceAddressImmediate84 << 4;
1832     }
1833 
SetSource0_SourceAddressImmediate84(QWORD Source0_SourceAddressImmediate84Value)1834     __CODEGEN_INLINE void SetSource0_SourceAddressImmediate84(QWORD Source0_SourceAddressImmediate84Value) {
1835         __CODEGEN_SET_MACRO(Source0_SourceAddressImmediate84Value);
1836         StructureEu_Instruction_Controls_AAccessmodeIsAlign16AndStructureEu_Instruction_Operand_ControlsSrc0RegfileNotImmAndSource0SourceAddressingModeIsIndirect.Source0_SourceAddressImmediate84 = Source0_SourceAddressImmediate84Value >> 4;
1837     }
1838 
1839 } __CODEGEN_ATTRIBUTES_STRUCTURE EU_INSTRUCTION_SOURCES_REG;
1840 
1841 C_ASSERT(8 == sizeof(EU_INSTRUCTION_SOURCES_REG));
1842 
1843 /*****************************************************************************\
1844 Dual source, register and immediate
1845 \*****************************************************************************/
1846 typedef union tagEU_INSTRUCTION_SOURCES_REG_IMM {
1847     struct tagCommon {
1848         QWORD __CODEGEN_UNIQUE(Overridden) : BITFIELD_RANGE(  0, 24); // Override
1849         QWORD Src1Regfile                  : BITFIELD_RANGE( 25, 26); // REGFILE
1850         QWORD Src1Srctype                  : BITFIELD_RANGE( 27, 30); // SRCIMMTYPE
1851         QWORD __CODEGEN_UNIQUE(Overridden) : BITFIELD_BIT(       31); // Override
1852         QWORD Source1Immediate             : BITFIELD_RANGE( 32, 63); //
1853     } Common;
1854     struct tagStructureEu_Instruction_Controls_AAccessmodeIsAlign1AndStructureEu_Instruction_Operand_ControlsSrc0RegfileNotImmAndSource0SourceAddressingModeIsDirect {
1855         QWORD Source0_SourceSubRegisterNumber : BITFIELD_RANGE(  0,  4); //
1856         QWORD Source0_SourceRegisterNumber    : BITFIELD_RANGE(  5, 12); //
1857         QWORD __CODEGEN_UNIQUE(Overridden)    : BITFIELD_RANGE( 13, 63); // Override
1858     } StructureEu_Instruction_Controls_AAccessmodeIsAlign1AndStructureEu_Instruction_Operand_ControlsSrc0RegfileNotImmAndSource0SourceAddressingModeIsDirect;
1859     struct tagStructureEu_Instruction_Controls_AAccessmodeIsAlign1AndStructureEu_Instruction_Operand_ControlsSrc0RegfileNotImmAndSource0SourceAddressingModeIsIndirect {
1860         QWORD Source0_SourceAddressImmediate80 : BITFIELD_RANGE(0, 8); // S9[8:0]
1861         QWORD Source0_AddressSubregisterNumber : BITFIELD_RANGE(9, 12); //
1862         QWORD __CODEGEN_UNIQUE(Overridden) : BITFIELD_RANGE(13, 30); // Override
1863         QWORD Source0_SourceAddressImmediate9 : BITFIELD_RANGE(31, 31); // S9[9:9]
1864         QWORD __CODEGEN_UNIQUE(Overridden) : BITFIELD_RANGE(32, 63); // Override
1865     } StructureEu_Instruction_Controls_AAccessmodeIsAlign1AndStructureEu_Instruction_Operand_ControlsSrc0RegfileNotImmAndSource0SourceAddressingModeIsIndirect;
1866     struct tagStructureEu_Instruction_Controls_AAccessmodeIsAlign1AndStructureEu_Instruction_Operand_ControlsSrc0RegfileNotImmAndPropertySourceModifierIsFalse {
1867         QWORD __CODEGEN_UNIQUE(Overridden) : BITFIELD_RANGE(  0, 12); // Override
1868         QWORD __CODEGEN_UNIQUE(Reserved)   : BITFIELD_RANGE( 13, 14); // MBZ
1869         QWORD __CODEGEN_UNIQUE(Overridden) : BITFIELD_RANGE( 15, 63); // Override
1870     } StructureEu_Instruction_Controls_AAccessmodeIsAlign1AndStructureEu_Instruction_Operand_ControlsSrc0RegfileNotImmAndPropertySourceModifierIsFalse;
1871     struct tagStructureEu_Instruction_Controls_AAccessmodeIsAlign1AndStructureEu_Instruction_Operand_ControlsSrc0RegfileNotImmAndPropertySourceModifierIsTrue {
1872         QWORD __CODEGEN_UNIQUE(Overridden) : BITFIELD_RANGE(  0, 12); // Override
1873         QWORD Source0_SourceModifier       : BITFIELD_RANGE( 13, 14); // SRCMOD
1874         QWORD __CODEGEN_UNIQUE(Overridden) : BITFIELD_RANGE( 15, 63); // Override
1875     } StructureEu_Instruction_Controls_AAccessmodeIsAlign1AndStructureEu_Instruction_Operand_ControlsSrc0RegfileNotImmAndPropertySourceModifierIsTrue;
1876     struct tagStructureEu_Instruction_Controls_AAccessmodeIsAlign1AndStructureEu_Instruction_Operand_ControlsSrc0RegfileNotImm {
1877         QWORD __CODEGEN_UNIQUE(Overridden)   : BITFIELD_RANGE(  0, 14); // Override
1878         QWORD Source0_SourceAddressingMode   : BITFIELD_BIT(       15); // ADDRMODE
1879         QWORD Source0_SourceHorizontalStride : BITFIELD_RANGE( 16, 17); // HORZSTRIDE
1880         QWORD Source0_SourceWidth            : BITFIELD_RANGE( 18, 20); // WIDTH
1881         QWORD Source0_SourceVerticalStride   : BITFIELD_RANGE( 21, 24); // VERTSTRIDE
1882         QWORD __CODEGEN_UNIQUE(Overridden)   : BITFIELD_RANGE( 25, 63); // Override
1883     } StructureEu_Instruction_Controls_AAccessmodeIsAlign1AndStructureEu_Instruction_Operand_ControlsSrc0RegfileNotImm;
1884     struct tagStructureEu_Instruction_Controls_AAccessmodeIsAlign16AndStructureEu_Instruction_Operand_ControlsSrc0RegfileNotImm {
1885         QWORD Source0_SourceChannelSelect30 : BITFIELD_RANGE(  0,  3); // ChanSel[4][3:0]
1886         QWORD __CODEGEN_UNIQUE(Overridden)  : BITFIELD_RANGE(  4, 14); // Override
1887         QWORD Source0_SourceAddressingMode  : BITFIELD_BIT(       15); // ADDRMODE
1888         QWORD Source0_SourceChannelSelect74 : BITFIELD_RANGE( 16, 19); // ChanSel[4][7:4]
1889         QWORD __CODEGEN_UNIQUE(Reserved)    : BITFIELD_BIT(       20); // MBZ
1890         QWORD Source0_SourceVerticalStride  : BITFIELD_RANGE( 21, 24); // VERTSTRIDE
1891         QWORD __CODEGEN_UNIQUE(Overridden)  : BITFIELD_RANGE( 25, 63); // Override
1892     } StructureEu_Instruction_Controls_AAccessmodeIsAlign16AndStructureEu_Instruction_Operand_ControlsSrc0RegfileNotImm;
1893     struct tagStructureEu_Instruction_Controls_AAccessmodeIsAlign16AndStructureEu_Instruction_Operand_ControlsSrc0RegfileNotImmAndSource0SourceAddressingModeIsDirect {
1894         QWORD __CODEGEN_UNIQUE(Overridden)      : BITFIELD_RANGE(  0,  3); // Override
1895         QWORD Source0_SourceSubregisterNumber44 : BITFIELD_BIT(        4); // SrcSubRegNum[4:4]
1896         QWORD Source0_SourceRegisterNumber      : BITFIELD_RANGE(  5, 12); //
1897         QWORD __CODEGEN_UNIQUE(Overridden)      : BITFIELD_RANGE( 13, 63); // Override
1898     } StructureEu_Instruction_Controls_AAccessmodeIsAlign16AndStructureEu_Instruction_Operand_ControlsSrc0RegfileNotImmAndSource0SourceAddressingModeIsDirect;
1899     struct tagStructureEu_Instruction_Controls_AAccessmodeIsAlign16AndStructureEu_Instruction_Operand_ControlsSrc0RegfileNotImmAndSource0SourceAddressingModeIsIndirect {
1900         QWORD __CODEGEN_UNIQUE(Overridden)     : BITFIELD_RANGE(  0,  3); // Override
1901         QWORD Source0_SourceAddressImmediate84 : BITFIELD_RANGE(  4,  8); // S9[8:4]
1902         QWORD Source0_AddressSubregisterNumber : BITFIELD_RANGE(  9, 12); //
1903         QWORD __CODEGEN_UNIQUE(Overridden)     : BITFIELD_RANGE( 13, 63); // Override
1904     } StructureEu_Instruction_Controls_AAccessmodeIsAlign16AndStructureEu_Instruction_Operand_ControlsSrc0RegfileNotImmAndSource0SourceAddressingModeIsIndirect;
1905     struct tagStructureEu_Instruction_Controls_AAccessmodeIsAlign16AndStructureEu_Instruction_Operand_ControlsSrc0RegfileNotImmAndPropertySourceModifierIsFalse {
1906         QWORD __CODEGEN_UNIQUE(Overridden) : BITFIELD_RANGE(  0, 12); // Override
1907         QWORD __CODEGEN_UNIQUE(Reserved)   : BITFIELD_RANGE( 13, 14); // MBZ
1908         QWORD __CODEGEN_UNIQUE(Overridden) : BITFIELD_RANGE( 15, 63); // Override
1909     } StructureEu_Instruction_Controls_AAccessmodeIsAlign16AndStructureEu_Instruction_Operand_ControlsSrc0RegfileNotImmAndPropertySourceModifierIsFalse;
1910     struct tagStructureEu_Instruction_Controls_AAccessmodeIsAlign16AndStructureEu_Instruction_Operand_ControlsSrc0RegfileNotImmAndPropertySourceModifierIsTrue {
1911         QWORD __CODEGEN_UNIQUE(Overridden) : BITFIELD_RANGE(  0, 12); // Override
1912         QWORD Source0_SourceModifier       : BITFIELD_RANGE( 13, 14); // SRCMOD
1913         QWORD __CODEGEN_UNIQUE(Overridden) : BITFIELD_RANGE( 15, 63); // Override
1914     } StructureEu_Instruction_Controls_AAccessmodeIsAlign16AndStructureEu_Instruction_Operand_ControlsSrc0RegfileNotImmAndPropertySourceModifierIsTrue;
1915     struct tagSource0SourceAddressingModeIsIndirect {
1916         QWORD __CODEGEN_UNIQUE(Overridden)    : BITFIELD_RANGE(  0, 30); // Override
1917         QWORD Source0AddressImmediate9SignBit : BITFIELD_BIT(       31); // S9[9]
1918         QWORD __CODEGEN_UNIQUE(Overridden) : BITFIELD_RANGE( 32, 63); // Override
1919     } Source0SourceAddressingModeIsIndirect;
1920     struct tagSource0SourceAddressingModeIsDirect {
1921         QWORD __CODEGEN_UNIQUE(Overridden) : BITFIELD_RANGE(  0, 30); // Override
1922         QWORD __CODEGEN_UNIQUE(Reserved)   : BITFIELD_BIT(       31); // MBZ
1923         QWORD __CODEGEN_UNIQUE(Overridden) : BITFIELD_RANGE( 32, 63); // Override
1924     } Source0SourceAddressingModeIsDirect;
1925     DWORD RawData[2];
1926 
1927     // INITIALIZATION
1928     //
Init()1929     __CODEGEN_INLINE void Init() {
1930         RawData[0]              = 0x0;
1931         Common.Src1Regfile      = 0x0;
1932         Common.Src1Srctype      = 0x0;
1933         RawData[1]              = 0x0;
1934         Common.Source1Immediate = 0x0;
1935     }
1936 
sInit()1937     static tagEU_INSTRUCTION_SOURCES_REG_IMM sInit() {
1938         tagEU_INSTRUCTION_SOURCES_REG_IMM state;
1939         state.Init();
1940         return state;
1941     }
1942 
1943     // ACCESSORS
1944     //
GetDWord(UINT const index)1945     __CODEGEN_INLINE __CODEGEN_PACKED DWORD& GetDWord(UINT const index) {
1946         return RawData[index];
1947     }
1948 
1949     static size_t CalculateSize(UINT const entryCount = 0) {
1950         return 0;
1951     }
1952 
GetSize()1953     __CODEGEN_INLINE size_t GetSize() {
1954         return 0;
1955     }
1956 
GetSrc1Regfile()1957     __CODEGEN_INLINE REGFILE GetSrc1Regfile() {
1958         __CODEGEN_GET_MACRO();
1959         return (REGFILE)Common.Src1Regfile;
1960     }
1961 
SetSrc1Regfile(REGFILE Src1RegfileValue)1962     __CODEGEN_INLINE void SetSrc1Regfile(REGFILE Src1RegfileValue) {
1963         __CODEGEN_SET_MACRO(Src1RegfileValue);
1964         Common.Src1Regfile = Src1RegfileValue;
1965     }
1966 
GetSrc1Srctype()1967     __CODEGEN_INLINE int GetSrc1Srctype() {
1968         __CODEGEN_GET_MACRO();
1969         return Common.Src1Srctype;
1970     }
1971 
SetSrc1Srctype(int Src1SrctypeValue)1972     __CODEGEN_INLINE void SetSrc1Srctype(int Src1SrctypeValue) {
1973         __CODEGEN_SET_MACRO(Src1SrctypeValue);
1974         Common.Src1Srctype = Src1SrctypeValue;
1975     }
1976 
GetSource1Immediate()1977     __CODEGEN_INLINE QWORD GetSource1Immediate() {
1978         __CODEGEN_GET_MACRO();
1979         return (QWORD)Common.Source1Immediate;
1980     }
1981 
SetSource1Immediate(QWORD Source1ImmediateValue)1982     __CODEGEN_INLINE void SetSource1Immediate(QWORD Source1ImmediateValue) {
1983         __CODEGEN_SET_MACRO(Source1ImmediateValue);
1984         Common.Source1Immediate = Source1ImmediateValue;
1985     }
1986 
GetSource0_SourceSubRegisterNumber()1987     __CODEGEN_INLINE QWORD GetSource0_SourceSubRegisterNumber() {
1988         __CODEGEN_GET_MACRO();
1989         return (QWORD)StructureEu_Instruction_Controls_AAccessmodeIsAlign1AndStructureEu_Instruction_Operand_ControlsSrc0RegfileNotImmAndSource0SourceAddressingModeIsDirect.Source0_SourceSubRegisterNumber;
1990     }
1991 
SetSource0_SourceSubRegisterNumber(QWORD Source0_SourceSubRegisterNumberValue)1992     __CODEGEN_INLINE void SetSource0_SourceSubRegisterNumber(QWORD Source0_SourceSubRegisterNumberValue) {
1993         __CODEGEN_SET_MACRO(Source0_SourceSubRegisterNumberValue);
1994         StructureEu_Instruction_Controls_AAccessmodeIsAlign1AndStructureEu_Instruction_Operand_ControlsSrc0RegfileNotImmAndSource0SourceAddressingModeIsDirect.Source0_SourceSubRegisterNumber = Source0_SourceSubRegisterNumberValue;
1995     }
1996 
GetSource0_SourceRegisterNumber()1997     __CODEGEN_INLINE QWORD GetSource0_SourceRegisterNumber() {
1998         __CODEGEN_GET_MACRO();
1999         return (QWORD)StructureEu_Instruction_Controls_AAccessmodeIsAlign1AndStructureEu_Instruction_Operand_ControlsSrc0RegfileNotImmAndSource0SourceAddressingModeIsDirect.Source0_SourceRegisterNumber;
2000     }
2001 
SetSource0_SourceRegisterNumber(QWORD Source0_SourceRegisterNumber_0Value)2002     __CODEGEN_INLINE void SetSource0_SourceRegisterNumber(QWORD Source0_SourceRegisterNumber_0Value) {
2003         __CODEGEN_SET_MACRO(Source0_SourceRegisterNumber_0Value);
2004         StructureEu_Instruction_Controls_AAccessmodeIsAlign1AndStructureEu_Instruction_Operand_ControlsSrc0RegfileNotImmAndSource0SourceAddressingModeIsDirect.Source0_SourceRegisterNumber = Source0_SourceRegisterNumber_0Value;
2005     }
2006 
GetSource0_SourceAddressImmediate80()2007     __CODEGEN_INLINE QWORD GetSource0_SourceAddressImmediate80() {
2008         __CODEGEN_GET_MACRO();
2009         return (QWORD)StructureEu_Instruction_Controls_AAccessmodeIsAlign1AndStructureEu_Instruction_Operand_ControlsSrc0RegfileNotImmAndSource0SourceAddressingModeIsIndirect.Source0_SourceAddressImmediate80;
2010     }
2011 
SetSource0_SourceAddressImmediate80(QWORD Source0_SourceAddressImmediate80Value)2012     __CODEGEN_INLINE void SetSource0_SourceAddressImmediate80(QWORD Source0_SourceAddressImmediate80Value) {
2013         __CODEGEN_SET_MACRO(Source0_SourceAddressImmediate80Value);
2014         StructureEu_Instruction_Controls_AAccessmodeIsAlign1AndStructureEu_Instruction_Operand_ControlsSrc0RegfileNotImmAndSource0SourceAddressingModeIsIndirect.Source0_SourceAddressImmediate80 = Source0_SourceAddressImmediate80Value;
2015     }
2016 
SetSource0_SourceAddressImmediate9(QWORD Source0_SourceAddressImmediate9Value)2017     __CODEGEN_INLINE void SetSource0_SourceAddressImmediate9(QWORD Source0_SourceAddressImmediate9Value) {
2018         __CODEGEN_SET_MACRO(Source0_SourceAddressImmediate9Value);
2019         StructureEu_Instruction_Controls_AAccessmodeIsAlign1AndStructureEu_Instruction_Operand_ControlsSrc0RegfileNotImmAndSource0SourceAddressingModeIsIndirect.Source0_SourceAddressImmediate9 = Source0_SourceAddressImmediate9Value;
2020     }
2021 
GetSource0_AddressSubregisterNumber_0()2022     __CODEGEN_INLINE QWORD GetSource0_AddressSubregisterNumber_0() {
2023         __CODEGEN_GET_MACRO();
2024         return (QWORD)StructureEu_Instruction_Controls_AAccessmodeIsAlign1AndStructureEu_Instruction_Operand_ControlsSrc0RegfileNotImmAndSource0SourceAddressingModeIsIndirect.Source0_AddressSubregisterNumber;
2025     }
2026 
SetSource0_AddressSubregisterNumber_0(QWORD Source0_AddressSubregisterNumber_0Value)2027     __CODEGEN_INLINE void SetSource0_AddressSubregisterNumber_0(QWORD Source0_AddressSubregisterNumber_0Value) {
2028         __CODEGEN_SET_MACRO(Source0_AddressSubregisterNumber_0Value);
2029         StructureEu_Instruction_Controls_AAccessmodeIsAlign1AndStructureEu_Instruction_Operand_ControlsSrc0RegfileNotImmAndSource0SourceAddressingModeIsIndirect.Source0_AddressSubregisterNumber = Source0_AddressSubregisterNumber_0Value;
2030     }
2031 
GetSource0_SourceModifier()2032     __CODEGEN_INLINE SRCMOD GetSource0_SourceModifier() {
2033         __CODEGEN_GET_MACRO();
2034         return (SRCMOD)StructureEu_Instruction_Controls_AAccessmodeIsAlign1AndStructureEu_Instruction_Operand_ControlsSrc0RegfileNotImmAndPropertySourceModifierIsTrue.Source0_SourceModifier;
2035     }
2036 
SetSource0_SourceModifier(SRCMOD Source0_SourceModifier_0Value)2037     __CODEGEN_INLINE void SetSource0_SourceModifier(SRCMOD Source0_SourceModifier_0Value) {
2038         __CODEGEN_SET_MACRO(Source0_SourceModifier_0Value);
2039         StructureEu_Instruction_Controls_AAccessmodeIsAlign1AndStructureEu_Instruction_Operand_ControlsSrc0RegfileNotImmAndPropertySourceModifierIsTrue.Source0_SourceModifier = Source0_SourceModifier_0Value;
2040     }
2041 
GetSource0_SourceAddressingMode_0()2042     __CODEGEN_INLINE ADDRMODE GetSource0_SourceAddressingMode_0() {
2043         __CODEGEN_GET_MACRO();
2044         return (ADDRMODE)StructureEu_Instruction_Controls_AAccessmodeIsAlign1AndStructureEu_Instruction_Operand_ControlsSrc0RegfileNotImm.Source0_SourceAddressingMode;
2045     }
2046 
SetSource0_SourceAddressingMode_0(ADDRMODE Source0_SourceAddressingMode_0Value)2047     __CODEGEN_INLINE void SetSource0_SourceAddressingMode_0(ADDRMODE Source0_SourceAddressingMode_0Value) {
2048         __CODEGEN_SET_MACRO(Source0_SourceAddressingMode_0Value);
2049         StructureEu_Instruction_Controls_AAccessmodeIsAlign1AndStructureEu_Instruction_Operand_ControlsSrc0RegfileNotImm.Source0_SourceAddressingMode = Source0_SourceAddressingMode_0Value;
2050     }
2051 
GetSource0_SourceHorizontalStride()2052     __CODEGEN_INLINE HORZSTRIDE GetSource0_SourceHorizontalStride() {
2053         __CODEGEN_GET_MACRO();
2054         return (HORZSTRIDE)StructureEu_Instruction_Controls_AAccessmodeIsAlign1AndStructureEu_Instruction_Operand_ControlsSrc0RegfileNotImm.Source0_SourceHorizontalStride;
2055     }
2056 
SetSource0_SourceHorizontalStride(HORZSTRIDE Source0_SourceHorizontalStrideValue)2057     __CODEGEN_INLINE void SetSource0_SourceHorizontalStride(HORZSTRIDE Source0_SourceHorizontalStrideValue) {
2058         __CODEGEN_SET_MACRO(Source0_SourceHorizontalStrideValue);
2059         StructureEu_Instruction_Controls_AAccessmodeIsAlign1AndStructureEu_Instruction_Operand_ControlsSrc0RegfileNotImm.Source0_SourceHorizontalStride = Source0_SourceHorizontalStrideValue;
2060     }
2061 
GetSource0_SourceWidth()2062     __CODEGEN_INLINE WIDTH GetSource0_SourceWidth() {
2063         __CODEGEN_GET_MACRO();
2064         return (WIDTH)StructureEu_Instruction_Controls_AAccessmodeIsAlign1AndStructureEu_Instruction_Operand_ControlsSrc0RegfileNotImm.Source0_SourceWidth;
2065     }
2066 
SetSource0_SourceWidth(WIDTH Source0_SourceWidthValue)2067     __CODEGEN_INLINE void SetSource0_SourceWidth(WIDTH Source0_SourceWidthValue) {
2068         __CODEGEN_SET_MACRO(Source0_SourceWidthValue);
2069         StructureEu_Instruction_Controls_AAccessmodeIsAlign1AndStructureEu_Instruction_Operand_ControlsSrc0RegfileNotImm.Source0_SourceWidth = Source0_SourceWidthValue;
2070     }
2071     //
GetSource0_SourceVerticalStride()2072     __CODEGEN_INLINE VERTSTRIDE GetSource0_SourceVerticalStride() {
2073         __CODEGEN_GET_MACRO();
2074         return (VERTSTRIDE)StructureEu_Instruction_Controls_AAccessmodeIsAlign1AndStructureEu_Instruction_Operand_ControlsSrc0RegfileNotImm.Source0_SourceVerticalStride;
2075     }
2076 
SetSource0_SourceVerticalStride(VERTSTRIDE Source0_SourceVerticalStride_0Value)2077     __CODEGEN_INLINE void SetSource0_SourceVerticalStride(VERTSTRIDE Source0_SourceVerticalStride_0Value) {
2078         __CODEGEN_SET_MACRO(Source0_SourceVerticalStride_0Value);
2079         StructureEu_Instruction_Controls_AAccessmodeIsAlign1AndStructureEu_Instruction_Operand_ControlsSrc0RegfileNotImm.Source0_SourceVerticalStride = Source0_SourceVerticalStride_0Value;
2080     }
2081 
GetSource0_SourceChannelSelect30()2082     __CODEGEN_INLINE QWORD GetSource0_SourceChannelSelect30() {
2083         __CODEGEN_GET_MACRO();
2084         return (QWORD)StructureEu_Instruction_Controls_AAccessmodeIsAlign16AndStructureEu_Instruction_Operand_ControlsSrc0RegfileNotImm.Source0_SourceChannelSelect30;
2085     }
2086 
SetSource0_SourceChannelSelect30(QWORD Source0_SourceChannelSelect30Value)2087     __CODEGEN_INLINE void SetSource0_SourceChannelSelect30(QWORD Source0_SourceChannelSelect30Value) {
2088         __CODEGEN_SET_MACRO(Source0_SourceChannelSelect30Value);
2089         StructureEu_Instruction_Controls_AAccessmodeIsAlign16AndStructureEu_Instruction_Operand_ControlsSrc0RegfileNotImm.Source0_SourceChannelSelect30 = Source0_SourceChannelSelect30Value;
2090     }
2091 
GetSource0_SourceAddressingMode_1()2092     __CODEGEN_INLINE ADDRMODE GetSource0_SourceAddressingMode_1() {
2093         __CODEGEN_GET_MACRO();
2094         return (ADDRMODE)StructureEu_Instruction_Controls_AAccessmodeIsAlign16AndStructureEu_Instruction_Operand_ControlsSrc0RegfileNotImm.Source0_SourceAddressingMode;
2095     }
2096 
SetSource0_SourceAddressingMode_1(ADDRMODE Source0_SourceAddressingMode_1Value)2097     __CODEGEN_INLINE void SetSource0_SourceAddressingMode_1(ADDRMODE Source0_SourceAddressingMode_1Value) {
2098         __CODEGEN_SET_MACRO(Source0_SourceAddressingMode_1Value);
2099         StructureEu_Instruction_Controls_AAccessmodeIsAlign16AndStructureEu_Instruction_Operand_ControlsSrc0RegfileNotImm.Source0_SourceAddressingMode = Source0_SourceAddressingMode_1Value;
2100     }
2101 
GetSource0_SourceChannelSelect74()2102     __CODEGEN_INLINE QWORD GetSource0_SourceChannelSelect74() {
2103         __CODEGEN_GET_MACRO();
2104         return (QWORD)StructureEu_Instruction_Controls_AAccessmodeIsAlign16AndStructureEu_Instruction_Operand_ControlsSrc0RegfileNotImm.Source0_SourceChannelSelect74 << 4;
2105     }
2106 
SetSource0_SourceChannelSelect74(QWORD Source0_SourceChannelSelect74Value)2107     __CODEGEN_INLINE void SetSource0_SourceChannelSelect74(QWORD Source0_SourceChannelSelect74Value) {
2108         __CODEGEN_SET_MACRO(Source0_SourceChannelSelect74Value);
2109         StructureEu_Instruction_Controls_AAccessmodeIsAlign16AndStructureEu_Instruction_Operand_ControlsSrc0RegfileNotImm.Source0_SourceChannelSelect74 = Source0_SourceChannelSelect74Value >> 4;
2110     }
2111 
GetSource0_SourceSubregisterNumber44()2112     __CODEGEN_INLINE QWORD GetSource0_SourceSubregisterNumber44() {
2113         __CODEGEN_GET_MACRO();
2114         return (QWORD)StructureEu_Instruction_Controls_AAccessmodeIsAlign16AndStructureEu_Instruction_Operand_ControlsSrc0RegfileNotImmAndSource0SourceAddressingModeIsDirect.Source0_SourceSubregisterNumber44 << 4;
2115     }
2116 
SetSource0_SourceSubregisterNumber44(QWORD Source0_SourceSubregisterNumber44Value)2117     __CODEGEN_INLINE void SetSource0_SourceSubregisterNumber44(QWORD Source0_SourceSubregisterNumber44Value) {
2118         __CODEGEN_SET_MACRO(Source0_SourceSubregisterNumber44Value);
2119         StructureEu_Instruction_Controls_AAccessmodeIsAlign16AndStructureEu_Instruction_Operand_ControlsSrc0RegfileNotImmAndSource0SourceAddressingModeIsDirect.Source0_SourceSubregisterNumber44 = Source0_SourceSubregisterNumber44Value >> 4;
2120     }
2121 
2122     //__CODEGEN_INLINE QWORD GetSource0_SourceRegisterNumber_1() {
2123     //    __CODEGEN_GET_MACRO();
2124     //    return (QWORD)StructureEu_Instruction_Controls_AAccessmodeIsAlign16AndStructureEu_Instruction_Operand_ControlsSrc0RegfileNotImmAndSource0SourceAddressingModeIsDirect.Source0_SourceRegisterNumber;
2125     //}
2126 
2127     //__CODEGEN_INLINE void SetSource0_SourceRegisterNumber_1(QWORD Source0_SourceRegisterNumber_1Value) {
2128     //    __CODEGEN_SET_MACRO(Source0_SourceRegisterNumber_1Value);
2129     //    StructureEu_Instruction_Controls_AAccessmodeIsAlign16AndStructureEu_Instruction_Operand_ControlsSrc0RegfileNotImmAndSource0SourceAddressingModeIsDirect.Source0_SourceRegisterNumber = Source0_SourceRegisterNumber_1Value;
2130     //}
2131     //
GetSource0_SourceAddressImmediate84()2132     __CODEGEN_INLINE QWORD GetSource0_SourceAddressImmediate84() {
2133         __CODEGEN_GET_MACRO();
2134         return (QWORD)StructureEu_Instruction_Controls_AAccessmodeIsAlign16AndStructureEu_Instruction_Operand_ControlsSrc0RegfileNotImmAndSource0SourceAddressingModeIsIndirect.Source0_SourceAddressImmediate84 << 4;
2135     }
2136 
SetSource0_SourceAddressImmediate84(QWORD Source0_SourceAddressImmediate84Value)2137     __CODEGEN_INLINE void SetSource0_SourceAddressImmediate84(QWORD Source0_SourceAddressImmediate84Value) {
2138         __CODEGEN_SET_MACRO(Source0_SourceAddressImmediate84Value);
2139         StructureEu_Instruction_Controls_AAccessmodeIsAlign16AndStructureEu_Instruction_Operand_ControlsSrc0RegfileNotImmAndSource0SourceAddressingModeIsIndirect.Source0_SourceAddressImmediate84 = Source0_SourceAddressImmediate84Value >> 4;
2140     }
2141 
GetSource0AddressImmediate9SignBit()2142     __CODEGEN_INLINE QWORD GetSource0AddressImmediate9SignBit() {
2143         __CODEGEN_GET_MACRO();
2144         return (QWORD)Source0SourceAddressingModeIsIndirect.Source0AddressImmediate9SignBit;
2145     }
2146 
SetSource0AddressImmediate9SignBit(QWORD Source0AddressImmediate9SignBitValue)2147     __CODEGEN_INLINE void SetSource0AddressImmediate9SignBit(QWORD Source0AddressImmediate9SignBitValue) {
2148         __CODEGEN_SET_MACRO(Source0AddressImmediate9SignBitValue);
2149         Source0SourceAddressingModeIsIndirect.Source0AddressImmediate9SignBit = Source0AddressImmediate9SignBitValue;
2150     }
2151 
2152 } __CODEGEN_ATTRIBUTES_STRUCTURE EU_INSTRUCTION_SOURCES_REG_IMM;
2153 
2154 C_ASSERT(8 == sizeof(EU_INSTRUCTION_SOURCES_REG_IMM));
2155 
2156 /*****************************************************************************\
2157 Dual source, both registers
2158 \*****************************************************************************/
2159 typedef union tagEU_INSTRUCTION_SOURCES_REG_REG {
2160     struct tagCommon {
2161         QWORD __CODEGEN_UNIQUE(Overridden) : BITFIELD_RANGE(  0, 24); // Override
2162         QWORD Src1Regfile                  : BITFIELD_RANGE( 25, 26); // REGFILE
2163 
2164         /*****************************************************************************\
2165         This field specifies the numeric data type of the source operand src1. The bits of a source operand are interpreted as the identified numeric data type, rather than coerced into a type implied by the operator. Depending on RegFile field of the source operand, there are two different encoding for this field. If a source is a register operand, this field follows the Source Register Type Encoding. If a source is an immediate operand, this field follows the Source Immediate Type Encoding.
2166 
2167         Programming Notes:
2168         Both source operands, src0 and src1, support immediate types, but only one immediate is allowed for a given instruction and it must be the last operand.
2169 
2170         Halfbyte integer vector (v) type can only be used in instructions in packed-word execution mode. Therefore, in a two-source instruction where src1 is of type :v, src0 must be of type :b, :ub, :w, or :uw.
2171         \*****************************************************************************/
2172         QWORD Src1Srctype                  : BITFIELD_RANGE( 27, 30); // SRCTYPE
2173         QWORD __CODEGEN_UNIQUE(Overridden) : BITFIELD_RANGE( 31, 57); // Override
2174         QWORD __CODEGEN_UNIQUE(Reserved)   : BITFIELD_RANGE( 58, 63); // MBZ
2175     } Common;
2176     struct tagStructureEu_Instruction_Controls_AAccessmodeIsAlign16AndStructureEu_Instruction_Operand_ControlsSrc0RegfileNotImm {
2177         QWORD Source0_SourceChannelSelect30 : BITFIELD_RANGE(  0,  3); // ChanSel[4][3:0]
2178         QWORD __CODEGEN_UNIQUE(Overridden)  : BITFIELD_RANGE(  4, 14); // Override
2179         QWORD Source0_SourceAddressingMode  : BITFIELD_BIT(       15); // ADDRMODE
2180         QWORD Source0_SourceChannelSelect74 : BITFIELD_RANGE( 16, 19); // ChanSel[4][7:4]
2181         QWORD __CODEGEN_UNIQUE(Reserved)    : BITFIELD_BIT(       20); // MBZ
2182         QWORD Source0_SourceVerticalStride  : BITFIELD_RANGE( 21, 24); // VERTSTRIDE
2183         QWORD __CODEGEN_UNIQUE(Overridden)  : BITFIELD_RANGE( 25, 63); // Override
2184     } StructureEu_Instruction_Controls_AAccessmodeIsAlign16AndStructureEu_Instruction_Operand_ControlsSrc0RegfileNotImm;
2185     struct tagStructureEu_Instruction_Controls_AAccessmodeIsAlign16AndStructureEu_Instruction_Operand_ControlsSrc0RegfileNotImmAndSource0SourceAddressingModeIsDirect {
2186         QWORD __CODEGEN_UNIQUE(Overridden)      : BITFIELD_RANGE(  0,  3); // Override
2187         QWORD Source0_SourceSubregisterNumber44 : BITFIELD_BIT(        4); // SrcSubRegNum[4:4]
2188         QWORD Source0_SourceRegisterNumber      : BITFIELD_RANGE(  5, 12); //
2189         QWORD __CODEGEN_UNIQUE(Overridden)      : BITFIELD_RANGE( 13, 63); // Override
2190     } StructureEu_Instruction_Controls_AAccessmodeIsAlign16AndStructureEu_Instruction_Operand_ControlsSrc0RegfileNotImmAndSource0SourceAddressingModeIsDirect;
2191     struct tagStructureEu_Instruction_Controls_AAccessmodeIsAlign16AndStructureEu_Instruction_Operand_ControlsSrc0RegfileNotImmAndSource0SourceAddressingModeIsIndirect {
2192         QWORD __CODEGEN_UNIQUE(Overridden)     : BITFIELD_RANGE(  0,  3); // Override
2193         QWORD Source0_SourceAddressImmediate84 : BITFIELD_RANGE(  4,  8); // S9[8:4]
2194         QWORD Source0_AddressSubregisterNumber : BITFIELD_RANGE(  9, 12); //
2195         QWORD __CODEGEN_UNIQUE(Overridden)     : BITFIELD_RANGE( 13, 63); // Override
2196     } StructureEu_Instruction_Controls_AAccessmodeIsAlign16AndStructureEu_Instruction_Operand_ControlsSrc0RegfileNotImmAndSource0SourceAddressingModeIsIndirect;
2197     struct tagStructureEu_Instruction_Controls_AAccessmodeIsAlign16AndStructureEu_Instruction_Operand_ControlsSrc0RegfileNotImmAndPropertySourceModifierIsFalse {
2198         QWORD __CODEGEN_UNIQUE(Overridden) : BITFIELD_RANGE(  0, 12); // Override
2199         QWORD __CODEGEN_UNIQUE(Reserved)   : BITFIELD_RANGE( 13, 14); // MBZ
2200         QWORD __CODEGEN_UNIQUE(Overridden) : BITFIELD_RANGE( 15, 63); // Override
2201     } StructureEu_Instruction_Controls_AAccessmodeIsAlign16AndStructureEu_Instruction_Operand_ControlsSrc0RegfileNotImmAndPropertySourceModifierIsFalse;
2202     struct tagStructureEu_Instruction_Controls_AAccessmodeIsAlign16AndStructureEu_Instruction_Operand_ControlsSrc0RegfileNotImmAndPropertySourceModifierIsTrue {
2203         QWORD __CODEGEN_UNIQUE(Overridden) : BITFIELD_RANGE(  0, 12); // Override
2204         QWORD Source0_SourceModifier       : BITFIELD_RANGE( 13, 14); // SRCMOD
2205         QWORD __CODEGEN_UNIQUE(Overridden) : BITFIELD_RANGE( 15, 63); // Override
2206     } StructureEu_Instruction_Controls_AAccessmodeIsAlign16AndStructureEu_Instruction_Operand_ControlsSrc0RegfileNotImmAndPropertySourceModifierIsTrue;
2207     struct tagStructureEu_Instruction_Controls_AAccessmodeIsAlign1AndStructureEu_Instruction_Operand_ControlsSrc0RegfileNotImmAndSource0SourceAddressingModeIsDirect {
2208         QWORD Source0_SourceSubRegisterNumber : BITFIELD_RANGE(  0,  4); //
2209         QWORD Source0_SourceRegisterNumber    : BITFIELD_RANGE(  5, 12); //
2210         QWORD __CODEGEN_UNIQUE(Overridden)    : BITFIELD_RANGE( 13, 63); // Override
2211     } StructureEu_Instruction_Controls_AAccessmodeIsAlign1AndStructureEu_Instruction_Operand_ControlsSrc0RegfileNotImmAndSource0SourceAddressingModeIsDirect;
2212     struct tagStructureEu_Instruction_Controls_AAccessmodeIsAlign1AndStructureEu_Instruction_Operand_ControlsSrc0RegfileNotImmAndSource0SourceAddressingModeIsIndirect {
2213         QWORD Source0_SourceAddressImmediate80 : BITFIELD_RANGE(0, 8); // S9[8:0]
2214         QWORD Source0_AddressSubregisterNumber : BITFIELD_RANGE(9, 12); //
2215         QWORD __CODEGEN_UNIQUE(Overridden) : BITFIELD_RANGE(13, 30); // Override
2216         QWORD Source0_SourceAddressImmediate9 : BITFIELD_RANGE(31, 31); // S9[9:9]
2217         QWORD __CODEGEN_UNIQUE(Overridden) : BITFIELD_RANGE(32, 63); // Override
2218     } StructureEu_Instruction_Controls_AAccessmodeIsAlign1AndStructureEu_Instruction_Operand_ControlsSrc0RegfileNotImmAndSource0SourceAddressingModeIsIndirect;
2219     struct tagStructureEu_Instruction_Controls_AAccessmodeIsAlign1AndStructureEu_Instruction_Operand_ControlsSrc0RegfileNotImmAndPropertySourceModifierIsFalse {
2220         QWORD __CODEGEN_UNIQUE(Overridden) : BITFIELD_RANGE(  0, 12); // Override
2221         QWORD __CODEGEN_UNIQUE(Reserved)   : BITFIELD_RANGE( 13, 14); // MBZ
2222         QWORD __CODEGEN_UNIQUE(Overridden) : BITFIELD_RANGE( 15, 63); // Override
2223     } StructureEu_Instruction_Controls_AAccessmodeIsAlign1AndStructureEu_Instruction_Operand_ControlsSrc0RegfileNotImmAndPropertySourceModifierIsFalse;
2224     struct tagStructureEu_Instruction_Controls_AAccessmodeIsAlign1AndStructureEu_Instruction_Operand_ControlsSrc0RegfileNotImmAndPropertySourceModifierIsTrue {
2225         QWORD __CODEGEN_UNIQUE(Overridden) : BITFIELD_RANGE(  0, 12); // Override
2226         QWORD Source0_SourceModifier       : BITFIELD_RANGE( 13, 14); // SRCMOD
2227         QWORD __CODEGEN_UNIQUE(Overridden) : BITFIELD_RANGE( 15, 63); // Override
2228     } StructureEu_Instruction_Controls_AAccessmodeIsAlign1AndStructureEu_Instruction_Operand_ControlsSrc0RegfileNotImmAndPropertySourceModifierIsTrue;
2229 
2230     struct tagStructureEu_Instruction_Controls_AAccessmodeIsAlign1AndStructureEu_Instruction_Operand_ControlsSrc0RegfileNotImm {
2231         QWORD __CODEGEN_UNIQUE(Overridden)   : BITFIELD_RANGE(  0, 14); // Override
2232         QWORD Source0_SourceAddressingMode   : BITFIELD_BIT(       15); // ADDRMODE
2233         QWORD Source0_SourceHorizontalStride : BITFIELD_RANGE( 16, 17); // HORZSTRIDE
2234         QWORD Source0_SourceWidth            : BITFIELD_RANGE( 18, 20); // WIDTH
2235         QWORD Source0_SourceVerticalStride   : BITFIELD_RANGE( 21, 24); // VERTSTRIDE
2236         QWORD __CODEGEN_UNIQUE(Overridden)   : BITFIELD_RANGE( 25, 63); // Override
2237     } StructureEu_Instruction_Controls_AAccessmodeIsAlign1AndStructureEu_Instruction_Operand_ControlsSrc0RegfileNotImm;
2238     struct tagSource0SourceAddressingModeIsDirect {
2239         QWORD __CODEGEN_UNIQUE(Overridden) : BITFIELD_RANGE(  0, 30); // Override
2240         QWORD __CODEGEN_UNIQUE(Reserved)   : BITFIELD_BIT(       31); // MBZ
2241         QWORD __CODEGEN_UNIQUE(Overridden)   : BITFIELD_RANGE( 32, 63); // Override
2242     } Source0SourceAddressingModeIsDirect;
2243     struct tagSource0SourceAddressingModeIsIndirect {
2244         QWORD __CODEGEN_UNIQUE(Overridden)    : BITFIELD_RANGE(  0, 30); // Override
2245         QWORD Source0AddressImmediate9SignBit : BITFIELD_BIT(       31); // S9[9]
2246         QWORD __CODEGEN_UNIQUE(Overridden)   : BITFIELD_RANGE( 32, 63); // Override
2247     } Source0SourceAddressingModeIsIndirect;
2248     struct tagStructureEu_Instruction_Controls_AAccessmodeIsAlign16 {
2249         QWORD __CODEGEN_UNIQUE(Overridden)   : BITFIELD_RANGE( 0, 31); // Override
2250         QWORD Source1_SourceChannelSelect30 : BITFIELD_RANGE( 32, 35); // ChanSel[4][3:0]
2251         QWORD __CODEGEN_UNIQUE(Overridden)  : BITFIELD_RANGE( 36, 46); // Override
2252         QWORD Source1_SourceAddressingMode  : BITFIELD_BIT(       47); // ADDRMODE
2253         QWORD Source1_SourceChannelSelect74 : BITFIELD_RANGE( 48, 51); // ChanSel[4][7:4]
2254         QWORD __CODEGEN_UNIQUE(Reserved)    : BITFIELD_BIT(       52); // MBZ
2255         QWORD Source1_SourceVerticalStride  : BITFIELD_RANGE( 53, 56); // VERTSTRIDE
2256         QWORD __CODEGEN_UNIQUE(Overridden)  : BITFIELD_RANGE( 57, 63); // Override
2257     } StructureEu_Instruction_Controls_AAccessmodeIsAlign16;
2258     struct tagStructureEu_Instruction_Controls_AAccessmodeIsAlign16AndSource1SourceAddressingModeIsDirect {
2259         QWORD __CODEGEN_UNIQUE(Overridden)      : BITFIELD_RANGE(  0, 35); // Override
2260         QWORD Source1_SourceSubregisterNumber44 : BITFIELD_BIT(       36); // SrcSubRegNum[4:4]
2261         QWORD Source1_SourceRegisterNumber      : BITFIELD_RANGE( 37, 44); //
2262         QWORD __CODEGEN_UNIQUE(Overridden)      : BITFIELD_RANGE( 45, 63); // Override
2263     } StructureEu_Instruction_Controls_AAccessmodeIsAlign16AndSource1SourceAddressingModeIsDirect;
2264     struct tagStructureEu_Instruction_Controls_AAccessmodeIsAlign16AndSource1SourceAddressingModeIsIndirect {
2265         QWORD __CODEGEN_UNIQUE(Overridden)     : BITFIELD_RANGE(  0, 35); // Override
2266         QWORD Source1_SourceAddressImmediate84 : BITFIELD_RANGE( 36, 40); // S9[8:4]
2267         QWORD Source1_AddressSubregisterNumber : BITFIELD_RANGE( 41, 44); //
2268         QWORD __CODEGEN_UNIQUE(Overridden)     : BITFIELD_RANGE( 45, 63); // Override
2269     } StructureEu_Instruction_Controls_AAccessmodeIsAlign16AndSource1SourceAddressingModeIsIndirect;
2270     struct tagStructureEu_Instruction_Controls_AAccessmodeIsAlign16AndPropertySourceModifierIsFalse {
2271         QWORD __CODEGEN_UNIQUE(Overridden) : BITFIELD_RANGE(  0, 44); // Override
2272         QWORD __CODEGEN_UNIQUE(Reserved)   : BITFIELD_RANGE( 45, 46); // MBZ
2273         QWORD __CODEGEN_UNIQUE(Overridden) : BITFIELD_RANGE( 47, 63); // Override
2274     } StructureEu_Instruction_Controls_AAccessmodeIsAlign16AndPropertySourceModifierIsFalse;
2275     struct tagStructureEu_Instruction_Controls_AAccessmodeIsAlign16AndPropertySourceModifierIsTrue {
2276         QWORD __CODEGEN_UNIQUE(Overridden) : BITFIELD_RANGE(  0, 44); // Override
2277         QWORD Source1_SourceModifier       : BITFIELD_RANGE( 45, 46); // SRCMOD
2278         QWORD __CODEGEN_UNIQUE(Overridden) : BITFIELD_RANGE( 47, 63); // Override
2279     } StructureEu_Instruction_Controls_AAccessmodeIsAlign16AndPropertySourceModifierIsTrue;
2280     struct tagStructureEu_Instruction_Controls_AAccessmodeIsAlign1AndSource1SourceAddressingModeIsDirect {
2281         QWORD __CODEGEN_UNIQUE(Overridden)     : BITFIELD_RANGE(  0, 31); // Override
2282         QWORD Source1_SourceSubRegisterNumber : BITFIELD_RANGE( 32, 36); //
2283         QWORD Source1_SourceRegisterNumber    : BITFIELD_RANGE( 37, 44); //
2284         QWORD __CODEGEN_UNIQUE(Overridden)    : BITFIELD_RANGE( 45, 63); // Override
2285     } StructureEu_Instruction_Controls_AAccessmodeIsAlign1AndSource1SourceAddressingModeIsDirect;
2286     struct tagStructureEu_Instruction_Controls_AAccessmodeIsAlign1AndSource1SourceAddressingModeIsIndirect {
2287         QWORD __CODEGEN_UNIQUE(Overridden)     : BITFIELD_RANGE(  0, 31); // Override
2288         QWORD Source1_SourceAddressImmediate80 : BITFIELD_RANGE( 32, 40); // S9[8:0]
2289         QWORD Source1_AddressSubregisterNumber : BITFIELD_RANGE( 41, 44); //
2290         QWORD __CODEGEN_UNIQUE(Overridden)     : BITFIELD_RANGE( 45, 56); // Override
2291         QWORD Source1_SourceAddressImmediate9  : BITFIELD_RANGE( 57, 57); // S9[9:9]
2292         QWORD __CODEGEN_UNIQUE(Overridden)     : BITFIELD_RANGE( 58, 63); // Override
2293     } StructureEu_Instruction_Controls_AAccessmodeIsAlign1AndSource1SourceAddressingModeIsIndirect;
2294     struct tagStructureEu_Instruction_Controls_AAccessmodeIsAlign1AndPropertySourceModifierIsFalse {
2295         QWORD __CODEGEN_UNIQUE(Overridden) : BITFIELD_RANGE(  0, 44); // Override
2296         QWORD __CODEGEN_UNIQUE(Reserved)   : BITFIELD_RANGE( 45, 46); // MBZ
2297         QWORD __CODEGEN_UNIQUE(Overridden) : BITFIELD_RANGE( 47, 63); // Override
2298     } StructureEu_Instruction_Controls_AAccessmodeIsAlign1AndPropertySourceModifierIsFalse;
2299     struct tagStructureEu_Instruction_Controls_AAccessmodeIsAlign1AndPropertySourceModifierIsTrue {
2300         QWORD __CODEGEN_UNIQUE(Overridden) : BITFIELD_RANGE(  0, 44); // Override
2301         QWORD Source1_SourceModifier       : BITFIELD_RANGE( 45, 46); // SRCMOD
2302         QWORD __CODEGEN_UNIQUE(Overridden) : BITFIELD_RANGE( 47, 63); // Override
2303     } StructureEu_Instruction_Controls_AAccessmodeIsAlign1AndPropertySourceModifierIsTrue;
2304     struct tagStructureEu_Instruction_Controls_AAccessmodeIsAlign1 {
2305         QWORD __CODEGEN_UNIQUE(Overridden)   : BITFIELD_RANGE(  0, 46); // Override
2306         QWORD Source1_SourceAddressingMode   : BITFIELD_BIT(       47); // ADDRMODE
2307         QWORD Source1_SourceHorizontalStride : BITFIELD_RANGE( 48, 49); // HORZSTRIDE
2308         QWORD Source1_SourceWidth            : BITFIELD_RANGE( 50, 52); // WIDTH
2309         QWORD Source1_SourceVerticalStride   : BITFIELD_RANGE( 53, 56); // VERTSTRIDE
2310         QWORD __CODEGEN_UNIQUE(Overridden)   : BITFIELD_RANGE( 57, 63); // Override
2311     } StructureEu_Instruction_Controls_AAccessmodeIsAlign1;
2312     struct tagSource1SourceAddressingModeIsDirect {
2313         QWORD __CODEGEN_UNIQUE(Overridden) : BITFIELD_RANGE(  0, 56); // Override
2314         QWORD __CODEGEN_UNIQUE(Reserved)   : BITFIELD_BIT(       57); // MBZ
2315         QWORD __CODEGEN_UNIQUE(Overridden) : BITFIELD_RANGE( 58, 63); // Override
2316     } Source1SourceAddressingModeIsDirect;
2317     struct tagSource1SourceAddressingModeIsIndirect {
2318         QWORD __CODEGEN_UNIQUE(Overridden)    : BITFIELD_RANGE(  0, 56); // Override
2319         QWORD Source1AddressImmediate9SignBit : BITFIELD_BIT(       57); // S9[9]
2320         QWORD __CODEGEN_UNIQUE(Overridden)    : BITFIELD_RANGE( 58, 63); // Override
2321     } Source1SourceAddressingModeIsIndirect;
2322     QWORD RawData[1];
2323 
2324     // INITIALIZATION
2325     //
Init()2326     __CODEGEN_INLINE void Init() {
2327         RawData[0]         = 0x0;
2328         Common.Src1Regfile = 0x0;
2329         Common.Src1Srctype = 0x0;
2330     }
2331 
sInit()2332     static tagEU_INSTRUCTION_SOURCES_REG_REG sInit() {
2333         tagEU_INSTRUCTION_SOURCES_REG_REG state;
2334         state.Init();
2335         return state;
2336     }
2337 
2338     // ACCESSORS
2339     //
2340     //__CODEGEN_INLINE QWORD& GetDWord(UINT const index) {
2341     //    return RawData[index];
2342     //}
2343 
2344     static size_t CalculateSize(UINT const entryCount = 0) {
2345         return 0;
2346     }
2347 
GetSize()2348     __CODEGEN_INLINE size_t GetSize() {
2349         return 0;
2350     }
2351 
GetSrc1Regfile()2352     __CODEGEN_INLINE REGFILE GetSrc1Regfile() {
2353         __CODEGEN_GET_MACRO();
2354         return (REGFILE)Common.Src1Regfile;
2355     }
2356 
SetSrc1Regfile(REGFILE Src1RegfileValue)2357     __CODEGEN_INLINE void SetSrc1Regfile(REGFILE Src1RegfileValue) {
2358         __CODEGEN_SET_MACRO(Src1RegfileValue);
2359         Common.Src1Regfile = Src1RegfileValue;
2360     }
2361 
GetSrc1Srctype()2362     __CODEGEN_INLINE int GetSrc1Srctype() {
2363         __CODEGEN_GET_MACRO();
2364         return Common.Src1Srctype;
2365     }
2366 
SetSrc1Srctype(int Src1SrctypeValue)2367     __CODEGEN_INLINE void SetSrc1Srctype(int Src1SrctypeValue) {
2368         __CODEGEN_SET_MACRO(Src1SrctypeValue);
2369         Common.Src1Srctype = Src1SrctypeValue;
2370     }
2371 
GetSource0_SourceChannelSelect30()2372     __CODEGEN_INLINE QWORD GetSource0_SourceChannelSelect30() {
2373         __CODEGEN_GET_MACRO();
2374         return (QWORD)StructureEu_Instruction_Controls_AAccessmodeIsAlign16AndStructureEu_Instruction_Operand_ControlsSrc0RegfileNotImm.Source0_SourceChannelSelect30;
2375     }
2376 
SetSource0_SourceChannelSelect30(QWORD Source0_SourceChannelSelect30Value)2377     __CODEGEN_INLINE void SetSource0_SourceChannelSelect30(QWORD Source0_SourceChannelSelect30Value) {
2378         __CODEGEN_SET_MACRO(Source0_SourceChannelSelect30Value);
2379         StructureEu_Instruction_Controls_AAccessmodeIsAlign16AndStructureEu_Instruction_Operand_ControlsSrc0RegfileNotImm.Source0_SourceChannelSelect30 = Source0_SourceChannelSelect30Value;
2380     }
2381 
GetSource0_SourceAddressingMode_0()2382     __CODEGEN_INLINE ADDRMODE GetSource0_SourceAddressingMode_0() {
2383         __CODEGEN_GET_MACRO();
2384         return (ADDRMODE)StructureEu_Instruction_Controls_AAccessmodeIsAlign16AndStructureEu_Instruction_Operand_ControlsSrc0RegfileNotImm.Source0_SourceAddressingMode;
2385     }
2386 
SetSource0_SourceAddressingMode_0(ADDRMODE Source0_SourceAddressingMode_0Value)2387     __CODEGEN_INLINE void SetSource0_SourceAddressingMode_0(ADDRMODE Source0_SourceAddressingMode_0Value) {
2388         __CODEGEN_SET_MACRO(Source0_SourceAddressingMode_0Value);
2389         StructureEu_Instruction_Controls_AAccessmodeIsAlign16AndStructureEu_Instruction_Operand_ControlsSrc0RegfileNotImm.Source0_SourceAddressingMode = Source0_SourceAddressingMode_0Value;
2390     }
2391 
GetSource0_SourceChannelSelect74()2392     __CODEGEN_INLINE QWORD GetSource0_SourceChannelSelect74() {
2393         __CODEGEN_GET_MACRO();
2394         return (QWORD)StructureEu_Instruction_Controls_AAccessmodeIsAlign16AndStructureEu_Instruction_Operand_ControlsSrc0RegfileNotImm.Source0_SourceChannelSelect74 << 4;
2395     }
2396 
SetSource0_SourceChannelSelect74(QWORD Source0_SourceChannelSelect74Value)2397     __CODEGEN_INLINE void SetSource0_SourceChannelSelect74(QWORD Source0_SourceChannelSelect74Value) {
2398         __CODEGEN_SET_MACRO(Source0_SourceChannelSelect74Value);
2399         StructureEu_Instruction_Controls_AAccessmodeIsAlign16AndStructureEu_Instruction_Operand_ControlsSrc0RegfileNotImm.Source0_SourceChannelSelect74 = Source0_SourceChannelSelect74Value >> 4;
2400     }
2401 
GetSource0_SourceVerticalStride()2402     __CODEGEN_INLINE VERTSTRIDE GetSource0_SourceVerticalStride() {
2403         __CODEGEN_GET_MACRO();
2404         return (VERTSTRIDE)StructureEu_Instruction_Controls_AAccessmodeIsAlign16AndStructureEu_Instruction_Operand_ControlsSrc0RegfileNotImm.Source0_SourceVerticalStride;
2405     }
2406 
SetSource0_SourceVerticalStride(VERTSTRIDE Source0_SourceVerticalStride_0Value)2407     __CODEGEN_INLINE void SetSource0_SourceVerticalStride(VERTSTRIDE Source0_SourceVerticalStride_0Value) {
2408         __CODEGEN_SET_MACRO(Source0_SourceVerticalStride_0Value);
2409         StructureEu_Instruction_Controls_AAccessmodeIsAlign16AndStructureEu_Instruction_Operand_ControlsSrc0RegfileNotImm.Source0_SourceVerticalStride = Source0_SourceVerticalStride_0Value;
2410     }
2411 
GetSource0_SourceSubregisterNumber44()2412     __CODEGEN_INLINE QWORD GetSource0_SourceSubregisterNumber44() {
2413         __CODEGEN_GET_MACRO();
2414         return (QWORD)StructureEu_Instruction_Controls_AAccessmodeIsAlign16AndStructureEu_Instruction_Operand_ControlsSrc0RegfileNotImmAndSource0SourceAddressingModeIsDirect.Source0_SourceSubregisterNumber44 << 4;
2415     }
2416 
SetSource0_SourceSubregisterNumber44(QWORD Source0_SourceSubregisterNumber44Value)2417     __CODEGEN_INLINE void SetSource0_SourceSubregisterNumber44(QWORD Source0_SourceSubregisterNumber44Value) {
2418         __CODEGEN_SET_MACRO(Source0_SourceSubregisterNumber44Value);
2419         StructureEu_Instruction_Controls_AAccessmodeIsAlign16AndStructureEu_Instruction_Operand_ControlsSrc0RegfileNotImmAndSource0SourceAddressingModeIsDirect.Source0_SourceSubregisterNumber44 = Source0_SourceSubregisterNumber44Value >> 4;
2420     }
2421 
GetSource0_SourceRegisterNumber()2422     __CODEGEN_INLINE QWORD GetSource0_SourceRegisterNumber() {
2423         __CODEGEN_GET_MACRO();
2424         return (QWORD)StructureEu_Instruction_Controls_AAccessmodeIsAlign16AndStructureEu_Instruction_Operand_ControlsSrc0RegfileNotImmAndSource0SourceAddressingModeIsDirect.Source0_SourceRegisterNumber;
2425     }
2426 
SetSource0_SourceRegisterNumber(QWORD Source0_SourceRegisterNumber_0Value)2427     __CODEGEN_INLINE void SetSource0_SourceRegisterNumber(QWORD Source0_SourceRegisterNumber_0Value) {
2428         __CODEGEN_SET_MACRO(Source0_SourceRegisterNumber_0Value);
2429         StructureEu_Instruction_Controls_AAccessmodeIsAlign16AndStructureEu_Instruction_Operand_ControlsSrc0RegfileNotImmAndSource0SourceAddressingModeIsDirect.Source0_SourceRegisterNumber = Source0_SourceRegisterNumber_0Value;
2430     }
2431 
GetSource0_SourceAddressImmediate84()2432     __CODEGEN_INLINE QWORD GetSource0_SourceAddressImmediate84() {
2433         __CODEGEN_GET_MACRO();
2434         return (QWORD)StructureEu_Instruction_Controls_AAccessmodeIsAlign16AndStructureEu_Instruction_Operand_ControlsSrc0RegfileNotImmAndSource0SourceAddressingModeIsIndirect.Source0_SourceAddressImmediate84 << 4;
2435     }
2436 
SetSource0_SourceAddressImmediate84(QWORD Source0_SourceAddressImmediate84Value)2437     __CODEGEN_INLINE void SetSource0_SourceAddressImmediate84(QWORD Source0_SourceAddressImmediate84Value) {
2438         __CODEGEN_SET_MACRO(Source0_SourceAddressImmediate84Value);
2439         StructureEu_Instruction_Controls_AAccessmodeIsAlign16AndStructureEu_Instruction_Operand_ControlsSrc0RegfileNotImmAndSource0SourceAddressingModeIsIndirect.Source0_SourceAddressImmediate84 = Source0_SourceAddressImmediate84Value >> 4;
2440     }
2441 
2442 
2443 
GetSource0_AddressSubregisterNumber_0()2444     __CODEGEN_INLINE QWORD GetSource0_AddressSubregisterNumber_0() {
2445         __CODEGEN_GET_MACRO();
2446         return (QWORD)StructureEu_Instruction_Controls_AAccessmodeIsAlign16AndStructureEu_Instruction_Operand_ControlsSrc0RegfileNotImmAndSource0SourceAddressingModeIsIndirect.Source0_AddressSubregisterNumber;
2447     }
2448 
SetSource0_AddressSubregisterNumber_0(QWORD Source0_AddressSubregisterNumber_0Value)2449     __CODEGEN_INLINE void SetSource0_AddressSubregisterNumber_0(QWORD Source0_AddressSubregisterNumber_0Value) {
2450         __CODEGEN_SET_MACRO(Source0_AddressSubregisterNumber_0Value);
2451         StructureEu_Instruction_Controls_AAccessmodeIsAlign16AndStructureEu_Instruction_Operand_ControlsSrc0RegfileNotImmAndSource0SourceAddressingModeIsIndirect.Source0_AddressSubregisterNumber = Source0_AddressSubregisterNumber_0Value;
2452     }
2453 
GetSource0_SourceModifier()2454     __CODEGEN_INLINE SRCMOD GetSource0_SourceModifier() {
2455         __CODEGEN_GET_MACRO();
2456         return (SRCMOD)StructureEu_Instruction_Controls_AAccessmodeIsAlign16AndStructureEu_Instruction_Operand_ControlsSrc0RegfileNotImmAndPropertySourceModifierIsTrue.Source0_SourceModifier;
2457     }
2458 
SetSource0_SourceModifier(SRCMOD Source0_SourceModifier_0Value)2459     __CODEGEN_INLINE void SetSource0_SourceModifier(SRCMOD Source0_SourceModifier_0Value) {
2460         __CODEGEN_SET_MACRO(Source0_SourceModifier_0Value);
2461         StructureEu_Instruction_Controls_AAccessmodeIsAlign16AndStructureEu_Instruction_Operand_ControlsSrc0RegfileNotImmAndPropertySourceModifierIsTrue.Source0_SourceModifier = Source0_SourceModifier_0Value;
2462     }
2463 
GetSource0_SourceSubRegisterNumber()2464     __CODEGEN_INLINE QWORD GetSource0_SourceSubRegisterNumber() {
2465         __CODEGEN_GET_MACRO();
2466         return (QWORD)StructureEu_Instruction_Controls_AAccessmodeIsAlign1AndStructureEu_Instruction_Operand_ControlsSrc0RegfileNotImmAndSource0SourceAddressingModeIsDirect.Source0_SourceSubRegisterNumber;
2467     }
2468 
SetSource0_SourceSubRegisterNumber(QWORD Source0_SourceSubRegisterNumberValue)2469     __CODEGEN_INLINE void SetSource0_SourceSubRegisterNumber(QWORD Source0_SourceSubRegisterNumberValue) {
2470         __CODEGEN_SET_MACRO(Source0_SourceSubRegisterNumberValue);
2471         StructureEu_Instruction_Controls_AAccessmodeIsAlign1AndStructureEu_Instruction_Operand_ControlsSrc0RegfileNotImmAndSource0SourceAddressingModeIsDirect.Source0_SourceSubRegisterNumber = Source0_SourceSubRegisterNumberValue;
2472     }
2473 
2474     //__CODEGEN_INLINE QWORD GetSource0_SourceRegisterNumber_1() {
2475     //    __CODEGEN_GET_MACRO();
2476     //    return (QWORD)StructureEu_Instruction_Controls_AAccessmodeIsAlign1AndStructureEu_Instruction_Operand_ControlsSrc0RegfileNotImmAndSource0SourceAddressingModeIsDirect.Source0_SourceRegisterNumber;
2477     //}
2478     //
2479     //__CODEGEN_INLINE void SetSource0_SourceRegisterNumber_1(QWORD Source0_SourceRegisterNumber_1Value) {
2480     //    __CODEGEN_SET_MACRO(Source0_SourceRegisterNumber_1Value);
2481     //    StructureEu_Instruction_Controls_AAccessmodeIsAlign1AndStructureEu_Instruction_Operand_ControlsSrc0RegfileNotImmAndSource0SourceAddressingModeIsDirect.Source0_SourceRegisterNumber = Source0_SourceRegisterNumber_1Value;
2482     //}
2483 
GetSource0_SourceAddressImmediate80()2484     __CODEGEN_INLINE QWORD GetSource0_SourceAddressImmediate80() {
2485         __CODEGEN_GET_MACRO();
2486         return (QWORD)StructureEu_Instruction_Controls_AAccessmodeIsAlign1AndStructureEu_Instruction_Operand_ControlsSrc0RegfileNotImmAndSource0SourceAddressingModeIsIndirect.Source0_SourceAddressImmediate80;
2487     }
2488 
SetSource0_SourceAddressImmediate80(QWORD Source0_SourceAddressImmediate80Value)2489     __CODEGEN_INLINE void SetSource0_SourceAddressImmediate80(QWORD Source0_SourceAddressImmediate80Value) {
2490         __CODEGEN_SET_MACRO(Source0_SourceAddressImmediate80Value);
2491         StructureEu_Instruction_Controls_AAccessmodeIsAlign1AndStructureEu_Instruction_Operand_ControlsSrc0RegfileNotImmAndSource0SourceAddressingModeIsIndirect.Source0_SourceAddressImmediate80 = Source0_SourceAddressImmediate80Value;
2492     }
2493 
SetSource0_SourceAddressImmediate9(QWORD Source0_SourceAddressImmediate9Value)2494     __CODEGEN_INLINE void SetSource0_SourceAddressImmediate9(QWORD Source0_SourceAddressImmediate9Value) {
2495         __CODEGEN_SET_MACRO(Source0_SourceAddressImmediate9Value);
2496         StructureEu_Instruction_Controls_AAccessmodeIsAlign1AndStructureEu_Instruction_Operand_ControlsSrc0RegfileNotImmAndSource0SourceAddressingModeIsIndirect.Source0_SourceAddressImmediate9 = Source0_SourceAddressImmediate9Value;
2497     }
2498 
GetSource0_SourceAddressingMode()2499     __CODEGEN_INLINE ADDRMODE GetSource0_SourceAddressingMode() {
2500         __CODEGEN_GET_MACRO();
2501         return (ADDRMODE)StructureEu_Instruction_Controls_AAccessmodeIsAlign1AndStructureEu_Instruction_Operand_ControlsSrc0RegfileNotImm.Source0_SourceAddressingMode;
2502     }
2503 
SetSource0_SourceAddressingMode(ADDRMODE Source0_SourceAddressingMode_1Value)2504     __CODEGEN_INLINE void SetSource0_SourceAddressingMode(ADDRMODE Source0_SourceAddressingMode_1Value) {
2505         __CODEGEN_SET_MACRO(Source0_SourceAddressingMode_1Value);
2506         StructureEu_Instruction_Controls_AAccessmodeIsAlign1AndStructureEu_Instruction_Operand_ControlsSrc0RegfileNotImm.Source0_SourceAddressingMode = Source0_SourceAddressingMode_1Value;
2507     }
2508 
GetSource0_SourceHorizontalStride()2509     __CODEGEN_INLINE HORZSTRIDE GetSource0_SourceHorizontalStride() {
2510         __CODEGEN_GET_MACRO();
2511         return (HORZSTRIDE)StructureEu_Instruction_Controls_AAccessmodeIsAlign1AndStructureEu_Instruction_Operand_ControlsSrc0RegfileNotImm.Source0_SourceHorizontalStride;
2512     }
2513 
SetSource0_SourceHorizontalStride(HORZSTRIDE Source0_SourceHorizontalStrideValue)2514     __CODEGEN_INLINE void SetSource0_SourceHorizontalStride(HORZSTRIDE Source0_SourceHorizontalStrideValue) {
2515         __CODEGEN_SET_MACRO(Source0_SourceHorizontalStrideValue);
2516         StructureEu_Instruction_Controls_AAccessmodeIsAlign1AndStructureEu_Instruction_Operand_ControlsSrc0RegfileNotImm.Source0_SourceHorizontalStride = Source0_SourceHorizontalStrideValue;
2517     }
2518 
GetSource0_SourceWidth()2519     __CODEGEN_INLINE WIDTH GetSource0_SourceWidth() {
2520         __CODEGEN_GET_MACRO();
2521         return (WIDTH)StructureEu_Instruction_Controls_AAccessmodeIsAlign1AndStructureEu_Instruction_Operand_ControlsSrc0RegfileNotImm.Source0_SourceWidth;
2522     }
2523 
SetSource0_SourceWidth(WIDTH Source0_SourceWidthValue)2524     __CODEGEN_INLINE void SetSource0_SourceWidth(WIDTH Source0_SourceWidthValue) {
2525         __CODEGEN_SET_MACRO(Source0_SourceWidthValue);
2526         StructureEu_Instruction_Controls_AAccessmodeIsAlign1AndStructureEu_Instruction_Operand_ControlsSrc0RegfileNotImm.Source0_SourceWidth = Source0_SourceWidthValue;
2527     }
2528 
2529     //__CODEGEN_INLINE VERTSTRIDE GetSource0_SourceVerticalStride() {
2530     //    __CODEGEN_GET_MACRO();
2531     //    return (VERTSTRIDE)StructureEu_Instruction_Controls_AAccessmodeIsAlign1AndStructureEu_Instruction_Operand_ControlsSrc0RegfileNotImm.Source0_SourceVerticalStride;
2532     //}
2533     //
2534     //__CODEGEN_INLINE void SetSource0_SourceVerticalStride(VERTSTRIDE Source0_SourceVerticalStrideValue) {
2535     //    __CODEGEN_SET_MACRO(Source0_SourceVerticalStrideValue);
2536     //    StructureEu_Instruction_Controls_AAccessmodeIsAlign1AndStructureEu_Instruction_Operand_ControlsSrc0RegfileNotImm.Source0_SourceVerticalStride = Source0_SourceVerticalStrideValue;
2537     //}
2538 
GetSource0AddressImmediate9SignBit()2539     __CODEGEN_INLINE QWORD GetSource0AddressImmediate9SignBit() {
2540         __CODEGEN_GET_MACRO();
2541         return (QWORD)Source0SourceAddressingModeIsIndirect.Source0AddressImmediate9SignBit;
2542     }
2543 
SetSource0AddressImmediate9SignBit(QWORD Source0AddressImmediate9SignBitValue)2544     __CODEGEN_INLINE void SetSource0AddressImmediate9SignBit(QWORD Source0AddressImmediate9SignBitValue) {
2545         __CODEGEN_SET_MACRO(Source0AddressImmediate9SignBitValue);
2546         Source0SourceAddressingModeIsIndirect.Source0AddressImmediate9SignBit = Source0AddressImmediate9SignBitValue;
2547     }
2548 
GetSource1_SourceChannelSelect30()2549     __CODEGEN_INLINE QWORD GetSource1_SourceChannelSelect30() {
2550         __CODEGEN_GET_MACRO();
2551         return (QWORD)StructureEu_Instruction_Controls_AAccessmodeIsAlign16.Source1_SourceChannelSelect30;
2552     }
2553 
SetSource1_SourceChannelSelect30(QWORD Source1_SourceChannelSelect30Value)2554     __CODEGEN_INLINE void SetSource1_SourceChannelSelect30(QWORD Source1_SourceChannelSelect30Value) {
2555         __CODEGEN_SET_MACRO(Source1_SourceChannelSelect30Value);
2556         StructureEu_Instruction_Controls_AAccessmodeIsAlign16.Source1_SourceChannelSelect30 = Source1_SourceChannelSelect30Value;
2557     }
2558 
2559 
2560 
GetSource1_SourceAddressingMode_0()2561     __CODEGEN_INLINE ADDRMODE GetSource1_SourceAddressingMode_0() {
2562         __CODEGEN_GET_MACRO();
2563         return (ADDRMODE)StructureEu_Instruction_Controls_AAccessmodeIsAlign16.Source1_SourceAddressingMode;
2564     }
2565 
SetSource1_SourceAddressingMode_0(ADDRMODE Source1_SourceAddressingMode_0Value)2566     __CODEGEN_INLINE void SetSource1_SourceAddressingMode_0(ADDRMODE Source1_SourceAddressingMode_0Value) {
2567         __CODEGEN_SET_MACRO(Source1_SourceAddressingMode_0Value);
2568         StructureEu_Instruction_Controls_AAccessmodeIsAlign16.Source1_SourceAddressingMode = Source1_SourceAddressingMode_0Value;
2569     }
2570 
GetSource1_SourceChannelSelect74()2571     __CODEGEN_INLINE QWORD GetSource1_SourceChannelSelect74() {
2572         __CODEGEN_GET_MACRO();
2573         return (QWORD)StructureEu_Instruction_Controls_AAccessmodeIsAlign16.Source1_SourceChannelSelect74 << 4;
2574     }
2575 
SetSource1_SourceChannelSelect74(QWORD Source1_SourceChannelSelect74Value)2576     __CODEGEN_INLINE void SetSource1_SourceChannelSelect74(QWORD Source1_SourceChannelSelect74Value) {
2577         __CODEGEN_SET_MACRO(Source1_SourceChannelSelect74Value);
2578         StructureEu_Instruction_Controls_AAccessmodeIsAlign16.Source1_SourceChannelSelect74 = Source1_SourceChannelSelect74Value >> 4;
2579     }
2580 
GetSource1_SourceVerticalStride()2581     __CODEGEN_INLINE VERTSTRIDE GetSource1_SourceVerticalStride() {
2582         __CODEGEN_GET_MACRO();
2583         return (VERTSTRIDE)StructureEu_Instruction_Controls_AAccessmodeIsAlign16.Source1_SourceVerticalStride;
2584     }
2585 
SetSource1_SourceVerticalStride(VERTSTRIDE Source1_SourceVerticalStride_0Value)2586     __CODEGEN_INLINE void SetSource1_SourceVerticalStride(VERTSTRIDE Source1_SourceVerticalStride_0Value) {
2587         __CODEGEN_SET_MACRO(Source1_SourceVerticalStride_0Value);
2588         StructureEu_Instruction_Controls_AAccessmodeIsAlign16.Source1_SourceVerticalStride = Source1_SourceVerticalStride_0Value;
2589     }
2590 
GetSource1_SourceSubregisterNumber44()2591     __CODEGEN_INLINE QWORD GetSource1_SourceSubregisterNumber44() {
2592         __CODEGEN_GET_MACRO();
2593         return (QWORD)StructureEu_Instruction_Controls_AAccessmodeIsAlign16AndSource1SourceAddressingModeIsDirect.Source1_SourceSubregisterNumber44 << 4;
2594     }
2595 
SetSource1_SourceSubregisterNumber44(QWORD Source1_SourceSubregisterNumber44Value)2596     __CODEGEN_INLINE void SetSource1_SourceSubregisterNumber44(QWORD Source1_SourceSubregisterNumber44Value) {
2597         __CODEGEN_SET_MACRO(Source1_SourceSubregisterNumber44Value);
2598         StructureEu_Instruction_Controls_AAccessmodeIsAlign16AndSource1SourceAddressingModeIsDirect.Source1_SourceSubregisterNumber44 = Source1_SourceSubregisterNumber44Value >> 4;
2599     }
2600 
GetSource1_SourceRegisterNumber()2601     __CODEGEN_INLINE QWORD GetSource1_SourceRegisterNumber() {
2602         __CODEGEN_GET_MACRO();
2603         return (QWORD)StructureEu_Instruction_Controls_AAccessmodeIsAlign16AndSource1SourceAddressingModeIsDirect.Source1_SourceRegisterNumber;
2604     }
2605 
SetSource1_SourceRegisterNumber(QWORD Source1_SourceRegisterNumber_0Value)2606     __CODEGEN_INLINE void SetSource1_SourceRegisterNumber(QWORD Source1_SourceRegisterNumber_0Value) {
2607         __CODEGEN_SET_MACRO(Source1_SourceRegisterNumber_0Value);
2608         StructureEu_Instruction_Controls_AAccessmodeIsAlign16AndSource1SourceAddressingModeIsDirect.Source1_SourceRegisterNumber = Source1_SourceRegisterNumber_0Value;
2609     }
2610 
GetSource1_SourceAddressImmediate84()2611     __CODEGEN_INLINE QWORD GetSource1_SourceAddressImmediate84() {
2612         __CODEGEN_GET_MACRO();
2613         return (QWORD)StructureEu_Instruction_Controls_AAccessmodeIsAlign16AndSource1SourceAddressingModeIsIndirect.Source1_SourceAddressImmediate84 << 4;
2614     }
2615 
SetSource1_SourceAddressImmediate84(QWORD Source1_SourceAddressImmediate84Value)2616     __CODEGEN_INLINE void SetSource1_SourceAddressImmediate84(QWORD Source1_SourceAddressImmediate84Value) {
2617         __CODEGEN_SET_MACRO(Source1_SourceAddressImmediate84Value);
2618         StructureEu_Instruction_Controls_AAccessmodeIsAlign16AndSource1SourceAddressingModeIsIndirect.Source1_SourceAddressImmediate84 = Source1_SourceAddressImmediate84Value >> 4;
2619     }
2620 
GetSource1_AddressSubregisterNumber()2621     __CODEGEN_INLINE QWORD GetSource1_AddressSubregisterNumber() {
2622         __CODEGEN_GET_MACRO();
2623         return (QWORD)StructureEu_Instruction_Controls_AAccessmodeIsAlign16AndSource1SourceAddressingModeIsIndirect.Source1_AddressSubregisterNumber;
2624     }
2625 
SetSource1_AddressSubregisterNumber(QWORD Source1_AddressSubregisterNumber_0Value)2626     __CODEGEN_INLINE void SetSource1_AddressSubregisterNumber(QWORD Source1_AddressSubregisterNumber_0Value) {
2627         __CODEGEN_SET_MACRO(Source1_AddressSubregisterNumber_0Value);
2628         StructureEu_Instruction_Controls_AAccessmodeIsAlign16AndSource1SourceAddressingModeIsIndirect.Source1_AddressSubregisterNumber = Source1_AddressSubregisterNumber_0Value;
2629     }
2630 
GetSource1_SourceModifier()2631     __CODEGEN_INLINE SRCMOD GetSource1_SourceModifier() {
2632         __CODEGEN_GET_MACRO();
2633         return (SRCMOD)StructureEu_Instruction_Controls_AAccessmodeIsAlign16AndPropertySourceModifierIsTrue.Source1_SourceModifier;
2634     }
2635 
SetSource1_SourceModifier(SRCMOD Source1_SourceModifier_0Value)2636     __CODEGEN_INLINE void SetSource1_SourceModifier(SRCMOD Source1_SourceModifier_0Value) {
2637         __CODEGEN_SET_MACRO(Source1_SourceModifier_0Value);
2638         StructureEu_Instruction_Controls_AAccessmodeIsAlign16AndPropertySourceModifierIsTrue.Source1_SourceModifier = Source1_SourceModifier_0Value;
2639     }
2640 
GetSource1_SourceSubRegisterNumber()2641     __CODEGEN_INLINE QWORD GetSource1_SourceSubRegisterNumber() {
2642         __CODEGEN_GET_MACRO();
2643         return (QWORD)StructureEu_Instruction_Controls_AAccessmodeIsAlign1AndSource1SourceAddressingModeIsDirect.Source1_SourceSubRegisterNumber;
2644     }
2645 
SetSource1_SourceSubRegisterNumber(QWORD Source1_SourceSubRegisterNumberValue)2646     __CODEGEN_INLINE void SetSource1_SourceSubRegisterNumber(QWORD Source1_SourceSubRegisterNumberValue) {
2647         __CODEGEN_SET_MACRO(Source1_SourceSubRegisterNumberValue);
2648         StructureEu_Instruction_Controls_AAccessmodeIsAlign1AndSource1SourceAddressingModeIsDirect.Source1_SourceSubRegisterNumber = Source1_SourceSubRegisterNumberValue;
2649     }
2650 
GetSource1_SourceRegisterNumber_1()2651     __CODEGEN_INLINE QWORD GetSource1_SourceRegisterNumber_1() {
2652         __CODEGEN_GET_MACRO();
2653         return (QWORD)StructureEu_Instruction_Controls_AAccessmodeIsAlign1AndSource1SourceAddressingModeIsDirect.Source1_SourceRegisterNumber;
2654     }
2655 
SetSource1_SourceRegisterNumber_1(QWORD Source1_SourceRegisterNumber_1Value)2656     __CODEGEN_INLINE void SetSource1_SourceRegisterNumber_1(QWORD Source1_SourceRegisterNumber_1Value) {
2657         __CODEGEN_SET_MACRO(Source1_SourceRegisterNumber_1Value);
2658         StructureEu_Instruction_Controls_AAccessmodeIsAlign1AndSource1SourceAddressingModeIsDirect.Source1_SourceRegisterNumber = Source1_SourceRegisterNumber_1Value;
2659     }
2660 
GetSource1_SourceAddressImmediate80()2661     __CODEGEN_INLINE QWORD GetSource1_SourceAddressImmediate80() {
2662         __CODEGEN_GET_MACRO();
2663         return (QWORD)StructureEu_Instruction_Controls_AAccessmodeIsAlign1AndSource1SourceAddressingModeIsIndirect.Source1_SourceAddressImmediate80;
2664     }
2665 
SetSource1_SourceAddressImmediate80(QWORD Source1_SourceAddressImmediate80Value)2666     __CODEGEN_INLINE void SetSource1_SourceAddressImmediate80(QWORD Source1_SourceAddressImmediate80Value) {
2667         __CODEGEN_SET_MACRO(Source1_SourceAddressImmediate80Value);
2668         StructureEu_Instruction_Controls_AAccessmodeIsAlign1AndSource1SourceAddressingModeIsIndirect.Source1_SourceAddressImmediate80 = Source1_SourceAddressImmediate80Value;
2669     }
2670 
SetSource1_SourceAddressImmediate9(QWORD Source1_SourceAddressImmediate80Value)2671     __CODEGEN_INLINE void SetSource1_SourceAddressImmediate9(QWORD Source1_SourceAddressImmediate80Value) {
2672         __CODEGEN_SET_MACRO(Source1_SourceAddressImmediate9Value);
2673         StructureEu_Instruction_Controls_AAccessmodeIsAlign1AndSource1SourceAddressingModeIsIndirect.Source1_SourceAddressImmediate9 = Source1_SourceAddressImmediate80Value;
2674     }
2675 
GetSource1_AddressSubregisterNumber_1()2676     __CODEGEN_INLINE QWORD GetSource1_AddressSubregisterNumber_1() {
2677         __CODEGEN_GET_MACRO();
2678         return (QWORD)StructureEu_Instruction_Controls_AAccessmodeIsAlign1AndSource1SourceAddressingModeIsIndirect.Source1_AddressSubregisterNumber;
2679     }
2680 
SetSource1_AddressSubregisterNumber_1(QWORD Source1_AddressSubregisterNumber_1Value)2681     __CODEGEN_INLINE void SetSource1_AddressSubregisterNumber_1(QWORD Source1_AddressSubregisterNumber_1Value) {
2682         __CODEGEN_SET_MACRO(Source1_AddressSubregisterNumber_1Value);
2683         StructureEu_Instruction_Controls_AAccessmodeIsAlign1AndSource1SourceAddressingModeIsIndirect.Source1_AddressSubregisterNumber = Source1_AddressSubregisterNumber_1Value;
2684     }
2685 
GetSource1_SourceModifier_1()2686     __CODEGEN_INLINE SRCMOD GetSource1_SourceModifier_1() {
2687         __CODEGEN_GET_MACRO();
2688         return (SRCMOD)StructureEu_Instruction_Controls_AAccessmodeIsAlign1AndPropertySourceModifierIsTrue.Source1_SourceModifier;
2689     }
2690 
SetSource1_SourceModifier_1(SRCMOD Source1_SourceModifier_1Value)2691     __CODEGEN_INLINE void SetSource1_SourceModifier_1(SRCMOD Source1_SourceModifier_1Value) {
2692         __CODEGEN_SET_MACRO(Source1_SourceModifier_1Value);
2693         StructureEu_Instruction_Controls_AAccessmodeIsAlign1AndPropertySourceModifierIsTrue.Source1_SourceModifier = Source1_SourceModifier_1Value;
2694     }
2695 
GetSource1_SourceAddressingMode()2696     __CODEGEN_INLINE ADDRMODE GetSource1_SourceAddressingMode() {
2697         __CODEGEN_GET_MACRO();
2698         return (ADDRMODE)StructureEu_Instruction_Controls_AAccessmodeIsAlign1.Source1_SourceAddressingMode;
2699     }
2700 
SetSource1_SourceAddressingMode(ADDRMODE Source1_SourceAddressingMode_1Value)2701     __CODEGEN_INLINE void SetSource1_SourceAddressingMode(ADDRMODE Source1_SourceAddressingMode_1Value) {
2702         __CODEGEN_SET_MACRO(Source1_SourceAddressingMode_1Value);
2703         StructureEu_Instruction_Controls_AAccessmodeIsAlign1.Source1_SourceAddressingMode = Source1_SourceAddressingMode_1Value;
2704     }
2705 
GetSource1_SourceHorizontalStride()2706     __CODEGEN_INLINE HORZSTRIDE GetSource1_SourceHorizontalStride() {
2707         __CODEGEN_GET_MACRO();
2708         return (HORZSTRIDE)StructureEu_Instruction_Controls_AAccessmodeIsAlign1.Source1_SourceHorizontalStride;
2709     }
2710 
SetSource1_SourceHorizontalStride(HORZSTRIDE Source1_SourceHorizontalStrideValue)2711     __CODEGEN_INLINE void SetSource1_SourceHorizontalStride(HORZSTRIDE Source1_SourceHorizontalStrideValue) {
2712         __CODEGEN_SET_MACRO(Source1_SourceHorizontalStrideValue);
2713         StructureEu_Instruction_Controls_AAccessmodeIsAlign1.Source1_SourceHorizontalStride = Source1_SourceHorizontalStrideValue;
2714     }
2715 
GetSource1_SourceWidth()2716     __CODEGEN_INLINE WIDTH GetSource1_SourceWidth() {
2717         __CODEGEN_GET_MACRO();
2718         return (WIDTH)StructureEu_Instruction_Controls_AAccessmodeIsAlign1.Source1_SourceWidth;
2719     }
2720 
SetSource1_SourceWidth(WIDTH Source1_SourceWidthValue)2721     __CODEGEN_INLINE void SetSource1_SourceWidth(WIDTH Source1_SourceWidthValue) {
2722         __CODEGEN_SET_MACRO(Source1_SourceWidthValue);
2723         StructureEu_Instruction_Controls_AAccessmodeIsAlign1.Source1_SourceWidth = Source1_SourceWidthValue;
2724     }
2725 
GetSource1_SourceVerticalStride_1()2726     __CODEGEN_INLINE VERTSTRIDE GetSource1_SourceVerticalStride_1() {
2727         __CODEGEN_GET_MACRO();
2728         return (VERTSTRIDE)StructureEu_Instruction_Controls_AAccessmodeIsAlign1.Source1_SourceVerticalStride;
2729     }
2730 
SetSource1_SourceVerticalStride_1(VERTSTRIDE Source1_SourceVerticalStride_1Value)2731     __CODEGEN_INLINE void SetSource1_SourceVerticalStride_1(VERTSTRIDE Source1_SourceVerticalStride_1Value) {
2732         __CODEGEN_SET_MACRO(Source1_SourceVerticalStride_1Value);
2733         StructureEu_Instruction_Controls_AAccessmodeIsAlign1.Source1_SourceVerticalStride = Source1_SourceVerticalStride_1Value;
2734     }
2735 
GetSource1AddressImmediate9SignBit()2736     __CODEGEN_INLINE QWORD GetSource1AddressImmediate9SignBit() {
2737         __CODEGEN_GET_MACRO();
2738         return (QWORD)Source1SourceAddressingModeIsIndirect.Source1AddressImmediate9SignBit;
2739     }
2740 
SetSource1AddressImmediate9SignBit(QWORD Source1AddressImmediate9SignBitValue)2741     __CODEGEN_INLINE void SetSource1AddressImmediate9SignBit(QWORD Source1AddressImmediate9SignBitValue) {
2742         __CODEGEN_SET_MACRO(Source1AddressImmediate9SignBitValue);
2743         Source1SourceAddressingModeIsIndirect.Source1AddressImmediate9SignBit = Source1AddressImmediate9SignBitValue;
2744     }
2745 
2746 } __CODEGEN_ATTRIBUTES_STRUCTURE EU_INSTRUCTION_SOURCES_REG_REG;
2747 
2748 C_ASSERT(8 == sizeof(EU_INSTRUCTION_SOURCES_REG_REG));
2749 
2750 typedef union tagEU_INSTRUCTION_BASIC_ONE_SRC {
2751     struct tagCommon {
2752         EU_INSTRUCTION_HEADER Header;
2753         EU_INSTRUCTION_OPERAND_CONTROLS OperandControls;
2754         DWORD __CODEGEN_UNIQUE(Overridden)[2];
2755     } Common;
2756     struct tagOperandControlsSrc0RegfileIsImm {
2757         DWORD __CODEGEN_UNIQUE(Overridden)[2];
2758         EU_INSTRUCTION_SOURCES_IMM32 Immsource;
2759     } OperandControlsSrc0RegfileIsImm;
2760     struct tagOperandControlsSrc0RegfileNotImm {
2761         DWORD __CODEGEN_UNIQUE(Overridden)[2];
2762         EU_INSTRUCTION_SOURCES_REG Regsource;
2763     } OperandControlsSrc0RegfileNotImm;
2764     DWORD RawData[4];
2765 
2766     // INITIALIZATION
2767     //
Init()2768     __CODEGEN_INLINE void Init() {
2769         RawData[0] = 0x0;
2770         Common.Header.Init();
2771         RawData[1] = 0x0;
2772         Common.OperandControls.Init();
2773         RawData[2] = 0x0;
2774         RawData[3] = 0x0;
2775     }
2776 
sInit()2777     static tagEU_INSTRUCTION_BASIC_ONE_SRC sInit() {
2778         tagEU_INSTRUCTION_BASIC_ONE_SRC state;
2779         state.Init();
2780         return state;
2781     }
2782 
2783     // ACCESSORS
2784     //
GetDWord(UINT const index)2785     __CODEGEN_INLINE __CODEGEN_PACKED DWORD& GetDWord(UINT const index) {
2786         return RawData[index];
2787     }
2788 
2789     static size_t CalculateSize(UINT const entryCount = 0) {
2790         return 0;
2791     }
2792 
GetSize()2793     __CODEGEN_INLINE size_t GetSize() {
2794         return 0;
2795     }
2796 
GetHeader()2797     __CODEGEN_INLINE EU_INSTRUCTION_HEADER& GetHeader() {
2798         __CODEGEN_GET_MACRO();
2799         return Common.Header;
2800     }
2801 
GetOperandControls()2802     __CODEGEN_INLINE EU_INSTRUCTION_OPERAND_CONTROLS& GetOperandControls() {
2803         __CODEGEN_GET_MACRO();
2804         return Common.OperandControls;
2805     }
2806 
GetImmsource()2807     __CODEGEN_INLINE EU_INSTRUCTION_SOURCES_IMM32& GetImmsource() {
2808         __CODEGEN_GET_MACRO();
2809         return OperandControlsSrc0RegfileIsImm.Immsource;
2810     }
2811 
GetRegsource()2812     __CODEGEN_INLINE EU_INSTRUCTION_SOURCES_REG& GetRegsource() {
2813         __CODEGEN_GET_MACRO();
2814         return OperandControlsSrc0RegfileNotImm.Regsource;
2815     }
2816 
2817 } __CODEGEN_ATTRIBUTES_STRUCTURE EU_INSTRUCTION_BASIC_ONE_SRC;
2818 
2819 C_ASSERT(16 == sizeof(EU_INSTRUCTION_BASIC_ONE_SRC));
2820 
2821 //////
2822 
2823 
2824 typedef struct tagEU_INSTRUCTION_IMM64_SRC {
2825     __CODEGEN_ACCESS_SPECIFIER_DEFINITION
2826     union tagTheStructure {
2827         struct tagCommon {
2828             EU_INSTRUCTION_HEADER Header;
2829             EU_INSTRUCTION_OPERAND_CONTROLS OperandControls;
2830             QWORD Source : BITFIELD_RANGE( 64,127); //
2831         } Common;
2832         DWORD RawData[4];
2833     } TheStructure;
2834 
2835     __CODEGEN_ACCESS_SPECIFIER_METHODS
2836 
2837     // INITIALIZATION
2838     //
InittagEU_INSTRUCTION_IMM64_SRC2839     __CODEGEN_INLINE void Init() {
2840         TheStructure.RawData[0]    = 0x0;
2841         TheStructure.Common.Header.Init();
2842         TheStructure.RawData[1]    = 0x0;
2843         TheStructure.Common.OperandControls.Init();
2844         TheStructure.RawData[2]    = 0x0;
2845         TheStructure.RawData[3]    = 0x0;
2846         TheStructure.Common.Source = 0x0;
2847     }
2848 
sInittagEU_INSTRUCTION_IMM64_SRC2849     static tagEU_INSTRUCTION_IMM64_SRC sInit() {
2850         tagEU_INSTRUCTION_IMM64_SRC state;
2851         state.Init();
2852         return state;
2853     }
2854 
2855     // ACCESSORS
2856     //
GetRawDatatagEU_INSTRUCTION_IMM64_SRC2857     __CODEGEN_INLINE __CODEGEN_PACKED DWORD& GetRawData(UINT const index) {
2858         return TheStructure.RawData[index];
2859     }
2860 
GetHeadertagEU_INSTRUCTION_IMM64_SRC2861     __CODEGEN_INLINE EU_INSTRUCTION_HEADER& GetHeader() {
2862         __CODEGEN_GET_MACRO();
2863         return TheStructure.Common.Header;
2864     }
2865 
GetOperandControlstagEU_INSTRUCTION_IMM64_SRC2866     __CODEGEN_INLINE EU_INSTRUCTION_OPERAND_CONTROLS& GetOperandControls() {
2867         __CODEGEN_GET_MACRO();
2868         return TheStructure.Common.OperandControls;
2869     }
2870 
GetSourcetagEU_INSTRUCTION_IMM64_SRC2871     __CODEGEN_INLINE QWORD GetSource() const {
2872         __CODEGEN_GET_MACRO();
2873         return (QWORD)TheStructure.Common.Source;
2874     }
2875 
SetSourcetagEU_INSTRUCTION_IMM64_SRC2876     __CODEGEN_INLINE void SetSource(QWORD SourceValue) {
2877         __CODEGEN_SET_MACRO(SourceValue);
2878         TheStructure.Common.Source = SourceValue;
2879     }
2880 
2881 } __CODEGEN_ATTRIBUTES_STRUCTURE EU_INSTRUCTION_IMM64_SRC;
2882 
2883 C_ASSERT(16 == sizeof(EU_INSTRUCTION_IMM64_SRC));
2884 
2885 typedef union tagEU_INSTRUCTION_BASIC_TWO_SRC {
2886     struct tagCommon {
2887         EU_INSTRUCTION_HEADER Header;
2888         EU_INSTRUCTION_OPERAND_CONTROLS OperandControls;
2889         DWORD __CODEGEN_UNIQUE(Overridden)[2];
2890     } Common;
2891 
2892     struct tagImmsourceSrc1RegfileIsImm {
2893         DWORD __CODEGEN_UNIQUE(Overridden)[2];
2894         EU_INSTRUCTION_SOURCES_REG_IMM Immsource;
2895     } ImmsourceSrc1RegfileIsImm;
2896 
2897     struct tagRegsourceSrc1RegfileNotImm {
2898         DWORD __CODEGEN_UNIQUE(Overridden)[2];
2899         EU_INSTRUCTION_SOURCES_REG_REG Regsource;
2900     } RegsourceSrc1RegfileNotImm;
2901     DWORD RawData[4];
2902 
2903     // INITIALIZATION
2904     //
Init()2905     __CODEGEN_INLINE void Init() {
2906         RawData[0] = 0x0;
2907         Common.Header.Init();
2908         RawData[1] = 0x0;
2909         Common.OperandControls.Init();
2910         RawData[2] = 0x0;
2911         RawData[3] = 0x0;
2912     }
2913 
sInit()2914     static tagEU_INSTRUCTION_BASIC_TWO_SRC sInit() {
2915         tagEU_INSTRUCTION_BASIC_TWO_SRC state;
2916         state.Init();
2917         return state;
2918     }
2919 
2920     // ACCESSORS
2921     //
GetDWord(UINT const index)2922     __CODEGEN_INLINE __CODEGEN_PACKED DWORD& GetDWord(UINT const index) {
2923         return RawData[index];
2924     }
2925 
2926     static size_t CalculateSize(UINT const entryCount = 0) {
2927         return 0;
2928     }
2929 
GetSize()2930     __CODEGEN_INLINE size_t GetSize() {
2931         return 0;
2932     }
2933 
GetHeader()2934     __CODEGEN_INLINE EU_INSTRUCTION_HEADER& GetHeader() {
2935         __CODEGEN_GET_MACRO();
2936         return Common.Header;
2937     }
2938 
GetOperandControls()2939     __CODEGEN_INLINE EU_INSTRUCTION_OPERAND_CONTROLS& GetOperandControls() {
2940         __CODEGEN_GET_MACRO();
2941         return Common.OperandControls;
2942     }
2943 
GetImmsource()2944     __CODEGEN_INLINE EU_INSTRUCTION_SOURCES_REG_IMM& GetImmsource() {
2945         __CODEGEN_GET_MACRO();
2946         return ImmsourceSrc1RegfileIsImm.Immsource;
2947     }
2948 
GetRegsource()2949     __CODEGEN_INLINE EU_INSTRUCTION_SOURCES_REG_REG& GetRegsource() {
2950         __CODEGEN_GET_MACRO();
2951         return RegsourceSrc1RegfileNotImm.Regsource;
2952     }
2953 
2954 } __CODEGEN_ATTRIBUTES_STRUCTURE EU_INSTRUCTION_BASIC_TWO_SRC;
2955 
2956 C_ASSERT(16 == sizeof(EU_INSTRUCTION_BASIC_TWO_SRC));
2957 
2958 typedef union tagEU_INSTRUCTION_BASIC_THREE_SRC {
2959     struct tagCommon {
2960         EU_INSTRUCTION_HEADER Header;
2961 
2962         /*****************************************************************************\
2963         This field contains the flag subregister number for instructions with a non-zero Conditional Modifier.
2964         \*****************************************************************************/
2965         DWORD FlagSubregisterNumber                               : BITFIELD_BIT(       32); //
2966 
2967         /*****************************************************************************\
2968         This field contains the flag register number for instructions with a non-zero Conditional Modifier.
2969         \*****************************************************************************/
2970         DWORD FlagRegisterNumber                                  : BITFIELD_BIT(       33); //
2971 
2972         /*****************************************************************************\
2973         (formerly WECtrl/Write Enable Control). This flag disables the normal write enables; it should normally be 0.
2974 
2975         Programming Notes:
2976         MaskCtrl = NoMask also skips the check for PcIP[n] == ExIP before enabling a channel, as described in the Evaluate Write Enable section.
2977         \*****************************************************************************/
2978         DWORD Maskctrl                                            : BITFIELD_BIT(       34); // MASKCTRL
2979         DWORD Source2Type                                         : BITFIELD_BIT(       35); // U1
2980         DWORD Source1Type                                         : BITFIELD_BIT(       36); // U1
2981         DWORD __CODEGEN_UNIQUE(Overridden)                        : BITFIELD_RANGE( 37, 42); // Override
2982         DWORD SourceDataType                                      : BITFIELD_RANGE( 43, 45); // SOURCE_DATA_TYPE
2983         DWORD DestinationDataType                                 : BITFIELD_RANGE( 46, 48); // DESTINATION_DATA_TYPE
2984 
2985         /*****************************************************************************\
2986         Four channel enables are defined for controlling which channels are written into the destination region. These channel mask bits are applied in a modulo-four manner to all ExecSize channels. There is 1-bit Channel Enable for each channel within the group of 4. If the bit is cleared, the write for the corresponding channel is disabled. If the bit is set, the write is enabled. Mnemonics for the bit being set for the group of 4 are  -x -,  -y -,  -z -, and  -w -, respectively, where  -x - corresponds to Channel 0 in the group and  -w - corresponds to channel 3 in the group
2987         \*****************************************************************************/
2988         DWORD DestinationChannelEnable                            : BITFIELD_RANGE( 49, 52); // ChanEn[4]
2989         DWORD DestinationSubregisterNumber                        : BITFIELD_RANGE( 53, 55); //
2990         DWORD DestinationRegisterNumber_DestinationRegisterNumber : BITFIELD_RANGE(  0,  7); //
2991         QWORD Source0_SourceReplicateControl                      : BITFIELD_BIT(       64); // REPCTRL
2992         QWORD Source0_SourceSwizzle                               : BITFIELD_RANGE( 65, 72); // ChanSel[4]
2993         QWORD Source0_SourceSubregisterNumber42                   : BITFIELD_RANGE( 73, 75); // SrcSubRegNum[4:2]
2994         QWORD Source0_SourceRegisterNumber                        : BITFIELD_RANGE( 76, 83); //
2995         QWORD Source0_SourceSubregisterNumber1                    : BITFIELD_BIT(       84); // SrcSubRegNum[1]
2996         QWORD Source1_SourceReplicateControl                      : BITFIELD_BIT(       85); // REPCTRL
2997         QWORD Source1_SourceSwizzle                               : BITFIELD_RANGE( 86, 93); // ChanSel[4]
2998         QWORD Source1_SourceSubregisterNumber42                   : BITFIELD_RANGE( 94, 96); // SrcSubRegNum[4:2]
2999         QWORD Source1_SourceRegisterNumber                        : BITFIELD_RANGE( 97,104); //
3000         QWORD Source1_SourceSubregisterNumber1                    : BITFIELD_BIT(      105); // SrcSubRegNum[1]
3001         QWORD Source2_SourceReplicateControl                      : BITFIELD_BIT(      106); // REPCTRL
3002         QWORD Source2_SourceSwizzle                               : BITFIELD_RANGE(107,114); // ChanSel[4]
3003         QWORD Source2_SourceSubregisterNumber42                   : BITFIELD_RANGE(115,117); // SrcSubRegNum[4:2]
3004         QWORD Source2_SourceRegisterNumber                        : BITFIELD_RANGE(118,125); //
3005         QWORD Source2_SourceSubregisterNumber1                    : BITFIELD_BIT(      126); // SrcSubRegNum[1]
3006         QWORD __CODEGEN_UNIQUE(Reserved)                          : BITFIELD_BIT(      127); // MBZ
3007     } Common;
3008     struct tagPropertySourceModifierIsTrue {
3009         QWORD __CODEGEN_UNIQUE(Overridden) : BITFIELD_RANGE(  0, 36); // Override
3010         QWORD Source0Modifier              : BITFIELD_RANGE( 37, 38); // SRCMOD
3011         QWORD Source1Modifier              : BITFIELD_RANGE( 39, 40); // SRCMOD
3012         QWORD Source2Modifier              : BITFIELD_RANGE( 41, 42); // SRCMOD
3013         QWORD __CODEGEN_UNIQUE(Overridden) : BITFIELD_RANGE( 43,63); // Override
3014         QWORD __CODEGEN_UNIQUE(Overridden) : BITFIELD_RANGE( 64,127); // Override
3015 
3016     } PropertySourceModifierIsTrue;
3017     struct tagPropertySourceModifierIsFalse {
3018         QWORD __CODEGEN_UNIQUE(Overridden) : BITFIELD_RANGE(  0, 36); // Override
3019         QWORD __CODEGEN_UNIQUE(Reserved)   : BITFIELD_RANGE( 37, 42); // MBZ
3020         QWORD __CODEGEN_UNIQUE(Overridden) : BITFIELD_RANGE( 43,63); // Override
3021         QWORD __CODEGEN_UNIQUE(Overridden) : BITFIELD_RANGE( 64,127); // Override
3022     } PropertySourceModifierIsFalse;
3023     DWORD RawData[4];
3024 
3025     typedef enum tagSOURCE_DATA_TYPE {
3026         SOURCE_DATA_TYPE_F  = 0x0,    // single precision Float (32-bit)
3027         SOURCE_DATA_TYPE_D  = 0x1,    // signed Doubleword integer
3028         SOURCE_DATA_TYPE_UD = 0x2,    // Unsigned Doubleword integer
3029         SOURCE_DATA_TYPE_DF = 0x3,    // Double precision Float (64-bit)
3030         SOURCE_DATA_TYPE_HF = 0x4,    // Half Float (16-bit)
3031     } SOURCE_DATA_TYPE;
3032 
3033     typedef enum tagDESTINATION_DATA_TYPE {
3034         DESTINATION_DATA_TYPE_F  = 0x0,    // single precision Float (32-bit)
3035         DESTINATION_DATA_TYPE_D  = 0x1,    // signed Doubleword integer
3036         DESTINATION_DATA_TYPE_UD = 0x2,    // Unsigned Doubleword integer
3037         DESTINATION_DATA_TYPE_DF = 0x3,    // Double precision Float (64-bit)
3038         DESTINATION_DATA_TYPE_HF = 0x4,    // Half Float (16-bit)
3039     } DESTINATION_DATA_TYPE;
3040 
3041 
3042     // INITIALIZATION
3043     //
Init()3044     __CODEGEN_INLINE void Init() {
3045         RawData[0]                                                 = 0x0;
3046         Common.Header.Init();
3047         RawData[1]                                                 = 0x0;
3048         Common.FlagSubregisterNumber                               = 0x0;
3049         Common.FlagRegisterNumber                                  = 0x0;
3050         Common.Maskctrl                                            = MASKCTRL_NORMAL;
3051         Common.Source2Type                                         = 0x0;
3052         Common.Source1Type                                         = 0x0;
3053         Common.SourceDataType                                      = SOURCE_DATA_TYPE_F;
3054         Common.DestinationDataType                                 = DESTINATION_DATA_TYPE_F;
3055         Common.DestinationChannelEnable                            = 0x0;
3056         Common.DestinationSubregisterNumber                        = 0x0;
3057         RawData[2]                                                 = 0x0;
3058         Common.DestinationRegisterNumber_DestinationRegisterNumber = 0x0;
3059         RawData[3]                                                 = 0x0;
3060         Common.Source0_SourceReplicateControl                      = 0x0;
3061         Common.Source0_SourceSwizzle                               = 0x0;
3062         Common.Source0_SourceSubregisterNumber42                   = 0x0;
3063         Common.Source0_SourceRegisterNumber                        = 0x0;
3064         Common.Source0_SourceSubregisterNumber1                    = 0x0;
3065         Common.Source1_SourceReplicateControl                      = 0x0;
3066         Common.Source1_SourceSwizzle                               = 0x0;
3067         //RawData[4]                                                 = 0x0;
3068         Common.Source1_SourceSubregisterNumber42                   = 0x0;
3069         Common.Source1_SourceRegisterNumber                        = 0x0;
3070         Common.Source1_SourceSubregisterNumber1                    = 0x0;
3071         Common.Source2_SourceReplicateControl                      = 0x0;
3072         Common.Source2_SourceSwizzle                               = 0x0;
3073         Common.Source2_SourceSubregisterNumber42                   = 0x0;
3074         Common.Source2_SourceRegisterNumber                        = 0x0;
3075         Common.Source2_SourceSubregisterNumber1                    = 0x0;
3076     }
3077 
sInit()3078     static tagEU_INSTRUCTION_BASIC_THREE_SRC sInit() {
3079         tagEU_INSTRUCTION_BASIC_THREE_SRC state;
3080         state.Init();
3081         return state;
3082     }
3083 
3084     // ACCESSORS
3085 
GetDWORD(UINT const index)3086     __CODEGEN_INLINE __CODEGEN_PACKED DWORD& GetDWORD(UINT const index) {
3087         return RawData[index];
3088     }
3089 
3090     static size_t CalculateSize(UINT const entryCount = 0) {
3091         return 0;
3092     }
3093 
GetSize()3094     __CODEGEN_INLINE size_t GetSize() {
3095         return 0;
3096     }
3097 
GetHeader()3098     __CODEGEN_INLINE EU_INSTRUCTION_HEADER& GetHeader() {
3099         __CODEGEN_GET_MACRO();
3100         return Common.Header;
3101     }
3102 
GetFlagRegisterNumberSubregisterNumber()3103     __CODEGEN_INLINE DWORD GetFlagRegisterNumberSubregisterNumber() {
3104         __CODEGEN_GET_MACRO();
3105         return (DWORD)Common.FlagSubregisterNumber;
3106     }
3107 
SetFlagRegisterNumberSubregisterNumber(DWORD FlagSubregisterNumberValue)3108     __CODEGEN_INLINE void SetFlagRegisterNumberSubregisterNumber(DWORD FlagSubregisterNumberValue) {
3109         __CODEGEN_SET_MACRO(FlagSubregisterNumberValue);
3110         Common.FlagSubregisterNumber = FlagSubregisterNumberValue;
3111     }
3112 
GetFlagRegisterNumber()3113     __CODEGEN_INLINE DWORD GetFlagRegisterNumber() {
3114         __CODEGEN_GET_MACRO();
3115         return (DWORD)Common.FlagRegisterNumber;
3116     }
3117 
SetFlagRegisterNumber(DWORD FlagRegisterNumberValue)3118     __CODEGEN_INLINE void SetFlagRegisterNumber(DWORD FlagRegisterNumberValue) {
3119         __CODEGEN_SET_MACRO(FlagRegisterNumberValue);
3120         Common.FlagRegisterNumber = FlagRegisterNumberValue;
3121     }
3122 
GetMaskctrl()3123     __CODEGEN_INLINE MASKCTRL GetMaskctrl() {
3124         __CODEGEN_GET_MACRO();
3125         return (MASKCTRL)Common.Maskctrl;
3126     }
3127 
SetMaskctrl(MASKCTRL MaskctrlValue)3128     __CODEGEN_INLINE void SetMaskctrl(MASKCTRL MaskctrlValue) {
3129         __CODEGEN_SET_MACRO(MaskctrlValue);
3130         Common.Maskctrl = MaskctrlValue;
3131     }
3132 
GetSource2Type()3133     __CODEGEN_INLINE DWORD GetSource2Type() {
3134         __CODEGEN_GET_MACRO();
3135         return (DWORD)Common.Source2Type;
3136     }
3137 
SetSource2Type(DWORD Source2TypeValue)3138     __CODEGEN_INLINE void SetSource2Type(DWORD Source2TypeValue) {
3139         __CODEGEN_SET_MACRO(Source2TypeValue);
3140         Common.Source2Type = Source2TypeValue;
3141     }
3142 
GetSource1Type()3143     __CODEGEN_INLINE DWORD GetSource1Type() {
3144         __CODEGEN_GET_MACRO();
3145         return (DWORD)Common.Source1Type;
3146     }
3147 
SetSource1Type(DWORD Source1TypeValue)3148     __CODEGEN_INLINE void SetSource1Type(DWORD Source1TypeValue) {
3149         __CODEGEN_SET_MACRO(Source1TypeValue);
3150         Common.Source1Type = Source1TypeValue;
3151     }
3152 
GetSourceDataType()3153     __CODEGEN_INLINE SOURCE_DATA_TYPE GetSourceDataType() {
3154         __CODEGEN_GET_MACRO();
3155         return (SOURCE_DATA_TYPE)Common.SourceDataType;
3156     }
3157 
SetSourceDataType(SOURCE_DATA_TYPE SourceDataTypeValue)3158     __CODEGEN_INLINE void SetSourceDataType(SOURCE_DATA_TYPE SourceDataTypeValue) {
3159         __CODEGEN_SET_MACRO(SourceDataTypeValue);
3160         Common.SourceDataType = SourceDataTypeValue;
3161     }
3162 
GetDestinationDataType()3163     __CODEGEN_INLINE DESTINATION_DATA_TYPE GetDestinationDataType() {
3164         __CODEGEN_GET_MACRO();
3165         return (DESTINATION_DATA_TYPE)Common.DestinationDataType;
3166     }
3167 
SetDestinationDataType(DESTINATION_DATA_TYPE DestinationDataTypeValue)3168     __CODEGEN_INLINE void SetDestinationDataType(DESTINATION_DATA_TYPE DestinationDataTypeValue) {
3169         __CODEGEN_SET_MACRO(DestinationDataTypeValue);
3170         Common.DestinationDataType = DestinationDataTypeValue;
3171     }
3172 
GetDestinationChannelEnable()3173     __CODEGEN_INLINE DWORD GetDestinationChannelEnable() {
3174         __CODEGEN_GET_MACRO();
3175         return (DWORD)Common.DestinationChannelEnable;
3176     }
3177 
SetDestinationChannelEnable(DWORD DestinationChannelEnableValue)3178     __CODEGEN_INLINE void SetDestinationChannelEnable(DWORD DestinationChannelEnableValue) {
3179         __CODEGEN_SET_MACRO(DestinationChannelEnableValue);
3180         Common.DestinationChannelEnable = DestinationChannelEnableValue;
3181     }
3182 
GetDestinationSubregisterNumber()3183     __CODEGEN_INLINE DWORD GetDestinationSubregisterNumber() {
3184         __CODEGEN_GET_MACRO();
3185         return (DWORD)Common.DestinationSubregisterNumber;
3186     }
3187 
SetDestinationSubregisterNumber(DWORD DestinationSubregisterNumberValue)3188     __CODEGEN_INLINE void SetDestinationSubregisterNumber(DWORD DestinationSubregisterNumberValue) {
3189         __CODEGEN_SET_MACRO(DestinationSubregisterNumberValue);
3190         Common.DestinationSubregisterNumber = DestinationSubregisterNumberValue;
3191     }
3192 
GetDestinationRegisterNumber_DestinationRegisterNumber()3193     __CODEGEN_INLINE DWORD GetDestinationRegisterNumber_DestinationRegisterNumber() {
3194         __CODEGEN_GET_MACRO();
3195         return (DWORD)Common.DestinationRegisterNumber_DestinationRegisterNumber;
3196     }
3197 
SetDestinationRegisterNumber_DestinationRegisterNumber(DWORD DestinationRegisterNumber_DestinationRegisterNumberValue)3198     __CODEGEN_INLINE void SetDestinationRegisterNumber_DestinationRegisterNumber(DWORD DestinationRegisterNumber_DestinationRegisterNumberValue) {
3199         __CODEGEN_SET_MACRO(DestinationRegisterNumber_DestinationRegisterNumberValue);
3200         Common.DestinationRegisterNumber_DestinationRegisterNumber = DestinationRegisterNumber_DestinationRegisterNumberValue;
3201     }
3202 
GetSource0_SourceReplicateControl()3203     __CODEGEN_INLINE REPCTRL GetSource0_SourceReplicateControl() {
3204         __CODEGEN_GET_MACRO();
3205         return (REPCTRL)Common.Source0_SourceReplicateControl;
3206     }
3207 
SetSource0_SourceReplicateControl(REPCTRL Source0_SourceReplicateControlValue)3208     __CODEGEN_INLINE void SetSource0_SourceReplicateControl(REPCTRL Source0_SourceReplicateControlValue) {
3209         __CODEGEN_SET_MACRO(Source0_SourceReplicateControlValue);
3210         Common.Source0_SourceReplicateControl = Source0_SourceReplicateControlValue;
3211     }
3212 
GetSource0_SourceSwizzle()3213     __CODEGEN_INLINE DWORD GetSource0_SourceSwizzle() {
3214         __CODEGEN_GET_MACRO();
3215         return (DWORD)Common.Source0_SourceSwizzle;
3216     }
3217 
SetSource0_SourceSwizzle(DWORD Source0_SourceSwizzleValue)3218     __CODEGEN_INLINE void SetSource0_SourceSwizzle(DWORD Source0_SourceSwizzleValue) {
3219         __CODEGEN_SET_MACRO(Source0_SourceSwizzleValue);
3220         Common.Source0_SourceSwizzle = Source0_SourceSwizzleValue;
3221     }
3222 
GetSource0_SourceSubregisterNumber42()3223     __CODEGEN_INLINE DWORD GetSource0_SourceSubregisterNumber42() {
3224         __CODEGEN_GET_MACRO();
3225         return (DWORD)Common.Source0_SourceSubregisterNumber42 << 2;
3226     }
3227 
SetSource0_SourceSubregisterNumber42(DWORD Source0_SourceSubregisterNumber42Value)3228     __CODEGEN_INLINE void SetSource0_SourceSubregisterNumber42(DWORD Source0_SourceSubregisterNumber42Value) {
3229         __CODEGEN_SET_MACRO(Source0_SourceSubregisterNumber42Value);
3230         Common.Source0_SourceSubregisterNumber42 = Source0_SourceSubregisterNumber42Value >> 2;
3231     }
3232 
GetSource0_SourceRegisterNumber()3233     __CODEGEN_INLINE DWORD GetSource0_SourceRegisterNumber() {
3234         __CODEGEN_GET_MACRO();
3235         return (DWORD)Common.Source0_SourceRegisterNumber;
3236     }
3237 
SetSource0_SourceRegisterNumber(DWORD Source0_SourceRegisterNumberValue)3238     __CODEGEN_INLINE void SetSource0_SourceRegisterNumber(DWORD Source0_SourceRegisterNumberValue) {
3239         __CODEGEN_SET_MACRO(Source0_SourceRegisterNumberValue);
3240         Common.Source0_SourceRegisterNumber = Source0_SourceRegisterNumberValue;
3241     }
3242 
GetSource0_SourceSubregisterNumber1()3243     __CODEGEN_INLINE DWORD GetSource0_SourceSubregisterNumber1() {
3244         __CODEGEN_GET_MACRO();
3245         return (DWORD)Common.Source0_SourceSubregisterNumber1;
3246     }
3247 
SetSource0_SourceSubregisterNumber1(DWORD Source0_SourceSubregisterNumber1Value)3248     __CODEGEN_INLINE void SetSource0_SourceSubregisterNumber1(DWORD Source0_SourceSubregisterNumber1Value) {
3249         __CODEGEN_SET_MACRO(Source0_SourceSubregisterNumber1Value);
3250         Common.Source0_SourceSubregisterNumber1 = Source0_SourceSubregisterNumber1Value;
3251     }
3252 
GetSource1_SourceReplicateControl()3253     __CODEGEN_INLINE REPCTRL GetSource1_SourceReplicateControl() {
3254         __CODEGEN_GET_MACRO();
3255         return (REPCTRL)Common.Source1_SourceReplicateControl;
3256     }
3257 
SetSource1_SourceReplicateControl(REPCTRL Source1_SourceReplicateControlValue)3258     __CODEGEN_INLINE void SetSource1_SourceReplicateControl(REPCTRL Source1_SourceReplicateControlValue) {
3259         __CODEGEN_SET_MACRO(Source1_SourceReplicateControlValue);
3260         Common.Source1_SourceReplicateControl = Source1_SourceReplicateControlValue;
3261     }
3262 
GetSource1_SourceSwizzle()3263     __CODEGEN_INLINE DWORD GetSource1_SourceSwizzle() {
3264         __CODEGEN_GET_MACRO();
3265         return (DWORD)Common.Source1_SourceSwizzle;
3266     }
3267 
SetSource1_SourceSwizzle(DWORD Source1_SourceSwizzleValue)3268     __CODEGEN_INLINE void SetSource1_SourceSwizzle(DWORD Source1_SourceSwizzleValue) {
3269         __CODEGEN_SET_MACRO(Source1_SourceSwizzleValue);
3270         Common.Source1_SourceSwizzle = Source1_SourceSwizzleValue;
3271     }
3272 
GetSource1_SourceSubregisterNumber42()3273     __CODEGEN_INLINE DWORD GetSource1_SourceSubregisterNumber42() {
3274         __CODEGEN_GET_MACRO();
3275         return (DWORD)Common.Source1_SourceSubregisterNumber42 << 2;
3276     }
3277 
SetSource1_SourceSubregisterNumber42(DWORD Source1_SourceSubregisterNumber42Value)3278     __CODEGEN_INLINE void SetSource1_SourceSubregisterNumber42(DWORD Source1_SourceSubregisterNumber42Value) {
3279         __CODEGEN_SET_MACRO(Source1_SourceSubregisterNumber42Value);
3280         Common.Source1_SourceSubregisterNumber42 = Source1_SourceSubregisterNumber42Value >> 2;
3281     }
3282 
GetSource1_SourceRegisterNumber()3283     __CODEGEN_INLINE DWORD GetSource1_SourceRegisterNumber() {
3284         __CODEGEN_GET_MACRO();
3285         return (DWORD)Common.Source1_SourceRegisterNumber;
3286     }
3287 
SetSource1_SourceRegisterNumber(DWORD Source1_SourceRegisterNumberValue)3288     __CODEGEN_INLINE void SetSource1_SourceRegisterNumber(DWORD Source1_SourceRegisterNumberValue) {
3289         __CODEGEN_SET_MACRO(Source1_SourceRegisterNumberValue);
3290         Common.Source1_SourceRegisterNumber = Source1_SourceRegisterNumberValue;
3291     }
3292 
GetSource1_SourceSubregisterNumber1()3293     __CODEGEN_INLINE DWORD GetSource1_SourceSubregisterNumber1() {
3294         __CODEGEN_GET_MACRO();
3295         return (DWORD)Common.Source1_SourceSubregisterNumber1;
3296     }
3297 
SetSource1_SourceSubregisterNumber1(DWORD Source1_SourceSubregisterNumber1Value)3298     __CODEGEN_INLINE void SetSource1_SourceSubregisterNumber1(DWORD Source1_SourceSubregisterNumber1Value) {
3299         __CODEGEN_SET_MACRO(Source1_SourceSubregisterNumber1Value);
3300         Common.Source1_SourceSubregisterNumber1 = Source1_SourceSubregisterNumber1Value;
3301     }
3302 
GetSource2_SourceReplicateControl()3303     __CODEGEN_INLINE REPCTRL GetSource2_SourceReplicateControl() {
3304         __CODEGEN_GET_MACRO();
3305         return (REPCTRL)Common.Source2_SourceReplicateControl;
3306     }
3307 
SetSource2_SourceReplicateControl(REPCTRL Source2_SourceReplicateControlValue)3308     __CODEGEN_INLINE void SetSource2_SourceReplicateControl(REPCTRL Source2_SourceReplicateControlValue) {
3309         __CODEGEN_SET_MACRO(Source2_SourceReplicateControlValue);
3310         Common.Source2_SourceReplicateControl = Source2_SourceReplicateControlValue;
3311     }
3312 
GetSource2_SourceSwizzle()3313     __CODEGEN_INLINE DWORD GetSource2_SourceSwizzle() {
3314         __CODEGEN_GET_MACRO();
3315         return (DWORD)Common.Source2_SourceSwizzle;
3316     }
3317 
SetSource2_SourceSwizzle(DWORD Source2_SourceSwizzleValue)3318     __CODEGEN_INLINE void SetSource2_SourceSwizzle(DWORD Source2_SourceSwizzleValue) {
3319         __CODEGEN_SET_MACRO(Source2_SourceSwizzleValue);
3320         Common.Source2_SourceSwizzle = Source2_SourceSwizzleValue;
3321     }
3322 
GetSource2_SourceSubregisterNumber42()3323     __CODEGEN_INLINE DWORD GetSource2_SourceSubregisterNumber42() {
3324         __CODEGEN_GET_MACRO();
3325         return (DWORD)Common.Source2_SourceSubregisterNumber42 << 2;
3326     }
3327 
SetSource2_SourceSubregisterNumber42(DWORD Source2_SourceSubregisterNumber42Value)3328     __CODEGEN_INLINE void SetSource2_SourceSubregisterNumber42(DWORD Source2_SourceSubregisterNumber42Value) {
3329         __CODEGEN_SET_MACRO(Source2_SourceSubregisterNumber42Value);
3330         Common.Source2_SourceSubregisterNumber42 = Source2_SourceSubregisterNumber42Value >> 2;
3331     }
3332 
GetSource2_SourceRegisterNumber()3333     __CODEGEN_INLINE DWORD GetSource2_SourceRegisterNumber() {
3334         __CODEGEN_GET_MACRO();
3335         return (DWORD)Common.Source2_SourceRegisterNumber;
3336     }
3337 
SetSource2_SourceRegisterNumber(DWORD Source2_SourceRegisterNumberValue)3338     __CODEGEN_INLINE void SetSource2_SourceRegisterNumber(DWORD Source2_SourceRegisterNumberValue) {
3339         __CODEGEN_SET_MACRO(Source2_SourceRegisterNumberValue);
3340         Common.Source2_SourceRegisterNumber = Source2_SourceRegisterNumberValue;
3341     }
3342 
GetSource2_SourceSubregisterNumber1()3343     __CODEGEN_INLINE DWORD GetSource2_SourceSubregisterNumber1() {
3344         __CODEGEN_GET_MACRO();
3345         return (DWORD)Common.Source2_SourceSubregisterNumber1;
3346     }
3347 
SetSource2_SourceSubregisterNumber1(DWORD Source2_SourceSubregisterNumber1Value)3348     __CODEGEN_INLINE void SetSource2_SourceSubregisterNumber1(DWORD Source2_SourceSubregisterNumber1Value) {
3349         __CODEGEN_SET_MACRO(Source2_SourceSubregisterNumber1Value);
3350         Common.Source2_SourceSubregisterNumber1 = Source2_SourceSubregisterNumber1Value;
3351     }
3352 
GetSource0Modifier()3353     __CODEGEN_INLINE SRCMOD GetSource0Modifier() {
3354         __CODEGEN_GET_MACRO();
3355         return (SRCMOD)PropertySourceModifierIsTrue.Source0Modifier;
3356     }
3357 
SetSource0_SourceModifier(SRCMOD Source0ModifierValue)3358     __CODEGEN_INLINE void SetSource0_SourceModifier(SRCMOD Source0ModifierValue) {
3359         __CODEGEN_SET_MACRO(Source0ModifierValue);
3360         PropertySourceModifierIsTrue.Source0Modifier = Source0ModifierValue;
3361     }
3362 
GetSource1Modifier()3363     __CODEGEN_INLINE SRCMOD GetSource1Modifier() {
3364         __CODEGEN_GET_MACRO();
3365         return (SRCMOD)PropertySourceModifierIsTrue.Source1Modifier;
3366     }
3367 
SetSource1_SourceModifier(SRCMOD Source1ModifierValue)3368     __CODEGEN_INLINE void SetSource1_SourceModifier(SRCMOD Source1ModifierValue) {
3369         __CODEGEN_SET_MACRO(Source1ModifierValue);
3370         PropertySourceModifierIsTrue.Source1Modifier = Source1ModifierValue;
3371     }
3372 
GetSource2Modifier()3373     __CODEGEN_INLINE SRCMOD GetSource2Modifier() {
3374         __CODEGEN_GET_MACRO();
3375         return (SRCMOD)PropertySourceModifierIsTrue.Source2Modifier;
3376     }
3377 
SetSource2_SourceModifier(SRCMOD Source2ModifierValue)3378     __CODEGEN_INLINE void SetSource2_SourceModifier(SRCMOD Source2ModifierValue) {
3379         __CODEGEN_SET_MACRO(Source2ModifierValue);
3380         PropertySourceModifierIsTrue.Source2Modifier = Source2ModifierValue;
3381     }
3382 
3383 } __CODEGEN_ATTRIBUTES_STRUCTURE EU_INSTRUCTION_BASIC_THREE_SRC;
3384 
3385 C_ASSERT(16 == sizeof(EU_INSTRUCTION_BASIC_THREE_SRC));
3386 
3387 typedef struct tagEU_INSTRUCTION_ALIGN1_THREE_SRC {
3388     __CODEGEN_ACCESS_SPECIFIER_DEFINITION
3389     union tagTheStructure {
3390         struct tagCommon {
3391             EU_INSTRUCTION_HEADER Header;
3392 
3393             /*****************************************************************************\
3394             This field contains the flag subregister number for instructions with a non-zero Conditional Modifier.
3395             \*****************************************************************************/
3396             DWORD FlagSubregisterNumber : BITFIELD_BIT(32); //
3397 
3398             /*****************************************************************************\
3399             This field contains the flag register number for instructions with a non-zero Conditional Modifier.
3400             \*****************************************************************************/
3401             DWORD FlagRegisterNumber : BITFIELD_BIT(33); //
3402 
3403             /*****************************************************************************\
3404             This flag disables the normal write enables; it should normally be 0.
3405 
3406             Programming Notes:
3407             MaskCtrl = NoMask also skips the check for PcIP[n] == ExIP before enabling a channel, as described in the Evaluate Write Enable section.
3408             \*****************************************************************************/
3409             DWORD Maskctrl : BITFIELD_BIT(34); // MASKCTRL
3410 
3411             /*****************************************************************************\
3412             This field defines common data type for all sources and destination operands.
3413             \*****************************************************************************/
3414             DWORD ExecutionDatatype : BITFIELD_BIT(35); // EXECUTION_DATATYPE
3415 
3416             /*****************************************************************************\
3417             Selects destination register file.
3418             \*****************************************************************************/
3419             DWORD DestinationRegisterFile : BITFIELD_BIT(36); // DESTINATION_REGISTER_FILE
3420             DWORD __CODEGEN_UNIQUE(Overridden) : BITFIELD_RANGE(37, 42); // Override
3421 
3422             /*****************************************************************************\
3423             Selects source 0 register file.
3424             \*****************************************************************************/
3425             DWORD Source0RegisterFile : BITFIELD_BIT(43); // SOURCE_0_REGISTER_FILE
3426 
3427             /*****************************************************************************\
3428             Selects source 1 register file.
3429             \*****************************************************************************/
3430             DWORD Source1RegisterFile : BITFIELD_BIT(44); // SOURCE_1_REGISTER_FILE
3431 
3432             /*****************************************************************************\
3433             Selects source 2 register file.
3434             \*****************************************************************************/
3435             DWORD Source2RegisterFile : BITFIELD_BIT(45); // SOURCE_2_REGISTER_FILE
3436 
3437             /*****************************************************************************\
3438             Selects destination datatype.
3439             \*****************************************************************************/
3440             DWORD DestinationDatatype : BITFIELD_RANGE(46, 48); // TernaryAlign1DataType
3441 
3442             /*****************************************************************************\
3443             Selects destination horizontal stride.Destination horizontal stride is required for striding based on execution size or packing the destination datatype.
3444             \*****************************************************************************/
3445             DWORD DestinationHorizontalStride : BITFIELD_BIT(49); // DESTINATION_HORIZONTAL_STRIDE
3446             DWORD __CODEGEN_UNIQUE(Reserved) : BITFIELD_RANGE(50, 51); // MBZ
3447             DWORD DestinationAccRegLowBits : BITFIELD_RANGE(52, 53); // AccRegSel[0:1]
3448             DWORD DestinationSubregisterNumber : BITFIELD_RANGE(54, 55); // (DstSubRegNum[4:3])
3449             DWORD DestinationRegisterNumber : BITFIELD_RANGE(56, 63); // DstRegNum
3450 
3451             /*****************************************************************************\
3452             Selects source 0 datatype.
3453             \*****************************************************************************/
3454             QWORD Source0Datatype : BITFIELD_RANGE(64, 66); // TernaryAlign1DataType
3455             QWORD __CODEGEN_UNIQUE(Overridden) : BITFIELD_RANGE(67, 83); // Override
3456             QWORD __CODEGEN_UNIQUE(Reserved) : BITFIELD_BIT(84); // MBZ
3457 
3458             /*****************************************************************************\
3459             Selects source 1 datatype.
3460             \*****************************************************************************/
3461             QWORD Source1Datatype : BITFIELD_RANGE(85, 87); // TernaryAlign1DataType
3462             QWORD Source1VerticalStride : BITFIELD_RANGE(88, 89); // TernaryAlign1VertStride
3463             QWORD Source1HorizontalStride : BITFIELD_RANGE(90, 91); // TernaryAlign1HorzStride
3464             QWORD Source1SubregisterNumber_SourceSubRegisterNumber : BITFIELD_RANGE(92, 96); //
3465             QWORD Source1RegisterNumber_SourceRegisterNumber : BITFIELD_RANGE(97, 104); //
3466             QWORD __CODEGEN_UNIQUE(Reserved) : BITFIELD_BIT(105); // MBZ
3467 
3468             /*****************************************************************************\
3469             Selects source 2 datatype.
3470             \*****************************************************************************/
3471             QWORD Source2Datatype : BITFIELD_RANGE(106, 108); // TernaryAlign1DataType
3472             QWORD __CODEGEN_UNIQUE(Overridden) : BITFIELD_RANGE(109, 125); // Override
3473             QWORD __CODEGEN_UNIQUE(Reserved) : BITFIELD_RANGE(126, 127); // MBZ
3474         } Common;
3475 
3476         struct tagPropertySourceModifierIsTrue {
3477             QWORD __CODEGEN_UNIQUE(Overridden) : BITFIELD_RANGE(0, 36); // Override
3478             QWORD Source0Modifier : BITFIELD_RANGE(37, 38); // SRCMOD
3479             QWORD Source1Modifier : BITFIELD_RANGE(39, 40); // SRCMOD
3480             QWORD Source2Modifier : BITFIELD_RANGE(41, 42); // SRCMOD
3481             QWORD __CODEGEN_UNIQUE(Overridden) : BITFIELD_RANGE(43, 63); // Override
3482             QWORD __CODEGEN_UNIQUE(Overridden) : BITFIELD_RANGE(64, 127); // Override
3483             //QWORD __CODEGEN_UNIQUE(Overridden) : BITFIELD_RANGE(43, 127); // Override
3484         } PropertySourceModifierIsTrue;
3485         struct tagPropertySourceModifierIsFalse {
3486             QWORD __CODEGEN_UNIQUE(Overridden) : BITFIELD_RANGE(0, 36); // Override
3487             QWORD __CODEGEN_UNIQUE(Reserved) : BITFIELD_RANGE(37, 42); // MBZ
3488             QWORD __CODEGEN_UNIQUE(Overridden) : BITFIELD_RANGE(43, 63); // Override
3489             QWORD __CODEGEN_UNIQUE(Overridden) : BITFIELD_RANGE(64, 127); // Override
3490             //QWORD __CODEGEN_UNIQUE(Overridden) : BITFIELD_RANGE(43, 127); // Override
3491         } PropertySourceModifierIsFalse;
3492         struct tagStructureEu_Instruction_Align1_Three_SrcSource0RegisterFileIsGrf {
3493             QWORD __CODEGEN_UNIQUE(Overridden) : BITFIELD_RANGE(0, 63); // Override
3494             QWORD __CODEGEN_UNIQUE(Overridden) : BITFIELD_RANGE(64, 66); // Override
3495             QWORD Source0VerticalStride : BITFIELD_RANGE(67, 68); // TernaryAlign1VertStride
3496             QWORD Source0HorizontalStride : BITFIELD_RANGE(69, 70); // TernaryAlign1HorzStride
3497             QWORD Source0SubregisterNumber_SourceSubRegisterNumber : BITFIELD_RANGE(71, 75); //
3498             QWORD Source0RegisterNumber_SourceRegisterNumber : BITFIELD_RANGE(76, 83); //
3499             QWORD __CODEGEN_UNIQUE(Overridden) : BITFIELD_RANGE(84, 127); // Override
3500         } StructureEu_Instruction_Align1_Three_SrcSource0RegisterFileIsGrf;
3501         struct tagStructureEu_Instruction_Align1_Three_SrcSource0RegisterFileIsImm {
3502             QWORD __CODEGEN_UNIQUE(Overridden) : BITFIELD_RANGE(0, 63); // Override
3503             QWORD __CODEGEN_UNIQUE(Overridden) : BITFIELD_RANGE(64, 66); // Override
3504             QWORD Source0ImmediateValue : BITFIELD_RANGE(67, 82); //
3505             QWORD __CODEGEN_UNIQUE(Reserved) : BITFIELD_BIT(83); // MBZ
3506             QWORD __CODEGEN_UNIQUE(Overridden) : BITFIELD_RANGE(84, 127); // Override
3507         } StructureEu_Instruction_Align1_Three_SrcSource0RegisterFileIsImm;
3508         struct tagStructureEu_Instruction_Align1_Three_SrcSource2RegisterFileIsGrf {
3509             QWORD __CODEGEN_UNIQUE(Overridden) : BITFIELD_RANGE(0, 63); // Override
3510             QWORD __CODEGEN_UNIQUE(Overridden) : BITFIELD_RANGE(64, 108); // Override
3511             //QWORD __CODEGEN_UNIQUE(Overridden) : BITFIELD_RANGE(0, 108); // Override
3512             QWORD __CODEGEN_UNIQUE(Reserved) : BITFIELD_RANGE(109, 110); // MBZ
3513             QWORD Source2HorizontalStride : BITFIELD_RANGE(111, 112); // TernaryAlign1HorzStride
3514             QWORD Source2SubregisterNumber_SourceSubRegisterNumber : BITFIELD_RANGE(113, 117); //
3515             QWORD Source2RegisterNumber_SourceRegisterNumber : BITFIELD_RANGE(118, 125); //
3516             QWORD __CODEGEN_UNIQUE(Overridden) : BITFIELD_RANGE(126, 127); // Override
3517         } StructureEu_Instruction_Align1_Three_SrcSource2RegisterFileIsGrf;
3518         struct tagStructureEu_Instruction_Align1_Three_SrcSource2RegisterFileIsImm {
3519             QWORD __CODEGEN_UNIQUE(Overridden) : BITFIELD_RANGE(0, 63); // Override
3520             QWORD __CODEGEN_UNIQUE(Overridden) : BITFIELD_RANGE(64, 108); // Override
3521             //QWORD __CODEGEN_UNIQUE(Overridden) : BITFIELD_RANGE(0, 108); // Override
3522             QWORD Source2ImmediateValue : BITFIELD_RANGE(109, 124); //
3523             QWORD __CODEGEN_UNIQUE(Reserved) : BITFIELD_BIT(125); // MBZ
3524             QWORD __CODEGEN_UNIQUE(Overridden) : BITFIELD_RANGE(126, 127); // Override
3525         } StructureEu_Instruction_Align1_Three_SrcSource2RegisterFileIsImm;
3526         DWORD RawData[4];
3527     } TheStructure;
3528 
3529     __CODEGEN_ACCESS_SPECIFIER_METHODS
3530 
3531     typedef enum tagEXECUTION_DATATYPE {
3532         EXECUTION_DATATYPE_INTEGER = 0x0,   // Integer datatypes.
3533         EXECUTION_DATATYPE_FLOAT = 0x1,   // Floating point datatype.
3534     } EXECUTION_DATATYPE;
3535 
3536     typedef enum tagDESTINATION_REGISTER_FILE {
3537         DESTINATION_REGISTER_FILE_GRF = 0x0,   // <span style="color: rgb(0, 0, 0); font-family: Arial, sans-serif; line-height: normal;">Selects General Register File as Destination</span>.
3538         DESTINATION_REGISTER_FILE_ARF = 0x1,   // Selects Architectural Register File as Destination. Only Accumulator is allowed.
3539     } DESTINATION_REGISTER_FILE;
3540 
3541     typedef enum tagSOURCE_0_REGISTER_FILE {
3542         SOURCE_0_REGISTER_FILE_GRF = 0x0,   // <span style="color: rgb(0, 0, 0); font-family: Arial, sans-serif; line-height: normal;">Selects General Register File as source 0.</span>
3543         SOURCE_0_REGISTER_FILE_IMM = 0x1,   // <span style="color: rgb(0, 0, 0); font-family: Arial, sans-serif; line-height: normal;">Selects Immediate Register File as source 0.</span>
3544         SOURCE_0_REGISTER_FILE_ARF = 0x1,   // when src0 is accumulator with NF type
3545     } SOURCE_0_REGISTER_FILE;
3546 
3547     typedef enum tagSOURCE_1_REGISTER_FILE {
3548         SOURCE_1_REGISTER_FILE_GRF = 0x0,   // <span style="color: rgb(0, 0, 0); font-family: Arial, sans-serif; line-height: normal;">Selects General Register File as source 1.</span>
3549         SOURCE_1_REGISTER_FILE_ARF = 0x1,   // <span style="color: rgb(0, 0, 0); font-family: Arial, sans-serif; line-height: normal;">Selects Architectural Register File as source 1. Only Accumulator is allowed.</span>
3550     } SOURCE_1_REGISTER_FILE;
3551 
3552     typedef enum tagSOURCE_2_REGISTER_FILE {
3553         SOURCE_2_REGISTER_FILE_GRF = 0x0,   // <span style="color: rgb(0, 0, 0); font-family: Arial, sans-serif; line-height: normal;">Selects General Register File as source 2.</span>
3554         SOURCE_2_REGISTER_FILE_IMM = 0x1,   // <span style="color: rgb(0, 0, 0); font-family: Arial, sans-serif; line-height: normal;">Selects Immediate Register File as source 2.</span>
3555     } SOURCE_2_REGISTER_FILE;
3556 
3557     typedef enum tagDESTINATION_HORIZONTAL_STRIDE {
3558         DESTINATION_HORIZONTAL_STRIDE_1_ELEMENT = 0x0,
3559         DESTINATION_HORIZONTAL_STRIDE_2_ELEMENT = 0x1,
3560     } DESTINATION_HORIZONTAL_STRIDE;
3561 
3562     // INITIALIZATION
3563     //
InittagEU_INSTRUCTION_ALIGN1_THREE_SRC3564     __CODEGEN_INLINE void Init() {
3565         TheStructure.RawData[0] = 0x0;
3566         TheStructure.RawData[1] = 0x0;
3567         TheStructure.RawData[2] = 0x0;
3568         TheStructure.RawData[3] = 0x0;
3569     }
3570 
sInittagEU_INSTRUCTION_ALIGN1_THREE_SRC3571     static tagEU_INSTRUCTION_ALIGN1_THREE_SRC sInit() {
3572         tagEU_INSTRUCTION_ALIGN1_THREE_SRC state;
3573         state.Init();
3574         return state;
3575     }
3576 
3577     // ACCESSORS
3578 
GetRawDatatagEU_INSTRUCTION_ALIGN1_THREE_SRC3579     __CODEGEN_INLINE __CODEGEN_PACKED DWORD& GetRawData(UINT const index) {
3580         return TheStructure.RawData[index];
3581     }
3582 
GetHeadertagEU_INSTRUCTION_ALIGN1_THREE_SRC3583     __CODEGEN_INLINE EU_INSTRUCTION_HEADER& GetHeader() {
3584         __CODEGEN_GET_MACRO();
3585         return TheStructure.Common.Header;
3586     }
3587 
GetFlagSubregisterNumbertagEU_INSTRUCTION_ALIGN1_THREE_SRC3588     __CODEGEN_INLINE DWORD GetFlagSubregisterNumber() const {
3589         __CODEGEN_GET_MACRO();
3590         return (DWORD)TheStructure.Common.FlagSubregisterNumber;
3591     }
3592 
SetFlagSubregisterNumbertagEU_INSTRUCTION_ALIGN1_THREE_SRC3593     __CODEGEN_INLINE void SetFlagSubregisterNumber(DWORD FlagSubregisterNumberValue) {
3594         __CODEGEN_SET_MACRO(FlagSubregisterNumberValue);
3595         TheStructure.Common.FlagSubregisterNumber = FlagSubregisterNumberValue;
3596     }
3597 
GetFlagRegisterNumbertagEU_INSTRUCTION_ALIGN1_THREE_SRC3598     __CODEGEN_INLINE DWORD GetFlagRegisterNumber() const {
3599         __CODEGEN_GET_MACRO();
3600         return (DWORD)TheStructure.Common.FlagRegisterNumber;
3601     }
3602 
SetFlagRegisterNumbertagEU_INSTRUCTION_ALIGN1_THREE_SRC3603     __CODEGEN_INLINE void SetFlagRegisterNumber(DWORD FlagRegisterNumberValue) {
3604         __CODEGEN_SET_MACRO(FlagRegisterNumberValue);
3605         TheStructure.Common.FlagRegisterNumber = FlagRegisterNumberValue;
3606     }
3607 
GetMaskctrltagEU_INSTRUCTION_ALIGN1_THREE_SRC3608     __CODEGEN_INLINE MASKCTRL GetMaskctrl() const {
3609         __CODEGEN_GET_MACRO();
3610         return (MASKCTRL)TheStructure.Common.Maskctrl;
3611     }
3612 
SetMaskctrltagEU_INSTRUCTION_ALIGN1_THREE_SRC3613     __CODEGEN_INLINE void SetMaskctrl(MASKCTRL MaskctrlValue) {
3614         __CODEGEN_SET_MACRO(MaskctrlValue);
3615         TheStructure.Common.Maskctrl = MaskctrlValue;
3616     }
3617 
GetExecutionDatatypetagEU_INSTRUCTION_ALIGN1_THREE_SRC3618     __CODEGEN_INLINE EXECUTION_DATATYPE GetExecutionDatatype() const {
3619         __CODEGEN_GET_MACRO();
3620         return (EXECUTION_DATATYPE)TheStructure.Common.ExecutionDatatype;
3621     }
3622 
SetExecutionDatatypetagEU_INSTRUCTION_ALIGN1_THREE_SRC3623     __CODEGEN_INLINE void SetExecutionDatatype(EXECUTION_DATATYPE ExecutionDatatypeValue) {
3624         __CODEGEN_SET_MACRO(ExecutionDatatypeValue);
3625         TheStructure.Common.ExecutionDatatype = ExecutionDatatypeValue;
3626     }
3627 
GetDestinationRegisterFiletagEU_INSTRUCTION_ALIGN1_THREE_SRC3628     __CODEGEN_INLINE DESTINATION_REGISTER_FILE GetDestinationRegisterFile() const {
3629         __CODEGEN_GET_MACRO();
3630         return (DESTINATION_REGISTER_FILE)TheStructure.Common.DestinationRegisterFile;
3631     }
3632 
SetDestinationRegisterFiletagEU_INSTRUCTION_ALIGN1_THREE_SRC3633     __CODEGEN_INLINE void SetDestinationRegisterFile(DESTINATION_REGISTER_FILE DestinationRegisterFileValue) {
3634         __CODEGEN_SET_MACRO(DestinationRegisterFileValue);
3635         TheStructure.Common.DestinationRegisterFile = DestinationRegisterFileValue;
3636     }
3637 
GetSource0RegisterFiletagEU_INSTRUCTION_ALIGN1_THREE_SRC3638     __CODEGEN_INLINE SOURCE_0_REGISTER_FILE GetSource0RegisterFile() const {
3639         __CODEGEN_GET_MACRO();
3640         return (SOURCE_0_REGISTER_FILE)TheStructure.Common.Source0RegisterFile;
3641     }
3642 
SetSource0RegisterFiletagEU_INSTRUCTION_ALIGN1_THREE_SRC3643     __CODEGEN_INLINE void SetSource0RegisterFile(SOURCE_0_REGISTER_FILE Source0RegisterFileValue) {
3644         __CODEGEN_SET_MACRO(Source0RegisterFileValue);
3645         TheStructure.Common.Source0RegisterFile = Source0RegisterFileValue;
3646     }
3647 
GetSource1RegisterFiletagEU_INSTRUCTION_ALIGN1_THREE_SRC3648     __CODEGEN_INLINE SOURCE_1_REGISTER_FILE GetSource1RegisterFile() const {
3649         __CODEGEN_GET_MACRO();
3650         return (SOURCE_1_REGISTER_FILE)TheStructure.Common.Source1RegisterFile;
3651     }
3652 
SetSource1RegisterFiletagEU_INSTRUCTION_ALIGN1_THREE_SRC3653     __CODEGEN_INLINE void SetSource1RegisterFile(SOURCE_1_REGISTER_FILE Source1RegisterFileValue) {
3654         __CODEGEN_SET_MACRO(Source1RegisterFileValue);
3655         TheStructure.Common.Source1RegisterFile = Source1RegisterFileValue;
3656     }
3657 
GetSource2RegisterFiletagEU_INSTRUCTION_ALIGN1_THREE_SRC3658     __CODEGEN_INLINE SOURCE_2_REGISTER_FILE GetSource2RegisterFile() const {
3659         __CODEGEN_GET_MACRO();
3660         return (SOURCE_2_REGISTER_FILE)TheStructure.Common.Source2RegisterFile;
3661     }
3662 
SetSource2RegisterFiletagEU_INSTRUCTION_ALIGN1_THREE_SRC3663     __CODEGEN_INLINE void SetSource2RegisterFile(SOURCE_2_REGISTER_FILE Source2RegisterFileValue) {
3664         __CODEGEN_SET_MACRO(Source2RegisterFileValue);
3665         TheStructure.Common.Source2RegisterFile = Source2RegisterFileValue;
3666     }
3667 
GetDestinationDatatypetagEU_INSTRUCTION_ALIGN1_THREE_SRC3668     __CODEGEN_INLINE TERNARYALIGN1DATATYPE GetDestinationDatatype() const {
3669         __CODEGEN_GET_MACRO();
3670         return (TERNARYALIGN1DATATYPE)TheStructure.Common.DestinationDatatype;
3671     }
3672 
SetDestinationDatatypetagEU_INSTRUCTION_ALIGN1_THREE_SRC3673     __CODEGEN_INLINE void SetDestinationDatatype(TERNARYALIGN1DATATYPE DestinationDatatypeValue) {
3674         __CODEGEN_SET_MACRO(DestinationDatatypeValue);
3675         TheStructure.Common.DestinationDatatype = DestinationDatatypeValue;
3676     }
3677 
GetDestinationHorizontalStridetagEU_INSTRUCTION_ALIGN1_THREE_SRC3678     __CODEGEN_INLINE DESTINATION_HORIZONTAL_STRIDE GetDestinationHorizontalStride() const {
3679         __CODEGEN_GET_MACRO();
3680         return (DESTINATION_HORIZONTAL_STRIDE)TheStructure.Common.DestinationHorizontalStride;
3681     }
3682 
SetDestinationHorizontalStridetagEU_INSTRUCTION_ALIGN1_THREE_SRC3683     __CODEGEN_INLINE void SetDestinationHorizontalStride(DESTINATION_HORIZONTAL_STRIDE DestinationHorizontalStrideValue) {
3684         __CODEGEN_SET_MACRO(DestinationHorizontalStrideValue);
3685         TheStructure.Common.DestinationHorizontalStride = DestinationHorizontalStrideValue;
3686     }
3687 
3688     typedef enum tagDESTINATIONSUBREGISTERNUMBER {
3689         DESTINATIONSUBREGISTERNUMBER_BIT_SHIFT = 0x3,
3690         DESTINATIONSUBREGISTERNUMBER_ALIGN_SIZE = 0x8,
3691     } DESTINATIONSUBREGISTERNUMBER;
3692 
GetDestinationSubregisterNumbertagEU_INSTRUCTION_ALIGN1_THREE_SRC3693     __CODEGEN_INLINE DWORD GetDestinationSubregisterNumber() const {
3694         __CODEGEN_GET_MACRO();
3695         return (DWORD)TheStructure.Common.DestinationSubregisterNumber << DESTINATIONSUBREGISTERNUMBER_BIT_SHIFT;
3696     }
3697 
SetDestinationSubregisterNumbertagEU_INSTRUCTION_ALIGN1_THREE_SRC3698     __CODEGEN_INLINE void SetDestinationSubregisterNumber(DWORD DestinationSubregisterNumberValue) {
3699         __CODEGEN_SET_MACRO(DestinationSubregisterNumberValue);
3700         TheStructure.Common.DestinationSubregisterNumber = DestinationSubregisterNumberValue >> DESTINATIONSUBREGISTERNUMBER_BIT_SHIFT;
3701     }
3702 
SetDestinationSpecialAcctagEU_INSTRUCTION_ALIGN1_THREE_SRC3703     __CODEGEN_INLINE void SetDestinationSpecialAcc(DWORD DestinationSpecialAcc) {
3704         __CODEGEN_SET_MACRO(DestinationAccRegSel);
3705         TheStructure.Common.DestinationAccRegLowBits = DestinationSpecialAcc & 0x3;
3706         TheStructure.Common.DestinationSubregisterNumber = (DestinationSpecialAcc >> 2) & 0x3;
3707     }
3708 
GetDestinationRegisterNumbertagEU_INSTRUCTION_ALIGN1_THREE_SRC3709     __CODEGEN_INLINE DWORD GetDestinationRegisterNumber() {
3710         __CODEGEN_GET_MACRO();
3711         return (DWORD)TheStructure.Common.DestinationRegisterNumber;
3712     }
3713 
SetDestinationRegisterNumbertagEU_INSTRUCTION_ALIGN1_THREE_SRC3714     __CODEGEN_INLINE void SetDestinationRegisterNumber(DWORD DestinationRegisterNumberValue) {
3715         __CODEGEN_SET_MACRO(DestinationRegisterNumberValue);
3716         TheStructure.Common.DestinationRegisterNumber = DestinationRegisterNumberValue;
3717     }
3718 
GetSource0DatatypetagEU_INSTRUCTION_ALIGN1_THREE_SRC3719     __CODEGEN_INLINE TERNARYALIGN1DATATYPE GetSource0Datatype() const {
3720         __CODEGEN_GET_MACRO();
3721         return (TERNARYALIGN1DATATYPE)TheStructure.Common.Source0Datatype;
3722     }
3723 
SetSource0DatatypetagEU_INSTRUCTION_ALIGN1_THREE_SRC3724     __CODEGEN_INLINE void SetSource0Datatype(TERNARYALIGN1DATATYPE Source0DatatypeValue) {
3725         __CODEGEN_SET_MACRO(Source0DatatypeValue);
3726         TheStructure.Common.Source0Datatype = Source0DatatypeValue;
3727     }
3728 
GetSource1DatatypetagEU_INSTRUCTION_ALIGN1_THREE_SRC3729     __CODEGEN_INLINE TERNARYALIGN1DATATYPE GetSource1Datatype() const {
3730         __CODEGEN_GET_MACRO();
3731         return (TERNARYALIGN1DATATYPE)TheStructure.Common.Source1Datatype;
3732     }
3733 
SetSource1DatatypetagEU_INSTRUCTION_ALIGN1_THREE_SRC3734     __CODEGEN_INLINE void SetSource1Datatype(TERNARYALIGN1DATATYPE Source1DatatypeValue) {
3735         __CODEGEN_SET_MACRO(Source1DatatypeValue);
3736         TheStructure.Common.Source1Datatype = Source1DatatypeValue;
3737     }
3738 
GetSource1VerticalStridetagEU_INSTRUCTION_ALIGN1_THREE_SRC3739     __CODEGEN_INLINE TERNARYALIGN1VERTSTRIDE GetSource1VerticalStride() const {
3740         __CODEGEN_GET_MACRO();
3741         return (TERNARYALIGN1VERTSTRIDE)TheStructure.Common.Source1VerticalStride;
3742     }
3743 
SetSource1VerticalStridetagEU_INSTRUCTION_ALIGN1_THREE_SRC3744     __CODEGEN_INLINE void SetSource1VerticalStride(TERNARYALIGN1VERTSTRIDE Source1VerticalStrideValue) {
3745         __CODEGEN_SET_MACRO(Source1VerticalStrideValue);
3746         TheStructure.Common.Source1VerticalStride = Source1VerticalStrideValue;
3747     }
3748 
GetSource1HorizontalStridetagEU_INSTRUCTION_ALIGN1_THREE_SRC3749     __CODEGEN_INLINE DWORD GetSource1HorizontalStride() const {
3750         __CODEGEN_GET_MACRO();
3751         return (DWORD)TheStructure.Common.Source1HorizontalStride;
3752     }
3753 
SetSource1HorizontalStridetagEU_INSTRUCTION_ALIGN1_THREE_SRC3754     __CODEGEN_INLINE void SetSource1HorizontalStride(DWORD Source1HorizontalStrideValue) {
3755         __CODEGEN_SET_MACRO(Source1HorizontalStrideValue);
3756         TheStructure.Common.Source1HorizontalStride = Source1HorizontalStrideValue;
3757     }
3758 
GetSource1SubregisterNumber_SourceSubRegisterNumbertagEU_INSTRUCTION_ALIGN1_THREE_SRC3759     __CODEGEN_INLINE DWORD GetSource1SubregisterNumber_SourceSubRegisterNumber() const {
3760         __CODEGEN_GET_MACRO();
3761         return (DWORD)TheStructure.Common.Source1SubregisterNumber_SourceSubRegisterNumber;
3762     }
3763 
3764     // SubRegNum[4:1] for special acc
SetSource1SpecialAcctagEU_INSTRUCTION_ALIGN1_THREE_SRC3765     __CODEGEN_INLINE void SetSource1SpecialAcc(DWORD SpecialAccValue) {
3766         __CODEGEN_SET_MACRO(Source1SubregisterNumber_SourceSubRegisterNumberValue);
3767         DWORD V = ((SpecialAccValue << 1) |
3768             (TheStructure.Common.Source1SubregisterNumber_SourceSubRegisterNumber & 0x1));
3769         TheStructure.Common.Source1SubregisterNumber_SourceSubRegisterNumber = (V & 0x1F);
3770     }
3771 
SetSource1SubregisterNumber_SourceSubRegisterNumbertagEU_INSTRUCTION_ALIGN1_THREE_SRC3772     __CODEGEN_INLINE void SetSource1SubregisterNumber_SourceSubRegisterNumber(DWORD Source1SubregisterNumber_SourceSubRegisterNumberValue) {
3773         __CODEGEN_SET_MACRO(Source1SubregisterNumber_SourceSubRegisterNumberValue);
3774         TheStructure.Common.Source1SubregisterNumber_SourceSubRegisterNumber = Source1SubregisterNumber_SourceSubRegisterNumberValue;
3775     }
3776 
GetSource1RegisterNumber_SourceRegisterNumbertagEU_INSTRUCTION_ALIGN1_THREE_SRC3777     __CODEGEN_INLINE DWORD GetSource1RegisterNumber_SourceRegisterNumber() const {
3778         __CODEGEN_GET_MACRO();
3779         return (DWORD)TheStructure.Common.Source1RegisterNumber_SourceRegisterNumber;
3780     }
3781 
SetSource1RegisterNumber_SourceRegisterNumbertagEU_INSTRUCTION_ALIGN1_THREE_SRC3782     __CODEGEN_INLINE void SetSource1RegisterNumber_SourceRegisterNumber(DWORD Source1RegisterNumber_SourceRegisterNumberValue) {
3783         __CODEGEN_SET_MACRO(Source1RegisterNumber_SourceRegisterNumberValue);
3784         TheStructure.Common.Source1RegisterNumber_SourceRegisterNumber = Source1RegisterNumber_SourceRegisterNumberValue;
3785     }
3786 
GetSource2DatatypetagEU_INSTRUCTION_ALIGN1_THREE_SRC3787     __CODEGEN_INLINE TERNARYALIGN1DATATYPE GetSource2Datatype() const {
3788         __CODEGEN_GET_MACRO();
3789         return (TERNARYALIGN1DATATYPE)TheStructure.Common.Source2Datatype;
3790     }
3791 
SetSource2DatatypetagEU_INSTRUCTION_ALIGN1_THREE_SRC3792     __CODEGEN_INLINE void SetSource2Datatype(TERNARYALIGN1DATATYPE Source2DatatypeValue) {
3793         __CODEGEN_SET_MACRO(Source2DatatypeValue);
3794         TheStructure.Common.Source2Datatype = Source2DatatypeValue;
3795     }
3796 
GetSource0ModifiertagEU_INSTRUCTION_ALIGN1_THREE_SRC3797     __CODEGEN_INLINE SRCMOD GetSource0Modifier() const {
3798         __CODEGEN_GET_MACRO();
3799         return (SRCMOD)TheStructure.PropertySourceModifierIsTrue.Source0Modifier;
3800     }
3801 
SetSource0ModifiertagEU_INSTRUCTION_ALIGN1_THREE_SRC3802     __CODEGEN_INLINE void SetSource0Modifier(SRCMOD Source0ModifierValue) {
3803         __CODEGEN_SET_MACRO(Source0ModifierValue);
3804         TheStructure.PropertySourceModifierIsTrue.Source0Modifier = Source0ModifierValue;
3805     }
3806 
GetSource1ModifiertagEU_INSTRUCTION_ALIGN1_THREE_SRC3807     __CODEGEN_INLINE SRCMOD GetSource1Modifier() const {
3808         __CODEGEN_GET_MACRO();
3809         return (SRCMOD)TheStructure.PropertySourceModifierIsTrue.Source1Modifier;
3810     }
3811 
SetSource1ModifiertagEU_INSTRUCTION_ALIGN1_THREE_SRC3812     __CODEGEN_INLINE void SetSource1Modifier(SRCMOD Source1ModifierValue) {
3813         __CODEGEN_SET_MACRO(Source1ModifierValue);
3814         TheStructure.PropertySourceModifierIsTrue.Source1Modifier = Source1ModifierValue;
3815     }
3816 
GetSource2ModifiertagEU_INSTRUCTION_ALIGN1_THREE_SRC3817     __CODEGEN_INLINE SRCMOD GetSource2Modifier() const {
3818         __CODEGEN_GET_MACRO();
3819         return (SRCMOD)TheStructure.PropertySourceModifierIsTrue.Source2Modifier;
3820     }
3821 
SetSource2ModifiertagEU_INSTRUCTION_ALIGN1_THREE_SRC3822     __CODEGEN_INLINE void SetSource2Modifier(SRCMOD Source2ModifierValue) {
3823         __CODEGEN_SET_MACRO(Source2ModifierValue);
3824         TheStructure.PropertySourceModifierIsTrue.Source2Modifier = Source2ModifierValue;
3825     }
3826 
GetSource0VerticalStridetagEU_INSTRUCTION_ALIGN1_THREE_SRC3827     __CODEGEN_INLINE TERNARYALIGN1VERTSTRIDE GetSource0VerticalStride() const {
3828         __CODEGEN_GET_MACRO();
3829         return (TERNARYALIGN1VERTSTRIDE)TheStructure.StructureEu_Instruction_Align1_Three_SrcSource0RegisterFileIsGrf.Source0VerticalStride;
3830     }
3831 
SetSource0VerticalStridetagEU_INSTRUCTION_ALIGN1_THREE_SRC3832     __CODEGEN_INLINE void SetSource0VerticalStride(TERNARYALIGN1VERTSTRIDE Source0VerticalStrideValue) {
3833         __CODEGEN_SET_MACRO(Source0VerticalStrideValue);
3834         TheStructure.StructureEu_Instruction_Align1_Three_SrcSource0RegisterFileIsGrf.Source0VerticalStride = Source0VerticalStrideValue;
3835     }
3836 
GetSource0HorizontalStridetagEU_INSTRUCTION_ALIGN1_THREE_SRC3837     __CODEGEN_INLINE DWORD GetSource0HorizontalStride() const {
3838         __CODEGEN_GET_MACRO();
3839         return (DWORD)TheStructure.StructureEu_Instruction_Align1_Three_SrcSource0RegisterFileIsGrf.Source0HorizontalStride;
3840     }
3841 
SetSource0HorizontalStridetagEU_INSTRUCTION_ALIGN1_THREE_SRC3842     __CODEGEN_INLINE void SetSource0HorizontalStride(DWORD Source0HorizontalStrideValue) {
3843         __CODEGEN_SET_MACRO(Source0HorizontalStrideValue);
3844         TheStructure.StructureEu_Instruction_Align1_Three_SrcSource0RegisterFileIsGrf.Source0HorizontalStride = Source0HorizontalStrideValue;
3845     }
3846 
GetSource0SubregisterNumber_SourceSubRegisterNumbertagEU_INSTRUCTION_ALIGN1_THREE_SRC3847     __CODEGEN_INLINE DWORD GetSource0SubregisterNumber_SourceSubRegisterNumber() const {
3848         __CODEGEN_GET_MACRO();
3849         return (DWORD)TheStructure.StructureEu_Instruction_Align1_Three_SrcSource0RegisterFileIsGrf.Source0SubregisterNumber_SourceSubRegisterNumber;
3850     }
3851 
3852     // SubRegNum[4:1] for special acc
SetSource0SpecialAcctagEU_INSTRUCTION_ALIGN1_THREE_SRC3853     __CODEGEN_INLINE void SetSource0SpecialAcc(DWORD SpecialAccValue) {
3854         __CODEGEN_SET_MACRO(Source0SubregisterNumber_SourceSubRegisterNumberValue);
3855         DWORD V = ((SpecialAccValue << 1) |
3856             (TheStructure.StructureEu_Instruction_Align1_Three_SrcSource0RegisterFileIsGrf.Source0SubregisterNumber_SourceSubRegisterNumber & 0x1));
3857         TheStructure.StructureEu_Instruction_Align1_Three_SrcSource0RegisterFileIsGrf.Source0SubregisterNumber_SourceSubRegisterNumber = (V & 0x1F);
3858     }
3859 
SetSource0SubregisterNumber_SourceSubRegisterNumbertagEU_INSTRUCTION_ALIGN1_THREE_SRC3860     __CODEGEN_INLINE void SetSource0SubregisterNumber_SourceSubRegisterNumber(DWORD Source0SubregisterNumber_SourceSubRegisterNumberValue) {
3861         __CODEGEN_SET_MACRO(Source0SubregisterNumber_SourceSubRegisterNumberValue);
3862         TheStructure.StructureEu_Instruction_Align1_Three_SrcSource0RegisterFileIsGrf.Source0SubregisterNumber_SourceSubRegisterNumber = Source0SubregisterNumber_SourceSubRegisterNumberValue;
3863     }
3864 
GetSource0RegisterNumber_SourceRegisterNumbertagEU_INSTRUCTION_ALIGN1_THREE_SRC3865     __CODEGEN_INLINE DWORD GetSource0RegisterNumber_SourceRegisterNumber() const {
3866         __CODEGEN_GET_MACRO();
3867         return (DWORD)TheStructure.StructureEu_Instruction_Align1_Three_SrcSource0RegisterFileIsGrf.Source0RegisterNumber_SourceRegisterNumber;
3868     }
3869 
SetSource0RegisterNumber_SourceRegisterNumbertagEU_INSTRUCTION_ALIGN1_THREE_SRC3870     __CODEGEN_INLINE void SetSource0RegisterNumber_SourceRegisterNumber(DWORD Source0RegisterNumber_SourceRegisterNumberValue) {
3871         __CODEGEN_SET_MACRO(Source0RegisterNumber_SourceRegisterNumberValue);
3872         TheStructure.StructureEu_Instruction_Align1_Three_SrcSource0RegisterFileIsGrf.Source0RegisterNumber_SourceRegisterNumber = Source0RegisterNumber_SourceRegisterNumberValue;
3873     }
3874 
GetSource0ImmediateValuetagEU_INSTRUCTION_ALIGN1_THREE_SRC3875     __CODEGEN_INLINE DWORD GetSource0ImmediateValue() const {
3876         __CODEGEN_GET_MACRO();
3877         return (DWORD)TheStructure.StructureEu_Instruction_Align1_Three_SrcSource0RegisterFileIsImm.Source0ImmediateValue;
3878     }
3879 
SetSource0ImmediateValuetagEU_INSTRUCTION_ALIGN1_THREE_SRC3880     __CODEGEN_INLINE void SetSource0ImmediateValue(DWORD Source0ImmediateValueValue) {
3881         __CODEGEN_SET_MACRO(Source0ImmediateValueValue);
3882         TheStructure.StructureEu_Instruction_Align1_Three_SrcSource0RegisterFileIsImm.Source0ImmediateValue = Source0ImmediateValueValue;
3883     }
3884 
GetSource2HorizontalStridetagEU_INSTRUCTION_ALIGN1_THREE_SRC3885     __CODEGEN_INLINE DWORD GetSource2HorizontalStride() const {
3886         __CODEGEN_GET_MACRO();
3887         return (DWORD)TheStructure.StructureEu_Instruction_Align1_Three_SrcSource2RegisterFileIsGrf.Source2HorizontalStride;
3888     }
3889 
SetSource2HorizontalStridetagEU_INSTRUCTION_ALIGN1_THREE_SRC3890     __CODEGEN_INLINE void SetSource2HorizontalStride(DWORD Source2HorizontalStrideValue) {
3891         __CODEGEN_SET_MACRO(Source2HorizontalStrideValue);
3892         TheStructure.StructureEu_Instruction_Align1_Three_SrcSource2RegisterFileIsGrf.Source2HorizontalStride = Source2HorizontalStrideValue;
3893     }
3894 
GetSource2SubregisterNumber_SourceSubRegisterNumbertagEU_INSTRUCTION_ALIGN1_THREE_SRC3895     __CODEGEN_INLINE DWORD GetSource2SubregisterNumber_SourceSubRegisterNumber() const {
3896         __CODEGEN_GET_MACRO();
3897         return (DWORD)TheStructure.StructureEu_Instruction_Align1_Three_SrcSource2RegisterFileIsGrf.Source2SubregisterNumber_SourceSubRegisterNumber;
3898     }
3899 
3900     // SubRegNum[4:1] for special acc
SetSource2SpecialAcctagEU_INSTRUCTION_ALIGN1_THREE_SRC3901     __CODEGEN_INLINE void SetSource2SpecialAcc(DWORD SpecialAccValue) {
3902         __CODEGEN_SET_MACRO(Source2SubregisterNumber_SourceSubRegisterNumberValue);
3903         DWORD V = ((SpecialAccValue << 1) |
3904             (TheStructure.StructureEu_Instruction_Align1_Three_SrcSource2RegisterFileIsGrf.Source2SubregisterNumber_SourceSubRegisterNumber & 0x1));
3905         TheStructure.StructureEu_Instruction_Align1_Three_SrcSource2RegisterFileIsGrf.Source2SubregisterNumber_SourceSubRegisterNumber = (V & 0x1F);
3906     }
3907 
SetSource2SubregisterNumber_SourceSubRegisterNumbertagEU_INSTRUCTION_ALIGN1_THREE_SRC3908     __CODEGEN_INLINE void SetSource2SubregisterNumber_SourceSubRegisterNumber(DWORD Source2SubregisterNumber_SourceSubRegisterNumberValue) {
3909         __CODEGEN_SET_MACRO(Source2SubregisterNumber_SourceSubRegisterNumberValue);
3910         TheStructure.StructureEu_Instruction_Align1_Three_SrcSource2RegisterFileIsGrf.Source2SubregisterNumber_SourceSubRegisterNumber = Source2SubregisterNumber_SourceSubRegisterNumberValue;
3911     }
3912 
GetSource2RegisterNumber_SourceRegisterNumbertagEU_INSTRUCTION_ALIGN1_THREE_SRC3913     __CODEGEN_INLINE DWORD GetSource2RegisterNumber_SourceRegisterNumber() const {
3914         __CODEGEN_GET_MACRO();
3915         return (DWORD)TheStructure.StructureEu_Instruction_Align1_Three_SrcSource2RegisterFileIsGrf.Source2RegisterNumber_SourceRegisterNumber;
3916     }
3917 
SetSource2RegisterNumber_SourceRegisterNumbertagEU_INSTRUCTION_ALIGN1_THREE_SRC3918     __CODEGEN_INLINE void SetSource2RegisterNumber_SourceRegisterNumber(DWORD Source2RegisterNumber_SourceRegisterNumberValue) {
3919         __CODEGEN_SET_MACRO(Source2RegisterNumber_SourceRegisterNumberValue);
3920         TheStructure.StructureEu_Instruction_Align1_Three_SrcSource2RegisterFileIsGrf.Source2RegisterNumber_SourceRegisterNumber = Source2RegisterNumber_SourceRegisterNumberValue;
3921     }
3922 
GetSource2ImmediateValuetagEU_INSTRUCTION_ALIGN1_THREE_SRC3923     __CODEGEN_INLINE DWORD GetSource2ImmediateValue() const {
3924         __CODEGEN_GET_MACRO();
3925         return (DWORD)TheStructure.StructureEu_Instruction_Align1_Three_SrcSource2RegisterFileIsImm.Source2ImmediateValue;
3926     }
3927 
SetSource2ImmediateValuetagEU_INSTRUCTION_ALIGN1_THREE_SRC3928     __CODEGEN_INLINE void SetSource2ImmediateValue(DWORD Source2ImmediateValueValue) {
3929         __CODEGEN_SET_MACRO(Source2ImmediateValueValue);
3930         TheStructure.StructureEu_Instruction_Align1_Three_SrcSource2RegisterFileIsImm.Source2ImmediateValue = Source2ImmediateValueValue;
3931     }
3932 
3933 } __CODEGEN_ATTRIBUTES_STRUCTURE EU_INSTRUCTION_ALIGN1_THREE_SRC;
3934 
3935 C_ASSERT(16 == sizeof(EU_INSTRUCTION_ALIGN1_THREE_SRC));
3936 
3937 typedef union tagEU_INSTRUCTION_BRANCH_CONDITIONAL {
3938     struct tagCommon {
3939         EU_INSTRUCTION_HEADER Header;
3940         DWORD DestinationRegisterFile    : BITFIELD_RANGE( 32, 33); // REGFILE
3941 
3942         /*****************************************************************************\
3943         This field specifies the numeric data type of the destination operand dst. The bits of the destination operand are interpreted as the identified numeric data type, rather than coerced into a type implied by the operator. For a send instruction, this field applies to the CurrDst ? the current destination operand.
3944         \*****************************************************************************/
3945         DWORD DestinationDataType        : BITFIELD_RANGE( 34, 36); // DataType
3946         DWORD Src0Regfile                : BITFIELD_RANGE( 37, 38); // REGFILE
3947         DWORD Src0Srctype                : BITFIELD_RANGE( 39, 41); // DataType
3948         DWORD Src1Regfile                : BITFIELD_RANGE( 42, 43); // REGFILE
3949 
3950         /*****************************************************************************\
3951         This field specifies the numeric data type of the source operand src1. The bits of a source operand are interpreted as the identified numeric data type, rather than coerced into a type implied by the operator. Depending on RegFile field of the source operand, there are two different encoding for this field. If a source is a register operand, this field follows the Source Register Type Encoding. If a source is an immediate operand, this field follows the Source Immediate Type Encoding.
3952 
3953         Programming Notes:
3954         Both source operands, src0 and src1, support immediate types, but only one immediate is allowed for a given instruction and it must be the last operand.
3955 
3956         Halfbyte integer vector (v) type can only be used in instructions in packed-word execution mode. Therefore, in a two-source instruction where src1 is of type :v, src0 must be of type :b, :ub, :w, or :uw.
3957         \*****************************************************************************/
3958         DWORD Src1Srctype                : BITFIELD_RANGE( 44, 46); // DataType
3959         DWORD __CODEGEN_UNIQUE(Reserved) : BITFIELD_BIT(       47); // MBZ
3960 
3961         /*****************************************************************************\
3962         Jump Target Offset. The jump distance in number of eight-byte units if a jump is taken for the instruction.
3963         \*****************************************************************************/
3964         DWORD Jip                        : BITFIELD_RANGE( 48, 63); // S15
3965         DWORD __CODEGEN_UNIQUE(Overridden)[2];
3966     } Common;
3967     struct tagSrc1RegfileIsImm {
3968         EU_INSTRUCTION_SOURCES_REG_IMM Sources;
3969         DWORD __CODEGEN_UNIQUE(Overridden)[2];
3970     } Src1RegfileIsImm;
3971     struct tagSrc1RegfileNotImm {
3972         EU_INSTRUCTION_SOURCES_REG_REG Sources;
3973         DWORD __CODEGEN_UNIQUE(Overridden)[2];
3974     } Src1RegfileNotImm;
3975     DWORD RawData[4];
3976 
3977     // INITIALIZATION
3978     //
Init()3979     __CODEGEN_INLINE void Init() {
3980         RawData[0]                     = 0x0;
3981         Common.Header.Init();
3982         RawData[1]                     = 0x0;
3983         Common.DestinationRegisterFile = 0x0;
3984         Common.DestinationDataType     = 0x0;
3985         Common.Src0Regfile             = 0x0;
3986         Common.Src0Srctype             = 0x0;
3987         Common.Src1Regfile             = 0x0;
3988         Common.Src1Srctype             = 0x0;
3989         Common.Jip                     = 0x0;
3990         RawData[2]                     = 0x0;
3991         RawData[3]                     = 0x0;
3992     }
3993 
sInit()3994     static tagEU_INSTRUCTION_BRANCH_CONDITIONAL sInit() {
3995         tagEU_INSTRUCTION_BRANCH_CONDITIONAL state;
3996         state.Init();
3997         return state;
3998     }
3999 
4000     // ACCESSORS
4001     //
GetDWord(UINT const index)4002     __CODEGEN_INLINE __CODEGEN_PACKED DWORD& GetDWord(UINT const index) {
4003         return RawData[index];
4004     }
4005 
4006     static size_t CalculateSize(UINT const entryCount = 0) {
4007         return 0;
4008     }
4009 
GetSize()4010     __CODEGEN_INLINE size_t GetSize() {
4011         return 0;
4012     }
4013 
GetHeader()4014     __CODEGEN_INLINE EU_INSTRUCTION_HEADER& GetHeader() {
4015         __CODEGEN_GET_MACRO();
4016         return Common.Header;
4017     }
4018 
GetDestinationRegisterFile()4019     __CODEGEN_INLINE REGFILE GetDestinationRegisterFile() {
4020         __CODEGEN_GET_MACRO();
4021         return (REGFILE)Common.DestinationRegisterFile;
4022     }
4023 
SetDestinationRegisterFile(REGFILE DestinationRegisterFileValue)4024     __CODEGEN_INLINE void SetDestinationRegisterFile(REGFILE DestinationRegisterFileValue) {
4025         __CODEGEN_SET_MACRO(DestinationRegisterFileValue);
4026         Common.DestinationRegisterFile = DestinationRegisterFileValue;
4027     }
4028 
GetDestinationDataType()4029     __CODEGEN_INLINE DWORD GetDestinationDataType() {
4030         __CODEGEN_GET_MACRO();
4031         return (DWORD)Common.DestinationDataType;
4032     }
4033 
SetDestinationDataType(DWORD DestinationDataTypeValue)4034     __CODEGEN_INLINE void SetDestinationDataType(DWORD DestinationDataTypeValue) {
4035         __CODEGEN_SET_MACRO(DestinationDataTypeValue);
4036         Common.DestinationDataType = DestinationDataTypeValue;
4037     }
4038 
GetSrc0Regfile()4039     __CODEGEN_INLINE REGFILE GetSrc0Regfile() {
4040         __CODEGEN_GET_MACRO();
4041         return (REGFILE)Common.Src0Regfile;
4042     }
4043 
SetSrc0Regfile(REGFILE Src0RegfileValue)4044     __CODEGEN_INLINE void SetSrc0Regfile(REGFILE Src0RegfileValue) {
4045         __CODEGEN_SET_MACRO(Src0RegfileValue);
4046         Common.Src0Regfile = Src0RegfileValue;
4047     }
4048 
GetSrc0Srctype()4049     __CODEGEN_INLINE DWORD GetSrc0Srctype() {
4050         __CODEGEN_GET_MACRO();
4051         return (DWORD)Common.Src0Srctype;
4052     }
4053 
SetSrc0Srctype(DWORD Src0SrctypeValue)4054     __CODEGEN_INLINE void SetSrc0Srctype(DWORD Src0SrctypeValue) {
4055         __CODEGEN_SET_MACRO(Src0SrctypeValue);
4056         Common.Src0Srctype = Src0SrctypeValue;
4057     }
4058 
GetSrc1Regfile()4059     __CODEGEN_INLINE REGFILE GetSrc1Regfile() {
4060         __CODEGEN_GET_MACRO();
4061         return (REGFILE)Common.Src1Regfile;
4062     }
4063 
SetSrc1Regfile(REGFILE Src1RegfileValue)4064     __CODEGEN_INLINE void SetSrc1Regfile(REGFILE Src1RegfileValue) {
4065         __CODEGEN_SET_MACRO(Src1RegfileValue);
4066         Common.Src1Regfile = Src1RegfileValue;
4067     }
4068 
GetSrc1Srctype()4069     __CODEGEN_INLINE DWORD GetSrc1Srctype() {
4070         __CODEGEN_GET_MACRO();
4071         return (DWORD)Common.Src1Srctype;
4072     }
4073 
SetSrc1Srctype(DWORD Src1SrctypeValue)4074     __CODEGEN_INLINE void SetSrc1Srctype(DWORD Src1SrctypeValue) {
4075         __CODEGEN_SET_MACRO(Src1SrctypeValue);
4076         Common.Src1Srctype = Src1SrctypeValue;
4077     }
4078 
GetJip()4079     __CODEGEN_INLINE DWORD GetJip() {
4080         __CODEGEN_GET_MACRO();
4081         return (DWORD)Common.Jip;
4082     }
4083 
SetJip(DWORD JipValue)4084     __CODEGEN_INLINE void SetJip(DWORD JipValue) {
4085         __CODEGEN_SET_MACRO(JipValue);
4086         Common.Jip = JipValue;
4087     }
4088 
GetSources_0()4089     __CODEGEN_INLINE EU_INSTRUCTION_SOURCES_REG_IMM& GetSources_0() {
4090         __CODEGEN_GET_MACRO();
4091         return Src1RegfileIsImm.Sources;
4092     }
4093 
GetSources_1()4094     __CODEGEN_INLINE EU_INSTRUCTION_SOURCES_REG_REG& GetSources_1() {
4095         __CODEGEN_GET_MACRO();
4096         return Src1RegfileNotImm.Sources;
4097     }
4098 
4099 } __CODEGEN_ATTRIBUTES_STRUCTURE EU_INSTRUCTION_BRANCH_CONDITIONAL;
4100 
4101 C_ASSERT(16 == sizeof(EU_INSTRUCTION_BRANCH_CONDITIONAL));
4102 
4103 typedef union tagEU_INSTRUCTION_BRANCH_ONE_SRC {
4104     struct tagCommon {
4105         EU_INSTRUCTION_HEADER Header;
4106         EU_INSTRUCTION_OPERAND_CONTROLS OperandControl;
4107         QWORD __CODEGEN_UNIQUE(Overridden)    : BITFIELD_RANGE( 64, 88); // Override
4108         QWORD Src1Regfile                     : BITFIELD_RANGE( 89, 90); // REGFILE
4109         QWORD Src1Srctype                     : BITFIELD_RANGE( 91, 94); // SRCTYPE
4110         QWORD Source0AddressImmediate9SignBit : BITFIELD_BIT(       95); //
4111 
4112         /*****************************************************************************\
4113         Jump Target Offset. The relative offset in bytes if a jump is taken for the instruction.
4114         \*****************************************************************************/
4115         QWORD Jip                             : BITFIELD_RANGE( 96,127); // S31
4116     } Common;
4117     struct tagStructureEu_Instruction_Controls_AAccessmodeIsAlign1AndSource0SourceAddressingModeIsDirect {
4118         DWORD __CODEGEN_UNIQUE(Overridden)[2];
4119         QWORD Source0_SourceSubRegisterNumber : BITFIELD_RANGE( 64, 68); //
4120         QWORD Source0_SourceRegisterNumber    : BITFIELD_RANGE( 69, 76); //
4121         QWORD __CODEGEN_UNIQUE(Overridden)    : BITFIELD_RANGE( 77,97); // Override
4122         QWORD __CODEGEN_UNIQUE(Overridden)    : BITFIELD_RANGE( 98,127); // Override
4123 
4124     } StructureEu_Instruction_Controls_AAccessmodeIsAlign1AndSource0SourceAddressingModeIsDirect;
4125     struct tagStructureEu_Instruction_Controls_AAccessmodeIsAlign1AndSource0SourceAddressingModeIsIndirect {
4126         DWORD __CODEGEN_UNIQUE(Overridden)[2];
4127         QWORD Source0_SourceAddressImmediate80 : BITFIELD_RANGE( 64, 72); // S9[8:0]
4128         QWORD Source0_AddressSubregisterNumber : BITFIELD_RANGE( 73, 76); //
4129         QWORD __CODEGEN_UNIQUE(Overridden)     : BITFIELD_RANGE( 77, 94); // Override
4130         QWORD Source0_SourceAddressImmediate9  : BITFIELD_RANGE( 95, 95); // S9[9:9]
4131         QWORD __CODEGEN_UNIQUE(Overridden)     : BITFIELD_RANGE( 96,127); // Override
4132     } StructureEu_Instruction_Controls_AAccessmodeIsAlign1AndSource0SourceAddressingModeIsIndirect;
4133     struct tagStructureEu_Instruction_Controls_AAccessmodeIsAlign1AndPropertySourceModifierIsFalse {
4134         QWORD __CODEGEN_UNIQUE(Overridden) : BITFIELD_RANGE(  0, 63); // Override
4135         QWORD __CODEGEN_UNIQUE(Overridden) : BITFIELD_RANGE(  64, 76); // Override
4136         QWORD __CODEGEN_UNIQUE(Reserved)   : BITFIELD_RANGE( 77, 78); // MBZ
4137         QWORD __CODEGEN_UNIQUE(Overridden)    : BITFIELD_RANGE( 79,97); // Override
4138         QWORD __CODEGEN_UNIQUE(Overridden)    : BITFIELD_RANGE( 98,127); // Override
4139     } StructureEu_Instruction_Controls_AAccessmodeIsAlign1AndPropertySourceModifierIsFalse;
4140     struct tagStructureEu_Instruction_Controls_AAccessmodeIsAlign1AndPropertySourceModifierIsTrue {
4141         QWORD __CODEGEN_UNIQUE(Overridden) : BITFIELD_RANGE(  0, 63); // Override
4142         QWORD __CODEGEN_UNIQUE(Overridden) : BITFIELD_RANGE(  64, 76); // Override
4143         QWORD Source0_SourceModifier       : BITFIELD_RANGE( 77, 78); // SRCMOD
4144         QWORD __CODEGEN_UNIQUE(Overridden)    : BITFIELD_RANGE( 79,97); // Override
4145         QWORD __CODEGEN_UNIQUE(Overridden)    : BITFIELD_RANGE( 98,127); // Override
4146     } StructureEu_Instruction_Controls_AAccessmodeIsAlign1AndPropertySourceModifierIsTrue;
4147     struct tagStructureEu_Instruction_Controls_AAccessmodeIsAlign1 {
4148         QWORD __CODEGEN_UNIQUE(Overridden) : BITFIELD_RANGE(  0, 63); // Override
4149         QWORD __CODEGEN_UNIQUE(Overridden) : BITFIELD_RANGE(  64, 78); // Override
4150         QWORD Source0_SourceAddressingMode   : BITFIELD_BIT(       79); // ADDRMODE
4151         QWORD Source0_SourceHorizontalStride : BITFIELD_RANGE( 80, 81); // HORZSTRIDE
4152         QWORD Source0_SourceWidth            : BITFIELD_RANGE( 82, 84); // WIDTH
4153         QWORD Source0_SourceVerticalStride   : BITFIELD_RANGE( 85, 88); // VERTSTRIDE
4154         QWORD __CODEGEN_UNIQUE(Overridden)    : BITFIELD_RANGE( 89,97); // Override
4155         QWORD __CODEGEN_UNIQUE(Overridden)    : BITFIELD_RANGE( 98,127); // Override
4156     } StructureEu_Instruction_Controls_AAccessmodeIsAlign1;
4157     struct tagStructureEu_Instruction_Controls_AAccessmodeIsAlign16 {
4158         DWORD __CODEGEN_UNIQUE(Overridden)[2];
4159         QWORD Source0_SourceChannelSelect30 : BITFIELD_RANGE( 64, 67); // ChanSel[4][3:0]
4160         QWORD __CODEGEN_UNIQUE(Overridden)  : BITFIELD_RANGE( 68, 78); // Override
4161         QWORD Source0_SourceAddressingMode  : BITFIELD_BIT(       79); // ADDRMODE
4162         QWORD Source0_SourceChannelSelect74 : BITFIELD_RANGE( 80, 83); // ChanSel[4][7:4]
4163         QWORD __CODEGEN_UNIQUE(Reserved)    : BITFIELD_BIT(       84); // MBZ
4164         QWORD Source0_SourceVerticalStride  : BITFIELD_RANGE( 85, 88); // VERTSTRIDE
4165         QWORD __CODEGEN_UNIQUE(Overridden)  : BITFIELD_RANGE( 89,127); // Override
4166     } StructureEu_Instruction_Controls_AAccessmodeIsAlign16;
4167     struct tagStructureEu_Instruction_Controls_AAccessmodeIsAlign16AndSource0SourceAddressingModeIsDirect {
4168         QWORD __CODEGEN_UNIQUE(Overridden)      : BITFIELD_RANGE(  0, 63); // Override
4169         QWORD __CODEGEN_UNIQUE(Overridden)      : BITFIELD_RANGE(  64, 67); // Override
4170         QWORD Source0_SourceSubregisterNumber44 : BITFIELD_BIT(       68); // SrcSubRegNum[4:4]
4171         QWORD Source0_SourceRegisterNumber      : BITFIELD_RANGE( 69, 76); //
4172         QWORD __CODEGEN_UNIQUE(Overridden)      : BITFIELD_RANGE( 77,127); // Override
4173     } StructureEu_Instruction_Controls_AAccessmodeIsAlign16AndSource0SourceAddressingModeIsDirect;
4174     struct tagStructureEu_Instruction_Controls_AAccessmodeIsAlign16AndSource0SourceAddressingModeIsIndirect {
4175         QWORD __CODEGEN_UNIQUE(Overridden)      : BITFIELD_RANGE(  0, 63); // Override
4176         QWORD __CODEGEN_UNIQUE(Overridden)      : BITFIELD_RANGE(  64, 67); // Override
4177         QWORD Source0_SourceAddressImmediate84 : BITFIELD_RANGE( 68, 72); // S9[8:4]
4178         QWORD Source0_AddressSubregisterNumber : BITFIELD_RANGE( 73, 76); //
4179         QWORD __CODEGEN_UNIQUE(Overridden)     : BITFIELD_RANGE( 77,127); // Override
4180     } StructureEu_Instruction_Controls_AAccessmodeIsAlign16AndSource0SourceAddressingModeIsIndirect;
4181     struct tagStructureEu_Instruction_Controls_AAccessmodeIsAlign16AndPropertySourceModifierIsFalse {
4182         QWORD __CODEGEN_UNIQUE(Overridden)      : BITFIELD_RANGE(  0, 63); // Override
4183         QWORD __CODEGEN_UNIQUE(Overridden)      : BITFIELD_RANGE(  64, 76); // Override
4184         QWORD __CODEGEN_UNIQUE(Reserved)   : BITFIELD_RANGE( 77, 78); // MBZ
4185         QWORD __CODEGEN_UNIQUE(Overridden) : BITFIELD_RANGE( 79,127); // Override
4186     } StructureEu_Instruction_Controls_AAccessmodeIsAlign16AndPropertySourceModifierIsFalse;
4187     struct tagStructureEu_Instruction_Controls_AAccessmodeIsAlign16AndPropertySourceModifierIsTrue {
4188         QWORD __CODEGEN_UNIQUE(Overridden)      : BITFIELD_RANGE(  0, 63); // Override
4189         QWORD __CODEGEN_UNIQUE(Overridden)      : BITFIELD_RANGE(  64, 76); // Override
4190         QWORD Source0_SourceModifier       : BITFIELD_RANGE( 77, 78); // SRCMOD
4191         QWORD __CODEGEN_UNIQUE(Overridden) : BITFIELD_RANGE( 79,127); // Override
4192     } StructureEu_Instruction_Controls_AAccessmodeIsAlign16AndPropertySourceModifierIsTrue;
4193     DWORD RawData[4];
4194 
4195     // INITIALIZATION
4196     //
Init()4197     __CODEGEN_INLINE void Init() {
4198         RawData[0]                             = 0x0;
4199         Common.Header.Init();
4200         RawData[1]                             = 0x0;
4201         Common.OperandControl.Init();
4202         RawData[2]                             = 0x0;
4203         Common.Src1Regfile                     = 0x0;
4204         Common.Src1Srctype                     = 0x0;
4205         Common.Source0AddressImmediate9SignBit = 0x0;
4206         RawData[3]                             = 0x0;
4207         Common.Jip                             = 0x0;
4208     }
4209 
sInit()4210     static tagEU_INSTRUCTION_BRANCH_ONE_SRC sInit() {
4211         tagEU_INSTRUCTION_BRANCH_ONE_SRC state;
4212         state.Init();
4213         return state;
4214     }
4215 
4216     // ACCESSORS
4217     //
GetDWORD(UINT const index)4218     __CODEGEN_INLINE __CODEGEN_PACKED DWORD& GetDWORD(UINT const index) {
4219         return RawData[index];
4220     }
4221 
4222     static size_t CalculateSize(UINT const entryCount = 0) {
4223         return 0;
4224     }
4225 
GetSize()4226     __CODEGEN_INLINE size_t GetSize() {
4227         return 0;
4228     }
4229 
GetHeader()4230     __CODEGEN_INLINE EU_INSTRUCTION_HEADER& GetHeader() {
4231         __CODEGEN_GET_MACRO();
4232         return Common.Header;
4233     }
4234 
GetOperandControl()4235     __CODEGEN_INLINE EU_INSTRUCTION_OPERAND_CONTROLS& GetOperandControl() {
4236         __CODEGEN_GET_MACRO();
4237         return Common.OperandControl;
4238     }
4239 
GetSrc1Regfile()4240     __CODEGEN_INLINE REGFILE GetSrc1Regfile() {
4241         __CODEGEN_GET_MACRO();
4242         return (REGFILE)Common.Src1Regfile;
4243     }
4244 
SetSrc1Regfile(REGFILE Src1RegfileValue)4245     __CODEGEN_INLINE void SetSrc1Regfile(REGFILE Src1RegfileValue) {
4246         __CODEGEN_SET_MACRO(Src1RegfileValue);
4247         Common.Src1Regfile = Src1RegfileValue;
4248     }
4249 
GetSrc1Srctype()4250     __CODEGEN_INLINE int GetSrc1Srctype() {
4251         __CODEGEN_GET_MACRO();
4252         return Common.Src1Srctype;
4253     }
4254 
SetSrc1Srctype(int Src1SrctypeValue)4255     __CODEGEN_INLINE void SetSrc1Srctype(int Src1SrctypeValue) {
4256         __CODEGEN_SET_MACRO(Src1SrctypeValue);
4257         Common.Src1Srctype = Src1SrctypeValue;
4258     }
4259 
GetSource0AddressImmediate9SignBit()4260     __CODEGEN_INLINE QWORD GetSource0AddressImmediate9SignBit() {
4261         __CODEGEN_GET_MACRO();
4262         return (QWORD)Common.Source0AddressImmediate9SignBit;
4263     }
4264 
SetSource0AddressImmediate9SignBit(QWORD Source0AddressImmediate9SignBitValue)4265     __CODEGEN_INLINE void SetSource0AddressImmediate9SignBit(QWORD Source0AddressImmediate9SignBitValue) {
4266         __CODEGEN_SET_MACRO(Source0AddressImmediate9SignBitValue);
4267         Common.Source0AddressImmediate9SignBit = Source0AddressImmediate9SignBitValue;
4268     }
4269 
GetJip()4270     __CODEGEN_INLINE QWORD GetJip() {
4271         __CODEGEN_GET_MACRO();
4272         return (QWORD)Common.Jip;
4273     }
4274 
SetJip(QWORD JipValue)4275     __CODEGEN_INLINE void SetJip(QWORD JipValue) {
4276         __CODEGEN_SET_MACRO(JipValue);
4277         Common.Jip = JipValue;
4278     }
4279 
GetSource0_SourceSubRegisterNumber()4280     __CODEGEN_INLINE QWORD GetSource0_SourceSubRegisterNumber() {
4281         __CODEGEN_GET_MACRO();
4282         return (QWORD)StructureEu_Instruction_Controls_AAccessmodeIsAlign1AndSource0SourceAddressingModeIsDirect.Source0_SourceSubRegisterNumber;
4283     }
4284 
SetSource0_SourceSubRegisterNumber(QWORD Source0_SourceSubRegisterNumberValue)4285     __CODEGEN_INLINE void SetSource0_SourceSubRegisterNumber(QWORD Source0_SourceSubRegisterNumberValue) {
4286         __CODEGEN_SET_MACRO(Source0_SourceSubRegisterNumberValue);
4287         StructureEu_Instruction_Controls_AAccessmodeIsAlign1AndSource0SourceAddressingModeIsDirect.Source0_SourceSubRegisterNumber = Source0_SourceSubRegisterNumberValue;
4288     }
4289 
GetSource0_SourceRegisterNumber()4290     __CODEGEN_INLINE QWORD GetSource0_SourceRegisterNumber() {
4291         __CODEGEN_GET_MACRO();
4292         return (QWORD)StructureEu_Instruction_Controls_AAccessmodeIsAlign1AndSource0SourceAddressingModeIsDirect.Source0_SourceRegisterNumber;
4293     }
4294 
SetSource0_SourceRegisterNumber(QWORD Source0_SourceRegisterNumber_0Value)4295     __CODEGEN_INLINE void SetSource0_SourceRegisterNumber(QWORD Source0_SourceRegisterNumber_0Value) {
4296         __CODEGEN_SET_MACRO(Source0_SourceRegisterNumber_0Value);
4297         StructureEu_Instruction_Controls_AAccessmodeIsAlign1AndSource0SourceAddressingModeIsDirect.Source0_SourceRegisterNumber = Source0_SourceRegisterNumber_0Value;
4298     }
4299 
GetSource0_SourceAddressImmediate80()4300     __CODEGEN_INLINE QWORD GetSource0_SourceAddressImmediate80() {
4301         __CODEGEN_GET_MACRO();
4302         return (QWORD)StructureEu_Instruction_Controls_AAccessmodeIsAlign1AndSource0SourceAddressingModeIsIndirect.Source0_SourceAddressImmediate80;
4303     }
4304 
SetSource0_SourceAddressImmediate80(QWORD Source0_SourceAddressImmediate80Value)4305     __CODEGEN_INLINE void SetSource0_SourceAddressImmediate80(QWORD Source0_SourceAddressImmediate80Value) {
4306         __CODEGEN_SET_MACRO(Source0_SourceAddressImmediate80Value);
4307         StructureEu_Instruction_Controls_AAccessmodeIsAlign1AndSource0SourceAddressingModeIsIndirect.Source0_SourceAddressImmediate80 = Source0_SourceAddressImmediate80Value;
4308     }
4309 
SetSource0_SourceAddressImmediate9(QWORD Source0_SourceAddressImmediate9Value)4310     __CODEGEN_INLINE void SetSource0_SourceAddressImmediate9(QWORD Source0_SourceAddressImmediate9Value) {
4311         __CODEGEN_SET_MACRO(Source0_SourceAddressImmediate9Value);
4312         StructureEu_Instruction_Controls_AAccessmodeIsAlign1AndSource0SourceAddressingModeIsIndirect.Source0_SourceAddressImmediate9 = Source0_SourceAddressImmediate9Value;
4313     }
4314 
GetSource0_AddressSubregisterNumber_0()4315     __CODEGEN_INLINE QWORD GetSource0_AddressSubregisterNumber_0() {
4316         __CODEGEN_GET_MACRO();
4317         return (QWORD)StructureEu_Instruction_Controls_AAccessmodeIsAlign1AndSource0SourceAddressingModeIsIndirect.Source0_AddressSubregisterNumber;
4318     }
4319 
SetSource0_AddressSubregisterNumber_0(QWORD Source0_AddressSubregisterNumber_0Value)4320     __CODEGEN_INLINE void SetSource0_AddressSubregisterNumber_0(QWORD Source0_AddressSubregisterNumber_0Value) {
4321         __CODEGEN_SET_MACRO(Source0_AddressSubregisterNumber_0Value);
4322         StructureEu_Instruction_Controls_AAccessmodeIsAlign1AndSource0SourceAddressingModeIsIndirect.Source0_AddressSubregisterNumber = Source0_AddressSubregisterNumber_0Value;
4323     }
4324 
GetSource0_SourceModifier()4325     __CODEGEN_INLINE SRCMOD GetSource0_SourceModifier() {
4326         __CODEGEN_GET_MACRO();
4327         return (SRCMOD)StructureEu_Instruction_Controls_AAccessmodeIsAlign1AndPropertySourceModifierIsTrue.Source0_SourceModifier;
4328     }
4329 
SetSource0_SourceModifier(SRCMOD Source0_SourceModifier_0Value)4330     __CODEGEN_INLINE void SetSource0_SourceModifier(SRCMOD Source0_SourceModifier_0Value) {
4331         __CODEGEN_SET_MACRO(Source0_SourceModifier_0Value);
4332         StructureEu_Instruction_Controls_AAccessmodeIsAlign1AndPropertySourceModifierIsTrue.Source0_SourceModifier = Source0_SourceModifier_0Value;
4333     }
4334 
GetSource0_SourceAddressingMode_0()4335     __CODEGEN_INLINE ADDRMODE GetSource0_SourceAddressingMode_0() {
4336         __CODEGEN_GET_MACRO();
4337         return (ADDRMODE)StructureEu_Instruction_Controls_AAccessmodeIsAlign1.Source0_SourceAddressingMode;
4338     }
4339 
SetSource0_SourceAddressingMode(ADDRMODE Source0_SourceAddressingMode_0Value)4340     __CODEGEN_INLINE void SetSource0_SourceAddressingMode(ADDRMODE Source0_SourceAddressingMode_0Value) {
4341         __CODEGEN_SET_MACRO(Source0_SourceAddressingMode_0Value);
4342         StructureEu_Instruction_Controls_AAccessmodeIsAlign1.Source0_SourceAddressingMode = Source0_SourceAddressingMode_0Value;
4343     }
4344 
GetSource0_SourceHorizontalStride()4345     __CODEGEN_INLINE HORZSTRIDE GetSource0_SourceHorizontalStride() {
4346         __CODEGEN_GET_MACRO();
4347         return (HORZSTRIDE)StructureEu_Instruction_Controls_AAccessmodeIsAlign1.Source0_SourceHorizontalStride;
4348     }
4349 
SetSource0_SourceHorizontalStride(HORZSTRIDE Source0_SourceHorizontalStrideValue)4350     __CODEGEN_INLINE void SetSource0_SourceHorizontalStride(HORZSTRIDE Source0_SourceHorizontalStrideValue) {
4351         __CODEGEN_SET_MACRO(Source0_SourceHorizontalStrideValue);
4352         StructureEu_Instruction_Controls_AAccessmodeIsAlign1.Source0_SourceHorizontalStride = Source0_SourceHorizontalStrideValue;
4353     }
4354 
GetSource0_SourceWidth()4355     __CODEGEN_INLINE WIDTH GetSource0_SourceWidth() {
4356         __CODEGEN_GET_MACRO();
4357         return (WIDTH)StructureEu_Instruction_Controls_AAccessmodeIsAlign1.Source0_SourceWidth;
4358     }
4359 
SetSource0_SourceWidth(WIDTH Source0_SourceWidthValue)4360     __CODEGEN_INLINE void SetSource0_SourceWidth(WIDTH Source0_SourceWidthValue) {
4361         __CODEGEN_SET_MACRO(Source0_SourceWidthValue);
4362         StructureEu_Instruction_Controls_AAccessmodeIsAlign1.Source0_SourceWidth = Source0_SourceWidthValue;
4363     }
4364 
GetSource0_SourceVerticalStride()4365     __CODEGEN_INLINE VERTSTRIDE GetSource0_SourceVerticalStride() {
4366         __CODEGEN_GET_MACRO();
4367         return (VERTSTRIDE)StructureEu_Instruction_Controls_AAccessmodeIsAlign1.Source0_SourceVerticalStride;
4368     }
4369 
SetSource0_SourceVerticalStride(VERTSTRIDE Source0_SourceVerticalStride_0Value)4370     __CODEGEN_INLINE void SetSource0_SourceVerticalStride(VERTSTRIDE Source0_SourceVerticalStride_0Value) {
4371         __CODEGEN_SET_MACRO(Source0_SourceVerticalStride_0Value);
4372         StructureEu_Instruction_Controls_AAccessmodeIsAlign1.Source0_SourceVerticalStride = Source0_SourceVerticalStride_0Value;
4373     }
4374 
GetSource0_SourceChannelSelect30()4375     __CODEGEN_INLINE QWORD GetSource0_SourceChannelSelect30() {
4376         __CODEGEN_GET_MACRO();
4377         return (QWORD)StructureEu_Instruction_Controls_AAccessmodeIsAlign16.Source0_SourceChannelSelect30;
4378     }
4379 
SetSource0_SourceChannelSelect30(QWORD Source0_SourceChannelSelect30Value)4380     __CODEGEN_INLINE void SetSource0_SourceChannelSelect30(QWORD Source0_SourceChannelSelect30Value) {
4381         __CODEGEN_SET_MACRO(Source0_SourceChannelSelect30Value);
4382         StructureEu_Instruction_Controls_AAccessmodeIsAlign16.Source0_SourceChannelSelect30 = Source0_SourceChannelSelect30Value;
4383     }
4384 
GetSource0_SourceAddressingMode_1()4385     __CODEGEN_INLINE ADDRMODE GetSource0_SourceAddressingMode_1() {
4386         __CODEGEN_GET_MACRO();
4387         return (ADDRMODE)StructureEu_Instruction_Controls_AAccessmodeIsAlign16.Source0_SourceAddressingMode;
4388     }
4389 
SetSource0_SourceAddressingMode_1(ADDRMODE Source0_SourceAddressingMode_1Value)4390     __CODEGEN_INLINE void SetSource0_SourceAddressingMode_1(ADDRMODE Source0_SourceAddressingMode_1Value) {
4391         __CODEGEN_SET_MACRO(Source0_SourceAddressingMode_1Value);
4392         StructureEu_Instruction_Controls_AAccessmodeIsAlign16.Source0_SourceAddressingMode = Source0_SourceAddressingMode_1Value;
4393     }
4394 
GetSource0_SourceChannelSelect74()4395     __CODEGEN_INLINE QWORD GetSource0_SourceChannelSelect74() {
4396         __CODEGEN_GET_MACRO();
4397         return (QWORD)StructureEu_Instruction_Controls_AAccessmodeIsAlign16.Source0_SourceChannelSelect74 << 4;
4398     }
4399 
SetSource0_SourceChannelSelect74(QWORD Source0_SourceChannelSelect74Value)4400     __CODEGEN_INLINE void SetSource0_SourceChannelSelect74(QWORD Source0_SourceChannelSelect74Value) {
4401         __CODEGEN_SET_MACRO(Source0_SourceChannelSelect74Value);
4402         StructureEu_Instruction_Controls_AAccessmodeIsAlign16.Source0_SourceChannelSelect74 = Source0_SourceChannelSelect74Value >> 4;
4403     }
4404 
4405     //__CODEGEN_INLINE VERTSTRIDE GetSource0_SourceVerticalStride_1() {
4406     //    __CODEGEN_GET_MACRO();
4407     //    return (VERTSTRIDE)StructureEu_Instruction_Controls_AAccessmodeIsAlign16.Source0_SourceVerticalStride;
4408     //}
4409     //
4410     //__CODEGEN_INLINE void SetSource0_SourceVerticalStride_1(VERTSTRIDE Source0_SourceVerticalStride_1Value) {
4411     //    __CODEGEN_SET_MACRO(Source0_SourceVerticalStride_1Value);
4412     //    StructureEu_Instruction_Controls_AAccessmodeIsAlign16.Source0_SourceVerticalStride = Source0_SourceVerticalStride_1Value;
4413     //}
4414 
GetSource0_SourceSubregisterNumber44()4415     __CODEGEN_INLINE QWORD GetSource0_SourceSubregisterNumber44() {
4416         __CODEGEN_GET_MACRO();
4417         return (QWORD)StructureEu_Instruction_Controls_AAccessmodeIsAlign16AndSource0SourceAddressingModeIsDirect.Source0_SourceSubregisterNumber44 << 4;
4418     }
4419 
SetSource0_SourceSubregisterNumber44(QWORD Source0_SourceSubregisterNumber44Value)4420     __CODEGEN_INLINE void SetSource0_SourceSubregisterNumber44(QWORD Source0_SourceSubregisterNumber44Value) {
4421         __CODEGEN_SET_MACRO(Source0_SourceSubregisterNumber44Value);
4422         StructureEu_Instruction_Controls_AAccessmodeIsAlign16AndSource0SourceAddressingModeIsDirect.Source0_SourceSubregisterNumber44 = Source0_SourceSubregisterNumber44Value >> 4;
4423     }
4424 
4425     //__CODEGEN_INLINE QWORD GetSource0_SourceRegisterNumber_1() {
4426     //    __CODEGEN_GET_MACRO();
4427     //    return (QWORD)StructureEu_Instruction_Controls_AAccessmodeIsAlign16AndSource0SourceAddressingModeIsDirect.Source0_SourceRegisterNumber;
4428     //}
4429     //
4430     //__CODEGEN_INLINE void SetSource0_SourceRegisterNumber_1(QWORD Source0_SourceRegisterNumber_1Value) {
4431     //    __CODEGEN_SET_MACRO(Source0_SourceRegisterNumber_1Value);
4432     //    StructureEu_Instruction_Controls_AAccessmodeIsAlign16AndSource0SourceAddressingModeIsDirect.Source0_SourceRegisterNumber = Source0_SourceRegisterNumber_1Value;
4433     //}
4434 
GetSource0_SourceAddressImmediate84()4435     __CODEGEN_INLINE QWORD GetSource0_SourceAddressImmediate84() {
4436         __CODEGEN_GET_MACRO();
4437         return (QWORD)StructureEu_Instruction_Controls_AAccessmodeIsAlign16AndSource0SourceAddressingModeIsIndirect.Source0_SourceAddressImmediate84 << 4;
4438     }
4439 
SetSource0_SourceAddressImmediate84(QWORD Source0_SourceAddressImmediate84Value)4440     __CODEGEN_INLINE void SetSource0_SourceAddressImmediate84(QWORD Source0_SourceAddressImmediate84Value) {
4441         __CODEGEN_SET_MACRO(Source0_SourceAddressImmediate84Value);
4442         StructureEu_Instruction_Controls_AAccessmodeIsAlign16AndSource0SourceAddressingModeIsIndirect.Source0_SourceAddressImmediate84 = Source0_SourceAddressImmediate84Value >> 4;
4443     }
4444 
GetSource0_AddressSubregisterNumber_1()4445     __CODEGEN_INLINE QWORD GetSource0_AddressSubregisterNumber_1() {
4446         __CODEGEN_GET_MACRO();
4447         return (QWORD)StructureEu_Instruction_Controls_AAccessmodeIsAlign16AndSource0SourceAddressingModeIsIndirect.Source0_AddressSubregisterNumber;
4448     }
4449 
SetSource0_AddressSubregisterNumber_1(QWORD Source0_AddressSubregisterNumber_1Value)4450     __CODEGEN_INLINE void SetSource0_AddressSubregisterNumber_1(QWORD Source0_AddressSubregisterNumber_1Value) {
4451         __CODEGEN_SET_MACRO(Source0_AddressSubregisterNumber_1Value);
4452         StructureEu_Instruction_Controls_AAccessmodeIsAlign16AndSource0SourceAddressingModeIsIndirect.Source0_AddressSubregisterNumber = Source0_AddressSubregisterNumber_1Value;
4453     }
4454 
4455 } __CODEGEN_ATTRIBUTES_STRUCTURE EU_INSTRUCTION_BRANCH_ONE_SRC;
4456 
4457 C_ASSERT(16 == sizeof(EU_INSTRUCTION_BRANCH_ONE_SRC));
4458 
4459 typedef union tagEU_INSTRUCTION_BRANCH_TWO_SRC {
4460     struct tagCommon {
4461         EU_INSTRUCTION_HEADER Header;
4462         EU_INSTRUCTION_OPERAND_CONTROLS OperandControl;
4463 
4464         /*****************************************************************************\
4465         The byte aligned jump distance if a jump is taken for the instruction.
4466         \*****************************************************************************/
4467         DWORD Uip : BITFIELD_RANGE( 64, 95); // S31
4468 
4469         /*****************************************************************************\
4470         The byte-aligned jump distance if a jump is taken for the channel.
4471         \*****************************************************************************/
4472         DWORD Jip : BITFIELD_RANGE( 96,127); // S31
4473     } Common;
4474     DWORD RawData[4];
4475 
4476     // INITIALIZATION
4477     //
Init()4478     __CODEGEN_INLINE void Init() {
4479         RawData[0] = 0x0;
4480         Common.Header.Init();
4481         RawData[1] = 0x0;
4482         Common.OperandControl.Init();
4483         RawData[2] = 0x0;
4484         Common.Uip = 0x0;
4485         RawData[3] = 0x0;
4486         Common.Jip = 0x0;
4487     }
4488 
sInit()4489     static tagEU_INSTRUCTION_BRANCH_TWO_SRC sInit() {
4490         tagEU_INSTRUCTION_BRANCH_TWO_SRC state;
4491         state.Init();
4492         return state;
4493     }
4494 
4495     // ACCESSORS
4496     //
GetDWord(UINT const index)4497     __CODEGEN_INLINE __CODEGEN_PACKED DWORD& GetDWord(UINT const index) {
4498         return RawData[index];
4499     }
4500 
4501     static size_t CalculateSize(UINT const entryCount = 0) {
4502         return 0;
4503     }
4504 
GetSize()4505     __CODEGEN_INLINE size_t GetSize() {
4506         return 0;
4507     }
4508 
GetHeader()4509     __CODEGEN_INLINE EU_INSTRUCTION_HEADER& GetHeader() {
4510         __CODEGEN_GET_MACRO();
4511         return Common.Header;
4512     }
4513 
GetOperandControl()4514     __CODEGEN_INLINE EU_INSTRUCTION_OPERAND_CONTROLS& GetOperandControl() {
4515         __CODEGEN_GET_MACRO();
4516         return Common.OperandControl;
4517     }
4518 
GetUip()4519     __CODEGEN_INLINE DWORD GetUip() {
4520         __CODEGEN_GET_MACRO();
4521         return (DWORD)Common.Uip;
4522     }
4523 
SetUip(DWORD UipValue)4524     __CODEGEN_INLINE void SetUip(DWORD UipValue) {
4525         __CODEGEN_SET_MACRO(UipValue);
4526         Common.Uip = UipValue;
4527     }
4528 
GetJip()4529     __CODEGEN_INLINE DWORD GetJip() {
4530         __CODEGEN_GET_MACRO();
4531         return (DWORD)Common.Jip;
4532     }
4533 
SetJip(DWORD JipValue)4534     __CODEGEN_INLINE void SetJip(DWORD JipValue) {
4535         __CODEGEN_SET_MACRO(JipValue);
4536         Common.Jip = JipValue;
4537     }
4538 
4539 } __CODEGEN_ATTRIBUTES_STRUCTURE EU_INSTRUCTION_BRANCH_TWO_SRC;
4540 
4541 C_ASSERT(16 == sizeof(EU_INSTRUCTION_BRANCH_TWO_SRC));
4542 
4543 typedef union tagEU_INSTRUCTION_ILLEGAL {
4544     struct tagCommon {
4545         QWORD Opcode                     : BITFIELD_RANGE(  0,  6); // EU_OPCODE
4546         QWORD __CODEGEN_UNIQUE(Reserved) : BITFIELD_RANGE(  7,63); // MBZ
4547         QWORD __CODEGEN_UNIQUE(Reserved) : BITFIELD_RANGE(  64,127); // MBZ
4548     } Common;
4549     DWORD RawData[4];
4550 
4551     // INITIALIZATION
4552     //
Init()4553     __CODEGEN_INLINE void Init() {
4554         RawData[0]    = 0x0;
4555         Common.Opcode = 0x0;
4556         RawData[1]    = 0x0;
4557         RawData[2]    = 0x0;
4558         RawData[3]    = 0x0;
4559     }
4560 
sInit()4561     static tagEU_INSTRUCTION_ILLEGAL sInit() {
4562         tagEU_INSTRUCTION_ILLEGAL state;
4563         state.Init();
4564         return state;
4565     }
4566 
4567     // ACCESSORS
4568     //
GetDWORD(UINT const index)4569     __CODEGEN_INLINE __CODEGEN_PACKED DWORD& GetDWORD(UINT const index) {
4570         return RawData[index];
4571     }
4572 
4573     static size_t CalculateSize(UINT const entryCount = 0) {
4574         return 0;
4575     }
4576 
GetSize()4577     __CODEGEN_INLINE size_t GetSize() {
4578         return 0;
4579     }
4580 
GetOpcode()4581     __CODEGEN_INLINE EU_OPCODE GetOpcode() {
4582         __CODEGEN_GET_MACRO();
4583         return (EU_OPCODE)Common.Opcode;
4584     }
4585 
SetOpcode(EU_OPCODE OpcodeValue)4586     __CODEGEN_INLINE void SetOpcode(EU_OPCODE OpcodeValue) {
4587         __CODEGEN_SET_MACRO(OpcodeValue);
4588         Common.Opcode = OpcodeValue;
4589     }
4590 
4591 } __CODEGEN_ATTRIBUTES_STRUCTURE EU_INSTRUCTION_ILLEGAL;
4592 
4593 C_ASSERT(16 == sizeof(EU_INSTRUCTION_ILLEGAL));
4594 
4595 typedef union tagEU_INSTRUCTION_MATH {
4596     struct tagCommon {
4597         DWORD Opcode                                                : BITFIELD_RANGE(  0,  6); // EU_OPCODE
4598         DWORD __CODEGEN_UNIQUE(Reserved)                            : BITFIELD_BIT(        7); // MBZ
4599 
4600         /*****************************************************************************\
4601         Access Mode. This field determines the operand access for the instruction. It applies to all source and destination operands.
4602         When it is cleared (Align1), the instruction uses byte-aligned addressing for source and destination operands. Source swizzle control and destination mask control are not supported.
4603         When it is set (Align16), the instruction uses 16-byte-aligned addressing for all source and destination operands. Source swizzle control and destination mask control are supported in this mode.
4604         \*****************************************************************************/
4605         DWORD ControlsA_Accessmode                                  : BITFIELD_BIT(        0); // ACCESSMODE
4606 
4607         /*****************************************************************************\
4608         Destination Dependency Control. This field selectively disables destination dependency check and clear for this instruction.
4609         When it is set to 00, normal destination dependency control is performed for the instruction  - hardware checks for destination hazards to ensure data integrity. Specifically, destination register dependency check is conducted before the instruction is made ready for execution. After the instruction is executed, the destination register scoreboard will be cleared when the destination operands retire.
4610         When bit 10 is set (NoDDClr), the destination register scoreboard will NOT be cleared when the destination operands retire.  When bit 11 is set (NoDDChk), hardware does not check for destination register dependency before the instruction is made ready for execution.  NoDDClr and NoDDChk are not mutual exclusive.
4611         When this field is not all-zero, hardware does not protect against destination hazards for the instruction.  This is typically used to assemble data in a fine grained fashion (e.g. matrix-vector compute with dot-product instructions), where the data integrity is guaranteed by software based on the intended usage of instruction sequences.
4612         \*****************************************************************************/
4613         DWORD ControlsA_Depctrl                                     : BITFIELD_RANGE(  1,  2); // DEPCTRL
4614 
4615         /*****************************************************************************\
4616         Nibble Control. This field is used in some instructions along with QtrCtrl. See the description of QtrCtrl below. NibCtrl is only used for SIMD4 instructions with a DF (Double Float) source or destination.
4617 
4618         Programming Notes:
4619         Note that if eighths are given zero-based indices from 0 to 7, then NibCtrl = 0 indicates even indices and NibCtrl = 1 indicates odd indices.
4620         \*****************************************************************************/
4621         DWORD ControlsA_Nibctrl                                     : BITFIELD_BIT(        3); // NIBCTRL
4622 
4623         /*****************************************************************************\
4624          - Quarter Control. This field provides explicit control for ARF selection.
4625         This field combined with NibCtrl and ExecSize determines which channels are used for the ARF registers.
4626         \*****************************************************************************/
4627         DWORD ControlsA_Qtrctrl                                     : BITFIELD_RANGE(  4,  5); // QTRCTRL
4628 
4629         /*****************************************************************************\
4630         Thread Control. This field provides explicit control for thread switching.
4631         If this field is set to 00b, it is up to the GEN execution units to manage thread switching. This is the normal (and unnamed) mode. In this mode, for example, if the current instruction cannot proceed due to operand dependencies, the EU switches to the next available thread to fill the compute pipe. In another example, if the current instruction is ready to go, however, there is another thread with higher priority that also has an instruction ready, the EU switches to that thread.
4632         If this field is set to Switch, a forced thread switch occurs after the current instruction is executed and before the next instruction. In addition, a long delay (longer than the execution pipe latency) is introduced for the current thread. Particularly, the instruction queue of the current thread is flushed after the current instruction is dispatched for execution. Switch is designed primarily as a safety feature in case there are race conditions for certain instructions.
4633         \*****************************************************************************/
4634         DWORD ControlsA_ThreadControl                               : BITFIELD_RANGE(  6,  7); // THREADCTRL
4635 
4636         /*****************************************************************************\
4637         This field determines the number of channels operating in parallel for this instruction.  The size cannot exceed the maximum number of channels allowed for the given data type.
4638         \*****************************************************************************/
4639         DWORD ControlsA_Execsize                                    : BITFIELD_RANGE( 13, 15); // EXECSIZE
4640         DWORD __CODEGEN_UNIQUE(Overridden)                          : BITFIELD_RANGE( 19, 23); // Override
4641         DWORD FunctionControlFc                                     : BITFIELD_RANGE( 24, 27); // FC
4642 
4643         /*****************************************************************************\
4644         AccWrCtrl. This field allows per instruction accumulator write control.
4645         \*****************************************************************************/
4646         DWORD ControlsB_Accwrctrl                                   : BITFIELD_BIT(       28); // ACCWRCTRL
4647 
4648         /*****************************************************************************\
4649         Compaction Control
4650         Indicates whether the instruction is compacted to the 64-bit compact instruction format. When this bit is set, the 64-bit compact instruction format is used. The EU decodes the compact format using lookup tables internal to the hardware, but documented for use by software tools. Only some instruction variations can be compacted, the variations supported by those lookup tables and the compact format. See EU Compact Instruction Format [DevBDW+] for more information.
4651         \*****************************************************************************/
4652         DWORD ControlsB_Cmptctrl                                    : BITFIELD_BIT(       29); // CMPTCTRL
4653 
4654         /*****************************************************************************\
4655         This field allows the insertion of a breakpoint at the current instruction. When the bit is set, hardware automatically stores the current IP in CR register and jumps to the System IP (SIP) BEFORE executing the current instruction.
4656         \*****************************************************************************/
4657         DWORD ControlsB_Debugctrl                                   : BITFIELD_BIT(       30); // DEBUGCTRL
4658         EU_INSTRUCTION_OPERAND_CONTROLS OperandControl;
4659         EU_INSTRUCTION_SOURCES_REG_REG Regsource;
4660         //EU_INSTRUCTION_SOURCES_REG_REG __CODEGEN_UNIQUE(Overridden) : BITFIELD_BIT(      127); // Override
4661     } Common;
4662     struct tagPropertyPredicationIsTrue {
4663         QWORD __CODEGEN_UNIQUE(Overridden) : BITFIELD_RANGE(  0,  7); // Override
4664 
4665         /*****************************************************************************\
4666         This field, together with PredInv, enables and controls the generation of the predication mask for the instruction.  It allows per-channel conditional execution of the instruction based on the content of the selected flag register.  Encoding depends on the access mode.
4667         In Align16 access mode, there are eight encodings (including no predication). All encodings are based on group-of-4 predicate bits, including channel sequential, replication swizzles and horizontal any|all operations.  The same configuration is repeated for each group-of-4 execution channels.
4668         \*****************************************************************************/
4669         QWORD ControlsA_Predctrl           : BITFIELD_RANGE(  8, 11); // PREDCTRL
4670 
4671         /*****************************************************************************\
4672         This field, together with PredCtrl, enables and controls the generation of the predication mask for the instruction.  When it is set, the predication uses the inverse of the predication bits generated according to setting of Predicate Control. In other words, effect of PredInv happens after PredCtrl.
4673         This field is ignored by hardware if Predicate Control is set to 0000  - there is no predication.
4674         PMask is the final predication mask produced by the effects of both fields.
4675         \*****************************************************************************/
4676         QWORD ControlsA_Predinv            : BITFIELD_BIT(       12); // PREDINV
4677         QWORD __CODEGEN_UNIQUE(Overridden) : BITFIELD_RANGE( 13,63); // Override
4678         QWORD __CODEGEN_UNIQUE(Overridden) : BITFIELD_RANGE( 64,127); // Override
4679 
4680     } PropertyPredicationIsTrue;
4681     struct tagPropertyPredicationIsFalse {
4682         DWORD __CODEGEN_UNIQUE(Overridden) : BITFIELD_RANGE(  0,  7); // Override
4683         DWORD ControlsA__                  : BITFIELD_RANGE(  8, 11); // PREDCTRL
4684         DWORD __CODEGEN_UNIQUE(Reserved)   : BITFIELD_BIT(       12); //
4685         DWORD __CODEGEN_UNIQUE(Overridden) : BITFIELD_RANGE( 13,31); // Override
4686         //QWORD __CODEGEN_UNIQUE(Overridden) : BITFIELD_RANGE( 64,127); // Override
4687         DWORD __CODEGEN_UNIQUE(Overridden)[3];
4688 
4689     } PropertyPredicationIsFalse;
4690     struct tagPropertySaturationIsTrue {
4691         DWORD __CODEGEN_UNIQUE(Overridden) : BITFIELD_RANGE(  0, 30); // Override
4692 
4693         /*****************************************************************************\
4694         Enables or disables destination saturation.
4695         When it is set, output values to the destination register are saturated. The saturation operation depends on the destination data type. Saturation is the operation that converts any value outside the saturation target range for the data type to the closest value in the target range.
4696         For a floating-point destination type, the saturation target range is [0.0, 1.0]. For a floating-point NaN, there is no  -closest value -; any NaN saturates to 0.0. Note that enabling Saturate overrides all of the NaN propagation behaviors described for various numeric instructions. Any floating-point number greater than 1.0, including +INF, saturates to 1.0. Any negative floating-point number, including -INF, saturates to 0.0. Any floating-point number in the range 0.0 to 1.0 is not changed by saturation.
4697         For an integer destination type, the maximum range for that type is the saturation target range. For example, the saturation range for B (Signed Byte Integer) is [-128, 127].
4698         When Saturate is clear, destination values are not saturated. For example, a wrapped result (modulo) is output to the destination for an overflowed integer value. See the Numeric Data Typessection for information about data types and their ranges.
4699         \*****************************************************************************/
4700         DWORD ControlsB_Saturate           : BITFIELD_BIT(       31); // SATURATE
4701         DWORD __CODEGEN_UNIQUE(Overridden)[3];
4702     } PropertySaturationIsTrue;
4703     struct tagPropertySaturationIsFalse {
4704         DWORD __CODEGEN_UNIQUE(Overridden) : BITFIELD_RANGE(  0, 30); // Override
4705         DWORD __CODEGEN_UNIQUE(Reserved)   : BITFIELD_BIT(       31); // MBZ
4706         DWORD __CODEGEN_UNIQUE(Overridden)[3];
4707     } PropertySaturationIsFalse;
4708     DWORD RawData[4];
4709 
4710     // LOCAL ENUMERATIONS
4711     //
4712     typedef enum tagACCESSMODE {
4713         ACCESSMODE_ALIGN1  = 0x0,
4714         ACCESSMODE_ALIGN16 = 0x1,
4715     } ACCESSMODE;
4716 
4717     typedef enum tagNIBCTRL {
4718         NIBCTRL_ODD  = 0x0,    // Use an odd 1/8th for DMask/VMask and ARF (first, third, fifth, or seventh depending on QtrCtrl).
4719         NIBCTRL_EVEN = 0x1,    // Use an even 1/8th for DMask/VMask and ARF (second, fourth, sixth, or eighth depending on QtrCtrl).
4720     } NIBCTRL;
4721 
4722     //typedef enum tagACCWRCTRL {
4723     //    ACCWRCTRL_DON_T_WRITE_TO_ACC = 0x0,
4724     //    ACCWRCTRL_UPDATE_ACC         = 0x1,    // Write result to the ACC, and destination
4725     //} ACCWRCTRL;
4726 
4727     typedef enum tagCMPTCTRL {
4728         CMPTCTRL_NOCOMPACTION = 0x0,    // No compaction. 128-bit native instruction supporting all instruction options.
4729         CMPTCTRL_COMPACTED    = 0x1,    // Compaction is enabled. 64-bit compact instruction supporting only some instruction variations.
4730     } CMPTCTRL;
4731 
4732     // INITIALIZATION
4733     //
Init()4734     __CODEGEN_INLINE void Init() {
4735         RawData[0]                     = 0x0;
4736         Common.Opcode                  = 0x0;
4737         RawData[1]                     = 0x0;
4738         Common.ControlsA_Accessmode    = ACCESSMODE_ALIGN1;
4739         Common.ControlsA_Depctrl       = 0x0;
4740         Common.ControlsA_Nibctrl       = NIBCTRL_ODD;
4741         Common.ControlsA_Qtrctrl       = 0x0;
4742         Common.ControlsA_ThreadControl = 0x0;
4743         Common.ControlsA_Execsize      = 0x0;
4744         Common.FunctionControlFc       = 0x0;
4745         Common.ControlsB_Accwrctrl     = ACCWRCTRL_DON_T_WRITE_TO_ACC;
4746         Common.ControlsB_Cmptctrl      = CMPTCTRL_NOCOMPACTION;
4747         Common.ControlsB_Debugctrl     = DEBUGCTRL_NO_BREAKPOINT;
4748         RawData[2]                     = 0x0;
4749         Common.OperandControl.Init();
4750         RawData[3]                     = 0x0;
4751         Common.Regsource.Init();
4752     }
4753 
sInit()4754     static tagEU_INSTRUCTION_MATH sInit() {
4755         tagEU_INSTRUCTION_MATH state;
4756         state.Init();
4757         return state;
4758     }
4759 
4760     // ACCESSORS
4761     //
GetDWORD(UINT const index)4762     __CODEGEN_INLINE __CODEGEN_PACKED DWORD& GetDWORD(UINT const index) {
4763         return RawData[index];
4764     }
4765 
4766     static size_t CalculateSize(UINT const entryCount = 0) {
4767         return 0;
4768     }
4769 
GetSize()4770     __CODEGEN_INLINE size_t GetSize() {
4771         return 0;
4772     }
4773 
GetOpcode()4774     __CODEGEN_INLINE EU_OPCODE GetOpcode() {
4775         __CODEGEN_GET_MACRO();
4776         return (EU_OPCODE)Common.Opcode;
4777     }
4778 
SetOpcode(EU_OPCODE OpcodeValue)4779     __CODEGEN_INLINE void SetOpcode(EU_OPCODE OpcodeValue) {
4780         __CODEGEN_SET_MACRO(OpcodeValue);
4781         Common.Opcode = OpcodeValue;
4782     }
4783 
GetControlsA_Accessmode()4784     __CODEGEN_INLINE ACCESSMODE GetControlsA_Accessmode() {
4785         __CODEGEN_GET_MACRO();
4786         return (ACCESSMODE)Common.ControlsA_Accessmode;
4787     }
4788 
SetControlsA_Accessmode(ACCESSMODE ControlsA_AccessmodeValue)4789     __CODEGEN_INLINE void SetControlsA_Accessmode(ACCESSMODE ControlsA_AccessmodeValue) {
4790         __CODEGEN_SET_MACRO(ControlsA_AccessmodeValue);
4791         Common.ControlsA_Accessmode = ControlsA_AccessmodeValue;
4792     }
4793 
GetControlsA_Depctrl()4794     __CODEGEN_INLINE DEPCTRL GetControlsA_Depctrl() {
4795         __CODEGEN_GET_MACRO();
4796         return (DEPCTRL)Common.ControlsA_Depctrl;
4797     }
4798 
SetControlsA_Depctrl(DEPCTRL ControlsA_DepctrlValue)4799     __CODEGEN_INLINE void SetControlsA_Depctrl(DEPCTRL ControlsA_DepctrlValue) {
4800         __CODEGEN_SET_MACRO(ControlsA_DepctrlValue);
4801         Common.ControlsA_Depctrl = ControlsA_DepctrlValue;
4802     }
4803 
GetControlsA_Nibctrl()4804     __CODEGEN_INLINE NIBCTRL GetControlsA_Nibctrl() {
4805         __CODEGEN_GET_MACRO();
4806         return (NIBCTRL)Common.ControlsA_Nibctrl;
4807     }
4808 
SetControlsA_Nibctrl(NIBCTRL ControlsA_NibctrlValue)4809     __CODEGEN_INLINE void SetControlsA_Nibctrl(NIBCTRL ControlsA_NibctrlValue) {
4810         __CODEGEN_SET_MACRO(ControlsA_NibctrlValue);
4811         Common.ControlsA_Nibctrl = ControlsA_NibctrlValue;
4812     }
4813 
GetControlsA_Qtrctrl()4814     __CODEGEN_INLINE QTRCTRL GetControlsA_Qtrctrl() {
4815         __CODEGEN_GET_MACRO();
4816         return (QTRCTRL)Common.ControlsA_Qtrctrl;
4817     }
4818 
SetControlsA_Qtrctrl(QTRCTRL ControlsA_QtrctrlValue)4819     __CODEGEN_INLINE void SetControlsA_Qtrctrl(QTRCTRL ControlsA_QtrctrlValue) {
4820         __CODEGEN_SET_MACRO(ControlsA_QtrctrlValue);
4821         Common.ControlsA_Qtrctrl = ControlsA_QtrctrlValue;
4822     }
4823 
GetControlsA_ThreadControl()4824     __CODEGEN_INLINE THREADCTRL GetControlsA_ThreadControl() {
4825         __CODEGEN_GET_MACRO();
4826         return (THREADCTRL)Common.ControlsA_ThreadControl;
4827     }
4828 
SetControlsA_ThreadControl(THREADCTRL ControlsA_ThreadControlValue)4829     __CODEGEN_INLINE void SetControlsA_ThreadControl(THREADCTRL ControlsA_ThreadControlValue) {
4830         __CODEGEN_SET_MACRO(ControlsA_ThreadControlValue);
4831         Common.ControlsA_ThreadControl = ControlsA_ThreadControlValue;
4832     }
4833 
GetControlsA_Execsize()4834     __CODEGEN_INLINE EXECSIZE GetControlsA_Execsize() {
4835         __CODEGEN_GET_MACRO();
4836         return (EXECSIZE)Common.ControlsA_Execsize;
4837     }
4838 
SetControlsA_Execsize(EXECSIZE ControlsA_ExecsizeValue)4839     __CODEGEN_INLINE void SetControlsA_Execsize(EXECSIZE ControlsA_ExecsizeValue) {
4840         __CODEGEN_SET_MACRO(ControlsA_ExecsizeValue);
4841         Common.ControlsA_Execsize = ControlsA_ExecsizeValue;
4842     }
4843 
GetFunctionControlFc()4844     __CODEGEN_INLINE FC GetFunctionControlFc() {
4845         __CODEGEN_GET_MACRO();
4846         return (FC)Common.FunctionControlFc;
4847     }
4848 
SetFunctionControlFc(FC FunctionControlFcValue)4849     __CODEGEN_INLINE void SetFunctionControlFc(FC FunctionControlFcValue) {
4850         __CODEGEN_SET_MACRO(FunctionControlFcValue);
4851         Common.FunctionControlFc = FunctionControlFcValue;
4852     }
4853 
GetControlsB_Accwrctrl()4854     __CODEGEN_INLINE ACCWRCTRL GetControlsB_Accwrctrl() {
4855         __CODEGEN_GET_MACRO();
4856         return (ACCWRCTRL)Common.ControlsB_Accwrctrl;
4857     }
4858 
SetControlsB_Accwrctrl(ACCWRCTRL ControlsB_AccwrctrlValue)4859     __CODEGEN_INLINE void SetControlsB_Accwrctrl(ACCWRCTRL ControlsB_AccwrctrlValue) {
4860         __CODEGEN_SET_MACRO(ControlsB_AccwrctrlValue);
4861         Common.ControlsB_Accwrctrl = ControlsB_AccwrctrlValue;
4862     }
4863 
GetControlsB_Cmptctrl()4864     __CODEGEN_INLINE CMPTCTRL GetControlsB_Cmptctrl() {
4865         __CODEGEN_GET_MACRO();
4866         return (CMPTCTRL)Common.ControlsB_Cmptctrl;
4867     }
4868 
SetControlsB_Cmptctrl(CMPTCTRL ControlsB_CmptctrlValue)4869     __CODEGEN_INLINE void SetControlsB_Cmptctrl(CMPTCTRL ControlsB_CmptctrlValue) {
4870         __CODEGEN_SET_MACRO(ControlsB_CmptctrlValue);
4871         Common.ControlsB_Cmptctrl = ControlsB_CmptctrlValue;
4872     }
4873 
GetControlsB_Debugctrl()4874     __CODEGEN_INLINE DEBUGCTRL GetControlsB_Debugctrl() {
4875         __CODEGEN_GET_MACRO();
4876         return (DEBUGCTRL)Common.ControlsB_Debugctrl;
4877     }
4878 
SetControlsB_Debugctrl(DEBUGCTRL ControlsB_DebugctrlValue)4879     __CODEGEN_INLINE void SetControlsB_Debugctrl(DEBUGCTRL ControlsB_DebugctrlValue) {
4880         __CODEGEN_SET_MACRO(ControlsB_DebugctrlValue);
4881         Common.ControlsB_Debugctrl = ControlsB_DebugctrlValue;
4882     }
4883 
GetOperandControl()4884     __CODEGEN_INLINE EU_INSTRUCTION_OPERAND_CONTROLS& GetOperandControl() {
4885         __CODEGEN_GET_MACRO();
4886         return Common.OperandControl;
4887     }
4888 
GetRegsource()4889     __CODEGEN_INLINE EU_INSTRUCTION_SOURCES_REG_REG& GetRegsource() {
4890         __CODEGEN_GET_MACRO();
4891         return Common.Regsource;
4892     }
4893 
GetControlsA_Predctrl()4894     __CODEGEN_INLINE PREDCTRL GetControlsA_Predctrl() {
4895         __CODEGEN_GET_MACRO();
4896         return (PREDCTRL)PropertyPredicationIsTrue.ControlsA_Predctrl;
4897     }
4898 
SetControlsA_Predctrl(PREDCTRL ControlsA_PredctrlValue)4899     __CODEGEN_INLINE void SetControlsA_Predctrl(PREDCTRL ControlsA_PredctrlValue) {
4900         __CODEGEN_SET_MACRO(ControlsA_PredctrlValue);
4901         PropertyPredicationIsTrue.ControlsA_Predctrl = ControlsA_PredctrlValue;
4902     }
4903 
GetControlsA_Predinv()4904     __CODEGEN_INLINE PREDINV GetControlsA_Predinv() {
4905         __CODEGEN_GET_MACRO();
4906         return (PREDINV)PropertyPredicationIsTrue.ControlsA_Predinv;
4907     }
4908 
SetControlsA_Predinv(PREDINV ControlsA_PredinvValue)4909     __CODEGEN_INLINE void SetControlsA_Predinv(PREDINV ControlsA_PredinvValue) {
4910         __CODEGEN_SET_MACRO(ControlsA_PredinvValue);
4911         PropertyPredicationIsTrue.ControlsA_Predinv = ControlsA_PredinvValue;
4912     }
4913 
GetControlsA__()4914     __CODEGEN_INLINE PREDCTRL GetControlsA__() {
4915         __CODEGEN_GET_MACRO();
4916         return (PREDCTRL)PropertyPredicationIsFalse.ControlsA__;
4917     }
4918 
SetControlsA__(PREDCTRL ControlsA__Value)4919     __CODEGEN_INLINE void SetControlsA__(PREDCTRL ControlsA__Value) {
4920         __CODEGEN_SET_MACRO(ControlsA__Value);
4921         PropertyPredicationIsFalse.ControlsA__ = ControlsA__Value;
4922     }
4923 
GetControlsB_Saturate()4924     __CODEGEN_INLINE SATURATE GetControlsB_Saturate() {
4925         __CODEGEN_GET_MACRO();
4926         return (SATURATE)PropertySaturationIsTrue.ControlsB_Saturate;
4927     }
4928 
SetControlsB_Saturate(SATURATE ControlsB_SaturateValue)4929     __CODEGEN_INLINE void SetControlsB_Saturate(SATURATE ControlsB_SaturateValue) {
4930         __CODEGEN_SET_MACRO(ControlsB_SaturateValue);
4931         PropertySaturationIsTrue.ControlsB_Saturate = ControlsB_SaturateValue;
4932     }
4933 
4934 } __CODEGEN_ATTRIBUTES_STRUCTURE EU_INSTRUCTION_MATH;
4935 
4936 C_ASSERT(16 == sizeof(EU_INSTRUCTION_MATH));
4937 
4938 typedef union tagEU_INSTRUCTION_NOP {
4939     struct tagCommon {
4940         QWORD Opcode                     : BITFIELD_RANGE(  0,  6); // EU_OPCODE
4941         QWORD __CODEGEN_UNIQUE(Reserved) : BITFIELD_RANGE(  7, 29); // MBZ
4942 
4943         /*****************************************************************************\
4944         This field allows the insertion of a breakpoint at the current instruction. When the bit is set, hardware automatically stores the current IP in CR register and jumps to the System IP (SIP) BEFORE executing the current instruction.
4945         \*****************************************************************************/
4946         QWORD Debugctrl                  : BITFIELD_BIT(       30); // DEBUGCTRL
4947         QWORD __CODEGEN_UNIQUE(Reserved) : BITFIELD_RANGE( 31,63); // MBZ
4948         QWORD __CODEGEN_UNIQUE(Reserved) : BITFIELD_RANGE( 64,127); // MBZ
4949 
4950     } Common;
4951     DWORD RawData[4];
4952 
4953     // LOCAL ENUMERATIONS
4954     //
4955     typedef enum tagDEBUGCTRL {
4956         DEBUGCTRL_NO_BREAKPOINT = 0x0,
4957         DEBUGCTRL_BREAKPOINT    = 0x1,
4958     } DEBUGCTRL;
4959 
4960     // INITIALIZATION
4961     //
Init()4962     __CODEGEN_INLINE void Init() {
4963         RawData[0]       = 0x0;
4964         Common.Opcode    = 0x0;
4965         Common.Debugctrl = DEBUGCTRL_NO_BREAKPOINT;
4966         RawData[1]       = 0x0;
4967         RawData[2]       = 0x0;
4968         RawData[3]       = 0x0;
4969     }
4970 
sInit()4971     static tagEU_INSTRUCTION_NOP sInit() {
4972         tagEU_INSTRUCTION_NOP state;
4973         state.Init();
4974         return state;
4975     }
4976 
4977     // ACCESSORS
4978     //
GetDWORD(UINT const index)4979     __CODEGEN_INLINE __CODEGEN_PACKED DWORD& GetDWORD(UINT const index) {
4980         return RawData[index];
4981     }
4982 
4983     static size_t CalculateSize(UINT const entryCount = 0) {
4984         return 0;
4985     }
4986 
GetSize()4987     __CODEGEN_INLINE size_t GetSize() {
4988         return 0;
4989     }
4990 
GetOpcode()4991     __CODEGEN_INLINE EU_OPCODE GetOpcode() {
4992         __CODEGEN_GET_MACRO();
4993         return (EU_OPCODE)Common.Opcode;
4994     }
4995 
SetOpcode(EU_OPCODE OpcodeValue)4996     __CODEGEN_INLINE void SetOpcode(EU_OPCODE OpcodeValue) {
4997         __CODEGEN_SET_MACRO(OpcodeValue);
4998         Common.Opcode = OpcodeValue;
4999     }
5000 
GetDebugctrl()5001     __CODEGEN_INLINE DEBUGCTRL GetDebugctrl() {
5002         __CODEGEN_GET_MACRO();
5003         return (DEBUGCTRL)Common.Debugctrl;
5004     }
5005 
SetDebugctrl(DEBUGCTRL DebugctrlValue)5006     __CODEGEN_INLINE void SetDebugctrl(DEBUGCTRL DebugctrlValue) {
5007         __CODEGEN_SET_MACRO(DebugctrlValue);
5008         Common.Debugctrl = DebugctrlValue;
5009     }
5010 
5011 } __CODEGEN_ATTRIBUTES_STRUCTURE EU_INSTRUCTION_NOP;
5012 
5013 C_ASSERT(16 == sizeof(EU_INSTRUCTION_NOP));
5014 
5015 typedef union tagEU_INSTRUCTION_OPERAND_SEND_MSG {
5016     struct tagCommon {
5017         DWORD __CODEGEN_UNIQUE(Overridden) : BITFIELD_RANGE(  0, 28); // Override
5018         DWORD __CODEGEN_UNIQUE(Reserved)   : BITFIELD_RANGE( 29, 30); // MBZ
5019 
5020         /*****************************************************************************\
5021         This field controls the termination of the thread. For a send instruction, if this field is set, EU will terminate the thread and also set the EOT bit in the message sideband. This field only applies to the send instruction. It is not present for other instructions.
5022         \*****************************************************************************/
5023         DWORD Eot                          : BITFIELD_BIT(       31); // EOT
5024     } Common;
5025     struct tagStructureEu_Instruction_SendSrc1RegfileIsImm {
5026 
5027         /*****************************************************************************\
5028         This field is intended to control the target function unit. Refer to the section on the specific target function unit for details on the contents of this field.
5029         \*****************************************************************************/
5030         DWORD MessageDescriptor_FunctionControl : BITFIELD_RANGE(  0, 18); //
5031 
5032         /*****************************************************************************\
5033         If set, indicates that the message includes a header. Depending on the target shared function, this field may be restricted to either enabled or disabled. Refer to the specific shared function section for details.
5034         \*****************************************************************************/
5035         DWORD MessageDescriptor_HeaderPresent   : BITFIELD_BIT(       19); // bool
5036 
5037         /*****************************************************************************\
5038         This field indicates the number of 256-bit registers expected in the message response. The valid value ranges from 0 to 16. A value 0 indicates that the request message does not expect any response. The largest response supported is 16 GRF registers.
5039         \*****************************************************************************/
5040         DWORD MessageDescriptor_ResponseLength  : BITFIELD_RANGE( 20, 24); //
5041 
5042         /*****************************************************************************\
5043         This field specifies the number of 256-bit registers starting from &lt;curr_dest&gt; to be sent out on the request message payload. Valid value ranges from 1 to 15. A value of 0 is considered erroneous.
5044         \*****************************************************************************/
5045         DWORD MessageDescriptor_MessageLength   : BITFIELD_RANGE( 25, 28); //
5046         DWORD __CODEGEN_UNIQUE(Overridden)      : BITFIELD_RANGE( 29, 31); // Override
5047     } StructureEu_Instruction_SendSrc1RegfileIsImm;
5048     struct tagStructureEu_Instruction_SendSrc1RegfileNotImm {
5049 
5050         /*****************************************************************************\
5051         In a send or sendc instruction refers to the option of providing the message descriptor field QWORD, of which bits 28:0 are used, in the first two words of the Address Register rather than as an immediate operand.
5052         \*****************************************************************************/
5053         DWORD Reg32                        : BITFIELD_RANGE(  0, 28); //
5054         DWORD __CODEGEN_UNIQUE(Overridden) : BITFIELD_RANGE( 29, 31); // Override
5055     } StructureEu_Instruction_SendSrc1RegfileNotImm;
5056     DWORD RawData[1];
5057 
5058     // LOCAL ENUMERATIONS
5059     //
5060     // INITIALIZATION
5061     //
Init()5062     __CODEGEN_INLINE void Init() {
5063         RawData[0] = 0x0;
5064         Common.Eot = EOT_THREAD_IS_NOT_TERMINATED;
5065     }
5066 
sInit()5067     static tagEU_INSTRUCTION_OPERAND_SEND_MSG sInit() {
5068         tagEU_INSTRUCTION_OPERAND_SEND_MSG state;
5069         state.Init();
5070         return state;
5071     }
5072 
5073     // ACCESSORS
5074     //
GetDWORD(UINT const index)5075     __CODEGEN_INLINE __CODEGEN_PACKED DWORD& GetDWORD(UINT const index) {
5076         return RawData[index];
5077     }
5078 
5079     static size_t CalculateSize(UINT const entryCount = 0) {
5080         return 0;
5081     }
5082 
GetSize()5083     __CODEGEN_INLINE size_t GetSize() {
5084         return 0;
5085     }
5086 
GetEot()5087     __CODEGEN_INLINE EOT GetEot() {
5088         __CODEGEN_GET_MACRO();
5089         return (EOT)Common.Eot;
5090     }
5091 
SetEot(EOT EotValue)5092     __CODEGEN_INLINE void SetEot(EOT EotValue) {
5093         __CODEGEN_SET_MACRO(EotValue);
5094         Common.Eot = EotValue;
5095     }
5096 
GetMessageDescriptor_FunctionControl()5097     __CODEGEN_INLINE QWORD GetMessageDescriptor_FunctionControl() {
5098         __CODEGEN_GET_MACRO();
5099         return (QWORD)StructureEu_Instruction_SendSrc1RegfileIsImm.MessageDescriptor_FunctionControl;
5100     }
5101 
SetMessageDescriptor_FunctionControl(QWORD MessageDescriptor_FunctionControlValue)5102     __CODEGEN_INLINE void SetMessageDescriptor_FunctionControl(QWORD MessageDescriptor_FunctionControlValue) {
5103         __CODEGEN_SET_MACRO(MessageDescriptor_FunctionControlValue);
5104         StructureEu_Instruction_SendSrc1RegfileIsImm.MessageDescriptor_FunctionControl = MessageDescriptor_FunctionControlValue;
5105     }
5106 
GetMessageDescriptor_HeaderPresent()5107     __CODEGEN_INLINE QWORD GetMessageDescriptor_HeaderPresent() {
5108         __CODEGEN_GET_MACRO();
5109         return (QWORD)StructureEu_Instruction_SendSrc1RegfileIsImm.MessageDescriptor_HeaderPresent;
5110     }
5111 
SetMessageDescriptor_HeaderPresent(QWORD MessageDescriptor_HeaderPresentValue)5112     __CODEGEN_INLINE void SetMessageDescriptor_HeaderPresent(QWORD MessageDescriptor_HeaderPresentValue) {
5113         __CODEGEN_SET_MACRO(MessageDescriptor_HeaderPresentValue);
5114         StructureEu_Instruction_SendSrc1RegfileIsImm.MessageDescriptor_HeaderPresent = MessageDescriptor_HeaderPresentValue;
5115     }
5116 
GetMessageDescriptor_ResponseLength()5117     __CODEGEN_INLINE QWORD GetMessageDescriptor_ResponseLength() {
5118         __CODEGEN_GET_MACRO();
5119         return (QWORD)StructureEu_Instruction_SendSrc1RegfileIsImm.MessageDescriptor_ResponseLength;
5120     }
5121 
SetMessageDescriptor_ResponseLength(QWORD MessageDescriptor_ResponseLengthValue)5122     __CODEGEN_INLINE void SetMessageDescriptor_ResponseLength(QWORD MessageDescriptor_ResponseLengthValue) {
5123         __CODEGEN_SET_MACRO(MessageDescriptor_ResponseLengthValue);
5124         StructureEu_Instruction_SendSrc1RegfileIsImm.MessageDescriptor_ResponseLength = MessageDescriptor_ResponseLengthValue;
5125     }
5126 
GetMessageDescriptor_MessageLength()5127     __CODEGEN_INLINE QWORD GetMessageDescriptor_MessageLength() {
5128         __CODEGEN_GET_MACRO();
5129         return (QWORD)StructureEu_Instruction_SendSrc1RegfileIsImm.MessageDescriptor_MessageLength;
5130     }
5131 
SetMessageDescriptor_MessageLength(QWORD MessageDescriptor_MessageLengthValue)5132     __CODEGEN_INLINE void SetMessageDescriptor_MessageLength(QWORD MessageDescriptor_MessageLengthValue) {
5133         __CODEGEN_SET_MACRO(MessageDescriptor_MessageLengthValue);
5134         StructureEu_Instruction_SendSrc1RegfileIsImm.MessageDescriptor_MessageLength = MessageDescriptor_MessageLengthValue;
5135     }
5136 
GetReg32()5137     __CODEGEN_INLINE QWORD GetReg32() {
5138         __CODEGEN_GET_MACRO();
5139         return (QWORD)StructureEu_Instruction_SendSrc1RegfileNotImm.Reg32;
5140     }
5141 
SetReg32(QWORD Reg32Value)5142     __CODEGEN_INLINE void SetReg32(QWORD Reg32Value) {
5143         __CODEGEN_SET_MACRO(Reg32Value);
5144         StructureEu_Instruction_SendSrc1RegfileNotImm.Reg32 = Reg32Value;
5145     }
5146 
5147 } __CODEGEN_ATTRIBUTES_STRUCTURE EU_INSTRUCTION_OPERAND_SEND_MSG;
5148 
5149 C_ASSERT(4 == sizeof(EU_INSTRUCTION_OPERAND_SEND_MSG));
5150 
5151 typedef union tagEU_INSTRUCTION_SEND {
5152     struct tagCommon {
5153         DWORD Opcode                       : BITFIELD_RANGE(  0,  6); // EU_OPCODE
5154         DWORD __CODEGEN_UNIQUE(Reserved)   : BITFIELD_BIT(        7); // MBZ
5155 
5156         /*****************************************************************************\
5157         Access Mode. This field determines the operand access for the instruction. It applies to all source and destination operands.
5158         When it is cleared (Align1), the instruction uses byte-aligned addressing for source and destination operands. Source swizzle control and destination mask control are not supported.
5159         When it is set (Align16), the instruction uses 16-byte-aligned addressing for all source and destination operands. Source swizzle control and destination mask control are supported in this mode.
5160         \*****************************************************************************/
5161         DWORD ControlsA_Accessmode         : BITFIELD_BIT(        0); // ACCESSMODE
5162 
5163         /*****************************************************************************\
5164         Destination Dependency Control. This field selectively disables destination dependency check and clear for this instruction.
5165         When it is set to 00, normal destination dependency control is performed for the instruction  - hardware checks for destination hazards to ensure data integrity. Specifically, destination register dependency check is conducted before the instruction is made ready for execution. After the instruction is executed, the destination register scoreboard will be cleared when the destination operands retire.
5166         When bit 10 is set (NoDDClr), the destination register scoreboard will NOT be cleared when the destination operands retire.  When bit 11 is set (NoDDChk), hardware does not check for destination register dependency before the instruction is made ready for execution.  NoDDClr and NoDDChk are not mutual exclusive.
5167         When this field is not all-zero, hardware does not protect against destination hazards for the instruction.  This is typically used to assemble data in a fine grained fashion (e.g. matrix-vector compute with dot-product instructions), where the data integrity is guaranteed by software based on the intended usage of instruction sequences.
5168         \*****************************************************************************/
5169         DWORD ControlsA_Depctrl            : BITFIELD_RANGE(  1,  2); // DEPCTRL
5170 
5171         /*****************************************************************************\
5172         Nibble Control. This field is used in some instructions along with QtrCtrl. See the description of QtrCtrl below. NibCtrl is only used for SIMD4 instructions with a DF (Double Float) source or destination.
5173 
5174         Programming Notes:
5175         Note that if eighths are given zero-based indices from 0 to 7, then NibCtrl = 0 indicates even indices and NibCtrl = 1 indicates odd indices.
5176         \*****************************************************************************/
5177         DWORD ControlsA_Nibctrl            : BITFIELD_BIT(        3); // NIBCTRL
5178 
5179         /*****************************************************************************\
5180          - Quarter Control. This field provides explicit control for ARF selection.
5181         This field combined with NibCtrl and ExecSize determines which channels are used for the ARF registers.
5182         \*****************************************************************************/
5183         DWORD ControlsA_Qtrctrl            : BITFIELD_RANGE(  4,  5); // QTRCTRL
5184 
5185         /*****************************************************************************\
5186         Thread Control. This field provides explicit control for thread switching.
5187         If this field is set to 00b, it is up to the GEN execution units to manage thread switching. This is the normal (and unnamed) mode. In this mode, for example, if the current instruction cannot proceed due to operand dependencies, the EU switches to the next available thread to fill the compute pipe. In another example, if the current instruction is ready to go, however, there is another thread with higher priority that also has an instruction ready, the EU switches to that thread.
5188         If this field is set to Switch, a forced thread switch occurs after the current instruction is executed and before the next instruction. In addition, a long delay (longer than the execution pipe latency) is introduced for the current thread. Particularly, the instruction queue of the current thread is flushed after the current instruction is dispatched for execution. Switch is designed primarily as a safety feature in case there are race conditions for certain instructions.
5189         \*****************************************************************************/
5190         DWORD ControlsA_ThreadControl      : BITFIELD_RANGE(  6,  7); // THREADCTRL
5191 
5192         /*****************************************************************************\
5193         This field determines the number of channels operating in parallel for this instruction.  The size cannot exceed the maximum number of channels allowed for the given data type.
5194         \*****************************************************************************/
5195         DWORD ControlsA_Execsize           : BITFIELD_RANGE( 13, 15); // EXECSIZE
5196         DWORD __CODEGEN_UNIQUE(Overridden) : BITFIELD_RANGE( 19, 23); // Override
5197         DWORD SharedFunctionIdSfid         : BITFIELD_RANGE( 24, 27); // SFID
5198 
5199         /*****************************************************************************\
5200         AccWrCtrl. This field allows per instruction accumulator write control.
5201         \*****************************************************************************/
5202         DWORD ControlsB_Accwrctrl          : BITFIELD_BIT(       28); // ACCWRCTRL
5203 
5204         /*****************************************************************************\
5205         Compaction Control
5206         Indicates whether the instruction is compacted to the 64-bit compact instruction format. When this bit is set, the 64-bit compact instruction format is used. The EU decodes the compact format using lookup tables internal to the hardware, but documented for use by software tools. Only some instruction variations can be compacted, the variations supported by those lookup tables and the compact format. See EU Compact Instruction Format [DevBDW+] for more information.
5207         \*****************************************************************************/
5208         DWORD ControlsB_Cmptctrl           : BITFIELD_BIT(       29); // CMPTCTRL
5209 
5210         /*****************************************************************************\
5211         This field allows the insertion of a breakpoint at the current instruction. When the bit is set, hardware automatically stores the current IP in CR register and jumps to the System IP (SIP) BEFORE executing the current instruction.
5212         \*****************************************************************************/
5213         DWORD ControlsB_Debugctrl          : BITFIELD_BIT(       30); // DEBUGCTRL
5214         EU_INSTRUCTION_OPERAND_CONTROLS OperandControl;
5215         DWORD Exdesc1916                   : BITFIELD_RANGE( 64, 67); // ExMsgDescpt[19:16]
5216         DWORD __CODEGEN_UNIQUE(Reserved)   : BITFIELD_RANGE( 68, 79); // MBZ
5217         DWORD Exdesc2320                   : BITFIELD_RANGE( 80, 83); // ExtMsgDescpt[23:20]
5218         DWORD __CODEGEN_UNIQUE(Reserved)   : BITFIELD_BIT(       84); // MBZ
5219         DWORD Exdesc2724                   : BITFIELD_RANGE( 85, 88); // ExtMsgDescpt[27:24]
5220         DWORD __CODEGEN_UNIQUE(Reserved)   : BITFIELD_RANGE( 89, 90); // MBZ
5221         DWORD Exdesc3028                   : BITFIELD_RANGE( 91, 93); // ExtMsgDescpt[31:28]
5222         DWORD Exdesc1111                   : BITFIELD_BIT(       94); //LOD COMPENSATION BIT, MANUALLY ADDED
5223         DWORD __CODEGEN_UNIQUE(Reserved)   : BITFIELD_BIT(       95); // MBZ
5224         EU_INSTRUCTION_OPERAND_SEND_MSG Message;
5225     } Common;
5226     struct tagPropertyPredicationIsTrue {
5227         QWORD __CODEGEN_UNIQUE(Overridden) : BITFIELD_RANGE(  0,  7); // Override
5228 
5229         /*****************************************************************************\
5230         This field, together with PredInv, enables and controls the generation of the predication mask for the instruction.  It allows per-channel conditional execution of the instruction based on the content of the selected flag register.  Encoding depends on the access mode.
5231         In Align16 access mode, there are eight encodings (including no predication). All encodings are based on group-of-4 predicate bits, including channel sequential, replication swizzles and horizontal any|all operations.  The same configuration is repeated for each group-of-4 execution channels.
5232         \*****************************************************************************/
5233         QWORD ControlsA_Predctrl           : BITFIELD_RANGE(  8, 11); // PREDCTRL
5234 
5235         /*****************************************************************************\
5236         This field, together with PredCtrl, enables and controls the generation of the predication mask for the instruction.  When it is set, the predication uses the inverse of the predication bits generated according to setting of Predicate Control. In other words, effect of PredInv happens after PredCtrl.
5237         This field is ignored by hardware if Predicate Control is set to 0000  - there is no predication.
5238         PMask is the final predication mask produced by the effects of both fields.
5239         \*****************************************************************************/
5240         QWORD ControlsA_Predinv            : BITFIELD_BIT(       12); // PREDINV
5241         QWORD __CODEGEN_UNIQUE(Overridden) : BITFIELD_RANGE( 13,63); // Override
5242         QWORD __CODEGEN_UNIQUE(Overridden) : BITFIELD_RANGE( 64,127); // Override
5243 
5244     } PropertyPredicationIsTrue;
5245     struct tagPropertyPredicationIsFalse {
5246         QWORD __CODEGEN_UNIQUE(Overridden) : BITFIELD_RANGE(  0,  7); // Override
5247         QWORD ControlsA__                  : BITFIELD_RANGE(  8, 11); // PREDCTRL
5248         QWORD __CODEGEN_UNIQUE(Reserved)   : BITFIELD_BIT(       12); //
5249         QWORD __CODEGEN_UNIQUE(Overridden) : BITFIELD_RANGE( 13,63); // Override
5250         QWORD __CODEGEN_UNIQUE(Overridden) : BITFIELD_RANGE( 64,127); // Override
5251     } PropertyPredicationIsFalse;
5252     struct tagPropertySaturationIsTrue {
5253         DWORD __CODEGEN_UNIQUE(Overridden) : BITFIELD_RANGE(  0, 30); // Override
5254 
5255         /*****************************************************************************\
5256         Enables or disables destination saturation.
5257         When it is set, output values to the destination register are saturated. The saturation operation depends on the destination data type. Saturation is the operation that converts any value outside the saturation target range for the data type to the closest value in the target range.
5258         For a floating-point destination type, the saturation target range is [0.0, 1.0]. For a floating-point NaN, there is no  -closest value -; any NaN saturates to 0.0. Note that enabling Saturate overrides all of the NaN propagation behaviors described for various numeric instructions. Any floating-point number greater than 1.0, including +INF, saturates to 1.0. Any negative floating-point number, including -INF, saturates to 0.0. Any floating-point number in the range 0.0 to 1.0 is not changed by saturation.
5259         For an integer destination type, the maximum range for that type is the saturation target range. For example, the saturation range for B (Signed Byte Integer) is [-128, 127].
5260         When Saturate is clear, destination values are not saturated. For example, a wrapped result (modulo) is output to the destination for an overflowed integer value. See the Numeric Data Typessection for information about data types and their ranges.
5261         \*****************************************************************************/
5262         DWORD ControlsB_Saturate           : BITFIELD_BIT(       31); // SATURATE
5263         DWORD __CODEGEN_UNIQUE(Overridden)[3];
5264     } PropertySaturationIsTrue;
5265     struct tagPropertySaturationIsFalse {
5266         DWORD __CODEGEN_UNIQUE(Overridden) : BITFIELD_RANGE(  0, 30); // Override
5267         DWORD __CODEGEN_UNIQUE(Reserved)   : BITFIELD_BIT(       31); // MBZ
5268         DWORD __CODEGEN_UNIQUE(Overridden)[3];
5269     } PropertySaturationIsFalse;
5270     DWORD RawData[4];
5271 
5272     // STRUCTURE DEBUG
5273     //
5274     //__CODEGEN_DebugType(EU_INSTRUCTION_SEND) {
5275     //    __CODEGEN_DebugAttributeEnum(Opcode, 0, 6, EU_OPCODE);
5276     //    __CODEGEN_DebugAttributeEnum(ControlsA_Accessmode, 0, 0, ACCESSMODE);
5277     //    __CODEGEN_DebugAttributeEnum(ControlsA_Depctrl, 1, 2, DEPCTRL);
5278     //    __CODEGEN_DebugAttributeEnum(ControlsA_Nibctrl, 3, 3, NIBCTRL);
5279     //    __CODEGEN_DebugAttributeEnum(ControlsA_Qtrctrl, 4, 5, QTRCTRL);
5280     //    __CODEGEN_DebugAttributeEnum(ControlsA_ThreadControl, 6, 7, THREADCTRL);
5281     //    __CODEGEN_DebugAttributeEnum(ControlsA_Execsize, 13, 15, EXECSIZE);
5282     //    __CODEGEN_DebugAttributeEnum(SharedFunctionIdSfid, 24, 27, SFID);
5283     //    __CODEGEN_DebugAttributeEnum(ControlsB_Accwrctrl, 28, 28, ACCWRCTRL);
5284     //    __CODEGEN_DebugAttributeEnum(ControlsB_Cmptctrl, 29, 29, CMPTCTRL);
5285     //    __CODEGEN_DebugAttributeEnum(ControlsB_Debugctrl, 30, 30, DEBUGCTRL);
5286     //    __CODEGEN_DebugAttributeStruct(OperandControl);
5287     //    __CODEGEN_DebugAttributeUInt(Exdesc1916, 64, 67);
5288     //    __CODEGEN_DebugAttributeUInt(Exdesc2320, 80, 83);
5289     //    __CODEGEN_DebugAttributeUInt(Exdesc2724, 85, 88);
5290     //    __CODEGEN_DebugAttributeUInt(Exdesc3128, 91, 94);
5291     //    __CODEGEN_DebugAttributeStruct(Message);
5292     //}
5293 
5294     // LOCAL ENUMERATIONS
5295     //
5296     typedef enum tagACCESSMODE {
5297         ACCESSMODE_ALIGN1  = 0x0,
5298         ACCESSMODE_ALIGN16 = 0x1,
5299     } ACCESSMODE;
5300 
5301     typedef enum tagNIBCTRL {
5302         NIBCTRL_ODD  = 0x0,    // Use an odd 1/8th for DMask/VMask and ARF (first, third, fifth, or seventh depending on QtrCtrl).
5303         NIBCTRL_EVEN = 0x1,    // Use an even 1/8th for DMask/VMask and ARF (second, fourth, sixth, or eighth depending on QtrCtrl).
5304     } NIBCTRL;
5305 
5306     //typedef enum tagACCWRCTRL {
5307     //    ACCWRCTRL_DON_T_WRITE_TO_ACC = 0x0,
5308     //    ACCWRCTRL_UPDATE_ACC         = 0x1,    // Write result to the ACC, and destination
5309     //} ACCWRCTRL;
5310 
5311     typedef enum tagCMPTCTRL {
5312         CMPTCTRL_NOCOMPACTION = 0x0,    // No compaction. 128-bit native instruction supporting all instruction options.
5313         CMPTCTRL_COMPACTED    = 0x1,    // Compaction is enabled. 64-bit compact instruction supporting only some instruction variations.
5314     } CMPTCTRL;
5315 
5316     typedef enum tagDEBUGCTRL {
5317         DEBUGCTRL_NO_BREAKPOINT = 0x0,
5318         DEBUGCTRL_BREAKPOINT    = 0x1,
5319     } DEBUGCTRL;
5320 
5321     typedef enum tagPREDINV {
5322         PREDINV_POSITIVE = 0x0,    // Positive polarity of predication. Use the predication mask produced by PredCtrl
5323         PREDINV_NEGATIVE = 0x1,    // Negative polarity of predication. If PredCtrl is nonzero, invert the predication mask.
5324     } PREDINV;
5325 
5326     //typedef enum tagSATURATE {
5327     //    SATURATE_NO_DESTINATION_MODIFICATION = 0x0,
5328     //    SATURATE_SAT                         = 0x1,    // Saturate the output
5329     //} SATURATE;
5330 
5331     // ENUMERATION DEBUG
5332     //
5333     //__CODEGEN_DebugEnum(ACCESSMODE) {
5334     //    __CODEGEN_DebugEnumValue(ACCESSMODE_ALIGN1);
5335     //    __CODEGEN_DebugEnumValue(ACCESSMODE_ALIGN16);
5336     //}
5337     //
5338     //__CODEGEN_DebugEnum(NIBCTRL) {
5339     //    __CODEGEN_DebugEnumValue(NIBCTRL_ODD);
5340     //    __CODEGEN_DebugEnumValue(NIBCTRL_EVEN);
5341     //}
5342     //
5343     //__CODEGEN_DebugEnum(ACCWRCTRL) {
5344     //    __CODEGEN_DebugEnumValue(ACCWRCTRL_DON_T_WRITE_TO_ACC);
5345     //    __CODEGEN_DebugEnumValue(ACCWRCTRL_UPDATE_ACC);
5346     //}
5347     //
5348     //__CODEGEN_DebugEnum(CMPTCTRL) {
5349     //    __CODEGEN_DebugEnumValue(CMPTCTRL_NOCOMPACTION);
5350     //    __CODEGEN_DebugEnumValue(CMPTCTRL_COMPACTED);
5351     //}
5352     //
5353     //__CODEGEN_DebugEnum(DEBUGCTRL) {
5354     //    __CODEGEN_DebugEnumValue(DEBUGCTRL_NO_BREAKPOINT);
5355     //    __CODEGEN_DebugEnumValue(DEBUGCTRL_BREAKPOINT);
5356     //}
5357     //
5358     //__CODEGEN_DebugEnum(PREDINV) {
5359     //    __CODEGEN_DebugEnumValue(PREDINV_POSITIVE);
5360     //    __CODEGEN_DebugEnumValue(PREDINV_NEGATIVE);
5361     //}
5362     //
5363     //__CODEGEN_DebugEnum(SATURATE) {
5364     //    __CODEGEN_DebugEnumValue(SATURATE_NO_DESTINATION_MODIFICATION);
5365     //    __CODEGEN_DebugEnumValue(SATURATE_SAT);
5366     //}
5367 
5368     // INITIALIZATION
5369     //
Init()5370     __CODEGEN_INLINE void Init() {
5371         RawData[0]                     = 0x0;
5372         Common.Opcode                  = 0x0;
5373         RawData[1]                     = 0x0;
5374         Common.ControlsA_Accessmode    = ACCESSMODE_ALIGN1;
5375         Common.ControlsA_Depctrl       = 0x0;
5376         Common.ControlsA_Nibctrl       = NIBCTRL_ODD;
5377         Common.ControlsA_Qtrctrl       = 0x0;
5378         Common.ControlsA_ThreadControl = 0x0;
5379         Common.ControlsA_Execsize      = 0x0;
5380         Common.SharedFunctionIdSfid    = 0x0;
5381         Common.ControlsB_Accwrctrl     = ACCWRCTRL_DON_T_WRITE_TO_ACC;
5382         Common.ControlsB_Cmptctrl      = CMPTCTRL_NOCOMPACTION;
5383         Common.ControlsB_Debugctrl     = DEBUGCTRL_NO_BREAKPOINT;
5384         RawData[2]                     = 0x0;
5385         Common.OperandControl.Init();
5386         RawData[3]                     = 0x0;
5387         Common.Exdesc1916              = 0x0;
5388         Common.Exdesc2320              = 0x0;
5389         Common.Exdesc2724              = 0x0;
5390         Common.Exdesc3028              = 0x0;
5391         Common.Exdesc1111              = 0x0;
5392         Common.Message.Init();
5393     }
5394 
sInit()5395     static tagEU_INSTRUCTION_SEND sInit() {
5396         tagEU_INSTRUCTION_SEND state;
5397         state.Init();
5398         return state;
5399     }
5400 
5401     // ACCESSORS
5402     //
GetDWORD(UINT const index)5403     __CODEGEN_INLINE __CODEGEN_PACKED DWORD& GetDWORD(UINT const index) {
5404         return RawData[index];
5405     }
5406 
5407     static size_t CalculateSize(UINT const entryCount = 0) {
5408         return 0;
5409     }
5410 
GetSize()5411     __CODEGEN_INLINE size_t GetSize() {
5412         return 0;
5413     }
5414 
GetOpcode()5415     __CODEGEN_INLINE EU_OPCODE GetOpcode() {
5416         __CODEGEN_GET_MACRO();
5417         return (EU_OPCODE)Common.Opcode;
5418     }
5419 
SetOpcode(EU_OPCODE OpcodeValue)5420     __CODEGEN_INLINE void SetOpcode(EU_OPCODE OpcodeValue) {
5421         __CODEGEN_SET_MACRO(OpcodeValue);
5422         Common.Opcode = OpcodeValue;
5423     }
5424 
GetControlsA_Accessmode()5425     __CODEGEN_INLINE ACCESSMODE GetControlsA_Accessmode() {
5426         __CODEGEN_GET_MACRO();
5427         return (ACCESSMODE)Common.ControlsA_Accessmode;
5428     }
5429 
SetControlsA_Accessmode(ACCESSMODE ControlsA_AccessmodeValue)5430     __CODEGEN_INLINE void SetControlsA_Accessmode(ACCESSMODE ControlsA_AccessmodeValue) {
5431         __CODEGEN_SET_MACRO(ControlsA_AccessmodeValue);
5432         Common.ControlsA_Accessmode = ControlsA_AccessmodeValue;
5433     }
5434 
GetControlsA_Depctrl()5435     __CODEGEN_INLINE DEPCTRL GetControlsA_Depctrl() {
5436         __CODEGEN_GET_MACRO();
5437         return (DEPCTRL)Common.ControlsA_Depctrl;
5438     }
5439 
SetControlsA_Depctrl(DEPCTRL ControlsA_DepctrlValue)5440     __CODEGEN_INLINE void SetControlsA_Depctrl(DEPCTRL ControlsA_DepctrlValue) {
5441         __CODEGEN_SET_MACRO(ControlsA_DepctrlValue);
5442         Common.ControlsA_Depctrl = ControlsA_DepctrlValue;
5443     }
5444 
GetControlsA_Nibctrl()5445     __CODEGEN_INLINE NIBCTRL GetControlsA_Nibctrl() {
5446         __CODEGEN_GET_MACRO();
5447         return (NIBCTRL)Common.ControlsA_Nibctrl;
5448     }
5449 
SetControlsA_Nibctrl(NIBCTRL ControlsA_NibctrlValue)5450     __CODEGEN_INLINE void SetControlsA_Nibctrl(NIBCTRL ControlsA_NibctrlValue) {
5451         __CODEGEN_SET_MACRO(ControlsA_NibctrlValue);
5452         Common.ControlsA_Nibctrl = ControlsA_NibctrlValue;
5453     }
5454 
GetControlsA_Qtrctrl()5455     __CODEGEN_INLINE QTRCTRL GetControlsA_Qtrctrl() {
5456         __CODEGEN_GET_MACRO();
5457         return (QTRCTRL)Common.ControlsA_Qtrctrl;
5458     }
5459 
SetControlsA_Qtrctrl(QTRCTRL ControlsA_QtrctrlValue)5460     __CODEGEN_INLINE void SetControlsA_Qtrctrl(QTRCTRL ControlsA_QtrctrlValue) {
5461         __CODEGEN_SET_MACRO(ControlsA_QtrctrlValue);
5462         Common.ControlsA_Qtrctrl = ControlsA_QtrctrlValue;
5463     }
5464 
GetControlsA_ThreadControl()5465     __CODEGEN_INLINE THREADCTRL GetControlsA_ThreadControl() {
5466         __CODEGEN_GET_MACRO();
5467         return (THREADCTRL)Common.ControlsA_ThreadControl;
5468     }
5469 
SetControlsA_ThreadControl(THREADCTRL ControlsA_ThreadControlValue)5470     __CODEGEN_INLINE void SetControlsA_ThreadControl(THREADCTRL ControlsA_ThreadControlValue) {
5471         __CODEGEN_SET_MACRO(ControlsA_ThreadControlValue);
5472         Common.ControlsA_ThreadControl = ControlsA_ThreadControlValue;
5473     }
5474 
GetControlsA_Execsize()5475     __CODEGEN_INLINE EXECSIZE GetControlsA_Execsize() {
5476         __CODEGEN_GET_MACRO();
5477         return (EXECSIZE)Common.ControlsA_Execsize;
5478     }
5479 
SetControlsA_Execsize(EXECSIZE ControlsA_ExecsizeValue)5480     __CODEGEN_INLINE void SetControlsA_Execsize(EXECSIZE ControlsA_ExecsizeValue) {
5481         __CODEGEN_SET_MACRO(ControlsA_ExecsizeValue);
5482         Common.ControlsA_Execsize = ControlsA_ExecsizeValue;
5483     }
5484 
GetSharedFunctionIdSfid()5485     __CODEGEN_INLINE SFID GetSharedFunctionIdSfid() {
5486         __CODEGEN_GET_MACRO();
5487         return (SFID)Common.SharedFunctionIdSfid;
5488     }
5489 
SetSharedFunctionIdSfid(SFID SharedFunctionIdSfidValue)5490     __CODEGEN_INLINE void SetSharedFunctionIdSfid(SFID SharedFunctionIdSfidValue) {
5491         __CODEGEN_SET_MACRO(SharedFunctionIdSfidValue);
5492         Common.SharedFunctionIdSfid = SharedFunctionIdSfidValue;
5493     }
5494 
GetControlsB_Accwrctrl()5495     __CODEGEN_INLINE ACCWRCTRL GetControlsB_Accwrctrl() {
5496         __CODEGEN_GET_MACRO();
5497         return (ACCWRCTRL)Common.ControlsB_Accwrctrl;
5498     }
5499 
SetControlsB_Accwrctrl(ACCWRCTRL ControlsB_AccwrctrlValue)5500     __CODEGEN_INLINE void SetControlsB_Accwrctrl(ACCWRCTRL ControlsB_AccwrctrlValue) {
5501         __CODEGEN_SET_MACRO(ControlsB_AccwrctrlValue);
5502         Common.ControlsB_Accwrctrl = ControlsB_AccwrctrlValue;
5503     }
5504 
GetControlsB_Cmptctrl()5505     __CODEGEN_INLINE CMPTCTRL GetControlsB_Cmptctrl() {
5506         __CODEGEN_GET_MACRO();
5507         return (CMPTCTRL)Common.ControlsB_Cmptctrl;
5508     }
5509 
SetControlsB_Cmptctrl(CMPTCTRL ControlsB_CmptctrlValue)5510     __CODEGEN_INLINE void SetControlsB_Cmptctrl(CMPTCTRL ControlsB_CmptctrlValue) {
5511         __CODEGEN_SET_MACRO(ControlsB_CmptctrlValue);
5512         Common.ControlsB_Cmptctrl = ControlsB_CmptctrlValue;
5513     }
5514 
GetControlsB_Debugctrl()5515     __CODEGEN_INLINE DEBUGCTRL GetControlsB_Debugctrl() {
5516         __CODEGEN_GET_MACRO();
5517         return (DEBUGCTRL)Common.ControlsB_Debugctrl;
5518     }
5519 
SetControlsB_Debugctrl(DEBUGCTRL ControlsB_DebugctrlValue)5520     __CODEGEN_INLINE void SetControlsB_Debugctrl(DEBUGCTRL ControlsB_DebugctrlValue) {
5521         __CODEGEN_SET_MACRO(ControlsB_DebugctrlValue);
5522         Common.ControlsB_Debugctrl = ControlsB_DebugctrlValue;
5523     }
5524 
GetOperandControl()5525     __CODEGEN_INLINE EU_INSTRUCTION_OPERAND_CONTROLS& GetOperandControl() {
5526         __CODEGEN_GET_MACRO();
5527         return Common.OperandControl;
5528     }
5529 
GetExdesc1916()5530     __CODEGEN_INLINE QWORD GetExdesc1916() {
5531         __CODEGEN_GET_MACRO();
5532         return (QWORD)Common.Exdesc1916 << 16;
5533     }
5534 
SetExdesc1916(QWORD Exdesc1916Value)5535     __CODEGEN_INLINE void SetExdesc1916(QWORD Exdesc1916Value) {
5536         __CODEGEN_SET_MACRO(Exdesc1916Value);
5537         Common.Exdesc1916 = Exdesc1916Value >> 16;
5538     }
5539 
GetExdesc2320()5540     __CODEGEN_INLINE QWORD GetExdesc2320() {
5541         __CODEGEN_GET_MACRO();
5542         return (QWORD)Common.Exdesc2320 << 20;
5543     }
5544 
SetExdesc2320(QWORD Exdesc2320Value)5545     __CODEGEN_INLINE void SetExdesc2320(QWORD Exdesc2320Value) {
5546         __CODEGEN_SET_MACRO(Exdesc2320Value);
5547         Common.Exdesc2320 = Exdesc2320Value >> 20;
5548     }
5549 
GetExdesc2724()5550     __CODEGEN_INLINE QWORD GetExdesc2724() {
5551         __CODEGEN_GET_MACRO();
5552         return (QWORD)Common.Exdesc2724 << 24;
5553     }
5554 
SetExdesc2724(QWORD Exdesc2724Value)5555     __CODEGEN_INLINE void SetExdesc2724(QWORD Exdesc2724Value) {
5556         __CODEGEN_SET_MACRO(Exdesc2724Value);
5557         Common.Exdesc2724 = Exdesc2724Value >> 24;
5558     }
5559 
GetExdesc3028()5560     __CODEGEN_INLINE QWORD GetExdesc3028() {
5561         __CODEGEN_GET_MACRO();
5562         return (QWORD)Common.Exdesc3028 << 28;
5563     }
5564 
SetExdesc3028(QWORD Exdesc3028Value)5565     __CODEGEN_INLINE void SetExdesc3028(QWORD Exdesc3028Value) {
5566         __CODEGEN_SET_MACRO(Exdesc3028Value);
5567         Common.Exdesc3028 = Exdesc3028Value >> 28;
5568     }
5569 
SetExdesc1111(QWORD Exdesc1111Value)5570     __CODEGEN_INLINE void SetExdesc1111(QWORD Exdesc1111Value) {
5571         __CODEGEN_SET_MACRO(Exdesc1111Value);
5572         Common.Exdesc1111 = Exdesc1111Value >> 11;
5573     }
5574 
GetMessage()5575     __CODEGEN_INLINE EU_INSTRUCTION_OPERAND_SEND_MSG& GetMessage() {
5576         __CODEGEN_GET_MACRO();
5577         return Common.Message;
5578     }
5579 
GetControlsA_Predctrl()5580     __CODEGEN_INLINE PREDCTRL GetControlsA_Predctrl() {
5581         __CODEGEN_GET_MACRO();
5582         return (PREDCTRL)PropertyPredicationIsTrue.ControlsA_Predctrl;
5583     }
5584 
SetControlsA_Predctrl(PREDCTRL ControlsA_PredctrlValue)5585     __CODEGEN_INLINE void SetControlsA_Predctrl(PREDCTRL ControlsA_PredctrlValue) {
5586         __CODEGEN_SET_MACRO(ControlsA_PredctrlValue);
5587         PropertyPredicationIsTrue.ControlsA_Predctrl = ControlsA_PredctrlValue;
5588     }
5589 
GetControlsA_Predinv()5590     __CODEGEN_INLINE PREDINV GetControlsA_Predinv() {
5591         __CODEGEN_GET_MACRO();
5592         return (PREDINV)PropertyPredicationIsTrue.ControlsA_Predinv;
5593     }
5594 
SetControlsA_Predinv(PREDINV ControlsA_PredinvValue)5595     __CODEGEN_INLINE void SetControlsA_Predinv(PREDINV ControlsA_PredinvValue) {
5596         __CODEGEN_SET_MACRO(ControlsA_PredinvValue);
5597         PropertyPredicationIsTrue.ControlsA_Predinv = ControlsA_PredinvValue;
5598     }
5599 
GetControlsA__()5600     __CODEGEN_INLINE PREDCTRL GetControlsA__() {
5601         __CODEGEN_GET_MACRO();
5602         return (PREDCTRL)PropertyPredicationIsFalse.ControlsA__;
5603     }
5604 
SetControlsA__(PREDCTRL ControlsA__Value)5605     __CODEGEN_INLINE void SetControlsA__(PREDCTRL ControlsA__Value) {
5606         __CODEGEN_SET_MACRO(ControlsA__Value);
5607         PropertyPredicationIsFalse.ControlsA__ = ControlsA__Value;
5608     }
5609 
GetControlsB_Saturate()5610     __CODEGEN_INLINE SATURATE GetControlsB_Saturate() {
5611         __CODEGEN_GET_MACRO();
5612         return (SATURATE)PropertySaturationIsTrue.ControlsB_Saturate;
5613     }
5614 
SetControlsB_Saturate(SATURATE ControlsB_SaturateValue)5615     __CODEGEN_INLINE void SetControlsB_Saturate(SATURATE ControlsB_SaturateValue) {
5616         __CODEGEN_SET_MACRO(ControlsB_SaturateValue);
5617         PropertySaturationIsTrue.ControlsB_Saturate = ControlsB_SaturateValue;
5618     }
5619 
5620 } __CODEGEN_ATTRIBUTES_STRUCTURE EU_INSTRUCTION_SEND;
5621 
5622 C_ASSERT(16 == sizeof(EU_INSTRUCTION_SEND));
5623 
5624 typedef union tagEU_INSTRUCTION_SENDS {
5625     struct tagCommon {
5626         DWORD Opcode                              : BITFIELD_RANGE(  0,  6); // EU_OPCODE
5627         DWORD __CODEGEN_UNIQUE(Reserved)          : BITFIELD_BIT(        7); // MBZ
5628 
5629         /*****************************************************************************\
5630         Access Mode. This field determines the operand access for the instruction. It applies to all source and destination operands.
5631         When it is cleared (Align1), the instruction uses byte-aligned addressing for source and destination operands. Source swizzle control and destination mask control are not supported.
5632         When it is set (Align16), the instruction uses 16-byte-aligned addressing for all source and destination operands. Source swizzle control and destination mask control are supported in this mode.
5633         \*****************************************************************************/
5634         DWORD ControlsA_Accessmode                : BITFIELD_BIT(        0); // ACCESSMODE
5635 
5636         /*****************************************************************************\
5637         Destination Dependency Control. This field selectively disables destination dependency check and clear for this instruction.
5638         When it is set to 00, normal destination dependency control is performed for the instruction  - hardware checks for destination hazards to ensure data integrity. Specifically, destination register dependency check is conducted before the instruction is made ready for execution. After the instruction is executed, the destination register scoreboard will be cleared when the destination operands retire.
5639         When bit 10 is set (NoDDClr), the destination register scoreboard will NOT be cleared when the destination operands retire.  When bit 11 is set (NoDDChk), hardware does not check for destination register dependency before the instruction is made ready for execution.  NoDDClr and NoDDChk are not mutual exclusive.
5640         When this field is not all-zero, hardware does not protect against destination hazards for the instruction.  This is typically used to assemble data in a fine grained fashion (e.g. matrix-vector compute with dot-product instructions), where the data integrity is guaranteed by software based on the intended usage of instruction sequences.
5641         \*****************************************************************************/
5642         DWORD ControlsA_Depctrl                   : BITFIELD_RANGE(  1,  2); // DEPCTRL
5643 
5644         /*****************************************************************************\
5645         Nibble Control. This field is used in some instructions along with QtrCtrl. See the description of QtrCtrl below. NibCtrl is only used for SIMD4 instructions with a DF (Double Float) source or destination.
5646 
5647         Programming Notes:
5648         Note that if eighths are given zero-based indices from 0 to 7, then NibCtrl = 0 indicates even indices and NibCtrl = 1 indicates odd indices.
5649         \*****************************************************************************/
5650         DWORD ControlsA_Nibctrl                   : BITFIELD_BIT(        3); // NIBCTRL
5651 
5652         /*****************************************************************************\
5653          - Quarter Control. This field provides explicit control for ARF selection.
5654         This field combined with NibCtrl and ExecSize determines which channels are used for the ARF registers.
5655         \*****************************************************************************/
5656         DWORD ControlsA_Qtrctrl                   : BITFIELD_RANGE(  4,  5); // QTRCTRL
5657 
5658         /*****************************************************************************\
5659         Thread Control. This field provides explicit control for thread switching.
5660         If this field is set to 00b, it is up to the GEN execution units to manage thread switching. This is the normal (and unnamed) mode. In this mode, for example, if the current instruction cannot proceed due to operand dependencies, the EU switches to the next available thread to fill the compute pipe. In another example, if the current instruction is ready to go, however, there is another thread with higher priority that also has an instruction ready, the EU switches to that thread.
5661         If this field is set to Switch, a forced thread switch occurs after the current instruction is executed and before the next instruction. In addition, a long delay (longer than the execution pipe latency) is introduced for the current thread. Particularly, the instruction queue of the current thread is flushed after the current instruction is dispatched for execution. Switch is designed primarily as a safety feature in case there are race conditions for certain instructions.
5662         \*****************************************************************************/
5663         DWORD ControlsA_ThreadControl             : BITFIELD_RANGE(  6,  7); // THREADCTRL
5664 
5665         /*****************************************************************************\
5666         This field determines the number of channels operating in parallel for this instruction.  The size cannot exceed the maximum number of channels allowed for the given data type.
5667         \*****************************************************************************/
5668         DWORD ControlsA_Execsize                  : BITFIELD_RANGE( 13, 15); // EXECSIZE
5669         DWORD __CODEGEN_UNIQUE(Overridden)        : BITFIELD_RANGE( 19, 23); // Override
5670         DWORD SharedFunctionIdSfid                : BITFIELD_RANGE( 24, 27); // SFID
5671 
5672         /*****************************************************************************\
5673         AccWrCtrl. This field allows per instruction accumulator write control.
5674         \*****************************************************************************/
5675         DWORD ControlsB_Accwrctrl                 : BITFIELD_BIT(       28); // ACCWRCTRL
5676 
5677         /*****************************************************************************\
5678         Compaction Control
5679         Indicates whether the instruction is compacted to the 64-bit compact instruction format. When this bit is set, the 64-bit compact instruction format is used. The EU decodes the compact format using lookup tables internal to the hardware, but documented for use by software tools. Only some instruction variations can be compacted, the variations supported by those lookup tables and the compact format. See EU Compact Instruction Format [DevBDW+] for more information.
5680         \*****************************************************************************/
5681         DWORD ControlsB_Cmptctrl                  : BITFIELD_BIT(       29); // CMPTCTRL
5682 
5683         /*****************************************************************************\
5684         This field allows the insertion of a breakpoint at the current instruction. When the bit is set, hardware automatically stores the current IP in CR register and jumps to the System IP (SIP) BEFORE executing the current instruction.
5685         \*****************************************************************************/
5686         DWORD ControlsB_Debugctrl                 : BITFIELD_BIT(       30); // DEBUGCTRL
5687         DWORD Exdesc1111                           : BITFIELD_BIT(       31); // LOD COMPENSATION BIT, MANUALLY ADDED
5688         DWORD FlagRegisterNumberSubregisterNumber : BITFIELD_RANGE( 32, 33); //
5689         DWORD Maskctrl                            : BITFIELD_BIT(       34); //
5690         DWORD DestinationRegisterFile             : BITFIELD_BIT(       35); // RegFile[0]
5691         DWORD Source1RegisterFile                 : BITFIELD_BIT(       36); // RegFile[0]
5692         DWORD DestinationType                     : BITFIELD_RANGE( 37, 40); //
5693         DWORD __CODEGEN_UNIQUE(Overridden)        : BITFIELD_BIT(       41); // Override
5694         DWORD Source1AddressingMode               : BITFIELD_BIT(       42); // ADDRMODE
5695         DWORD __CODEGEN_UNIQUE(Overridden)        : BITFIELD_RANGE( 43, 60); // Override
5696         DWORD __CODEGEN_UNIQUE(Reserved)          : BITFIELD_BIT(       61); // MBZ
5697         DWORD __CODEGEN_UNIQUE(Overridden)        : BITFIELD_BIT(       62); // Override
5698         DWORD DestinationAddressingMode           : BITFIELD_BIT(       63); // ADDRMODE
5699         DWORD Exdesc96                            : BITFIELD_RANGE( 64, 67); // ExtMsgDescpt[9:6]
5700         DWORD __CODEGEN_UNIQUE(Overridden)        : BITFIELD_RANGE( 68, 76); // Override
5701         DWORD Selreg32desc                        : BITFIELD_BIT(       77); //
5702         DWORD __CODEGEN_UNIQUE(Overridden)        : BITFIELD_BIT(       78); // Override
5703         DWORD Source0AddressingMode               : BITFIELD_BIT(       79); // ADDRMODE
5704         DWORD Exdesc3116                          : BITFIELD_RANGE( 80, 95); // ExtMsgDescpt[31:16]
5705         EU_INSTRUCTION_OPERAND_SEND_MSG Message;
5706     } Common;
5707     struct tagPropertyPredicationIsTrue {
5708         QWORD __CODEGEN_UNIQUE(Overridden) : BITFIELD_RANGE(  0,  7); // Override
5709 
5710         /*****************************************************************************\
5711         This field, together with PredInv, enables and controls the generation of the predication mask for the instruction.  It allows per-channel conditional execution of the instruction based on the content of the selected flag register.  Encoding depends on the access mode.
5712         In Align16 access mode, there are eight encodings (including no predication). All encodings are based on group-of-4 predicate bits, including channel sequential, replication swizzles and horizontal any|all operations.  The same configuration is repeated for each group-of-4 execution channels.
5713         \*****************************************************************************/
5714         QWORD ControlsA_Predctrl           : BITFIELD_RANGE(  8, 11); // PREDCTRL
5715 
5716         /*****************************************************************************\
5717         This field, together with PredCtrl, enables and controls the generation of the predication mask for the instruction.  When it is set, the predication uses the inverse of the predication bits generated according to setting of Predicate Control. In other words, effect of PredInv happens after PredCtrl.
5718         This field is ignored by hardware if Predicate Control is set to 0000  - there is no predication.
5719         PMask is the final predication mask produced by the effects of both fields.
5720         \*****************************************************************************/
5721         QWORD ControlsA_Predinv            : BITFIELD_BIT(       12); // PREDINV
5722         QWORD __CODEGEN_UNIQUE(Overridden) : BITFIELD_RANGE( 13,63); // Override
5723         QWORD __CODEGEN_UNIQUE(Overridden) : BITFIELD_RANGE( 64,127); // Override
5724     } PropertyPredicationIsTrue;
5725     struct tagPropertyPredicationIsFalse {
5726         QWORD __CODEGEN_UNIQUE(Overridden) : BITFIELD_RANGE(  0,  7); // Override
5727         QWORD ControlsA__                  : BITFIELD_RANGE(  8, 11); // PREDCTRL
5728         QWORD __CODEGEN_UNIQUE(Reserved)   : BITFIELD_BIT(       12); //
5729         QWORD __CODEGEN_UNIQUE(Overridden) : BITFIELD_RANGE( 13,63); // Override
5730         QWORD __CODEGEN_UNIQUE(Overridden) : BITFIELD_RANGE( 64,127); // Override
5731     } PropertyPredicationIsFalse;
5732     struct tagPropertySaturationIsTrue {
5733         DWORD __CODEGEN_UNIQUE(Overridden) : BITFIELD_RANGE(  0, 30); // Override
5734 
5735         /*****************************************************************************\
5736         Enables or disables destination saturation.
5737         When it is set, output values to the destination register are saturated. The saturation operation depends on the destination data type. Saturation is the operation that converts any value outside the saturation target range for the data type to the closest value in the target range.
5738         For a floating-point destination type, the saturation target range is [0.0, 1.0]. For a floating-point NaN, there is no  -closest value -; any NaN saturates to 0.0. Note that enabling Saturate overrides all of the NaN propagation behaviors described for various numeric instructions. Any floating-point number greater than 1.0, including +INF, saturates to 1.0. Any negative floating-point number, including -INF, saturates to 0.0. Any floating-point number in the range 0.0 to 1.0 is not changed by saturation.
5739         For an integer destination type, the maximum range for that type is the saturation target range. For example, the saturation range for B (Signed Byte Integer) is [-128, 127].
5740         When Saturate is clear, destination values are not saturated. For example, a wrapped result (modulo) is output to the destination for an overflowed integer value. See the Numeric Data Typessection for information about data types and their ranges.
5741         \*****************************************************************************/
5742         DWORD ControlsB_Saturate           : BITFIELD_BIT(       31); // SATURATE
5743         DWORD __CODEGEN_UNIQUE(Overridden)[3];
5744     } PropertySaturationIsTrue;
5745     struct tagPropertySaturationIsFalse {
5746         DWORD __CODEGEN_UNIQUE(Overridden) : BITFIELD_RANGE(  0, 30); // Override
5747         DWORD __CODEGEN_UNIQUE(Reserved)   : BITFIELD_BIT(       31); // MBZ
5748         DWORD __CODEGEN_UNIQUE(Overridden)[3];
5749     } PropertySaturationIsFalse;
5750     struct tagSource1AddressingModeIsIndirect {
5751         QWORD __CODEGEN_UNIQUE(Overridden)    : BITFIELD_RANGE(  0, 40); // Override
5752         QWORD Source1AddressImmediateSign9    : BITFIELD_BIT(       41); // S9[9]
5753         QWORD __CODEGEN_UNIQUE(Overridden)    : BITFIELD_BIT(       42); // Override
5754         QWORD Source1AddressImmediate84       : BITFIELD_RANGE( 43, 47); // S9[8:4]
5755         QWORD Source1AddressSubregisterNumber : BITFIELD_RANGE( 48, 51); //
5756         QWORD __CODEGEN_UNIQUE(Overridden)    : BITFIELD_RANGE( 52,63); // Override
5757         QWORD __CODEGEN_UNIQUE(Overridden)    : BITFIELD_RANGE( 64,127); // Override
5758     } Source1AddressingModeIsIndirect;
5759     struct tagSource1AddressingModeIsDirect {
5760         QWORD __CODEGEN_UNIQUE(Overridden) : BITFIELD_RANGE(  0, 40); // Override
5761         QWORD __CODEGEN_UNIQUE(Reserved)   : BITFIELD_BIT(       41); // MBZ
5762         QWORD __CODEGEN_UNIQUE(Overridden) : BITFIELD_BIT(       42); // Override
5763         QWORD __CODEGEN_UNIQUE(Reserved)   : BITFIELD_BIT(       43); // MBZ
5764         QWORD Source1RegisterNumber        : BITFIELD_RANGE( 44, 51); //
5765         QWORD __CODEGEN_UNIQUE(Overridden)    : BITFIELD_RANGE( 52,63); // Override
5766         QWORD __CODEGEN_UNIQUE(Overridden)    : BITFIELD_RANGE( 64,127); // Override
5767     } Source1AddressingModeIsDirect;
5768     struct tagDestinationAddressingModeIsDirect {
5769         QWORD __CODEGEN_UNIQUE(Overridden)  : BITFIELD_RANGE(  0, 51); // Override
5770         QWORD DestinationSubregisterNumber4 : BITFIELD_BIT(       52); //
5771         QWORD DestinationRegisterNumber     : BITFIELD_RANGE( 53, 60); //
5772         QWORD __CODEGEN_UNIQUE(Overridden)  : BITFIELD_BIT(       61); // Override
5773         QWORD __CODEGEN_UNIQUE(Reserved)    : BITFIELD_BIT(       62); // MBZ
5774         QWORD __CODEGEN_UNIQUE(Overridden)    : BITFIELD_RANGE( 63,63); // Override
5775         QWORD __CODEGEN_UNIQUE(Overridden)    : BITFIELD_RANGE( 64,127); // Override
5776     } DestinationAddressingModeIsDirect;
5777     struct tagDestinationAddressingModeIsIndirect {
5778         QWORD __CODEGEN_UNIQUE(Overridden)        : BITFIELD_RANGE(  0, 51); // Override
5779         QWORD DestinationAddressImmediate84       : BITFIELD_RANGE( 52, 56); // S9[8:4]
5780         QWORD DestinationAddressSubregisterNumber : BITFIELD_RANGE( 57, 60); //
5781         QWORD __CODEGEN_UNIQUE(Overridden)        : BITFIELD_BIT(       61); // Override
5782         QWORD DestinationAddressImmediateSign9    : BITFIELD_BIT(       62); // S9[9]
5783         QWORD __CODEGEN_UNIQUE(Overridden)    : BITFIELD_RANGE( 63,63); // Override
5784         QWORD __CODEGEN_UNIQUE(Overridden)    : BITFIELD_RANGE( 64,127); // Override
5785     } DestinationAddressingModeIsIndirect;
5786     struct tagSource0AddressingModeIsDirect {
5787         QWORD __CODEGEN_UNIQUE(Overridden)    : BITFIELD_RANGE( 0,63); // Override
5788         QWORD __CODEGEN_UNIQUE(Overridden)    : BITFIELD_RANGE( 64,67); // Override
5789         QWORD Source0SubregisterNumber     : BITFIELD_BIT(       68); //
5790         QWORD Source0RegisterNumber        : BITFIELD_RANGE( 69, 76); //
5791         QWORD __CODEGEN_UNIQUE(Overridden) : BITFIELD_BIT(       77); // Override
5792         QWORD __CODEGEN_UNIQUE(Reserved)   : BITFIELD_BIT(       78); // MBZ
5793         QWORD __CODEGEN_UNIQUE(Overridden) : BITFIELD_RANGE( 79,127); // Override
5794     } Source0AddressingModeIsDirect;
5795     struct tagSource0AddressingModeIsIndirect {
5796         QWORD __CODEGEN_UNIQUE(Overridden)    : BITFIELD_RANGE( 0,63); // Override
5797         QWORD __CODEGEN_UNIQUE(Overridden)    : BITFIELD_RANGE( 64,67); // Override
5798         QWORD Source0AddressImmediate84       : BITFIELD_RANGE( 68, 72); // S9[8:4]
5799         QWORD Source0AddressSubregisterNumber : BITFIELD_RANGE( 73, 76); //
5800         QWORD __CODEGEN_UNIQUE(Overridden)    : BITFIELD_BIT(       77); // Override
5801         QWORD Source0AddressImmediateSign9    : BITFIELD_BIT(       78); // S9[9]
5802         QWORD __CODEGEN_UNIQUE(Overridden)    : BITFIELD_RANGE( 79,127); // Override
5803     } Source0AddressingModeIsIndirect;
5804     DWORD RawData[4];
5805 
5806     // INITIALIZATION
5807     //
Init()5808     __CODEGEN_INLINE void Init() {
5809         RawData[0]                                 = 0x0;
5810         Common.Opcode                              = 0x0;
5811         RawData[1]                                 = 0x0;
5812         Common.ControlsA_Accessmode                = ACCESSMODE_ALIGN1;
5813         Common.ControlsA_Depctrl                   = 0x0;
5814         Common.ControlsA_Nibctrl                   = NIBCTRL_ODD;
5815         Common.ControlsA_Qtrctrl                   = 0x0;
5816         Common.ControlsA_ThreadControl             = 0x0;
5817         Common.ControlsA_Execsize                  = 0x0;
5818         Common.SharedFunctionIdSfid                = 0x0;
5819         Common.ControlsB_Accwrctrl                 = ACCWRCTRL_DON_T_WRITE_TO_ACC;
5820         Common.ControlsB_Cmptctrl                  = CMPTCTRL_NOCOMPACTION;
5821         Common.ControlsB_Debugctrl                 = DEBUGCTRL_NO_BREAKPOINT;
5822         RawData[2]                                 = 0x0;
5823         Common.Exdesc1111                          = 0x0;
5824         Common.FlagRegisterNumberSubregisterNumber = 0x0;
5825         Common.Maskctrl                            = 0x0;
5826         Common.DestinationRegisterFile             = 0x0;
5827         Common.Source1RegisterFile                 = 0x0;
5828         Common.DestinationType                     = 0x0;
5829         Common.Source1AddressingMode               = 0x0;
5830         Common.DestinationAddressingMode           = 0x0;
5831         RawData[3]                                 = 0x0;
5832         Common.Exdesc96                            = 0x0;
5833         Common.Selreg32desc                        = 0x0;
5834         Common.Source0AddressingMode               = 0x0;
5835         Common.Exdesc3116                          = 0x0;
5836         Common.Message.Init();
5837     }
5838 
sInit()5839     static tagEU_INSTRUCTION_SENDS sInit() {
5840         tagEU_INSTRUCTION_SENDS state;
5841         state.Init();
5842         return state;
5843     }
5844 
5845     // ACCESSORS
5846     //
GetDWORD(UINT const index)5847     __CODEGEN_INLINE __CODEGEN_PACKED DWORD& GetDWORD(UINT const index) {
5848         return RawData[index];
5849     }
5850 
5851     static size_t CalculateSize(UINT const entryCount = 0) {
5852         return 0;
5853     }
5854 
GetSize()5855     __CODEGEN_INLINE size_t GetSize() {
5856         return 0;
5857     }
5858 
GetOpcode()5859     __CODEGEN_INLINE EU_OPCODE GetOpcode() {
5860         __CODEGEN_GET_MACRO();
5861         return (EU_OPCODE)Common.Opcode;
5862     }
5863 
SetOpcode(EU_OPCODE OpcodeValue)5864     __CODEGEN_INLINE void SetOpcode(EU_OPCODE OpcodeValue) {
5865         __CODEGEN_SET_MACRO(OpcodeValue);
5866         Common.Opcode = OpcodeValue;
5867     }
5868 
GetControlsA_Accessmode()5869     __CODEGEN_INLINE ACCESSMODE GetControlsA_Accessmode() {
5870         __CODEGEN_GET_MACRO();
5871         return (ACCESSMODE)Common.ControlsA_Accessmode;
5872     }
5873 
SetControlsA_Accessmode(ACCESSMODE ControlsA_AccessmodeValue)5874     __CODEGEN_INLINE void SetControlsA_Accessmode(ACCESSMODE ControlsA_AccessmodeValue) {
5875         __CODEGEN_SET_MACRO(ControlsA_AccessmodeValue);
5876         Common.ControlsA_Accessmode = ControlsA_AccessmodeValue;
5877     }
5878 
GetControlsA_Depctrl()5879     __CODEGEN_INLINE DEPCTRL GetControlsA_Depctrl() {
5880         __CODEGEN_GET_MACRO();
5881         return (DEPCTRL)Common.ControlsA_Depctrl;
5882     }
5883 
SetControlsA_Depctrl(DEPCTRL ControlsA_DepctrlValue)5884     __CODEGEN_INLINE void SetControlsA_Depctrl(DEPCTRL ControlsA_DepctrlValue) {
5885         __CODEGEN_SET_MACRO(ControlsA_DepctrlValue);
5886         Common.ControlsA_Depctrl = ControlsA_DepctrlValue;
5887     }
5888 
GetControlsA_Nibctrl()5889     __CODEGEN_INLINE NIBCTRL GetControlsA_Nibctrl() {
5890         __CODEGEN_GET_MACRO();
5891         return (NIBCTRL)Common.ControlsA_Nibctrl;
5892     }
5893 
SetControlsA_Nibctrl(NIBCTRL ControlsA_NibctrlValue)5894     __CODEGEN_INLINE void SetControlsA_Nibctrl(NIBCTRL ControlsA_NibctrlValue) {
5895         __CODEGEN_SET_MACRO(ControlsA_NibctrlValue);
5896         Common.ControlsA_Nibctrl = ControlsA_NibctrlValue;
5897     }
5898 
GetControlsA_Qtrctrl()5899     __CODEGEN_INLINE QTRCTRL GetControlsA_Qtrctrl() {
5900         __CODEGEN_GET_MACRO();
5901         return (QTRCTRL)Common.ControlsA_Qtrctrl;
5902     }
5903 
SetControlsA_Qtrctrl(QTRCTRL ControlsA_QtrctrlValue)5904     __CODEGEN_INLINE void SetControlsA_Qtrctrl(QTRCTRL ControlsA_QtrctrlValue) {
5905         __CODEGEN_SET_MACRO(ControlsA_QtrctrlValue);
5906         Common.ControlsA_Qtrctrl = ControlsA_QtrctrlValue;
5907     }
5908 
GetControlsA_ThreadControl()5909     __CODEGEN_INLINE THREADCTRL GetControlsA_ThreadControl() {
5910         __CODEGEN_GET_MACRO();
5911         return (THREADCTRL)Common.ControlsA_ThreadControl;
5912     }
5913 
SetControlsA_ThreadControl(THREADCTRL ControlsA_ThreadControlValue)5914     __CODEGEN_INLINE void SetControlsA_ThreadControl(THREADCTRL ControlsA_ThreadControlValue) {
5915         __CODEGEN_SET_MACRO(ControlsA_ThreadControlValue);
5916         Common.ControlsA_ThreadControl = ControlsA_ThreadControlValue;
5917     }
5918 
GetControlsA_Execsize()5919     __CODEGEN_INLINE EXECSIZE GetControlsA_Execsize() {
5920         __CODEGEN_GET_MACRO();
5921         return (EXECSIZE)Common.ControlsA_Execsize;
5922     }
5923 
SetControlsA_Execsize(EXECSIZE ControlsA_ExecsizeValue)5924     __CODEGEN_INLINE void SetControlsA_Execsize(EXECSIZE ControlsA_ExecsizeValue) {
5925         __CODEGEN_SET_MACRO(ControlsA_ExecsizeValue);
5926         Common.ControlsA_Execsize = ControlsA_ExecsizeValue;
5927     }
5928 
GetSharedFunctionIdSfid()5929     __CODEGEN_INLINE SFID GetSharedFunctionIdSfid() {
5930         __CODEGEN_GET_MACRO();
5931         return (SFID)Common.SharedFunctionIdSfid;
5932     }
5933 
SetSharedFunctionIdSfid(SFID SharedFunctionIdSfidValue)5934     __CODEGEN_INLINE void SetSharedFunctionIdSfid(SFID SharedFunctionIdSfidValue) {
5935         __CODEGEN_SET_MACRO(SharedFunctionIdSfidValue);
5936         Common.SharedFunctionIdSfid = SharedFunctionIdSfidValue;
5937     }
5938 
GetControlsB_Accwrctrl()5939     __CODEGEN_INLINE ACCWRCTRL GetControlsB_Accwrctrl() {
5940         __CODEGEN_GET_MACRO();
5941         return (ACCWRCTRL)Common.ControlsB_Accwrctrl;
5942     }
5943 
SetControlsB_Accwrctrl(ACCWRCTRL ControlsB_AccwrctrlValue)5944     __CODEGEN_INLINE void SetControlsB_Accwrctrl(ACCWRCTRL ControlsB_AccwrctrlValue) {
5945         __CODEGEN_SET_MACRO(ControlsB_AccwrctrlValue);
5946         Common.ControlsB_Accwrctrl = ControlsB_AccwrctrlValue;
5947     }
5948 
GetControlsB_Cmptctrl()5949     __CODEGEN_INLINE CMPTCTRL GetControlsB_Cmptctrl() {
5950         __CODEGEN_GET_MACRO();
5951         return (CMPTCTRL)Common.ControlsB_Cmptctrl;
5952     }
5953 
SetControlsB_Cmptctrl(CMPTCTRL ControlsB_CmptctrlValue)5954     __CODEGEN_INLINE void SetControlsB_Cmptctrl(CMPTCTRL ControlsB_CmptctrlValue) {
5955         __CODEGEN_SET_MACRO(ControlsB_CmptctrlValue);
5956         Common.ControlsB_Cmptctrl = ControlsB_CmptctrlValue;
5957     }
5958 
GetControlsB_Debugctrl()5959     __CODEGEN_INLINE DEBUGCTRL GetControlsB_Debugctrl() {
5960         __CODEGEN_GET_MACRO();
5961         return (DEBUGCTRL)Common.ControlsB_Debugctrl;
5962     }
5963 
SetControlsB_Debugctrl(DEBUGCTRL ControlsB_DebugctrlValue)5964     __CODEGEN_INLINE void SetControlsB_Debugctrl(DEBUGCTRL ControlsB_DebugctrlValue) {
5965         __CODEGEN_SET_MACRO(ControlsB_DebugctrlValue);
5966         Common.ControlsB_Debugctrl = ControlsB_DebugctrlValue;
5967     }
5968 
GetFlagRegisterNumberSubregisterNumber()5969     __CODEGEN_INLINE QWORD GetFlagRegisterNumberSubregisterNumber() {
5970         __CODEGEN_GET_MACRO();
5971         return (QWORD)Common.FlagRegisterNumberSubregisterNumber;
5972     }
5973 
SetFlagRegisterNumberSubregisterNumber(QWORD FlagRegisterNumberSubregisterNumberValue)5974     __CODEGEN_INLINE void SetFlagRegisterNumberSubregisterNumber(QWORD FlagRegisterNumberSubregisterNumberValue) {
5975         __CODEGEN_SET_MACRO(FlagRegisterNumberSubregisterNumberValue);
5976         Common.FlagRegisterNumberSubregisterNumber = FlagRegisterNumberSubregisterNumberValue;
5977     }
5978 
GetMaskctrl()5979     __CODEGEN_INLINE QWORD GetMaskctrl() {
5980         __CODEGEN_GET_MACRO();
5981         return (QWORD)Common.Maskctrl;
5982     }
5983 
SetMaskctrl(QWORD MaskctrlValue)5984     __CODEGEN_INLINE void SetMaskctrl(QWORD MaskctrlValue) {
5985         __CODEGEN_SET_MACRO(MaskctrlValue);
5986         Common.Maskctrl = MaskctrlValue;
5987     }
5988 
GetDestinationRegisterFile()5989     __CODEGEN_INLINE QWORD GetDestinationRegisterFile() {
5990         __CODEGEN_GET_MACRO();
5991         return (QWORD)Common.DestinationRegisterFile;
5992     }
5993 
SetDestinationRegisterFile(QWORD DestinationRegisterFileValue)5994     __CODEGEN_INLINE void SetDestinationRegisterFile(QWORD DestinationRegisterFileValue) {
5995         __CODEGEN_SET_MACRO(DestinationRegisterFileValue);
5996         Common.DestinationRegisterFile = DestinationRegisterFileValue;
5997     }
5998 
GetSrc1Regfile()5999     __CODEGEN_INLINE QWORD GetSrc1Regfile() {
6000         __CODEGEN_GET_MACRO();
6001         return (QWORD)Common.Source1RegisterFile;
6002     }
6003 
SetSrc1Regfile(QWORD Source1RegisterFileValue)6004     __CODEGEN_INLINE void SetSrc1Regfile(QWORD Source1RegisterFileValue) {
6005         __CODEGEN_SET_MACRO(Source1RegisterFileValue);
6006         Common.Source1RegisterFile = Source1RegisterFileValue;
6007     }
6008 
GetDestinationDataType()6009     __CODEGEN_INLINE QWORD GetDestinationDataType() {
6010         __CODEGEN_GET_MACRO();
6011         return (QWORD)Common.DestinationType;
6012     }
6013 
SetDestinationDataType(QWORD DestinationTypeValue)6014     __CODEGEN_INLINE void SetDestinationDataType(QWORD DestinationTypeValue) {
6015         __CODEGEN_SET_MACRO(DestinationTypeValue);
6016         Common.DestinationType = DestinationTypeValue;
6017     }
6018 
GetSource1_SourceAddressingMode()6019     __CODEGEN_INLINE ADDRMODE GetSource1_SourceAddressingMode() {
6020         __CODEGEN_GET_MACRO();
6021         return (ADDRMODE)Common.Source1AddressingMode;
6022     }
6023 
SetSource1_SourceAddressingMode(ADDRMODE Source1AddressingModeValue)6024     __CODEGEN_INLINE void SetSource1_SourceAddressingMode(ADDRMODE Source1AddressingModeValue) {
6025         __CODEGEN_SET_MACRO(Source1AddressingModeValue);
6026         Common.Source1AddressingMode = Source1AddressingModeValue;
6027     }
6028 
GetDestinationAddressingMode()6029     __CODEGEN_INLINE ADDRMODE GetDestinationAddressingMode() {
6030         __CODEGEN_GET_MACRO();
6031         return (ADDRMODE)Common.DestinationAddressingMode;
6032     }
6033 
SetDestinationAddressingMode(ADDRMODE DestinationAddressingModeValue)6034     __CODEGEN_INLINE void SetDestinationAddressingMode(ADDRMODE DestinationAddressingModeValue) {
6035         __CODEGEN_SET_MACRO(DestinationAddressingModeValue);
6036         Common.DestinationAddressingMode = DestinationAddressingModeValue;
6037     }
6038 
GetExdesc96()6039     __CODEGEN_INLINE QWORD GetExdesc96() {
6040         __CODEGEN_GET_MACRO();
6041         return (QWORD)Common.Exdesc96 << 6;
6042     }
6043 
SetExdesc96(QWORD Exdesc96Value)6044     __CODEGEN_INLINE void SetExdesc96(QWORD Exdesc96Value) {
6045         __CODEGEN_SET_MACRO(Exdesc96Value);
6046         Common.Exdesc96 = Exdesc96Value >> 6;
6047     }
6048 
GetSelreg32desc()6049     __CODEGEN_INLINE QWORD GetSelreg32desc() {
6050         __CODEGEN_GET_MACRO();
6051         return (QWORD)Common.Selreg32desc;
6052     }
6053 
SetSelreg32desc(QWORD Selreg32descValue)6054     __CODEGEN_INLINE void SetSelreg32desc(QWORD Selreg32descValue) {
6055         __CODEGEN_SET_MACRO(Selreg32descValue);
6056         Common.Selreg32desc = Selreg32descValue;
6057     }
6058 
GetSource0_SourceAddressingMode()6059     __CODEGEN_INLINE ADDRMODE GetSource0_SourceAddressingMode() {
6060         __CODEGEN_GET_MACRO();
6061         return (ADDRMODE)Common.Source0AddressingMode;
6062     }
6063 
SetSource0_SourceAddressingMode(ADDRMODE Source0AddressingModeValue)6064     __CODEGEN_INLINE void SetSource0_SourceAddressingMode(ADDRMODE Source0AddressingModeValue) {
6065         __CODEGEN_SET_MACRO(Source0AddressingModeValue);
6066         Common.Source0AddressingMode = Source0AddressingModeValue;
6067     }
6068 
GetExdesc3116()6069     __CODEGEN_INLINE QWORD GetExdesc3116() {
6070         __CODEGEN_GET_MACRO();
6071         return (QWORD)Common.Exdesc3116 << 16;
6072     }
6073 
SetExdesc3116(QWORD Exdesc3116Value)6074     __CODEGEN_INLINE void SetExdesc3116(QWORD Exdesc3116Value) {
6075         __CODEGEN_SET_MACRO(Exdesc3116Value);
6076         Common.Exdesc3116 = Exdesc3116Value >> 16;
6077     }
6078 
SetExdesc1111(QWORD Exdesc1111Value)6079     __CODEGEN_INLINE void SetExdesc1111(QWORD Exdesc1111Value) {
6080         __CODEGEN_SET_MACRO(Exdesc1111Value);
6081         Common.Exdesc1111 = Exdesc1111Value >> 11;
6082     }
6083 
GetMessage()6084     __CODEGEN_INLINE EU_INSTRUCTION_OPERAND_SEND_MSG& GetMessage() {
6085         __CODEGEN_GET_MACRO();
6086         return Common.Message;
6087     }
6088 
GetControlsA_Predctrl()6089     __CODEGEN_INLINE PREDCTRL GetControlsA_Predctrl() {
6090         __CODEGEN_GET_MACRO();
6091         return (PREDCTRL)PropertyPredicationIsTrue.ControlsA_Predctrl;
6092     }
6093 
SetControlsA_Predctrl(PREDCTRL ControlsA_PredctrlValue)6094     __CODEGEN_INLINE void SetControlsA_Predctrl(PREDCTRL ControlsA_PredctrlValue) {
6095         __CODEGEN_SET_MACRO(ControlsA_PredctrlValue);
6096         PropertyPredicationIsTrue.ControlsA_Predctrl = ControlsA_PredctrlValue;
6097     }
6098 
GetControlsA_Predinv()6099     __CODEGEN_INLINE PREDINV GetControlsA_Predinv() {
6100         __CODEGEN_GET_MACRO();
6101         return (PREDINV)PropertyPredicationIsTrue.ControlsA_Predinv;
6102     }
6103 
SetControlsA_Predinv(PREDINV ControlsA_PredinvValue)6104     __CODEGEN_INLINE void SetControlsA_Predinv(PREDINV ControlsA_PredinvValue) {
6105         __CODEGEN_SET_MACRO(ControlsA_PredinvValue);
6106         PropertyPredicationIsTrue.ControlsA_Predinv = ControlsA_PredinvValue;
6107     }
6108 
GetControlsA__()6109     __CODEGEN_INLINE PREDCTRL GetControlsA__() {
6110         __CODEGEN_GET_MACRO();
6111         return (PREDCTRL)PropertyPredicationIsFalse.ControlsA__;
6112     }
6113 
SetControlsA__(PREDCTRL ControlsA__Value)6114     __CODEGEN_INLINE void SetControlsA__(PREDCTRL ControlsA__Value) {
6115         __CODEGEN_SET_MACRO(ControlsA__Value);
6116         PropertyPredicationIsFalse.ControlsA__ = ControlsA__Value;
6117     }
6118 
GetControlsB_Saturate()6119     __CODEGEN_INLINE SATURATE GetControlsB_Saturate() {
6120         __CODEGEN_GET_MACRO();
6121         return (SATURATE)PropertySaturationIsTrue.ControlsB_Saturate;
6122     }
6123 
SetControlsB_Saturate(SATURATE ControlsB_SaturateValue)6124     __CODEGEN_INLINE void SetControlsB_Saturate(SATURATE ControlsB_SaturateValue) {
6125         __CODEGEN_SET_MACRO(ControlsB_SaturateValue);
6126         PropertySaturationIsTrue.ControlsB_Saturate = ControlsB_SaturateValue;
6127     }
6128 
6129     //note:  unique for sends encoding
GetSource1_SourceAddressImmediateSign9()6130     __CODEGEN_INLINE QWORD GetSource1_SourceAddressImmediateSign9() {
6131         __CODEGEN_GET_MACRO();
6132         return (QWORD)Source1AddressingModeIsIndirect.Source1AddressImmediateSign9;
6133     }
6134 
6135     //note: unique for sends encoding
SetSource1_SourceAddressImmediateSign9(QWORD Source1AddressImmediateSign9Value)6136     __CODEGEN_INLINE void SetSource1_SourceAddressImmediateSign9(QWORD Source1AddressImmediateSign9Value) {
6137         __CODEGEN_SET_MACRO(Source1AddressImmediateSign9Value);
6138         Source1AddressingModeIsIndirect.Source1AddressImmediateSign9 = Source1AddressImmediateSign9Value;
6139     }
6140 
GetSource1_SourceAddressImmediate84()6141     __CODEGEN_INLINE QWORD GetSource1_SourceAddressImmediate84() {
6142         __CODEGEN_GET_MACRO();
6143         return (QWORD)Source1AddressingModeIsIndirect.Source1AddressImmediate84 << 4;
6144     }
6145 
SetSource1_SourceAddressImmediate84(QWORD Source1AddressImmediate84Value)6146     __CODEGEN_INLINE void SetSource1_SourceAddressImmediate84(QWORD Source1AddressImmediate84Value) {
6147         __CODEGEN_SET_MACRO(Source1AddressImmediate84Value);
6148         Source1AddressingModeIsIndirect.Source1AddressImmediate84 = Source1AddressImmediate84Value >> 4;
6149     }
6150 
GetSource1_SourceAddressSubregisterNumber_0()6151     __CODEGEN_INLINE QWORD GetSource1_SourceAddressSubregisterNumber_0() {
6152         __CODEGEN_GET_MACRO();
6153         return (QWORD)Source1AddressingModeIsIndirect.Source1AddressSubregisterNumber;
6154     }
6155 
SetSource1_SourceAddressSubregisterNumber_0(QWORD Source1AddressSubregisterNumberValue)6156     __CODEGEN_INLINE void SetSource1_SourceAddressSubregisterNumber_0(QWORD Source1AddressSubregisterNumberValue) {
6157         __CODEGEN_SET_MACRO(Source1AddressSubregisterNumberValue);
6158         Source1AddressingModeIsIndirect.Source1AddressSubregisterNumber = Source1AddressSubregisterNumberValue;
6159     }
6160 
GetSource1_SourceRegisterNumber()6161     __CODEGEN_INLINE QWORD GetSource1_SourceRegisterNumber() {
6162         __CODEGEN_GET_MACRO();
6163         return (QWORD)Source1AddressingModeIsDirect.Source1RegisterNumber;
6164     }
6165 
SetSource1_SourceRegisterNumber(QWORD Source1RegisterNumberValue)6166     __CODEGEN_INLINE void SetSource1_SourceRegisterNumber(QWORD Source1RegisterNumberValue) {
6167         __CODEGEN_SET_MACRO(Source1RegisterNumberValue);
6168         Source1AddressingModeIsDirect.Source1RegisterNumber = Source1RegisterNumberValue;
6169     }
6170 
GetDestinationSubregisterNumber4()6171     __CODEGEN_INLINE QWORD GetDestinationSubregisterNumber4() {
6172         __CODEGEN_GET_MACRO();
6173         return (QWORD)DestinationAddressingModeIsDirect.DestinationSubregisterNumber4;
6174     }
6175 
SetDestinationSubregisterNumber4(QWORD DestinationSubregisterNumber4Value)6176     __CODEGEN_INLINE void SetDestinationSubregisterNumber4(QWORD DestinationSubregisterNumber4Value) {
6177         __CODEGEN_SET_MACRO(DestinationSubregisterNumber4Value);
6178         DestinationAddressingModeIsDirect.DestinationSubregisterNumber4 = DestinationSubregisterNumber4Value;
6179     }
6180 
GetDestinationRegisterNumber()6181     __CODEGEN_INLINE QWORD GetDestinationRegisterNumber() {
6182         __CODEGEN_GET_MACRO();
6183         return (QWORD)DestinationAddressingModeIsDirect.DestinationRegisterNumber;
6184     }
6185 
SetDestinationRegisterNumber(QWORD DestinationRegisterNumberValue)6186     __CODEGEN_INLINE void SetDestinationRegisterNumber(QWORD DestinationRegisterNumberValue) {
6187         __CODEGEN_SET_MACRO(DestinationRegisterNumberValue);
6188         DestinationAddressingModeIsDirect.DestinationRegisterNumber = DestinationRegisterNumberValue;
6189     }
6190 
GetDestinationAddressImmediate84()6191     __CODEGEN_INLINE QWORD GetDestinationAddressImmediate84() {
6192         __CODEGEN_GET_MACRO();
6193         return (QWORD)DestinationAddressingModeIsIndirect.DestinationAddressImmediate84 << 4;
6194     }
6195 
SetDestinationAddressImmediate84(QWORD DestinationAddressImmediate84Value)6196     __CODEGEN_INLINE void SetDestinationAddressImmediate84(QWORD DestinationAddressImmediate84Value) {
6197         __CODEGEN_SET_MACRO(DestinationAddressImmediate84Value);
6198         DestinationAddressingModeIsIndirect.DestinationAddressImmediate84 = DestinationAddressImmediate84Value >> 4;
6199     }
6200 
GetDestinationAddressSubregisterNumber()6201     __CODEGEN_INLINE QWORD GetDestinationAddressSubregisterNumber() {
6202         __CODEGEN_GET_MACRO();
6203         return (QWORD)DestinationAddressingModeIsIndirect.DestinationAddressSubregisterNumber;
6204     }
6205 
SetDestinationAddressSubregisterNumber(QWORD DestinationAddressSubregisterNumberValue)6206     __CODEGEN_INLINE void SetDestinationAddressSubregisterNumber(QWORD DestinationAddressSubregisterNumberValue) {
6207         __CODEGEN_SET_MACRO(DestinationAddressSubregisterNumberValue);
6208         DestinationAddressingModeIsIndirect.DestinationAddressSubregisterNumber = DestinationAddressSubregisterNumberValue;
6209     }
6210 
GetDestinationAddressImmediateSign9()6211     __CODEGEN_INLINE QWORD GetDestinationAddressImmediateSign9() {
6212         __CODEGEN_GET_MACRO();
6213         return (QWORD)DestinationAddressingModeIsIndirect.DestinationAddressImmediateSign9;
6214     }
6215 
SetDestinationAddressImmediateSign9(QWORD DestinationAddressImmediateSign9Value)6216     __CODEGEN_INLINE void SetDestinationAddressImmediateSign9(QWORD DestinationAddressImmediateSign9Value) {
6217         __CODEGEN_SET_MACRO(DestinationAddressImmediateSign9Value);
6218         DestinationAddressingModeIsIndirect.DestinationAddressImmediateSign9 = DestinationAddressImmediateSign9Value;
6219     }
6220 
GetSource0_SourceSubRegisterNumber()6221     __CODEGEN_INLINE QWORD GetSource0_SourceSubRegisterNumber() {
6222         __CODEGEN_GET_MACRO();
6223         return (QWORD)Source0AddressingModeIsDirect.Source0SubregisterNumber;
6224     }
6225 
SetSource0_SourceSubRegisterNumber(QWORD Source0SubregisterNumberValue)6226     __CODEGEN_INLINE void SetSource0_SourceSubRegisterNumber(QWORD Source0SubregisterNumberValue) {
6227         __CODEGEN_SET_MACRO(Source0SubregisterNumberValue);
6228         Source0AddressingModeIsDirect.Source0SubregisterNumber = Source0SubregisterNumberValue;
6229     }
6230 
GetSource0_SourceRegisterNumber()6231     __CODEGEN_INLINE QWORD GetSource0_SourceRegisterNumber() {
6232         __CODEGEN_GET_MACRO();
6233         return (QWORD)Source0AddressingModeIsDirect.Source0RegisterNumber;
6234     }
6235 
SetSource0_SourceRegisterNumber(QWORD Source0RegisterNumberValue)6236     __CODEGEN_INLINE void SetSource0_SourceRegisterNumber(QWORD Source0RegisterNumberValue) {
6237         __CODEGEN_SET_MACRO(Source0RegisterNumberValue);
6238         Source0AddressingModeIsDirect.Source0RegisterNumber = Source0RegisterNumberValue;
6239     }
6240 
GetSource0_SourceAddressImmediate84()6241     __CODEGEN_INLINE QWORD GetSource0_SourceAddressImmediate84() {
6242         __CODEGEN_GET_MACRO();
6243         return (QWORD)Source0AddressingModeIsIndirect.Source0AddressImmediate84 << 4;
6244     }
6245 
SetSource0_SourceAddressImmediate84(QWORD Source0AddressImmediate84Value)6246     __CODEGEN_INLINE void SetSource0_SourceAddressImmediate84(QWORD Source0AddressImmediate84Value) {
6247         __CODEGEN_SET_MACRO(Source0AddressImmediate84Value);
6248         Source0AddressingModeIsIndirect.Source0AddressImmediate84 = Source0AddressImmediate84Value >> 4;
6249     }
6250 
GetSource0_SourceAddressSubregisterNumber()6251     __CODEGEN_INLINE QWORD GetSource0_SourceAddressSubregisterNumber() {
6252         __CODEGEN_GET_MACRO();
6253         return (QWORD)Source0AddressingModeIsIndirect.Source0AddressSubregisterNumber;
6254     }
6255 
SetSource0_SourceAddressSubregisterNumber(QWORD Source0AddressSubregisterNumberValue)6256     __CODEGEN_INLINE void SetSource0_SourceAddressSubregisterNumber(QWORD Source0AddressSubregisterNumberValue) {
6257         __CODEGEN_SET_MACRO(Source0AddressSubregisterNumberValue);
6258         Source0AddressingModeIsIndirect.Source0AddressSubregisterNumber = Source0AddressSubregisterNumberValue;
6259     }
6260 
GetSource0_SourceAddressImmediateSign9()6261     __CODEGEN_INLINE QWORD GetSource0_SourceAddressImmediateSign9() {
6262         __CODEGEN_GET_MACRO();
6263         return (QWORD)Source0AddressingModeIsIndirect.Source0AddressImmediateSign9;
6264     }
6265 
SetSource0_SourceAddressImmediateSign9(QWORD Source0AddressImmediateSign9Value)6266     __CODEGEN_INLINE void SetSource0_SourceAddressImmediateSign9(QWORD Source0AddressImmediateSign9Value) {
6267         __CODEGEN_SET_MACRO(Source0AddressImmediateSign9Value);
6268         Source0AddressingModeIsIndirect.Source0AddressImmediateSign9 = Source0AddressImmediateSign9Value;
6269     }
6270 
6271 } __CODEGEN_ATTRIBUTES_STRUCTURE EU_INSTRUCTION_SENDS;
6272 
6273 C_ASSERT(16 == sizeof(EU_INSTRUCTION_SENDS));
6274 
6275 __CODEGEN_NAMESPACE_CLOSE
6276 __CODEGEN_FILE_DIRECTIVES_CLOSE
6277 
6278 #endif // __IGFXHWEUISA_H__
6279