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 <curr_dest> 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