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