1 /*========================== begin_copyright_notice ============================ 2 3 Copyright (C) 2017-2021 Intel Corporation 4 5 SPDX-License-Identifier: MIT 6 7 ============================= end_copyright_notice ===========================*/ 8 #ifndef IGA_MODELS_GEN9_HPP 9 #define IGA_MODELS_GEN9_HPP 10 11 // ******************** DO NOT MODIFY DIRECTLY ******************** 12 // Auto-generated by IGA project tools 13 14 #include "../Models.hpp" 15 16 namespace iga { 17 static const iga::OpSpec MODEL_GEN9_OPSPECS[unsigned(Op::TOTAL_OPS) + 1] { 18 {Op::INVALID, Platform::GEN9, 0x0, nullptr, nullptr, OpSpec::Format::INVALID, {}, OpSpec::Attr::NONE, }, 19 {Op::ADD /* Op::1 */, Platform::GEN9, 0x40, 20 "add", 21 "Addition", 22 OpSpec::Format::BASIC_BINARY_REG_REGIMM, 23 { 24 // UB,B,UW,W,UD,D <- UB,B,UW,W,UD,D 25 {TYPE(Type::UB)|TYPE(Type::B)|TYPE(Type::UW)|TYPE(Type::W)|TYPE(Type::UD)|TYPE(Type::D),TYPE(Type::UB)|TYPE(Type::B)|TYPE(Type::UW)|TYPE(Type::W)|TYPE(Type::UD)|TYPE(Type::D)}, 26 // F <- UB,B,UW,W,UD,D 27 {TYPE(Type::F),TYPE(Type::UB)|TYPE(Type::B)|TYPE(Type::UW)|TYPE(Type::W)|TYPE(Type::UD)|TYPE(Type::D)}, 28 // F <- F 29 {TYPE(Type::F),TYPE(Type::F)}, 30 // DF <- DF 31 {TYPE(Type::DF),TYPE(Type::DF)}, 32 // HF <- HF 33 {TYPE(Type::HF),TYPE(Type::HF)}, 34 // HF <- UB,B,UW,W,UD,D 35 {TYPE(Type::HF),TYPE(Type::UB)|TYPE(Type::B)|TYPE(Type::UW)|TYPE(Type::W)|TYPE(Type::UD)|TYPE(Type::D)}, 36 // UW,W,UD,D <- UW,W,UD,D 37 {TYPE(Type::UW)|TYPE(Type::W)|TYPE(Type::UD)|TYPE(Type::D),TYPE(Type::UW)|TYPE(Type::W)|TYPE(Type::UD)|TYPE(Type::D)}, 38 // UQ,Q <- UW,W,UD,D 39 {TYPE(Type::UQ)|TYPE(Type::Q),TYPE(Type::UW)|TYPE(Type::W)|TYPE(Type::UD)|TYPE(Type::D)}, 40 // UW,W,UD,D <- UQ,Q 41 {TYPE(Type::UW)|TYPE(Type::W)|TYPE(Type::UD)|TYPE(Type::D),TYPE(Type::UQ)|TYPE(Type::Q)}, 42 // UQ,Q <- UQ,Q 43 {TYPE(Type::UQ)|TYPE(Type::Q),TYPE(Type::UQ)|TYPE(Type::Q)}, 44 // HF,F <- HF,F 45 {TYPE(Type::HF)|TYPE(Type::F),TYPE(Type::HF)|TYPE(Type::F)} 46 }, 47 OpSpec::Attr::SUPPORTS_PREDICATION|OpSpec::Attr::SUPPORTS_FLAGMODIFIER|OpSpec::Attr::SUPPORTS_SATURATION|OpSpec::Attr::SUPPORTS_SRCMODS 48 }, 49 {Op::INVALID, Platform::GEN9, 0x0, nullptr, nullptr, OpSpec::Format::INVALID, {}, OpSpec::Attr::NONE, }, 50 {Op::ADDC /* Op::3 */, Platform::GEN9, 0x4E, 51 "addc", 52 "Addition with Carry", 53 OpSpec::Format::BASIC_BINARY_REG_REGIMM, 54 { 55 // UD <- UD 56 {TYPE(Type::UD),TYPE(Type::UD)} 57 }, 58 OpSpec::Attr::SUPPORTS_PREDICATION|OpSpec::Attr::SUPPORTS_FLAGMODIFIER 59 }, 60 {Op::AND /* Op::4 */, Platform::GEN9, 0x05, 61 "and", 62 "Logic And", 63 OpSpec::Format::BASIC_BINARY_REG_REGIMM, 64 { 65 // UB,B,UW,W,UD,D <- UB,B,UW,W,UD,D 66 {TYPE(Type::UB)|TYPE(Type::B)|TYPE(Type::UW)|TYPE(Type::W)|TYPE(Type::UD)|TYPE(Type::D),TYPE(Type::UB)|TYPE(Type::B)|TYPE(Type::UW)|TYPE(Type::W)|TYPE(Type::UD)|TYPE(Type::D)}, 67 // UW,W,UD,D <- UW,W,UD,D 68 {TYPE(Type::UW)|TYPE(Type::W)|TYPE(Type::UD)|TYPE(Type::D),TYPE(Type::UW)|TYPE(Type::W)|TYPE(Type::UD)|TYPE(Type::D)}, 69 // UQ,Q <- UW,W,UD,D 70 {TYPE(Type::UQ)|TYPE(Type::Q),TYPE(Type::UW)|TYPE(Type::W)|TYPE(Type::UD)|TYPE(Type::D)}, 71 // UW,W,UD,D <- UQ,Q 72 {TYPE(Type::UW)|TYPE(Type::W)|TYPE(Type::UD)|TYPE(Type::D),TYPE(Type::UQ)|TYPE(Type::Q)}, 73 // UQ,Q <- UQ,Q 74 {TYPE(Type::UQ)|TYPE(Type::Q),TYPE(Type::UQ)|TYPE(Type::Q)} 75 }, 76 OpSpec::Attr::IS_BITWISE|OpSpec::Attr::SUPPORTS_PREDICATION|OpSpec::Attr::SUPPORTS_FLAGMODIFIER|OpSpec::Attr::SUPPORTS_SRCMODS 77 }, 78 {Op::ASR /* Op::5 */, Platform::GEN9, 0x0C, 79 "asr", 80 "Arithmetic Shift Right", 81 OpSpec::Format::BASIC_BINARY_REG_REGIMM, 82 { 83 // UB,B,UW,W,UD,D <- UB,B,UW,W,UD,D 84 {TYPE(Type::UB)|TYPE(Type::B)|TYPE(Type::UW)|TYPE(Type::W)|TYPE(Type::UD)|TYPE(Type::D),TYPE(Type::UB)|TYPE(Type::B)|TYPE(Type::UW)|TYPE(Type::W)|TYPE(Type::UD)|TYPE(Type::D)}, 85 // UW,W,UD,D <- UW,W,UD,D 86 {TYPE(Type::UW)|TYPE(Type::W)|TYPE(Type::UD)|TYPE(Type::D),TYPE(Type::UW)|TYPE(Type::W)|TYPE(Type::UD)|TYPE(Type::D)}, 87 // UQ,Q <- UW,W,UD,D 88 {TYPE(Type::UQ)|TYPE(Type::Q),TYPE(Type::UW)|TYPE(Type::W)|TYPE(Type::UD)|TYPE(Type::D)}, 89 // UW,W,UD,D <- UQ,Q 90 {TYPE(Type::UW)|TYPE(Type::W)|TYPE(Type::UD)|TYPE(Type::D),TYPE(Type::UQ)|TYPE(Type::Q)}, 91 // UQ,Q <- UQ,Q 92 {TYPE(Type::UQ)|TYPE(Type::Q),TYPE(Type::UQ)|TYPE(Type::Q)} 93 }, 94 OpSpec::Attr::IS_BITWISE|OpSpec::Attr::SUPPORTS_PREDICATION|OpSpec::Attr::SUPPORTS_FLAGMODIFIER|OpSpec::Attr::SUPPORTS_SATURATION|OpSpec::Attr::SUPPORTS_SRCMODS 95 }, 96 {Op::AVG /* Op::6 */, Platform::GEN9, 0x42, 97 "avg", 98 "Average", 99 OpSpec::Format::BASIC_BINARY_REG_REGIMM, 100 { 101 // UB,B,UW,W,UD,D <- UB,B,UW,W,UD,D 102 {TYPE(Type::UB)|TYPE(Type::B)|TYPE(Type::UW)|TYPE(Type::W)|TYPE(Type::UD)|TYPE(Type::D),TYPE(Type::UB)|TYPE(Type::B)|TYPE(Type::UW)|TYPE(Type::W)|TYPE(Type::UD)|TYPE(Type::D)} 103 }, 104 OpSpec::Attr::SUPPORTS_PREDICATION|OpSpec::Attr::SUPPORTS_FLAGMODIFIER|OpSpec::Attr::SUPPORTS_SATURATION|OpSpec::Attr::SUPPORTS_SRCMODS 105 }, 106 {Op::BFE /* Op::7 */, Platform::GEN9, 0x18, 107 "bfe", 108 "Bit Field Extract", 109 OpSpec::Format::TERNARY_REGIMM_REG_REGIMM, 110 { 111 // UD <- UD 112 {TYPE(Type::UD),TYPE(Type::UD)}, 113 // D <- D 114 {TYPE(Type::D),TYPE(Type::D)} 115 }, 116 OpSpec::Attr::SUPPORTS_PREDICATION 117 }, 118 {Op::BFI1 /* Op::8 */, Platform::GEN9, 0x19, 119 "bfi1", 120 "Bit Field Insert 1", 121 OpSpec::Format::BASIC_BINARY_REG_REGIMM, 122 { 123 // UD <- UD 124 {TYPE(Type::UD),TYPE(Type::UD)}, 125 // D <- D 126 {TYPE(Type::D),TYPE(Type::D)} 127 }, 128 OpSpec::Attr::SUPPORTS_PREDICATION 129 }, 130 {Op::BFI2 /* Op::9 */, Platform::GEN9, 0x1A, 131 "bfi2", 132 "Bit Field Insert 2", 133 OpSpec::Format::TERNARY_REGIMM_REG_REGIMM, 134 { 135 // UD <- UD 136 {TYPE(Type::UD),TYPE(Type::UD)}, 137 // D <- D 138 {TYPE(Type::D),TYPE(Type::D)} 139 }, 140 OpSpec::Attr::SUPPORTS_PREDICATION 141 }, 142 {Op::INVALID, Platform::GEN9, 0x0, nullptr, nullptr, OpSpec::Format::INVALID, {}, OpSpec::Attr::NONE, }, 143 {Op::BFREV /* Op::11 */, Platform::GEN9, 0x17, 144 "bfrev", 145 "Bit Field Reverse", 146 OpSpec::Format::BASIC_UNARY_REGIMM, 147 { 148 // UD <- UD 149 {TYPE(Type::UD),TYPE(Type::UD)} 150 }, 151 OpSpec::Attr::SUPPORTS_PREDICATION 152 }, 153 {Op::BRC /* Op::12 */, Platform::GEN9, 0x23, 154 "brc", 155 "Branch Converging", 156 OpSpec::Format::JUMP_BINARY_BRC, 157 { 158 // <- D 159 {ENUM_BITSET_EMPTY_VALUE,TYPE(Type::D)} 160 }, 161 OpSpec::Attr::SUPPORTS_PREDICATION 162 }, 163 {Op::BRD /* Op::13 */, Platform::GEN9, 0x21, 164 "brd", 165 "Branch Diverging", 166 OpSpec::Format::JUMP_UNARY_REGIMM, 167 { 168 // <- D 169 {ENUM_BITSET_EMPTY_VALUE,TYPE(Type::D)} 170 }, 171 OpSpec::Attr::SUPPORTS_PREDICATION 172 }, 173 {Op::BREAK /* Op::14 */, Platform::GEN9, 0x28, 174 "break", 175 "Break", 176 OpSpec::Format::JUMP_BINARY_IMM_IMM, 177 { }, // no type mappings 178 OpSpec::Attr::SUPPORTS_PREDICATION 179 }, 180 {Op::CALL /* Op::15 */, Platform::GEN9, 0x2C, 181 "call", 182 "Call", 183 OpSpec::Format::JUMP_UNARY_CALL_REGIMM, 184 { 185 // D,UD <- 186 {TYPE(Type::D)|TYPE(Type::UD),ENUM_BITSET_EMPTY_VALUE} 187 }, 188 OpSpec::Attr::SUPPORTS_PREDICATION 189 }, 190 {Op::CALLA /* Op::16 */, Platform::GEN9, 0x2B, 191 "calla", 192 "Call Absolute", 193 OpSpec::Format::JUMP_UNARY_CALL_REGIMM, 194 { 195 // D,UD <- 196 {TYPE(Type::D)|TYPE(Type::UD),ENUM_BITSET_EMPTY_VALUE} 197 }, 198 OpSpec::Attr::SUPPORTS_PREDICATION 199 }, 200 {Op::CBIT /* Op::17 */, Platform::GEN9, 0x4D, 201 "cbit", 202 "Count Bits Set", 203 OpSpec::Format::BASIC_UNARY_REGIMM, 204 { 205 // UD <- UB,UW,UD 206 {TYPE(Type::UD),TYPE(Type::UB)|TYPE(Type::UW)|TYPE(Type::UD)} 207 }, 208 OpSpec::Attr::SUPPORTS_PREDICATION 209 }, 210 {Op::CMP /* Op::18 */, Platform::GEN9, 0x10, 211 "cmp", 212 "Compare", 213 OpSpec::Format::BASIC_BINARY_REG_REGIMM, 214 { 215 // UB,B,UW,W,UD,D <- UB,B,UW,W,UD,D 216 {TYPE(Type::UB)|TYPE(Type::B)|TYPE(Type::UW)|TYPE(Type::W)|TYPE(Type::UD)|TYPE(Type::D),TYPE(Type::UB)|TYPE(Type::B)|TYPE(Type::UW)|TYPE(Type::W)|TYPE(Type::UD)|TYPE(Type::D)}, 217 // F <- UB,B,UW,W,UD,D 218 {TYPE(Type::F),TYPE(Type::UB)|TYPE(Type::B)|TYPE(Type::UW)|TYPE(Type::W)|TYPE(Type::UD)|TYPE(Type::D)}, 219 // F <- F 220 {TYPE(Type::F),TYPE(Type::F)}, 221 // DF <- DF 222 {TYPE(Type::DF),TYPE(Type::DF)}, 223 // HF <- HF 224 {TYPE(Type::HF),TYPE(Type::HF)}, 225 // HF <- UB,B,UW,W,UD,D 226 {TYPE(Type::HF),TYPE(Type::UB)|TYPE(Type::B)|TYPE(Type::UW)|TYPE(Type::W)|TYPE(Type::UD)|TYPE(Type::D)}, 227 // UW,W,UD,D <- UW,W,UD,D 228 {TYPE(Type::UW)|TYPE(Type::W)|TYPE(Type::UD)|TYPE(Type::D),TYPE(Type::UW)|TYPE(Type::W)|TYPE(Type::UD)|TYPE(Type::D)}, 229 // UQ,Q <- UW,W,UD,D 230 {TYPE(Type::UQ)|TYPE(Type::Q),TYPE(Type::UW)|TYPE(Type::W)|TYPE(Type::UD)|TYPE(Type::D)}, 231 // UW,W,UD,D <- UQ,Q 232 {TYPE(Type::UW)|TYPE(Type::W)|TYPE(Type::UD)|TYPE(Type::D),TYPE(Type::UQ)|TYPE(Type::Q)}, 233 // UQ,Q <- UQ,Q 234 {TYPE(Type::UQ)|TYPE(Type::Q),TYPE(Type::UQ)|TYPE(Type::Q)}, 235 // HF,F <- HF,F 236 {TYPE(Type::HF)|TYPE(Type::F),TYPE(Type::HF)|TYPE(Type::F)} 237 }, 238 OpSpec::Attr::SUPPORTS_PREDICATION|OpSpec::Attr::SUPPORTS_FLAGMODIFIER|OpSpec::Attr::SUPPORTS_SRCMODS 239 }, 240 {Op::CMPN /* Op::19 */, Platform::GEN9, 0x11, 241 "cmpn", 242 "Compare NaN", 243 OpSpec::Format::BASIC_BINARY_REG_REGIMM, 244 { 245 // UB,B,UW,W,UD,D <- UB,B,UW,W,UD,D 246 {TYPE(Type::UB)|TYPE(Type::B)|TYPE(Type::UW)|TYPE(Type::W)|TYPE(Type::UD)|TYPE(Type::D),TYPE(Type::UB)|TYPE(Type::B)|TYPE(Type::UW)|TYPE(Type::W)|TYPE(Type::UD)|TYPE(Type::D)}, 247 // F <- UB,B,UW,W,UD,D 248 {TYPE(Type::F),TYPE(Type::UB)|TYPE(Type::B)|TYPE(Type::UW)|TYPE(Type::W)|TYPE(Type::UD)|TYPE(Type::D)}, 249 // F <- F 250 {TYPE(Type::F),TYPE(Type::F)}, 251 // DF <- DF 252 {TYPE(Type::DF),TYPE(Type::DF)}, 253 // HF <- HF 254 {TYPE(Type::HF),TYPE(Type::HF)}, 255 // F,HF <- F,HF 256 {TYPE(Type::F)|TYPE(Type::HF),TYPE(Type::F)|TYPE(Type::HF)} 257 }, 258 OpSpec::Attr::SUPPORTS_PREDICATION|OpSpec::Attr::SUPPORTS_FLAGMODIFIER|OpSpec::Attr::SUPPORTS_SRCMODS 259 }, 260 {Op::CONT /* Op::20 */, Platform::GEN9, 0x29, 261 "cont", 262 "Continue", 263 OpSpec::Format::JUMP_BINARY_IMM_IMM, 264 { }, // no type mappings 265 OpSpec::Attr::SUPPORTS_PREDICATION 266 }, 267 {Op::CSEL /* Op::21 */, Platform::GEN9, 0x12, 268 "csel", 269 "Conditional Select", 270 OpSpec::Format::TERNARY_REGIMM_REG_REGIMM, 271 { 272 // F <- F 273 {TYPE(Type::F),TYPE(Type::F)} 274 }, 275 OpSpec::Attr::SUPPORTS_FLAGMODIFIER|OpSpec::Attr::SUPPORTS_SATURATION|OpSpec::Attr::SUPPORTS_SRCMODS 276 }, 277 {Op::INVALID, Platform::GEN9, 0x0, nullptr, nullptr, OpSpec::Format::INVALID, {}, OpSpec::Attr::NONE, }, 278 {Op::DP2 /* Op::23 */, Platform::GEN9, 0x57, 279 "dp2", 280 "Dot Product 2", 281 OpSpec::Format::BASIC_BINARY_REG_REGIMM, 282 { 283 // F <- F 284 {TYPE(Type::F),TYPE(Type::F)} 285 }, 286 OpSpec::Attr::SUPPORTS_PREDICATION|OpSpec::Attr::SUPPORTS_FLAGMODIFIER|OpSpec::Attr::SUPPORTS_SATURATION|OpSpec::Attr::SUPPORTS_SRCMODS 287 }, 288 {Op::DP3 /* Op::24 */, Platform::GEN9, 0x56, 289 "dp3", 290 "Dot Product 3", 291 OpSpec::Format::BASIC_BINARY_REG_REGIMM, 292 { 293 // F <- F 294 {TYPE(Type::F),TYPE(Type::F)} 295 }, 296 OpSpec::Attr::SUPPORTS_PREDICATION|OpSpec::Attr::SUPPORTS_FLAGMODIFIER|OpSpec::Attr::SUPPORTS_SATURATION|OpSpec::Attr::SUPPORTS_SRCMODS 297 }, 298 {Op::DP4 /* Op::25 */, Platform::GEN9, 0x54, 299 "dp4", 300 "Dot Product 4", 301 OpSpec::Format::BASIC_BINARY_REG_REGIMM, 302 { 303 // F <- F 304 {TYPE(Type::F),TYPE(Type::F)} 305 }, 306 OpSpec::Attr::SUPPORTS_PREDICATION|OpSpec::Attr::SUPPORTS_FLAGMODIFIER|OpSpec::Attr::SUPPORTS_SATURATION|OpSpec::Attr::SUPPORTS_SRCMODS 307 }, 308 {Op::INVALID, Platform::GEN9, 0x0, nullptr, nullptr, OpSpec::Format::INVALID, {}, OpSpec::Attr::NONE, }, 309 {Op::INVALID, Platform::GEN9, 0x0, nullptr, nullptr, OpSpec::Format::INVALID, {}, OpSpec::Attr::NONE, }, 310 {Op::INVALID, Platform::GEN9, 0x0, nullptr, nullptr, OpSpec::Format::INVALID, {}, OpSpec::Attr::NONE, }, 311 {Op::DPH /* Op::29 */, Platform::GEN9, 0x55, 312 "dph", 313 "Dot Product Homogeneous", 314 OpSpec::Format::BASIC_BINARY_REG_REGIMM, 315 { 316 // F <- F 317 {TYPE(Type::F),TYPE(Type::F)} 318 }, 319 OpSpec::Attr::SUPPORTS_PREDICATION|OpSpec::Attr::SUPPORTS_FLAGMODIFIER|OpSpec::Attr::SUPPORTS_SATURATION|OpSpec::Attr::SUPPORTS_SRCMODS 320 }, 321 {Op::ELSE /* Op::30 */, Platform::GEN9, 0x24, 322 "else", 323 "Else", 324 OpSpec::Format::JUMP_BINARY_IMM_IMM, 325 { }, // no type mappings 326 OpSpec::Attr::SUPPORTS_BRCTL 327 }, 328 {Op::ENDIF /* Op::31 */, Platform::GEN9, 0x25, 329 "endif", 330 "End If", 331 OpSpec::Format::JUMP_UNARY_IMM, 332 { }, // no type mappings 333 OpSpec::Attr::NONE 334 }, 335 {Op::INVALID, Platform::GEN9, 0x0, nullptr, nullptr, OpSpec::Format::INVALID, {}, OpSpec::Attr::NONE, }, 336 {Op::INVALID, Platform::GEN9, 0x0, nullptr, nullptr, OpSpec::Format::INVALID, {}, OpSpec::Attr::NONE, }, 337 {Op::FBH /* Op::34 */, Platform::GEN9, 0x4B, 338 "fbh", 339 "Find First Bit from MSB Side", 340 OpSpec::Format::BASIC_UNARY_REGIMM, 341 { 342 // UD <- D,UD 343 {TYPE(Type::UD),TYPE(Type::D)|TYPE(Type::UD)} 344 }, 345 OpSpec::Attr::SUPPORTS_PREDICATION 346 }, 347 {Op::FBL /* Op::35 */, Platform::GEN9, 0x4C, 348 "fbl", 349 "Find First Bit from LSB Side", 350 OpSpec::Format::BASIC_UNARY_REGIMM, 351 { 352 // UD <- UD 353 {TYPE(Type::UD),TYPE(Type::UD)} 354 }, 355 OpSpec::Attr::SUPPORTS_PREDICATION 356 }, 357 {Op::FRC /* Op::36 */, Platform::GEN9, 0x43, 358 "frc", 359 "Fraction", 360 OpSpec::Format::BASIC_UNARY_REGIMM, 361 { 362 // F <- F 363 {TYPE(Type::F),TYPE(Type::F)} 364 }, 365 OpSpec::Attr::SUPPORTS_PREDICATION|OpSpec::Attr::SUPPORTS_FLAGMODIFIER|OpSpec::Attr::SUPPORTS_SRCMODS 366 }, 367 {Op::INVALID, Platform::GEN9, 0x0, nullptr, nullptr, OpSpec::Format::INVALID, {}, OpSpec::Attr::NONE, }, 368 {Op::INVALID, Platform::GEN9, 0x0, nullptr, nullptr, OpSpec::Format::INVALID, {}, OpSpec::Attr::NONE, }, 369 {Op::GOTO /* Op::39 */, Platform::GEN9, 0x2E, 370 "goto", 371 "Goto", 372 OpSpec::Format::JUMP_BINARY_IMM_IMM, 373 { }, // no type mappings 374 OpSpec::Attr::SUPPORTS_BRCTL|OpSpec::Attr::SUPPORTS_PREDICATION 375 }, 376 {Op::HALT /* Op::40 */, Platform::GEN9, 0x2A, 377 "halt", 378 "Halt", 379 OpSpec::Format::JUMP_BINARY_IMM_IMM, 380 { }, // no type mappings 381 OpSpec::Attr::SUPPORTS_PREDICATION 382 }, 383 {Op::IF /* Op::41 */, Platform::GEN9, 0x22, 384 "if", 385 "If", 386 OpSpec::Format::JUMP_BINARY_IMM_IMM, 387 { }, // no type mappings 388 OpSpec::Attr::SUPPORTS_BRCTL|OpSpec::Attr::SUPPORTS_PREDICATION 389 }, 390 {Op::ILLEGAL /* Op::42 */, Platform::GEN9, 0x00, 391 "illegal", 392 "Illegal", 393 OpSpec::Format::NULLARY, 394 { }, // no type mappings 395 OpSpec::Attr::NONE 396 }, 397 {Op::JMPI /* Op::43 */, Platform::GEN9, 0x20, 398 "jmpi", 399 "Jump Indexed", 400 OpSpec::Format::JUMP_UNARY_REGIMM, 401 { 402 // <- D 403 {ENUM_BITSET_EMPTY_VALUE,TYPE(Type::D)} 404 }, 405 OpSpec::Attr::SUPPORTS_PREDICATION 406 }, 407 {Op::JOIN /* Op::44 */, Platform::GEN9, 0x2F, 408 "join", 409 "Join", 410 OpSpec::Format::JUMP_UNARY_IMM, 411 { }, // no type mappings 412 OpSpec::Attr::SUPPORTS_PREDICATION 413 }, 414 {Op::LINE /* Op::45 */, Platform::GEN9, 0x59, 415 "line", 416 "Line", 417 OpSpec::Format::BASIC_BINARY_REG_REGIMM, 418 { 419 // F <- F 420 {TYPE(Type::F),TYPE(Type::F)} 421 }, 422 OpSpec::Attr::SUPPORTS_PREDICATION|OpSpec::Attr::SUPPORTS_FLAGMODIFIER|OpSpec::Attr::SUPPORTS_SATURATION|OpSpec::Attr::SUPPORTS_SRCMODS 423 }, 424 {Op::LRP /* Op::46 */, Platform::GEN9, 0x5C, 425 "lrp", 426 "Linear Interpolation", 427 OpSpec::Format::TERNARY_REGIMM_REG_REGIMM, 428 { 429 // F <- F 430 {TYPE(Type::F),TYPE(Type::F)} 431 }, 432 OpSpec::Attr::SUPPORTS_PREDICATION|OpSpec::Attr::SUPPORTS_FLAGMODIFIER|OpSpec::Attr::SUPPORTS_SATURATION|OpSpec::Attr::SUPPORTS_SRCMODS 433 }, 434 {Op::LZD /* Op::47 */, Platform::GEN9, 0x4A, 435 "lzd", 436 "Leading Zero Detection", 437 OpSpec::Format::BASIC_UNARY_REGIMM, 438 { 439 // UD <- D,UD 440 {TYPE(Type::UD),TYPE(Type::D)|TYPE(Type::UD)} 441 }, 442 OpSpec::Attr::SUPPORTS_PREDICATION|OpSpec::Attr::SUPPORTS_FLAGMODIFIER|OpSpec::Attr::SUPPORTS_SATURATION|OpSpec::Attr::SUPPORTS_SRCMODS 443 }, 444 {Op::MAC /* Op::48 */, Platform::GEN9, 0x48, 445 "mac", 446 "Multiply Accumulate", 447 OpSpec::Format::BASIC_BINARY_REG_REGIMM, 448 { 449 // UB,B,UW,W,UD,D <- UB,B,UW,W 450 {TYPE(Type::UB)|TYPE(Type::B)|TYPE(Type::UW)|TYPE(Type::W)|TYPE(Type::UD)|TYPE(Type::D),TYPE(Type::UB)|TYPE(Type::B)|TYPE(Type::UW)|TYPE(Type::W)}, 451 // F <- F 452 {TYPE(Type::F),TYPE(Type::F)}, 453 // DF <- DF 454 {TYPE(Type::DF),TYPE(Type::DF)}, 455 // HF <- HF 456 {TYPE(Type::HF),TYPE(Type::HF)}, 457 // HF,F <- HF,F 458 {TYPE(Type::HF)|TYPE(Type::F),TYPE(Type::HF)|TYPE(Type::F)} 459 }, 460 OpSpec::Attr::SUPPORTS_PREDICATION|OpSpec::Attr::SUPPORTS_FLAGMODIFIER|OpSpec::Attr::SUPPORTS_SATURATION|OpSpec::Attr::SUPPORTS_SRCMODS 461 }, 462 {Op::MACH /* Op::49 */, Platform::GEN9, 0x49, 463 "mach", 464 "Multiply Accumulate High", 465 OpSpec::Format::BASIC_BINARY_REG_REGIMM, 466 { 467 // D <- D 468 {TYPE(Type::D),TYPE(Type::D)}, 469 // UD <- UD 470 {TYPE(Type::UD),TYPE(Type::UD)} 471 }, 472 OpSpec::Attr::SUPPORTS_PREDICATION|OpSpec::Attr::SUPPORTS_SATURATION|OpSpec::Attr::SUPPORTS_SRCMODS 473 }, 474 {Op::INVALID, Platform::GEN9, 0x0, nullptr, nullptr, OpSpec::Format::INVALID, {}, OpSpec::Attr::NONE, }, 475 {Op::MAD /* Op::51 */, Platform::GEN9, 0x5B, 476 "mad", 477 "Multiply Add", 478 OpSpec::Format::TERNARY_REGIMM_REG_REGIMM, 479 { 480 // F <- F 481 {TYPE(Type::F),TYPE(Type::F)}, 482 // DF <- DF 483 {TYPE(Type::DF),TYPE(Type::DF)}, 484 // HF <- HF 485 {TYPE(Type::HF),TYPE(Type::HF)}, 486 // HF,F <- HF,F 487 {TYPE(Type::HF)|TYPE(Type::F),TYPE(Type::HF)|TYPE(Type::F)} 488 }, 489 OpSpec::Attr::SUPPORTS_PREDICATION|OpSpec::Attr::SUPPORTS_FLAGMODIFIER|OpSpec::Attr::SUPPORTS_SATURATION|OpSpec::Attr::SUPPORTS_SRCMODS 490 }, 491 {Op::MADM /* Op::52 */, Platform::GEN9, 0x5D, 492 "madm", 493 "Multiply Add for Macro", 494 OpSpec::Format::TERNARY_REGIMM_REG_REGIMM, 495 { 496 // F <- F 497 {TYPE(Type::F),TYPE(Type::F)}, 498 // DF <- DF 499 {TYPE(Type::DF),TYPE(Type::DF)} 500 }, 501 OpSpec::Attr::SUPPORTS_PREDICATION|OpSpec::Attr::SUPPORTS_FLAGMODIFIER|OpSpec::Attr::SUPPORTS_SATURATION|OpSpec::Attr::SUPPORTS_SRCMODS 502 }, 503 {Op::INVALID, Platform::GEN9, 0x0, nullptr, nullptr, OpSpec::Format::INVALID, {}, OpSpec::Attr::NONE, }, 504 {Op::INVALID, Platform::GEN9, 0x0, nullptr, nullptr, OpSpec::Format::INVALID, {}, OpSpec::Attr::NONE, }, 505 {Op::MATH /* Op::55 */, Platform::GEN9, 0x38, 506 "math", 507 "Extended Math Function", 508 OpSpec::Format::MATH_BINARY_REG_REGIMM, 509 { 510 // F <- F 511 {TYPE(Type::F),TYPE(Type::F)}, 512 // D <- D 513 {TYPE(Type::D),TYPE(Type::D)}, 514 // UD <- UD 515 {TYPE(Type::UD),TYPE(Type::UD)}, 516 // F,HF <- F,HF 517 {TYPE(Type::F)|TYPE(Type::HF),TYPE(Type::F)|TYPE(Type::HF)} 518 }, 519 OpSpec::Attr::SUPPORTS_PREDICATION|OpSpec::Attr::SUPPORTS_SATURATION|OpSpec::Attr::SUPPORTS_SRCMODS 520 }, 521 {Op::MOV /* Op::56 */, Platform::GEN9, 0x01, 522 "mov", 523 "Move", 524 OpSpec::Format::BASIC_UNARY_REGIMM, 525 { 526 // UB,B,UW,W,UD,D <- UB,B,UW,W,UD,D 527 {TYPE(Type::UB)|TYPE(Type::B)|TYPE(Type::UW)|TYPE(Type::W)|TYPE(Type::UD)|TYPE(Type::D),TYPE(Type::UB)|TYPE(Type::B)|TYPE(Type::UW)|TYPE(Type::W)|TYPE(Type::UD)|TYPE(Type::D)}, 528 // F <- UB,B,UW,W,UD,D 529 {TYPE(Type::F),TYPE(Type::UB)|TYPE(Type::B)|TYPE(Type::UW)|TYPE(Type::W)|TYPE(Type::UD)|TYPE(Type::D)}, 530 // UB,B,UW,W,UD,D <- F 531 {TYPE(Type::UB)|TYPE(Type::B)|TYPE(Type::UW)|TYPE(Type::W)|TYPE(Type::UD)|TYPE(Type::D),TYPE(Type::F)}, 532 // F <- F 533 {TYPE(Type::F),TYPE(Type::F)}, 534 // DF <- UW,W,UD,D 535 {TYPE(Type::DF),TYPE(Type::UW)|TYPE(Type::W)|TYPE(Type::UD)|TYPE(Type::D)}, 536 // DF <- F 537 {TYPE(Type::DF),TYPE(Type::F)}, 538 // UW,W,UD,D <- DF 539 {TYPE(Type::UW)|TYPE(Type::W)|TYPE(Type::UD)|TYPE(Type::D),TYPE(Type::DF)}, 540 // F <- DF 541 {TYPE(Type::F),TYPE(Type::DF)}, 542 // DF <- DF 543 {TYPE(Type::DF),TYPE(Type::DF)}, 544 // UW,W,UD,D <- UW,W,UD,D 545 {TYPE(Type::UW)|TYPE(Type::W)|TYPE(Type::UD)|TYPE(Type::D),TYPE(Type::UW)|TYPE(Type::W)|TYPE(Type::UD)|TYPE(Type::D)}, 546 // UQ,Q <- UW,W,UD,D 547 {TYPE(Type::UQ)|TYPE(Type::Q),TYPE(Type::UW)|TYPE(Type::W)|TYPE(Type::UD)|TYPE(Type::D)}, 548 // UW,W,UD,D <- UQ,Q 549 {TYPE(Type::UW)|TYPE(Type::W)|TYPE(Type::UD)|TYPE(Type::D),TYPE(Type::UQ)|TYPE(Type::Q)}, 550 // UQ,Q <- UQ,Q 551 {TYPE(Type::UQ)|TYPE(Type::Q),TYPE(Type::UQ)|TYPE(Type::Q)}, 552 // UQ,Q <- F 553 {TYPE(Type::UQ)|TYPE(Type::Q),TYPE(Type::F)}, 554 // UQ,Q <- DF 555 {TYPE(Type::UQ)|TYPE(Type::Q),TYPE(Type::DF)}, 556 // F <- UQ,Q 557 {TYPE(Type::F),TYPE(Type::UQ)|TYPE(Type::Q)}, 558 // DF <- UQ,Q 559 {TYPE(Type::DF),TYPE(Type::UQ)|TYPE(Type::Q)}, 560 // HF <- UB,B,UW,W,UD,D 561 {TYPE(Type::HF),TYPE(Type::UB)|TYPE(Type::B)|TYPE(Type::UW)|TYPE(Type::W)|TYPE(Type::UD)|TYPE(Type::D)}, 562 // HF <- F 563 {TYPE(Type::HF),TYPE(Type::F)}, 564 // UB,B,UW,W,UD,D <- HF 565 {TYPE(Type::UB)|TYPE(Type::B)|TYPE(Type::UW)|TYPE(Type::W)|TYPE(Type::UD)|TYPE(Type::D),TYPE(Type::HF)}, 566 // F <- HF 567 {TYPE(Type::F),TYPE(Type::HF)}, 568 // HF <- HF 569 {TYPE(Type::HF),TYPE(Type::HF)} 570 }, 571 OpSpec::Attr::SUPPORTS_PREDICATION|OpSpec::Attr::SUPPORTS_FLAGMODIFIER|OpSpec::Attr::SUPPORTS_SATURATION|OpSpec::Attr::SUPPORTS_SRCMODS 572 }, 573 {Op::MOVI /* Op::57 */, Platform::GEN9, 0x03, 574 "movi", 575 "Move Indexed", 576 OpSpec::Format::BASIC_UNARY_REGIMM, 577 { 578 // B <- B 579 {TYPE(Type::B),TYPE(Type::B)}, 580 // UB <- UB 581 {TYPE(Type::UB),TYPE(Type::UB)}, 582 // W <- W 583 {TYPE(Type::W),TYPE(Type::W)}, 584 // UW <- UW 585 {TYPE(Type::UW),TYPE(Type::UW)}, 586 // D <- D 587 {TYPE(Type::D),TYPE(Type::D)}, 588 // UD <- UD 589 {TYPE(Type::UD),TYPE(Type::UD)}, 590 // F <- F 591 {TYPE(Type::F),TYPE(Type::F)} 592 }, 593 OpSpec::Attr::SUPPORTS_PREDICATION|OpSpec::Attr::SUPPORTS_SATURATION|OpSpec::Attr::SUPPORTS_SRCMODS 594 }, 595 {Op::MUL /* Op::58 */, Platform::GEN9, 0x41, 596 "mul", 597 "Multiply", 598 OpSpec::Format::BASIC_BINARY_REG_REGIMM, 599 { 600 // UB,B <- UB,B 601 {TYPE(Type::UB)|TYPE(Type::B),TYPE(Type::UB)|TYPE(Type::B)}, 602 // UW,W <- UB,B 603 {TYPE(Type::UW)|TYPE(Type::W),TYPE(Type::UB)|TYPE(Type::B)}, 604 // UD,D <- UB,B 605 {TYPE(Type::UD)|TYPE(Type::D),TYPE(Type::UB)|TYPE(Type::B)}, 606 // UW,W <- UW,W 607 {TYPE(Type::UW)|TYPE(Type::W),TYPE(Type::UW)|TYPE(Type::W)}, 608 // UD,D <- UW,W 609 {TYPE(Type::UD)|TYPE(Type::D),TYPE(Type::UW)|TYPE(Type::W)}, 610 // UD,D <- UD,D 611 {TYPE(Type::UD)|TYPE(Type::D),TYPE(Type::UD)|TYPE(Type::D)}, 612 // UQ,Q <- UD,D 613 {TYPE(Type::UQ)|TYPE(Type::Q),TYPE(Type::UD)|TYPE(Type::D)}, 614 // F <- F 615 {TYPE(Type::F),TYPE(Type::F)}, 616 // DF <- DF 617 {TYPE(Type::DF),TYPE(Type::DF)}, 618 // HF <- HF 619 {TYPE(Type::HF),TYPE(Type::HF)}, 620 // HF,F <- HF,F 621 {TYPE(Type::HF)|TYPE(Type::F),TYPE(Type::HF)|TYPE(Type::F)} 622 }, 623 OpSpec::Attr::SUPPORTS_PREDICATION|OpSpec::Attr::SUPPORTS_FLAGMODIFIER|OpSpec::Attr::SUPPORTS_SATURATION|OpSpec::Attr::SUPPORTS_SRCMODS 624 }, 625 {Op::NOP /* Op::59 */, Platform::GEN9, 0x7E, 626 "nop", 627 "No Operation", 628 OpSpec::Format::NULLARY, 629 { }, // no type mappings 630 OpSpec::Attr::NONE 631 }, 632 {Op::NOT /* Op::60 */, Platform::GEN9, 0x04, 633 "not", 634 "Logic Not", 635 OpSpec::Format::BASIC_UNARY_REGIMM, 636 { 637 // UB,B,UW,W,UD,D <- UB,B,UW,W,UD,D 638 {TYPE(Type::UB)|TYPE(Type::B)|TYPE(Type::UW)|TYPE(Type::W)|TYPE(Type::UD)|TYPE(Type::D),TYPE(Type::UB)|TYPE(Type::B)|TYPE(Type::UW)|TYPE(Type::W)|TYPE(Type::UD)|TYPE(Type::D)}, 639 // UW,W,UD,D <- UW,W,UD,D 640 {TYPE(Type::UW)|TYPE(Type::W)|TYPE(Type::UD)|TYPE(Type::D),TYPE(Type::UW)|TYPE(Type::W)|TYPE(Type::UD)|TYPE(Type::D)}, 641 // UQ,Q <- UW,W,UD,D 642 {TYPE(Type::UQ)|TYPE(Type::Q),TYPE(Type::UW)|TYPE(Type::W)|TYPE(Type::UD)|TYPE(Type::D)}, 643 // UW,W,UD,D <- UQ,Q 644 {TYPE(Type::UW)|TYPE(Type::W)|TYPE(Type::UD)|TYPE(Type::D),TYPE(Type::UQ)|TYPE(Type::Q)}, 645 // UQ,Q <- UQ,Q 646 {TYPE(Type::UQ)|TYPE(Type::Q),TYPE(Type::UQ)|TYPE(Type::Q)} 647 }, 648 OpSpec::Attr::IS_BITWISE|OpSpec::Attr::SUPPORTS_PREDICATION|OpSpec::Attr::SUPPORTS_FLAGMODIFIER|OpSpec::Attr::SUPPORTS_SRCMODS 649 }, 650 {Op::OR /* Op::61 */, Platform::GEN9, 0x06, 651 "or", 652 "Logic Or", 653 OpSpec::Format::BASIC_BINARY_REG_REGIMM, 654 { 655 // UB,B,UW,W,UD,D <- UB,B,UW,W,UD,D 656 {TYPE(Type::UB)|TYPE(Type::B)|TYPE(Type::UW)|TYPE(Type::W)|TYPE(Type::UD)|TYPE(Type::D),TYPE(Type::UB)|TYPE(Type::B)|TYPE(Type::UW)|TYPE(Type::W)|TYPE(Type::UD)|TYPE(Type::D)}, 657 // UW,W,UD,D <- UW,W,UD,D 658 {TYPE(Type::UW)|TYPE(Type::W)|TYPE(Type::UD)|TYPE(Type::D),TYPE(Type::UW)|TYPE(Type::W)|TYPE(Type::UD)|TYPE(Type::D)}, 659 // UQ,Q <- UW,W,UD,D 660 {TYPE(Type::UQ)|TYPE(Type::Q),TYPE(Type::UW)|TYPE(Type::W)|TYPE(Type::UD)|TYPE(Type::D)}, 661 // UW,W,UD,D <- UQ,Q 662 {TYPE(Type::UW)|TYPE(Type::W)|TYPE(Type::UD)|TYPE(Type::D),TYPE(Type::UQ)|TYPE(Type::Q)}, 663 // UQ,Q <- UQ,Q 664 {TYPE(Type::UQ)|TYPE(Type::Q),TYPE(Type::UQ)|TYPE(Type::Q)} 665 }, 666 OpSpec::Attr::IS_BITWISE|OpSpec::Attr::SUPPORTS_PREDICATION|OpSpec::Attr::SUPPORTS_FLAGMODIFIER|OpSpec::Attr::SUPPORTS_SRCMODS 667 }, 668 {Op::PLN /* Op::62 */, Platform::GEN9, 0x5A, 669 "pln", 670 "Plane", 671 OpSpec::Format::BASIC_BINARY_REG_REGIMM, 672 { 673 // F <- F 674 {TYPE(Type::F),TYPE(Type::F)} 675 }, 676 OpSpec::Attr::SUPPORTS_PREDICATION|OpSpec::Attr::SUPPORTS_FLAGMODIFIER|OpSpec::Attr::SUPPORTS_SATURATION 677 }, 678 {Op::RET /* Op::63 */, Platform::GEN9, 0x2D, 679 "ret", 680 "Return", 681 OpSpec::Format::JUMP_UNARY_REG, 682 { 683 // <- D,UD 684 {ENUM_BITSET_EMPTY_VALUE,TYPE(Type::D)|TYPE(Type::UD)} 685 }, 686 OpSpec::Attr::SUPPORTS_PREDICATION 687 }, 688 {Op::RNDD /* Op::64 */, Platform::GEN9, 0x45, 689 "rndd", 690 "Round Down", 691 OpSpec::Format::BASIC_UNARY_REGIMM, 692 { 693 // F <- F 694 {TYPE(Type::F),TYPE(Type::F)} 695 }, 696 OpSpec::Attr::SUPPORTS_PREDICATION|OpSpec::Attr::SUPPORTS_FLAGMODIFIER|OpSpec::Attr::SUPPORTS_SATURATION|OpSpec::Attr::SUPPORTS_SRCMODS 697 }, 698 {Op::RNDE /* Op::65 */, Platform::GEN9, 0x46, 699 "rnde", 700 "Round to Nearest or Even", 701 OpSpec::Format::BASIC_UNARY_REGIMM, 702 { 703 // F <- F 704 {TYPE(Type::F),TYPE(Type::F)} 705 }, 706 OpSpec::Attr::SUPPORTS_PREDICATION|OpSpec::Attr::SUPPORTS_FLAGMODIFIER|OpSpec::Attr::SUPPORTS_SATURATION|OpSpec::Attr::SUPPORTS_SRCMODS 707 }, 708 {Op::RNDU /* Op::66 */, Platform::GEN9, 0x44, 709 "rndu", 710 "Round Up", 711 OpSpec::Format::BASIC_UNARY_REGIMM, 712 { 713 // F <- F 714 {TYPE(Type::F),TYPE(Type::F)} 715 }, 716 OpSpec::Attr::SUPPORTS_PREDICATION|OpSpec::Attr::SUPPORTS_FLAGMODIFIER|OpSpec::Attr::SUPPORTS_SATURATION|OpSpec::Attr::SUPPORTS_SRCMODS 717 }, 718 {Op::RNDZ /* Op::67 */, Platform::GEN9, 0x47, 719 "rndz", 720 "Round to Zero", 721 OpSpec::Format::BASIC_UNARY_REGIMM, 722 { 723 // F <- F 724 {TYPE(Type::F),TYPE(Type::F)} 725 }, 726 OpSpec::Attr::SUPPORTS_PREDICATION|OpSpec::Attr::SUPPORTS_FLAGMODIFIER|OpSpec::Attr::SUPPORTS_SATURATION|OpSpec::Attr::SUPPORTS_SRCMODS 727 }, 728 {Op::INVALID, Platform::GEN9, 0x0, nullptr, nullptr, OpSpec::Format::INVALID, {}, OpSpec::Attr::NONE, }, 729 {Op::INVALID, Platform::GEN9, 0x0, nullptr, nullptr, OpSpec::Format::INVALID, {}, OpSpec::Attr::NONE, }, 730 {Op::SAD2 /* Op::70 */, Platform::GEN9, 0x50, 731 "sad2", 732 "Sum of Absolute Difference 2", 733 OpSpec::Format::BASIC_BINARY_REG_REGIMM, 734 { 735 // W,UW <- B,UB 736 {TYPE(Type::W)|TYPE(Type::UW),TYPE(Type::B)|TYPE(Type::UB)} 737 }, 738 OpSpec::Attr::SUPPORTS_PREDICATION|OpSpec::Attr::SUPPORTS_FLAGMODIFIER|OpSpec::Attr::SUPPORTS_SATURATION|OpSpec::Attr::SUPPORTS_SRCMODS 739 }, 740 {Op::SADA2 /* Op::71 */, Platform::GEN9, 0x51, 741 "sada2", 742 "Sum of Absolute Difference Accumulate 2", 743 OpSpec::Format::BASIC_BINARY_REG_REGIMM, 744 { 745 // W,UW <- B,UB 746 {TYPE(Type::W)|TYPE(Type::UW),TYPE(Type::B)|TYPE(Type::UB)} 747 }, 748 OpSpec::Attr::SUPPORTS_PREDICATION|OpSpec::Attr::SUPPORTS_FLAGMODIFIER|OpSpec::Attr::SUPPORTS_SATURATION|OpSpec::Attr::SUPPORTS_SRCMODS 749 }, 750 {Op::INVALID, Platform::GEN9, 0x0, nullptr, nullptr, OpSpec::Format::INVALID, {}, OpSpec::Attr::NONE, }, 751 {Op::INVALID, Platform::GEN9, 0x0, nullptr, nullptr, OpSpec::Format::INVALID, {}, OpSpec::Attr::NONE, }, 752 {Op::SEL /* Op::74 */, Platform::GEN9, 0x02, 753 "sel", 754 "Select", 755 OpSpec::Format::BASIC_BINARY_REG_REGIMM, 756 { 757 // UB,B,UW,W,UD,D <- UB,B,UW,W,UD,D 758 {TYPE(Type::UB)|TYPE(Type::B)|TYPE(Type::UW)|TYPE(Type::W)|TYPE(Type::UD)|TYPE(Type::D),TYPE(Type::UB)|TYPE(Type::B)|TYPE(Type::UW)|TYPE(Type::W)|TYPE(Type::UD)|TYPE(Type::D)}, 759 // F <- F 760 {TYPE(Type::F),TYPE(Type::F)}, 761 // DF <- DF 762 {TYPE(Type::DF),TYPE(Type::DF)}, 763 // UW,W,UD,D <- UW,W,UD,D 764 {TYPE(Type::UW)|TYPE(Type::W)|TYPE(Type::UD)|TYPE(Type::D),TYPE(Type::UW)|TYPE(Type::W)|TYPE(Type::UD)|TYPE(Type::D)}, 765 // UQ,Q <- UW,W,UD,D 766 {TYPE(Type::UQ)|TYPE(Type::Q),TYPE(Type::UW)|TYPE(Type::W)|TYPE(Type::UD)|TYPE(Type::D)}, 767 // UW,W,UD,D <- UQ,Q 768 {TYPE(Type::UW)|TYPE(Type::W)|TYPE(Type::UD)|TYPE(Type::D),TYPE(Type::UQ)|TYPE(Type::Q)}, 769 // UQ,Q <- UQ,Q 770 {TYPE(Type::UQ)|TYPE(Type::Q),TYPE(Type::UQ)|TYPE(Type::Q)}, 771 // HF <- HF 772 {TYPE(Type::HF),TYPE(Type::HF)}, 773 // HF,F <- HF,F 774 {TYPE(Type::HF)|TYPE(Type::F),TYPE(Type::HF)|TYPE(Type::F)} 775 }, 776 OpSpec::Attr::IS_SELECT|OpSpec::Attr::SUPPORTS_PREDICATION|OpSpec::Attr::SUPPORTS_FLAGMODIFIER|OpSpec::Attr::SUPPORTS_SATURATION|OpSpec::Attr::SUPPORTS_SRCMODS 777 }, 778 {Op::SEND /* Op::75 */, Platform::GEN9, 0x31, 779 "send", 780 "Send Message", 781 OpSpec::Format::SEND_UNARY, 782 { }, // no type mappings 783 OpSpec::Attr::SUPPORTS_PREDICATION 784 }, 785 {Op::SENDC /* Op::76 */, Platform::GEN9, 0x32, 786 "sendc", 787 "Conditional Send Message", 788 OpSpec::Format::SEND_UNARY, 789 { }, // no type mappings 790 OpSpec::Attr::SUPPORTS_PREDICATION 791 }, 792 {Op::SENDS /* Op::77 */, Platform::GEN9, 0x33, 793 "sends", 794 "Split Send Message", 795 OpSpec::Format::SEND_BINARY, 796 { }, // no type mappings 797 OpSpec::Attr::SUPPORTS_PREDICATION 798 }, 799 {Op::SENDSC /* Op::78 */, Platform::GEN9, 0x34, 800 "sendsc", 801 "Conditional Split Send Message", 802 OpSpec::Format::SEND_BINARY, 803 { }, // no type mappings 804 OpSpec::Attr::SUPPORTS_PREDICATION 805 }, 806 {Op::INVALID, Platform::GEN9, 0x0, nullptr, nullptr, OpSpec::Format::INVALID, {}, OpSpec::Attr::NONE, }, 807 {Op::SHL /* Op::80 */, Platform::GEN9, 0x09, 808 "shl", 809 "Shift Left", 810 OpSpec::Format::BASIC_BINARY_REG_REGIMM, 811 { 812 // UB,B,UW,W,UD,D <- UB,B,UW,W,UD,D 813 {TYPE(Type::UB)|TYPE(Type::B)|TYPE(Type::UW)|TYPE(Type::W)|TYPE(Type::UD)|TYPE(Type::D),TYPE(Type::UB)|TYPE(Type::B)|TYPE(Type::UW)|TYPE(Type::W)|TYPE(Type::UD)|TYPE(Type::D)}, 814 // UW,W,UD,D <- UW,W,UD,D 815 {TYPE(Type::UW)|TYPE(Type::W)|TYPE(Type::UD)|TYPE(Type::D),TYPE(Type::UW)|TYPE(Type::W)|TYPE(Type::UD)|TYPE(Type::D)}, 816 // UQ,Q <- UW,W,UD,D 817 {TYPE(Type::UQ)|TYPE(Type::Q),TYPE(Type::UW)|TYPE(Type::W)|TYPE(Type::UD)|TYPE(Type::D)}, 818 // UW,W,UD,D <- UQ,Q 819 {TYPE(Type::UW)|TYPE(Type::W)|TYPE(Type::UD)|TYPE(Type::D),TYPE(Type::UQ)|TYPE(Type::Q)}, 820 // UQ,Q <- UQ,Q 821 {TYPE(Type::UQ)|TYPE(Type::Q),TYPE(Type::UQ)|TYPE(Type::Q)} 822 }, 823 OpSpec::Attr::IS_BITWISE|OpSpec::Attr::SUPPORTS_PREDICATION|OpSpec::Attr::SUPPORTS_FLAGMODIFIER|OpSpec::Attr::SUPPORTS_SATURATION|OpSpec::Attr::SUPPORTS_SRCMODS 824 }, 825 {Op::SHR /* Op::81 */, Platform::GEN9, 0x08, 826 "shr", 827 "Shift Right", 828 OpSpec::Format::BASIC_BINARY_REG_REGIMM, 829 { 830 // UB,UW,UD <- UB,UW,UD 831 {TYPE(Type::UB)|TYPE(Type::UW)|TYPE(Type::UD),TYPE(Type::UB)|TYPE(Type::UW)|TYPE(Type::UD)}, 832 // UW,UD <- UW,UD 833 {TYPE(Type::UW)|TYPE(Type::UD),TYPE(Type::UW)|TYPE(Type::UD)}, 834 // UQ <- UW,UD 835 {TYPE(Type::UQ),TYPE(Type::UW)|TYPE(Type::UD)}, 836 // UW,UD <- UQ 837 {TYPE(Type::UW)|TYPE(Type::UD),TYPE(Type::UQ)}, 838 // UQ <- UQ 839 {TYPE(Type::UQ),TYPE(Type::UQ)} 840 }, 841 OpSpec::Attr::IS_BITWISE|OpSpec::Attr::SUPPORTS_PREDICATION|OpSpec::Attr::SUPPORTS_FLAGMODIFIER|OpSpec::Attr::SUPPORTS_SATURATION|OpSpec::Attr::SUPPORTS_SRCMODS 842 }, 843 {Op::SMOV /* Op::82 */, Platform::GEN9, 0x0A, 844 "smov", 845 "Scattered Move", 846 OpSpec::Format::BASIC_BINARY_REG_REGIMM, 847 { 848 // UW,W,UD,D,HF,F <- UW,W,UD,D,HF,F 849 {TYPE(Type::UW)|TYPE(Type::W)|TYPE(Type::UD)|TYPE(Type::D)|TYPE(Type::HF)|TYPE(Type::F),TYPE(Type::UW)|TYPE(Type::W)|TYPE(Type::UD)|TYPE(Type::D)|TYPE(Type::HF)|TYPE(Type::F)}, 850 // UQ,Q,DF <- UW,W,UD,D,HF,F 851 {TYPE(Type::UQ)|TYPE(Type::Q)|TYPE(Type::DF),TYPE(Type::UW)|TYPE(Type::W)|TYPE(Type::UD)|TYPE(Type::D)|TYPE(Type::HF)|TYPE(Type::F)}, 852 // UW,W,UD,D,HF,F <- UQ,Q,DF 853 {TYPE(Type::UW)|TYPE(Type::W)|TYPE(Type::UD)|TYPE(Type::D)|TYPE(Type::HF)|TYPE(Type::F),TYPE(Type::UQ)|TYPE(Type::Q)|TYPE(Type::DF)}, 854 // UQ,Q,DF <- UQ,Q,DF 855 {TYPE(Type::UQ)|TYPE(Type::Q)|TYPE(Type::DF),TYPE(Type::UQ)|TYPE(Type::Q)|TYPE(Type::DF)} 856 }, 857 OpSpec::Attr::SUPPORTS_PREDICATION 858 }, 859 {Op::INVALID, Platform::GEN9, 0x0, nullptr, nullptr, OpSpec::Format::INVALID, {}, OpSpec::Attr::NONE, }, 860 {Op::SUBB /* Op::84 */, Platform::GEN9, 0x4F, 861 "subb", 862 "Integer Subtraction with Borrow", 863 OpSpec::Format::BASIC_BINARY_REG_REGIMM, 864 { 865 // UD <- UD 866 {TYPE(Type::UD),TYPE(Type::UD)} 867 }, 868 OpSpec::Attr::SUPPORTS_PREDICATION|OpSpec::Attr::SUPPORTS_FLAGMODIFIER|OpSpec::Attr::SUPPORTS_SATURATION 869 }, 870 {Op::INVALID, Platform::GEN9, 0x0, nullptr, nullptr, OpSpec::Format::INVALID, {}, OpSpec::Attr::NONE, }, 871 {Op::WAIT /* Op::86 */, Platform::GEN9, 0x30, 872 "wait", 873 "Wait Notification", 874 OpSpec::Format::SYNC_UNARY, 875 { 876 // UD <- UD 877 {TYPE(Type::UD),TYPE(Type::UD)} 878 }, 879 OpSpec::Attr::NONE 880 }, 881 {Op::WHILE /* Op::87 */, Platform::GEN9, 0x27, 882 "while", 883 "While", 884 OpSpec::Format::JUMP_UNARY_IMM, 885 { }, // no type mappings 886 OpSpec::Attr::SUPPORTS_PREDICATION 887 }, 888 {Op::XOR /* Op::88 */, Platform::GEN9, 0x07, 889 "xor", 890 "Logic Xor", 891 OpSpec::Format::BASIC_BINARY_REG_REGIMM, 892 { 893 // UB,B,UW,W,UD,D <- UB,B,UW,W,UD,D 894 {TYPE(Type::UB)|TYPE(Type::B)|TYPE(Type::UW)|TYPE(Type::W)|TYPE(Type::UD)|TYPE(Type::D),TYPE(Type::UB)|TYPE(Type::B)|TYPE(Type::UW)|TYPE(Type::W)|TYPE(Type::UD)|TYPE(Type::D)}, 895 // UW,W,UD,D <- UW,W,UD,D 896 {TYPE(Type::UW)|TYPE(Type::W)|TYPE(Type::UD)|TYPE(Type::D),TYPE(Type::UW)|TYPE(Type::W)|TYPE(Type::UD)|TYPE(Type::D)}, 897 // UQ,Q <- UW,W,UD,D 898 {TYPE(Type::UQ)|TYPE(Type::Q),TYPE(Type::UW)|TYPE(Type::W)|TYPE(Type::UD)|TYPE(Type::D)}, 899 // UW,W,UD,D <- UQ,Q 900 {TYPE(Type::UW)|TYPE(Type::W)|TYPE(Type::UD)|TYPE(Type::D),TYPE(Type::UQ)|TYPE(Type::Q)}, 901 // UQ,Q <- UQ,Q 902 {TYPE(Type::UQ)|TYPE(Type::Q),TYPE(Type::UQ)|TYPE(Type::Q)} 903 }, 904 OpSpec::Attr::IS_BITWISE|OpSpec::Attr::SUPPORTS_PREDICATION|OpSpec::Attr::SUPPORTS_FLAGMODIFIER|OpSpec::Attr::SUPPORTS_SRCMODS 905 } 906 }; // end MODEL_GEN9_OPSPECS 907 } // namespace iga 908 #endif // IGA_MODELS_GEN9_HPP 909