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_XE_HP_HPP
9 #define IGA_MODELS_XE_HP_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_XE_HP_OPSPECS[unsigned(Op::TOTAL_OPS) + 1] {
18         {Op::INVALID, Platform::XE_HP, 0x0, nullptr, nullptr, OpSpec::Format::INVALID, {}, OpSpec::Attr::NONE,         },
19         {Op::ADD /* Op::1 */, Platform::XE_HP, 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 <- F
27                 {TYPE(Type::F),TYPE(Type::F)},
28                 // HF <- HF
29                 {TYPE(Type::HF),TYPE(Type::HF)},
30                 // BF,F <- BF,F
31                 {TYPE(Type::BF)|TYPE(Type::F),TYPE(Type::BF)|TYPE(Type::F)},
32                 // DF <- DF
33                 {TYPE(Type::DF),TYPE(Type::DF)},
34                 // UQ,Q <- UW,W,UD,D,UQ,Q
35                 {TYPE(Type::UQ)|TYPE(Type::Q),TYPE(Type::UW)|TYPE(Type::W)|TYPE(Type::UD)|TYPE(Type::D)|TYPE(Type::UQ)|TYPE(Type::Q)},
36                 // UW,W,UD,D <- UQ,Q
37                 {TYPE(Type::UW)|TYPE(Type::W)|TYPE(Type::UD)|TYPE(Type::D),TYPE(Type::UQ)|TYPE(Type::Q)}
38             },
39             OpSpec::Attr::SUPPORTS_PREDICATION|OpSpec::Attr::SUPPORTS_FLAGMODIFIER|OpSpec::Attr::SUPPORTS_SATURATION|OpSpec::Attr::SUPPORTS_SRCMODS
40         },
41         {Op::ADD3 /* Op::2 */, Platform::XE_HP, 0x52,
42             "add3",
43             "Addition Ternary",
44             OpSpec::Format::TERNARY_REGIMM_REG_REGIMM,
45             {
46                 // UW,W,UD,D <- UW,W,UD,D
47                 {TYPE(Type::UW)|TYPE(Type::W)|TYPE(Type::UD)|TYPE(Type::D),TYPE(Type::UW)|TYPE(Type::W)|TYPE(Type::UD)|TYPE(Type::D)}
48             },
49             OpSpec::Attr::SUPPORTS_PREDICATION|OpSpec::Attr::SUPPORTS_FLAGMODIFIER|OpSpec::Attr::SUPPORTS_SATURATION|OpSpec::Attr::SUPPORTS_SRCMODS
50         },
51         {Op::ADDC /* Op::3 */, Platform::XE_HP, 0x4E,
52             "addc",
53             "Addition with Carry",
54             OpSpec::Format::BASIC_BINARY_REG_REGIMM,
55             {
56                 // UD <- UD
57                 {TYPE(Type::UD),TYPE(Type::UD)}
58             },
59             OpSpec::Attr::SUPPORTS_PREDICATION|OpSpec::Attr::SUPPORTS_FLAGMODIFIER
60         },
61         {Op::AND /* Op::4 */, Platform::XE_HP, 0x65,
62             "and",
63             "Logic And",
64             OpSpec::Format::BASIC_BINARY_REG_REGIMM,
65             {
66                 // UB,B,UW,W,UD,D <- UB,B,UW,W,UD,D
67                 {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)},
68                 // UQ,Q <- UW,W,UD,D,UQ,Q
69                 {TYPE(Type::UQ)|TYPE(Type::Q),TYPE(Type::UW)|TYPE(Type::W)|TYPE(Type::UD)|TYPE(Type::D)|TYPE(Type::UQ)|TYPE(Type::Q)},
70                 // UW,W,UD,D <- UQ,Q
71                 {TYPE(Type::UW)|TYPE(Type::W)|TYPE(Type::UD)|TYPE(Type::D),TYPE(Type::UQ)|TYPE(Type::Q)}
72             },
73             OpSpec::Attr::IS_BITWISE|OpSpec::Attr::SUPPORTS_PREDICATION|OpSpec::Attr::SUPPORTS_FLAGMODIFIER|OpSpec::Attr::SUPPORTS_SRCMODS
74         },
75         {Op::ASR /* Op::5 */, Platform::XE_HP, 0x6C,
76             "asr",
77             "Arithmetic Shift Right",
78             OpSpec::Format::BASIC_BINARY_REG_REGIMM,
79             {
80                 // UB,B,UW,W,UD,D <- UB,B,UW,W,UD,D
81                 {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)},
82                 // UQ,Q <- UW,W,UD,D,UQ,Q
83                 {TYPE(Type::UQ)|TYPE(Type::Q),TYPE(Type::UW)|TYPE(Type::W)|TYPE(Type::UD)|TYPE(Type::D)|TYPE(Type::UQ)|TYPE(Type::Q)},
84                 // UW,W,UD,D <- UQ,Q
85                 {TYPE(Type::UW)|TYPE(Type::W)|TYPE(Type::UD)|TYPE(Type::D),TYPE(Type::UQ)|TYPE(Type::Q)}
86             },
87             OpSpec::Attr::IS_BITWISE|OpSpec::Attr::SUPPORTS_PREDICATION|OpSpec::Attr::SUPPORTS_FLAGMODIFIER|OpSpec::Attr::SUPPORTS_SATURATION|OpSpec::Attr::SUPPORTS_SRCMODS
88         },
89         {Op::AVG /* Op::6 */, Platform::XE_HP, 0x42,
90             "avg",
91             "Average",
92             OpSpec::Format::BASIC_BINARY_REG_REGIMM,
93             {
94                 // UB,B,UW,W,UD,D <- UB,B,UW,W,UD,D
95                 {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)}
96             },
97             OpSpec::Attr::SUPPORTS_PREDICATION|OpSpec::Attr::SUPPORTS_FLAGMODIFIER|OpSpec::Attr::SUPPORTS_SATURATION|OpSpec::Attr::SUPPORTS_SRCMODS
98         },
99         {Op::BFE /* Op::7 */, Platform::XE_HP, 0x78,
100             "bfe",
101             "Bit Field Extract",
102             OpSpec::Format::TERNARY_REGIMM_REG_REGIMM,
103             {
104                 // UD <- UD
105                 {TYPE(Type::UD),TYPE(Type::UD)},
106                 // D <- D
107                 {TYPE(Type::D),TYPE(Type::D)}
108             },
109             OpSpec::Attr::SUPPORTS_PREDICATION
110         },
111         {Op::BFI1 /* Op::8 */, Platform::XE_HP, 0x79,
112             "bfi1",
113             "Bit Field Insert 1",
114             OpSpec::Format::BASIC_BINARY_REG_REGIMM,
115             {
116                 // UD <- UD
117                 {TYPE(Type::UD),TYPE(Type::UD)},
118                 // D <- D
119                 {TYPE(Type::D),TYPE(Type::D)}
120             },
121             OpSpec::Attr::SUPPORTS_PREDICATION
122         },
123         {Op::BFI2 /* Op::9 */, Platform::XE_HP, 0x7A,
124             "bfi2",
125             "Bit Field Insert 2",
126             OpSpec::Format::TERNARY_REGIMM_REG_REGIMM,
127             {
128                 // UD <- UD
129                 {TYPE(Type::UD),TYPE(Type::UD)},
130                 // D <- D
131                 {TYPE(Type::D),TYPE(Type::D)}
132             },
133             OpSpec::Attr::SUPPORTS_PREDICATION
134         },
135         {Op::BFN /* Op::10 */, Platform::XE_HP, 0x6B,
136             "bfn",
137             "Boolean Function",
138             OpSpec::Format::TERNARY_REGIMM_REG_REGIMM,
139             {
140                 // UD,UW <- UD,UW
141                 {TYPE(Type::UD)|TYPE(Type::UW),TYPE(Type::UD)|TYPE(Type::UW)}
142             },
143             OpSpec::Attr::IS_BITWISE|OpSpec::Attr::SUPPORTS_PREDICATION|OpSpec::Attr::SUPPORTS_FLAGMODIFIER
144         },
145         {Op::BFREV /* Op::11 */, Platform::XE_HP, 0x77,
146             "bfrev",
147             "Bit Field Reverse",
148             OpSpec::Format::BASIC_UNARY_REGIMM,
149             {
150                 // UD <- UD
151                 {TYPE(Type::UD),TYPE(Type::UD)}
152             },
153             OpSpec::Attr::SUPPORTS_PREDICATION
154         },
155         {Op::BRC /* Op::12 */, Platform::XE_HP, 0x23,
156             "brc",
157             "Branch Converging",
158             OpSpec::Format::JUMP_BINARY_BRC,
159             { }, // no type mappings
160             OpSpec::Attr::SUPPORTS_PREDICATION
161         },
162         {Op::BRD /* Op::13 */, Platform::XE_HP, 0x21,
163             "brd",
164             "Branch Diverging",
165             OpSpec::Format::JUMP_UNARY_REGIMM,
166             { }, // no type mappings
167             OpSpec::Attr::SUPPORTS_PREDICATION
168         },
169         {Op::BREAK /* Op::14 */, Platform::XE_HP, 0x28,
170             "break",
171             "Break",
172             OpSpec::Format::JUMP_BINARY_IMM_IMM,
173             { }, // no type mappings
174             OpSpec::Attr::SUPPORTS_PREDICATION
175         },
176         {Op::CALL /* Op::15 */, Platform::XE_HP, 0x2C,
177             "call",
178             "Call",
179             OpSpec::Format::JUMP_UNARY_CALL_REGIMM,
180             { }, // no type mappings
181             OpSpec::Attr::SUPPORTS_PREDICATION
182         },
183         {Op::CALLA /* Op::16 */, Platform::XE_HP, 0x2B,
184             "calla",
185             "Call Absolute",
186             OpSpec::Format::JUMP_UNARY_CALL_REGIMM,
187             { }, // no type mappings
188             OpSpec::Attr::SUPPORTS_PREDICATION
189         },
190         {Op::CBIT /* Op::17 */, Platform::XE_HP, 0x4D,
191             "cbit",
192             "Count Bits Set",
193             OpSpec::Format::BASIC_UNARY_REGIMM,
194             {
195                 // UD <- UB,UW,UD
196                 {TYPE(Type::UD),TYPE(Type::UB)|TYPE(Type::UW)|TYPE(Type::UD)}
197             },
198             OpSpec::Attr::SUPPORTS_PREDICATION
199         },
200         {Op::CMP /* Op::18 */, Platform::XE_HP, 0x70,
201             "cmp",
202             "Compare",
203             OpSpec::Format::BASIC_BINARY_REG_REGIMM,
204             {
205                 // UB,B,UW,W,UD,D <- UB,B,UW,W,UD,D
206                 {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)},
207                 // F <- UB,B,UW,W,UD,D
208                 {TYPE(Type::F),TYPE(Type::UB)|TYPE(Type::B)|TYPE(Type::UW)|TYPE(Type::W)|TYPE(Type::UD)|TYPE(Type::D)},
209                 // F <- F
210                 {TYPE(Type::F),TYPE(Type::F)},
211                 // HF <- HF
212                 {TYPE(Type::HF),TYPE(Type::HF)},
213                 // HF <- UB,B,UW,W,UD,D
214                 {TYPE(Type::HF),TYPE(Type::UB)|TYPE(Type::B)|TYPE(Type::UW)|TYPE(Type::W)|TYPE(Type::UD)|TYPE(Type::D)},
215                 // BF,F <- BF,F
216                 {TYPE(Type::BF)|TYPE(Type::F),TYPE(Type::BF)|TYPE(Type::F)},
217                 // DF <- DF
218                 {TYPE(Type::DF),TYPE(Type::DF)},
219                 // UQ,Q <- UW,W,UD,D,UQ,Q
220                 {TYPE(Type::UQ)|TYPE(Type::Q),TYPE(Type::UW)|TYPE(Type::W)|TYPE(Type::UD)|TYPE(Type::D)|TYPE(Type::UQ)|TYPE(Type::Q)},
221                 // UW,W,UD,D <- UQ,Q
222                 {TYPE(Type::UW)|TYPE(Type::W)|TYPE(Type::UD)|TYPE(Type::D),TYPE(Type::UQ)|TYPE(Type::Q)}
223             },
224             OpSpec::Attr::SUPPORTS_PREDICATION|OpSpec::Attr::SUPPORTS_FLAGMODIFIER|OpSpec::Attr::SUPPORTS_SRCMODS
225         },
226         {Op::CMPN /* Op::19 */, Platform::XE_HP, 0x71,
227             "cmpn",
228             "Compare NaN",
229             OpSpec::Format::BASIC_BINARY_REG_REGIMM,
230             {
231                 // UB,B,UW,W,UD,D <- UB,B,UW,W,UD,D
232                 {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)},
233                 // F <- UB,B,UW,W,UD,D
234                 {TYPE(Type::F),TYPE(Type::UB)|TYPE(Type::B)|TYPE(Type::UW)|TYPE(Type::W)|TYPE(Type::UD)|TYPE(Type::D)},
235                 // F <- F
236                 {TYPE(Type::F),TYPE(Type::F)},
237                 // HF <- HF
238                 {TYPE(Type::HF),TYPE(Type::HF)},
239                 // DF <- DF
240                 {TYPE(Type::DF),TYPE(Type::DF)}
241             },
242             OpSpec::Attr::SUPPORTS_PREDICATION|OpSpec::Attr::SUPPORTS_FLAGMODIFIER|OpSpec::Attr::SUPPORTS_SRCMODS
243         },
244         {Op::CONT /* Op::20 */, Platform::XE_HP, 0x29,
245             "cont",
246             "Continue",
247             OpSpec::Format::JUMP_BINARY_IMM_IMM,
248             { }, // no type mappings
249             OpSpec::Attr::SUPPORTS_PREDICATION
250         },
251         {Op::CSEL /* Op::21 */, Platform::XE_HP, 0x72,
252             "csel",
253             "Conditional Select",
254             OpSpec::Format::TERNARY_REGIMM_REG_REGIMM,
255             {
256                 // F <- F
257                 {TYPE(Type::F),TYPE(Type::F)},
258                 // HF <- HF
259                 {TYPE(Type::HF),TYPE(Type::HF)},
260                 // D <- D
261                 {TYPE(Type::D),TYPE(Type::D)},
262                 // W <- W
263                 {TYPE(Type::W),TYPE(Type::W)}
264             },
265             OpSpec::Attr::SUPPORTS_FLAGMODIFIER|OpSpec::Attr::SUPPORTS_SATURATION|OpSpec::Attr::SUPPORTS_SRCMODS
266         },
267         {Op::INVALID, Platform::XE_HP, 0x0, nullptr, nullptr, OpSpec::Format::INVALID, {}, OpSpec::Attr::NONE,         },
268         {Op::INVALID, Platform::XE_HP, 0x0, nullptr, nullptr, OpSpec::Format::INVALID, {}, OpSpec::Attr::NONE,         },
269         {Op::INVALID, Platform::XE_HP, 0x0, nullptr, nullptr, OpSpec::Format::INVALID, {}, OpSpec::Attr::NONE,         },
270         {Op::INVALID, Platform::XE_HP, 0x0, nullptr, nullptr, OpSpec::Format::INVALID, {}, OpSpec::Attr::NONE,         },
271         {Op::DP4A /* Op::26 */, Platform::XE_HP, 0x58,
272             "dp4a",
273             "Dot Product 4 Accumulate",
274             OpSpec::Format::TERNARY_REGIMM_REG_REGIMM,
275             {
276                 // UD,D <- UD,D
277                 {TYPE(Type::UD)|TYPE(Type::D),TYPE(Type::UD)|TYPE(Type::D)}
278             },
279             OpSpec::Attr::SUPPORTS_PREDICATION|OpSpec::Attr::SUPPORTS_FLAGMODIFIER|OpSpec::Attr::SUPPORTS_SATURATION
280         },
281         {Op::DPAS /* Op::27 */, Platform::XE_HP, 0x59,
282             "dpas",
283             "Dot Product Accumulate Systolic",
284             OpSpec::Format::TERNARY_REGIMM_REG_REGIMM,
285             {
286                 // UD,D <- UD,D,UB,B,U4,S4,U2,S2
287                 {TYPE(Type::UD)|TYPE(Type::D),TYPE(Type::UD)|TYPE(Type::D)|TYPE(Type::UB)|TYPE(Type::B)|TYPE(Type::U4)|TYPE(Type::S4)|TYPE(Type::U2)|TYPE(Type::S2)},
288                 // F <- F,BF
289                 {TYPE(Type::F),TYPE(Type::F)|TYPE(Type::BF)},
290                 // F <- F,HF
291                 {TYPE(Type::F),TYPE(Type::F)|TYPE(Type::HF)}
292             },
293             OpSpec::Attr::NONE
294         },
295         {Op::DPASW /* Op::28 */, Platform::XE_HP, 0x5A,
296             "dpasw",
297             "Dot Product Accumulate Systolic Wide",
298             OpSpec::Format::TERNARY_REGIMM_REG_REGIMM,
299             {
300                 // UD,D <- UD,D,UB,B,U4,S4,U2,S2
301                 {TYPE(Type::UD)|TYPE(Type::D),TYPE(Type::UD)|TYPE(Type::D)|TYPE(Type::UB)|TYPE(Type::B)|TYPE(Type::U4)|TYPE(Type::S4)|TYPE(Type::U2)|TYPE(Type::S2)},
302                 // F <- F,BF
303                 {TYPE(Type::F),TYPE(Type::F)|TYPE(Type::BF)},
304                 // F <- F,HF
305                 {TYPE(Type::F),TYPE(Type::F)|TYPE(Type::HF)}
306             },
307             OpSpec::Attr::NONE
308         },
309         {Op::INVALID, Platform::XE_HP, 0x0, nullptr, nullptr, OpSpec::Format::INVALID, {}, OpSpec::Attr::NONE,         },
310         {Op::ELSE /* Op::30 */, Platform::XE_HP, 0x24,
311             "else",
312             "Else",
313             OpSpec::Format::JUMP_BINARY_IMM_IMM,
314             { }, // no type mappings
315             OpSpec::Attr::SUPPORTS_BRCTL
316         },
317         {Op::ENDIF /* Op::31 */, Platform::XE_HP, 0x25,
318             "endif",
319             "End If",
320             OpSpec::Format::JUMP_UNARY_IMM,
321             { }, // no type mappings
322             OpSpec::Attr::NONE
323         },
324         {Op::INVALID, Platform::XE_HP, 0x0, nullptr, nullptr, OpSpec::Format::INVALID, {}, OpSpec::Attr::NONE,         },
325         {Op::INVALID, Platform::XE_HP, 0x0, nullptr, nullptr, OpSpec::Format::INVALID, {}, OpSpec::Attr::NONE,         },
326         {Op::FBH /* Op::34 */, Platform::XE_HP, 0x4B,
327             "fbh",
328             "Find First Bit from MSB Side",
329             OpSpec::Format::BASIC_UNARY_REGIMM,
330             {
331                 // UD <- UD,D
332                 {TYPE(Type::UD),TYPE(Type::UD)|TYPE(Type::D)}
333             },
334             OpSpec::Attr::SUPPORTS_PREDICATION
335         },
336         {Op::FBL /* Op::35 */, Platform::XE_HP, 0x4C,
337             "fbl",
338             "Find First Bit from LSB Side",
339             OpSpec::Format::BASIC_UNARY_REGIMM,
340             {
341                 // UD <- UD
342                 {TYPE(Type::UD),TYPE(Type::UD)}
343             },
344             OpSpec::Attr::SUPPORTS_PREDICATION
345         },
346         {Op::FRC /* Op::36 */, Platform::XE_HP, 0x43,
347             "frc",
348             "Fraction",
349             OpSpec::Format::BASIC_UNARY_REGIMM,
350             {
351                 // F <- F
352                 {TYPE(Type::F),TYPE(Type::F)}
353             },
354             OpSpec::Attr::SUPPORTS_PREDICATION|OpSpec::Attr::SUPPORTS_FLAGMODIFIER|OpSpec::Attr::SUPPORTS_SRCMODS
355         },
356         {Op::INVALID, Platform::XE_HP, 0x0, nullptr, nullptr, OpSpec::Format::INVALID, {}, OpSpec::Attr::NONE,         },
357         {Op::INVALID, Platform::XE_HP, 0x0, nullptr, nullptr, OpSpec::Format::INVALID, {}, OpSpec::Attr::NONE,         },
358         {Op::GOTO /* Op::39 */, Platform::XE_HP, 0x2E,
359             "goto",
360             "Goto",
361             OpSpec::Format::JUMP_BINARY_IMM_IMM,
362             { }, // no type mappings
363             OpSpec::Attr::SUPPORTS_BRCTL|OpSpec::Attr::SUPPORTS_PREDICATION
364         },
365         {Op::HALT /* Op::40 */, Platform::XE_HP, 0x2A,
366             "halt",
367             "Halt",
368             OpSpec::Format::JUMP_BINARY_IMM_IMM,
369             { }, // no type mappings
370             OpSpec::Attr::SUPPORTS_PREDICATION
371         },
372         {Op::IF /* Op::41 */, Platform::XE_HP, 0x22,
373             "if",
374             "If",
375             OpSpec::Format::JUMP_BINARY_IMM_IMM,
376             { }, // no type mappings
377             OpSpec::Attr::SUPPORTS_BRCTL|OpSpec::Attr::SUPPORTS_PREDICATION
378         },
379         {Op::ILLEGAL /* Op::42 */, Platform::XE_HP, 0x00,
380             "illegal",
381             "Illegal",
382             OpSpec::Format::NULLARY,
383             { }, // no type mappings
384             OpSpec::Attr::NONE
385         },
386         {Op::JMPI /* Op::43 */, Platform::XE_HP, 0x20,
387             "jmpi",
388             "Jump Indexed",
389             OpSpec::Format::JUMP_UNARY_REGIMM,
390             { }, // no type mappings
391             OpSpec::Attr::SUPPORTS_PREDICATION
392         },
393         {Op::JOIN /* Op::44 */, Platform::XE_HP, 0x2F,
394             "join",
395             "Join",
396             OpSpec::Format::JUMP_UNARY_IMM,
397             { }, // no type mappings
398             OpSpec::Attr::SUPPORTS_PREDICATION
399         },
400         {Op::INVALID, Platform::XE_HP, 0x0, nullptr, nullptr, OpSpec::Format::INVALID, {}, OpSpec::Attr::NONE,         },
401         {Op::INVALID, Platform::XE_HP, 0x0, nullptr, nullptr, OpSpec::Format::INVALID, {}, OpSpec::Attr::NONE,         },
402         {Op::LZD /* Op::47 */, Platform::XE_HP, 0x4A,
403             "lzd",
404             "Leading Zero Detection",
405             OpSpec::Format::BASIC_UNARY_REGIMM,
406             {
407                 // UD <- UB,B,UW,W,UD,D
408                 {TYPE(Type::UD),TYPE(Type::UB)|TYPE(Type::B)|TYPE(Type::UW)|TYPE(Type::W)|TYPE(Type::UD)|TYPE(Type::D)}
409             },
410             OpSpec::Attr::SUPPORTS_PREDICATION|OpSpec::Attr::SUPPORTS_FLAGMODIFIER|OpSpec::Attr::SUPPORTS_SATURATION|OpSpec::Attr::SUPPORTS_SRCMODS
411         },
412         {Op::MAC /* Op::48 */, Platform::XE_HP, 0x48,
413             "mac",
414             "Multiply Accumulate",
415             OpSpec::Format::BASIC_BINARY_REG_REGIMM,
416             {
417                 // UB,B,UW,W,UD,D <- UB,B,UW,W
418                 {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)},
419                 // F <- F
420                 {TYPE(Type::F),TYPE(Type::F)},
421                 // HF <- HF
422                 {TYPE(Type::HF),TYPE(Type::HF)},
423                 // BF,F <- BF,F
424                 {TYPE(Type::BF)|TYPE(Type::F),TYPE(Type::BF)|TYPE(Type::F)},
425                 // DF <- DF
426                 {TYPE(Type::DF),TYPE(Type::DF)}
427             },
428             OpSpec::Attr::SUPPORTS_PREDICATION|OpSpec::Attr::SUPPORTS_FLAGMODIFIER|OpSpec::Attr::SUPPORTS_SATURATION|OpSpec::Attr::SUPPORTS_SRCMODS
429         },
430         {Op::MACH /* Op::49 */, Platform::XE_HP, 0x49,
431             "mach",
432             "Multiply Accumulate High",
433             OpSpec::Format::BASIC_BINARY_REG_REGIMM,
434             {
435                 // D <- D
436                 {TYPE(Type::D),TYPE(Type::D)},
437                 // UD <- UD
438                 {TYPE(Type::UD),TYPE(Type::UD)}
439             },
440             OpSpec::Attr::SUPPORTS_PREDICATION|OpSpec::Attr::SUPPORTS_SRCMODS
441         },
442         {Op::INVALID, Platform::XE_HP, 0x0, nullptr, nullptr, OpSpec::Format::INVALID, {}, OpSpec::Attr::NONE,         },
443         {Op::MAD /* Op::51 */, Platform::XE_HP, 0x5B,
444             "mad",
445             "Multiply Add",
446             OpSpec::Format::TERNARY_REGIMM_REG_REGIMM,
447             {
448                 // F <- F
449                 {TYPE(Type::F),TYPE(Type::F)},
450                 // HF <- HF
451                 {TYPE(Type::HF),TYPE(Type::HF)},
452                 // BF,F <- BF,F
453                 {TYPE(Type::BF)|TYPE(Type::F),TYPE(Type::BF)|TYPE(Type::F)},
454                 // W <- B
455                 {TYPE(Type::W),TYPE(Type::B)},
456                 // W,D <- W,D
457                 {TYPE(Type::W)|TYPE(Type::D),TYPE(Type::W)|TYPE(Type::D)},
458                 // DF <- DF
459                 {TYPE(Type::DF),TYPE(Type::DF)}
460             },
461             OpSpec::Attr::SUPPORTS_PREDICATION|OpSpec::Attr::SUPPORTS_FLAGMODIFIER|OpSpec::Attr::SUPPORTS_SATURATION|OpSpec::Attr::SUPPORTS_SRCMODS
462         },
463         {Op::MADM /* Op::52 */, Platform::XE_HP, 0x5D,
464             "madm",
465             "Multiply Add for Macro",
466             OpSpec::Format::TERNARY_REGIMM_REG_REGIMM,
467             {
468                 // F <- F
469                 {TYPE(Type::F),TYPE(Type::F)},
470                 // DF <- DF
471                 {TYPE(Type::DF),TYPE(Type::DF)}
472             },
473             OpSpec::Attr::SUPPORTS_PREDICATION|OpSpec::Attr::SUPPORTS_FLAGMODIFIER|OpSpec::Attr::SUPPORTS_SATURATION|OpSpec::Attr::SUPPORTS_SRCMODS
474         },
475         {Op::INVALID, Platform::XE_HP, 0x0, nullptr, nullptr, OpSpec::Format::INVALID, {}, OpSpec::Attr::NONE,         },
476         {Op::INVALID, Platform::XE_HP, 0x0, nullptr, nullptr, OpSpec::Format::INVALID, {}, OpSpec::Attr::NONE,         },
477         {Op::MATH /* Op::55 */, Platform::XE_HP, 0x38,
478             "math",
479             "Extended Math Function",
480             OpSpec::Format::MATH_BINARY_REG_REGIMM,
481             {
482                 // F,HF <- F,HF
483                 {TYPE(Type::F)|TYPE(Type::HF),TYPE(Type::F)|TYPE(Type::HF)}
484             },
485             OpSpec::Attr::SUPPORTS_PREDICATION|OpSpec::Attr::SUPPORTS_SATURATION|OpSpec::Attr::SUPPORTS_SRCMODS
486         },
487         {Op::MOV /* Op::56 */, Platform::XE_HP, 0x61,
488             "mov",
489             "Move",
490             OpSpec::Format::BASIC_UNARY_REGIMM,
491             {
492                 // UB,B,UW,W,UD,D <- UB,B,UW,W,UD,D
493                 {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)},
494                 // F <- UB,B,UW,W,UD,D
495                 {TYPE(Type::F),TYPE(Type::UB)|TYPE(Type::B)|TYPE(Type::UW)|TYPE(Type::W)|TYPE(Type::UD)|TYPE(Type::D)},
496                 // UB,B,UW,W,UD,D <- F
497                 {TYPE(Type::UB)|TYPE(Type::B)|TYPE(Type::UW)|TYPE(Type::W)|TYPE(Type::UD)|TYPE(Type::D),TYPE(Type::F)},
498                 // F <- F
499                 {TYPE(Type::F),TYPE(Type::F)},
500                 // HF <- UB,B,UW,W,UD,D
501                 {TYPE(Type::HF),TYPE(Type::UB)|TYPE(Type::B)|TYPE(Type::UW)|TYPE(Type::W)|TYPE(Type::UD)|TYPE(Type::D)},
502                 // HF <- F
503                 {TYPE(Type::HF),TYPE(Type::F)},
504                 // UB,B,UW,W,UD,D <- HF
505                 {TYPE(Type::UB)|TYPE(Type::B)|TYPE(Type::UW)|TYPE(Type::W)|TYPE(Type::UD)|TYPE(Type::D),TYPE(Type::HF)},
506                 // F <- HF
507                 {TYPE(Type::F),TYPE(Type::HF)},
508                 // HF <- HF
509                 {TYPE(Type::HF),TYPE(Type::HF)},
510                 // BF <- F
511                 {TYPE(Type::BF),TYPE(Type::F)},
512                 // F <- BF
513                 {TYPE(Type::F),TYPE(Type::BF)},
514                 // DF,F,UQ,Q,UW,W,UD,D <- DF
515                 {TYPE(Type::DF)|TYPE(Type::F)|TYPE(Type::UQ)|TYPE(Type::Q)|TYPE(Type::UW)|TYPE(Type::W)|TYPE(Type::UD)|TYPE(Type::D),TYPE(Type::DF)},
516                 // DF <- F,UQ,Q,UW,W,UD,D
517                 {TYPE(Type::DF),TYPE(Type::F)|TYPE(Type::UQ)|TYPE(Type::Q)|TYPE(Type::UW)|TYPE(Type::W)|TYPE(Type::UD)|TYPE(Type::D)},
518                 // UQ,Q,F,UW,W,UD,D <- UQ,Q
519                 {TYPE(Type::UQ)|TYPE(Type::Q)|TYPE(Type::F)|TYPE(Type::UW)|TYPE(Type::W)|TYPE(Type::UD)|TYPE(Type::D),TYPE(Type::UQ)|TYPE(Type::Q)},
520                 // UQ,Q <- F,UW,W,UD,D
521                 {TYPE(Type::UQ)|TYPE(Type::Q),TYPE(Type::F)|TYPE(Type::UW)|TYPE(Type::W)|TYPE(Type::UD)|TYPE(Type::D)}
522             },
523             OpSpec::Attr::SUPPORTS_PREDICATION|OpSpec::Attr::SUPPORTS_FLAGMODIFIER|OpSpec::Attr::SUPPORTS_SATURATION|OpSpec::Attr::SUPPORTS_SRCMODS
524         },
525         {Op::MOVI /* Op::57 */, Platform::XE_HP, 0x63,
526             "movi",
527             "Move Indexed",
528             OpSpec::Format::BASIC_BINARY_REG_REGIMM,
529             {
530                 // B <- B
531                 {TYPE(Type::B),TYPE(Type::B)},
532                 // UB <- UB
533                 {TYPE(Type::UB),TYPE(Type::UB)},
534                 // W <- W
535                 {TYPE(Type::W),TYPE(Type::W)},
536                 // UW <- UW
537                 {TYPE(Type::UW),TYPE(Type::UW)},
538                 // D <- D
539                 {TYPE(Type::D),TYPE(Type::D)},
540                 // UD <- UD
541                 {TYPE(Type::UD),TYPE(Type::UD)}
542             },
543             OpSpec::Attr::SUPPORTS_PREDICATION|OpSpec::Attr::SUPPORTS_SATURATION|OpSpec::Attr::SUPPORTS_SRCMODS
544         },
545         {Op::MUL /* Op::58 */, Platform::XE_HP, 0x41,
546             "mul",
547             "Multiply",
548             OpSpec::Format::BASIC_BINARY_REG_REGIMM,
549             {
550                 // UB,B <- UB,B
551                 {TYPE(Type::UB)|TYPE(Type::B),TYPE(Type::UB)|TYPE(Type::B)},
552                 // UW,W <- UB,B
553                 {TYPE(Type::UW)|TYPE(Type::W),TYPE(Type::UB)|TYPE(Type::B)},
554                 // UD,D <- UB,B
555                 {TYPE(Type::UD)|TYPE(Type::D),TYPE(Type::UB)|TYPE(Type::B)},
556                 // UW,W <- UW,W
557                 {TYPE(Type::UW)|TYPE(Type::W),TYPE(Type::UW)|TYPE(Type::W)},
558                 // UD,D <- UW,W
559                 {TYPE(Type::UD)|TYPE(Type::D),TYPE(Type::UW)|TYPE(Type::W)},
560                 // F <- F
561                 {TYPE(Type::F),TYPE(Type::F)},
562                 // HF <- HF
563                 {TYPE(Type::HF),TYPE(Type::HF)},
564                 // BF,F <- BF,F
565                 {TYPE(Type::BF)|TYPE(Type::F),TYPE(Type::BF)|TYPE(Type::F)},
566                 // DF <- DF
567                 {TYPE(Type::DF),TYPE(Type::DF)},
568                 // UQ,Q <- UD,D
569                 {TYPE(Type::UQ)|TYPE(Type::Q),TYPE(Type::UD)|TYPE(Type::D)},
570                 // UD,D <- UD,D
571                 {TYPE(Type::UD)|TYPE(Type::D),TYPE(Type::UD)|TYPE(Type::D)}
572             },
573             OpSpec::Attr::SUPPORTS_PREDICATION|OpSpec::Attr::SUPPORTS_FLAGMODIFIER|OpSpec::Attr::SUPPORTS_SATURATION|OpSpec::Attr::SUPPORTS_SRCMODS
574         },
575         {Op::NOP /* Op::59 */, Platform::XE_HP, 0x60,
576             "nop",
577             "No Operation",
578             OpSpec::Format::NULLARY,
579             { }, // no type mappings
580             OpSpec::Attr::NONE
581         },
582         {Op::NOT /* Op::60 */, Platform::XE_HP, 0x64,
583             "not",
584             "Logic Not",
585             OpSpec::Format::BASIC_UNARY_REGIMM,
586             {
587                 // UB,B,UW,W,UD,D <- UB,B,UW,W,UD,D
588                 {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)},
589                 // UQ,Q <- UW,W,UD,D,UQ,Q
590                 {TYPE(Type::UQ)|TYPE(Type::Q),TYPE(Type::UW)|TYPE(Type::W)|TYPE(Type::UD)|TYPE(Type::D)|TYPE(Type::UQ)|TYPE(Type::Q)},
591                 // UW,W,UD,D <- UQ,Q
592                 {TYPE(Type::UW)|TYPE(Type::W)|TYPE(Type::UD)|TYPE(Type::D),TYPE(Type::UQ)|TYPE(Type::Q)}
593             },
594             OpSpec::Attr::IS_BITWISE|OpSpec::Attr::SUPPORTS_PREDICATION|OpSpec::Attr::SUPPORTS_FLAGMODIFIER|OpSpec::Attr::SUPPORTS_SRCMODS
595         },
596         {Op::OR /* Op::61 */, Platform::XE_HP, 0x66,
597             "or",
598             "Logic Or",
599             OpSpec::Format::BASIC_BINARY_REG_REGIMM,
600             {
601                 // UB,B,UW,W,UD,D <- UB,B,UW,W,UD,D
602                 {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)},
603                 // UQ,Q <- UW,W,UD,D,UQ,Q
604                 {TYPE(Type::UQ)|TYPE(Type::Q),TYPE(Type::UW)|TYPE(Type::W)|TYPE(Type::UD)|TYPE(Type::D)|TYPE(Type::UQ)|TYPE(Type::Q)},
605                 // UW,W,UD,D <- UQ,Q
606                 {TYPE(Type::UW)|TYPE(Type::W)|TYPE(Type::UD)|TYPE(Type::D),TYPE(Type::UQ)|TYPE(Type::Q)}
607             },
608             OpSpec::Attr::IS_BITWISE|OpSpec::Attr::SUPPORTS_PREDICATION|OpSpec::Attr::SUPPORTS_FLAGMODIFIER|OpSpec::Attr::SUPPORTS_SRCMODS
609         },
610         {Op::INVALID, Platform::XE_HP, 0x0, nullptr, nullptr, OpSpec::Format::INVALID, {}, OpSpec::Attr::NONE,         },
611         {Op::RET /* Op::63 */, Platform::XE_HP, 0x2D,
612             "ret",
613             "Return",
614             OpSpec::Format::JUMP_UNARY_REG,
615             { }, // no type mappings
616             OpSpec::Attr::SUPPORTS_PREDICATION
617         },
618         {Op::RNDD /* Op::64 */, Platform::XE_HP, 0x45,
619             "rndd",
620             "Round Down",
621             OpSpec::Format::BASIC_UNARY_REGIMM,
622             {
623                 // F <- F
624                 {TYPE(Type::F),TYPE(Type::F)}
625             },
626             OpSpec::Attr::SUPPORTS_PREDICATION|OpSpec::Attr::SUPPORTS_FLAGMODIFIER|OpSpec::Attr::SUPPORTS_SATURATION|OpSpec::Attr::SUPPORTS_SRCMODS
627         },
628         {Op::RNDE /* Op::65 */, Platform::XE_HP, 0x46,
629             "rnde",
630             "Round to Nearest or Even",
631             OpSpec::Format::BASIC_UNARY_REGIMM,
632             {
633                 // F <- F
634                 {TYPE(Type::F),TYPE(Type::F)}
635             },
636             OpSpec::Attr::SUPPORTS_PREDICATION|OpSpec::Attr::SUPPORTS_FLAGMODIFIER|OpSpec::Attr::SUPPORTS_SATURATION|OpSpec::Attr::SUPPORTS_SRCMODS
637         },
638         {Op::RNDU /* Op::66 */, Platform::XE_HP, 0x44,
639             "rndu",
640             "Round Up",
641             OpSpec::Format::BASIC_UNARY_REGIMM,
642             {
643                 // F <- F
644                 {TYPE(Type::F),TYPE(Type::F)}
645             },
646             OpSpec::Attr::SUPPORTS_PREDICATION|OpSpec::Attr::SUPPORTS_FLAGMODIFIER|OpSpec::Attr::SUPPORTS_SATURATION|OpSpec::Attr::SUPPORTS_SRCMODS
647         },
648         {Op::RNDZ /* Op::67 */, Platform::XE_HP, 0x47,
649             "rndz",
650             "Round to Zero",
651             OpSpec::Format::BASIC_UNARY_REGIMM,
652             {
653                 // F <- F
654                 {TYPE(Type::F),TYPE(Type::F)}
655             },
656             OpSpec::Attr::SUPPORTS_PREDICATION|OpSpec::Attr::SUPPORTS_FLAGMODIFIER|OpSpec::Attr::SUPPORTS_SATURATION|OpSpec::Attr::SUPPORTS_SRCMODS
657         },
658         {Op::ROL /* Op::68 */, Platform::XE_HP, 0x6F,
659             "rol",
660             "Rotate Left",
661             OpSpec::Format::BASIC_BINARY_REG_REGIMM,
662             {
663                 // UW,UD <- UW,UD
664                 {TYPE(Type::UW)|TYPE(Type::UD),TYPE(Type::UW)|TYPE(Type::UD)}
665             },
666             OpSpec::Attr::IS_BITWISE|OpSpec::Attr::SUPPORTS_PREDICATION|OpSpec::Attr::SUPPORTS_FLAGMODIFIER
667         },
668         {Op::ROR /* Op::69 */, Platform::XE_HP, 0x6E,
669             "ror",
670             "Rotate Right",
671             OpSpec::Format::BASIC_BINARY_REG_REGIMM,
672             {
673                 // UW,UD <- UW,UD
674                 {TYPE(Type::UW)|TYPE(Type::UD),TYPE(Type::UW)|TYPE(Type::UD)}
675             },
676             OpSpec::Attr::IS_BITWISE|OpSpec::Attr::SUPPORTS_PREDICATION|OpSpec::Attr::SUPPORTS_FLAGMODIFIER
677         },
678         {Op::INVALID, Platform::XE_HP, 0x0, nullptr, nullptr, OpSpec::Format::INVALID, {}, OpSpec::Attr::NONE,         },
679         {Op::INVALID, Platform::XE_HP, 0x0, nullptr, nullptr, OpSpec::Format::INVALID, {}, OpSpec::Attr::NONE,         },
680         {Op::INVALID, Platform::XE_HP, 0x0, nullptr, nullptr, OpSpec::Format::INVALID, {}, OpSpec::Attr::NONE,         },
681         {Op::INVALID, Platform::XE_HP, 0x0, nullptr, nullptr, OpSpec::Format::INVALID, {}, OpSpec::Attr::NONE,         },
682         {Op::SEL /* Op::74 */, Platform::XE_HP, 0x62,
683             "sel",
684             "Select",
685             OpSpec::Format::BASIC_BINARY_REG_REGIMM,
686             {
687                 // UB,B,UW,W,UD,D <- UB,B,UW,W,UD,D
688                 {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)},
689                 // F <- F
690                 {TYPE(Type::F),TYPE(Type::F)},
691                 // HF <- HF
692                 {TYPE(Type::HF),TYPE(Type::HF)},
693                 // BF,F <- BF,F
694                 {TYPE(Type::BF)|TYPE(Type::F),TYPE(Type::BF)|TYPE(Type::F)},
695                 // DF <- DF
696                 {TYPE(Type::DF),TYPE(Type::DF)},
697                 // UQ,Q <- UW,W,UD,D,UQ,Q
698                 {TYPE(Type::UQ)|TYPE(Type::Q),TYPE(Type::UW)|TYPE(Type::W)|TYPE(Type::UD)|TYPE(Type::D)|TYPE(Type::UQ)|TYPE(Type::Q)},
699                 // UW,W,UD,D <- UQ,Q
700                 {TYPE(Type::UW)|TYPE(Type::W)|TYPE(Type::UD)|TYPE(Type::D),TYPE(Type::UQ)|TYPE(Type::Q)}
701             },
702             OpSpec::Attr::IS_SELECT|OpSpec::Attr::SUPPORTS_PREDICATION|OpSpec::Attr::SUPPORTS_FLAGMODIFIER|OpSpec::Attr::SUPPORTS_SATURATION|OpSpec::Attr::SUPPORTS_SRCMODS
703         },
704         {Op::SEND /* Op::75 */, Platform::XE_HP, 0x31,
705             "send",
706             "Send Message",
707             OpSpec::Format::SEND_BINARY,
708             { }, // no type mappings
709             OpSpec::Attr::SUPPORTS_PREDICATION
710         },
711         {Op::SENDC /* Op::76 */, Platform::XE_HP, 0x32,
712             "sendc",
713             "Send Message Conditional",
714             OpSpec::Format::SEND_BINARY,
715             { }, // no type mappings
716             OpSpec::Attr::SUPPORTS_PREDICATION
717         },
718         {Op::INVALID, Platform::XE_HP, 0x0, nullptr, nullptr, OpSpec::Format::INVALID, {}, OpSpec::Attr::NONE,         },
719         {Op::INVALID, Platform::XE_HP, 0x0, nullptr, nullptr, OpSpec::Format::INVALID, {}, OpSpec::Attr::NONE,         },
720         {Op::INVALID, Platform::XE_HP, 0x0, nullptr, nullptr, OpSpec::Format::INVALID, {}, OpSpec::Attr::NONE,         },
721         {Op::SHL /* Op::80 */, Platform::XE_HP, 0x69,
722             "shl",
723             "Shift Left",
724             OpSpec::Format::BASIC_BINARY_REG_REGIMM,
725             {
726                 // UB,B,UW,W,UD,D <- UB,B,UW,W,UD,D
727                 {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)},
728                 // UQ,Q <- UW,W,UD,D,UQ,Q
729                 {TYPE(Type::UQ)|TYPE(Type::Q),TYPE(Type::UW)|TYPE(Type::W)|TYPE(Type::UD)|TYPE(Type::D)|TYPE(Type::UQ)|TYPE(Type::Q)},
730                 // UW,W,UD,D <- UQ,Q
731                 {TYPE(Type::UW)|TYPE(Type::W)|TYPE(Type::UD)|TYPE(Type::D),TYPE(Type::UQ)|TYPE(Type::Q)}
732             },
733             OpSpec::Attr::IS_BITWISE|OpSpec::Attr::SUPPORTS_PREDICATION|OpSpec::Attr::SUPPORTS_FLAGMODIFIER|OpSpec::Attr::SUPPORTS_SATURATION|OpSpec::Attr::SUPPORTS_SRCMODS
734         },
735         {Op::SHR /* Op::81 */, Platform::XE_HP, 0x68,
736             "shr",
737             "Shift Right",
738             OpSpec::Format::BASIC_BINARY_REG_REGIMM,
739             {
740                 // UB,UW,UD <- UB,UW,UD
741                 {TYPE(Type::UB)|TYPE(Type::UW)|TYPE(Type::UD),TYPE(Type::UB)|TYPE(Type::UW)|TYPE(Type::UD)},
742                 // UQ <- UW,UD,UQ
743                 {TYPE(Type::UQ),TYPE(Type::UW)|TYPE(Type::UD)|TYPE(Type::UQ)},
744                 // UW,UD <- UQ
745                 {TYPE(Type::UW)|TYPE(Type::UD),TYPE(Type::UQ)}
746             },
747             OpSpec::Attr::IS_BITWISE|OpSpec::Attr::SUPPORTS_PREDICATION|OpSpec::Attr::SUPPORTS_FLAGMODIFIER|OpSpec::Attr::SUPPORTS_SATURATION|OpSpec::Attr::SUPPORTS_SRCMODS
748         },
749         {Op::INVALID, Platform::XE_HP, 0x0, nullptr, nullptr, OpSpec::Format::INVALID, {}, OpSpec::Attr::NONE,         },
750         {Op::INVALID, Platform::XE_HP, 0x0, nullptr, nullptr, OpSpec::Format::INVALID, {}, OpSpec::Attr::NONE,         },
751         {Op::SUBB /* Op::84 */, Platform::XE_HP, 0x4F,
752             "subb",
753             "Subtraction with Borrow",
754             OpSpec::Format::BASIC_BINARY_REG_REGIMM,
755             {
756                 // UD <- UD
757                 {TYPE(Type::UD),TYPE(Type::UD)}
758             },
759             OpSpec::Attr::SUPPORTS_PREDICATION|OpSpec::Attr::SUPPORTS_FLAGMODIFIER|OpSpec::Attr::SUPPORTS_SATURATION
760         },
761         {Op::SYNC /* Op::85 */, Platform::XE_HP, 0x01,
762             "sync",
763             "Synchronize",
764             OpSpec::Format::SYNC_UNARY,
765             {
766                 //  <- UB,B,UW,W,UD,D,UQ,Q,HF,F,DF
767                 {ENUM_BITSET_EMPTY_VALUE,TYPE(Type::UB)|TYPE(Type::B)|TYPE(Type::UW)|TYPE(Type::W)|TYPE(Type::UD)|TYPE(Type::D)|TYPE(Type::UQ)|TYPE(Type::Q)|TYPE(Type::HF)|TYPE(Type::F)|TYPE(Type::DF)}
768             },
769             OpSpec::Attr::NONE
770         },
771         {Op::INVALID, Platform::XE_HP, 0x0, nullptr, nullptr, OpSpec::Format::INVALID, {}, OpSpec::Attr::NONE,         },
772         {Op::WHILE /* Op::87 */, Platform::XE_HP, 0x27,
773             "while",
774             "While",
775             OpSpec::Format::JUMP_UNARY_IMM,
776             { }, // no type mappings
777             OpSpec::Attr::SUPPORTS_PREDICATION
778         },
779         {Op::XOR /* Op::88 */, Platform::XE_HP, 0x67,
780             "xor",
781             "Logic Xor",
782             OpSpec::Format::BASIC_BINARY_REG_REGIMM,
783             {
784                 // UB,B,UW,W,UD,D <- UB,B,UW,W,UD,D
785                 {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)},
786                 // UQ,Q <- UW,W,UD,D,UQ,Q
787                 {TYPE(Type::UQ)|TYPE(Type::Q),TYPE(Type::UW)|TYPE(Type::W)|TYPE(Type::UD)|TYPE(Type::D)|TYPE(Type::UQ)|TYPE(Type::Q)},
788                 // UW,W,UD,D <- UQ,Q
789                 {TYPE(Type::UW)|TYPE(Type::W)|TYPE(Type::UD)|TYPE(Type::D),TYPE(Type::UQ)|TYPE(Type::Q)}
790             },
791             OpSpec::Attr::IS_BITWISE|OpSpec::Attr::SUPPORTS_PREDICATION|OpSpec::Attr::SUPPORTS_FLAGMODIFIER|OpSpec::Attr::SUPPORTS_SRCMODS
792         }
793     }; // end MODEL_XE_HP_OPSPECS
794 } // namespace iga
795 #endif // IGA_MODELS_XE_HP_HPP
796