PyNerva 0.0.5__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of PyNerva might be problematic. Click here for more details.

Files changed (74) hide show
  1. nervapy/__init__.py +50 -0
  2. nervapy/abi.py +91 -0
  3. nervapy/arm/__init__.py +124 -0
  4. nervapy/arm/__main__.py +0 -0
  5. nervapy/arm/abi.py +138 -0
  6. nervapy/arm/formats.py +49 -0
  7. nervapy/arm/function.py +2405 -0
  8. nervapy/arm/generic.py +10797 -0
  9. nervapy/arm/instructions.py +519 -0
  10. nervapy/arm/isa.py +409 -0
  11. nervapy/arm/literal_pool.py +331 -0
  12. nervapy/arm/microarchitecture.py +211 -0
  13. nervapy/arm/pseudo.py +652 -0
  14. nervapy/arm/registers.py +1458 -0
  15. nervapy/arm/vfpneon.py +4092 -0
  16. nervapy/arm.py +13 -0
  17. nervapy/c/__init__.py +1 -0
  18. nervapy/c/types.py +436 -0
  19. nervapy/codegen.py +99 -0
  20. nervapy/common/__init__.py +4 -0
  21. nervapy/common/function.py +5 -0
  22. nervapy/common/regalloc.py +121 -0
  23. nervapy/constant_data.py +282 -0
  24. nervapy/encoder.py +246 -0
  25. nervapy/formats/__init__.py +2 -0
  26. nervapy/formats/elf/__init__.py +4 -0
  27. nervapy/formats/elf/file.py +178 -0
  28. nervapy/formats/elf/image.py +106 -0
  29. nervapy/formats/elf/section.py +422 -0
  30. nervapy/formats/elf/symbol.py +281 -0
  31. nervapy/formats/macho/__init__.py +2 -0
  32. nervapy/formats/macho/file.py +123 -0
  33. nervapy/formats/macho/image.py +143 -0
  34. nervapy/formats/macho/section.py +322 -0
  35. nervapy/formats/macho/symbol.py +158 -0
  36. nervapy/formats/mscoff/__init__.py +8 -0
  37. nervapy/formats/mscoff/image.py +132 -0
  38. nervapy/formats/mscoff/section.py +181 -0
  39. nervapy/formats/mscoff/symbol.py +148 -0
  40. nervapy/function.py +136 -0
  41. nervapy/literal.py +731 -0
  42. nervapy/loader.py +188 -0
  43. nervapy/name.py +159 -0
  44. nervapy/parse.py +52 -0
  45. nervapy/stream.py +58 -0
  46. nervapy/util.py +126 -0
  47. nervapy/writer.py +518 -0
  48. nervapy/x86_64/__init__.py +324 -0
  49. nervapy/x86_64/__main__.py +407 -0
  50. nervapy/x86_64/abi.py +517 -0
  51. nervapy/x86_64/amd.py +6464 -0
  52. nervapy/x86_64/avx.py +102029 -0
  53. nervapy/x86_64/crypto.py +1533 -0
  54. nervapy/x86_64/encoding.py +424 -0
  55. nervapy/x86_64/fma.py +19138 -0
  56. nervapy/x86_64/function.py +2707 -0
  57. nervapy/x86_64/generic.py +23384 -0
  58. nervapy/x86_64/instructions.py +500 -0
  59. nervapy/x86_64/isa.py +476 -0
  60. nervapy/x86_64/lower.py +126 -0
  61. nervapy/x86_64/mask.py +2593 -0
  62. nervapy/x86_64/meta.py +143 -0
  63. nervapy/x86_64/mmxsse.py +17265 -0
  64. nervapy/x86_64/nacl.py +327 -0
  65. nervapy/x86_64/operand.py +1204 -0
  66. nervapy/x86_64/options.py +21 -0
  67. nervapy/x86_64/pseudo.py +686 -0
  68. nervapy/x86_64/registers.py +1225 -0
  69. nervapy/x86_64/types.py +17 -0
  70. nervapy/x86_64/uarch.py +580 -0
  71. pynerva-0.0.5.dist-info/METADATA +310 -0
  72. pynerva-0.0.5.dist-info/RECORD +74 -0
  73. pynerva-0.0.5.dist-info/WHEEL +4 -0
  74. pynerva-0.0.5.dist-info/licenses/LICENSE.rst +15 -0
nervapy/x86_64/mask.py ADDED
@@ -0,0 +1,2593 @@
1
+ # This file is auto-generated by /codegen/x86_64.py
2
+ # Instruction data is based on package opcodes 0.3.14
3
+
4
+ import inspect
5
+
6
+ import nervapy.stream
7
+ import nervapy.x86_64.isa
8
+ import nervapy.x86_64.options
9
+ from nervapy.util import is_sint8, is_sint32
10
+ from nervapy.x86_64.encoding import (evex, modrm_sib_disp, optional_rex, rex,
11
+ vex2, vex3)
12
+ from nervapy.x86_64.instructions import BranchInstruction, Instruction
13
+ from nervapy.x86_64.operand import (check_operand, format_operand_type, is_al,
14
+ is_ax, is_cl, is_eax, is_er, is_evex_vmx,
15
+ is_evex_vmy, is_evex_xmm, is_evex_ymm,
16
+ is_imm, is_imm4, is_imm8, is_imm16,
17
+ is_imm32, is_imm64, is_k, is_kk, is_label,
18
+ is_m, is_m8, is_m16, is_m16kz, is_m32,
19
+ is_m32k, is_m32kz, is_m64, is_m64_m32bcst,
20
+ is_m64k, is_m64kz, is_m80, is_m128,
21
+ is_m128_m32bcst, is_m128_m64bcst,
22
+ is_m128kz, is_m256, is_m256_m32bcst,
23
+ is_m256_m64bcst, is_m256kz, is_m512,
24
+ is_m512_m32bcst, is_m512_m64bcst,
25
+ is_m512kz, is_mm, is_r8, is_r8rex, is_r16,
26
+ is_r32, is_r64, is_rax, is_rel8, is_rel32,
27
+ is_sae, is_vmx, is_vmxk, is_vmy, is_vmyk,
28
+ is_vmz, is_vmzk, is_xmm, is_xmm0, is_xmmk,
29
+ is_xmmkz, is_ymm, is_ymmk, is_ymmkz,
30
+ is_zmm, is_zmmk, is_zmmkz)
31
+
32
+
33
+ class KADDB(Instruction):
34
+ """ADD Two 8-bit Masks"""
35
+
36
+ def __init__(self, *args, **kwargs):
37
+ """Supported forms:
38
+
39
+ * KADDB(k, k, k) [AVX512DQ]
40
+ """
41
+
42
+ origin = kwargs.get("origin")
43
+ prototype = kwargs.get("prototype")
44
+ if (
45
+ origin is None
46
+ and prototype is None
47
+ and nervapy.x86_64.options.get_debug_level() > 0
48
+ ):
49
+ origin = inspect.stack()
50
+ super(KADDB, self).__init__("KADDB", origin=origin, prototype=prototype)
51
+ self.operands = tuple(map(check_operand, args))
52
+ if len(self.operands) != 3:
53
+ raise SyntaxError('Instruction "KADDB" requires 3 operands')
54
+ if is_k(self.operands[0]) and is_k(self.operands[1]) and is_k(self.operands[2]):
55
+ self.encodings.append(
56
+ (
57
+ 0x40,
58
+ lambda op, vex3=False: vex2(5, 0, None, op[1].hlcode, vex3)
59
+ + bytearray([0x4A, 0xC0 | op[0].lcode << 3 | op[2].lcode]),
60
+ )
61
+ )
62
+ self.in_regs = (False, True, True)
63
+ self.out_regs = (True, False, False)
64
+ self.out_operands = (True, False, False)
65
+ self.isa_extensions = frozenset([nervapy.x86_64.isa.avx512dq])
66
+ else:
67
+ raise SyntaxError(
68
+ "Invalid operand types: KADDB "
69
+ + ", ".join(map(format_operand_type, self.operands))
70
+ )
71
+ if nervapy.stream.active_stream is not None:
72
+ nervapy.stream.active_stream.add_instruction(self)
73
+
74
+
75
+ class KADDW(Instruction):
76
+ """ADD Two 16-bit Masks"""
77
+
78
+ def __init__(self, *args, **kwargs):
79
+ """Supported forms:
80
+
81
+ * KADDW(k, k, k) [AVX512DQ]
82
+ """
83
+
84
+ origin = kwargs.get("origin")
85
+ prototype = kwargs.get("prototype")
86
+ if (
87
+ origin is None
88
+ and prototype is None
89
+ and nervapy.x86_64.options.get_debug_level() > 0
90
+ ):
91
+ origin = inspect.stack()
92
+ super(KADDW, self).__init__("KADDW", origin=origin, prototype=prototype)
93
+ self.operands = tuple(map(check_operand, args))
94
+ if len(self.operands) != 3:
95
+ raise SyntaxError('Instruction "KADDW" requires 3 operands')
96
+ if is_k(self.operands[0]) and is_k(self.operands[1]) and is_k(self.operands[2]):
97
+ self.encodings.append(
98
+ (
99
+ 0x40,
100
+ lambda op, vex3=False: vex2(4, 0, None, op[1].hlcode, vex3)
101
+ + bytearray([0x4A, 0xC0 | op[0].lcode << 3 | op[2].lcode]),
102
+ )
103
+ )
104
+ self.in_regs = (False, True, True)
105
+ self.out_regs = (True, False, False)
106
+ self.out_operands = (True, False, False)
107
+ self.isa_extensions = frozenset([nervapy.x86_64.isa.avx512dq])
108
+ else:
109
+ raise SyntaxError(
110
+ "Invalid operand types: KADDW "
111
+ + ", ".join(map(format_operand_type, self.operands))
112
+ )
113
+ if nervapy.stream.active_stream is not None:
114
+ nervapy.stream.active_stream.add_instruction(self)
115
+
116
+
117
+ class KADDD(Instruction):
118
+ """ADD Two 32-bit Masks"""
119
+
120
+ def __init__(self, *args, **kwargs):
121
+ """Supported forms:
122
+
123
+ * KADDD(k, k, k) [AVX512BW]
124
+ """
125
+
126
+ origin = kwargs.get("origin")
127
+ prototype = kwargs.get("prototype")
128
+ if (
129
+ origin is None
130
+ and prototype is None
131
+ and nervapy.x86_64.options.get_debug_level() > 0
132
+ ):
133
+ origin = inspect.stack()
134
+ super(KADDD, self).__init__("KADDD", origin=origin, prototype=prototype)
135
+ self.operands = tuple(map(check_operand, args))
136
+ if len(self.operands) != 3:
137
+ raise SyntaxError('Instruction "KADDD" requires 3 operands')
138
+ if is_k(self.operands[0]) and is_k(self.operands[1]) and is_k(self.operands[2]):
139
+ self.encodings.append(
140
+ (
141
+ 0x00,
142
+ lambda op: bytearray(
143
+ [
144
+ 0xC4,
145
+ 0xE1,
146
+ 0xFD ^ (op[1].hlcode << 3),
147
+ 0x4A,
148
+ 0xC0 | op[0].lcode << 3 | op[2].lcode,
149
+ ]
150
+ ),
151
+ )
152
+ )
153
+ self.in_regs = (False, True, True)
154
+ self.out_regs = (True, False, False)
155
+ self.out_operands = (True, False, False)
156
+ self.isa_extensions = frozenset([nervapy.x86_64.isa.avx512bw])
157
+ else:
158
+ raise SyntaxError(
159
+ "Invalid operand types: KADDD "
160
+ + ", ".join(map(format_operand_type, self.operands))
161
+ )
162
+ if nervapy.stream.active_stream is not None:
163
+ nervapy.stream.active_stream.add_instruction(self)
164
+
165
+
166
+ class KADDQ(Instruction):
167
+ """ADD Two 64-bit Masks"""
168
+
169
+ def __init__(self, *args, **kwargs):
170
+ """Supported forms:
171
+
172
+ * KADDQ(k, k, k) [AVX512BW]
173
+ """
174
+
175
+ origin = kwargs.get("origin")
176
+ prototype = kwargs.get("prototype")
177
+ if (
178
+ origin is None
179
+ and prototype is None
180
+ and nervapy.x86_64.options.get_debug_level() > 0
181
+ ):
182
+ origin = inspect.stack()
183
+ super(KADDQ, self).__init__("KADDQ", origin=origin, prototype=prototype)
184
+ self.operands = tuple(map(check_operand, args))
185
+ if len(self.operands) != 3:
186
+ raise SyntaxError('Instruction "KADDQ" requires 3 operands')
187
+ if is_k(self.operands[0]) and is_k(self.operands[1]) and is_k(self.operands[2]):
188
+ self.encodings.append(
189
+ (
190
+ 0x00,
191
+ lambda op: bytearray(
192
+ [
193
+ 0xC4,
194
+ 0xE1,
195
+ 0xFC ^ (op[1].hlcode << 3),
196
+ 0x4A,
197
+ 0xC0 | op[0].lcode << 3 | op[2].lcode,
198
+ ]
199
+ ),
200
+ )
201
+ )
202
+ self.in_regs = (False, True, True)
203
+ self.out_regs = (True, False, False)
204
+ self.out_operands = (True, False, False)
205
+ self.isa_extensions = frozenset([nervapy.x86_64.isa.avx512bw])
206
+ else:
207
+ raise SyntaxError(
208
+ "Invalid operand types: KADDQ "
209
+ + ", ".join(map(format_operand_type, self.operands))
210
+ )
211
+ if nervapy.stream.active_stream is not None:
212
+ nervapy.stream.active_stream.add_instruction(self)
213
+
214
+
215
+ class KANDB(Instruction):
216
+ """Bitwise Logical AND 8-bit Masks"""
217
+
218
+ def __init__(self, *args, **kwargs):
219
+ """Supported forms:
220
+
221
+ * KANDB(k, k, k) [AVX512DQ]
222
+ """
223
+
224
+ origin = kwargs.get("origin")
225
+ prototype = kwargs.get("prototype")
226
+ if (
227
+ origin is None
228
+ and prototype is None
229
+ and nervapy.x86_64.options.get_debug_level() > 0
230
+ ):
231
+ origin = inspect.stack()
232
+ super(KANDB, self).__init__("KANDB", origin=origin, prototype=prototype)
233
+ self.operands = tuple(map(check_operand, args))
234
+ if len(self.operands) != 3:
235
+ raise SyntaxError('Instruction "KANDB" requires 3 operands')
236
+ if is_k(self.operands[0]) and is_k(self.operands[1]) and is_k(self.operands[2]):
237
+ self.encodings.append(
238
+ (
239
+ 0x40,
240
+ lambda op, vex3=False: vex2(5, 0, None, op[1].hlcode, vex3)
241
+ + bytearray([0x41, 0xC0 | op[0].lcode << 3 | op[2].lcode]),
242
+ )
243
+ )
244
+ self.in_regs = (False, True, True)
245
+ self.out_regs = (True, False, False)
246
+ self.out_operands = (True, False, False)
247
+ self.isa_extensions = frozenset([nervapy.x86_64.isa.avx512dq])
248
+ else:
249
+ raise SyntaxError(
250
+ "Invalid operand types: KANDB "
251
+ + ", ".join(map(format_operand_type, self.operands))
252
+ )
253
+ if nervapy.stream.active_stream is not None:
254
+ nervapy.stream.active_stream.add_instruction(self)
255
+
256
+
257
+ class KANDW(Instruction):
258
+ """Bitwise Logical AND 16-bit Masks"""
259
+
260
+ def __init__(self, *args, **kwargs):
261
+ """Supported forms:
262
+
263
+ * KANDW(k, k, k) [AVX512F]
264
+ """
265
+
266
+ origin = kwargs.get("origin")
267
+ prototype = kwargs.get("prototype")
268
+ if (
269
+ origin is None
270
+ and prototype is None
271
+ and nervapy.x86_64.options.get_debug_level() > 0
272
+ ):
273
+ origin = inspect.stack()
274
+ super(KANDW, self).__init__("KANDW", origin=origin, prototype=prototype)
275
+ self.operands = tuple(map(check_operand, args))
276
+ if len(self.operands) != 3:
277
+ raise SyntaxError('Instruction "KANDW" requires 3 operands')
278
+ if is_k(self.operands[0]) and is_k(self.operands[1]) and is_k(self.operands[2]):
279
+ self.encodings.append(
280
+ (
281
+ 0x40,
282
+ lambda op, vex3=False: vex2(4, 0, None, op[1].hlcode, vex3)
283
+ + bytearray([0x41, 0xC0 | op[0].lcode << 3 | op[2].lcode]),
284
+ )
285
+ )
286
+ self.in_regs = (False, True, True)
287
+ self.out_regs = (True, False, False)
288
+ self.out_operands = (True, False, False)
289
+ self.isa_extensions = frozenset([nervapy.x86_64.isa.avx512f])
290
+ else:
291
+ raise SyntaxError(
292
+ "Invalid operand types: KANDW "
293
+ + ", ".join(map(format_operand_type, self.operands))
294
+ )
295
+ if nervapy.stream.active_stream is not None:
296
+ nervapy.stream.active_stream.add_instruction(self)
297
+
298
+
299
+ class KANDD(Instruction):
300
+ """Bitwise Logical AND 32-bit Masks"""
301
+
302
+ def __init__(self, *args, **kwargs):
303
+ """Supported forms:
304
+
305
+ * KANDD(k, k, k) [AVX512BW]
306
+ """
307
+
308
+ origin = kwargs.get("origin")
309
+ prototype = kwargs.get("prototype")
310
+ if (
311
+ origin is None
312
+ and prototype is None
313
+ and nervapy.x86_64.options.get_debug_level() > 0
314
+ ):
315
+ origin = inspect.stack()
316
+ super(KANDD, self).__init__("KANDD", origin=origin, prototype=prototype)
317
+ self.operands = tuple(map(check_operand, args))
318
+ if len(self.operands) != 3:
319
+ raise SyntaxError('Instruction "KANDD" requires 3 operands')
320
+ if is_k(self.operands[0]) and is_k(self.operands[1]) and is_k(self.operands[2]):
321
+ self.encodings.append(
322
+ (
323
+ 0x00,
324
+ lambda op: bytearray(
325
+ [
326
+ 0xC4,
327
+ 0xE1,
328
+ 0xFD ^ (op[1].hlcode << 3),
329
+ 0x41,
330
+ 0xC0 | op[0].lcode << 3 | op[2].lcode,
331
+ ]
332
+ ),
333
+ )
334
+ )
335
+ self.in_regs = (False, True, True)
336
+ self.out_regs = (True, False, False)
337
+ self.out_operands = (True, False, False)
338
+ self.isa_extensions = frozenset([nervapy.x86_64.isa.avx512bw])
339
+ else:
340
+ raise SyntaxError(
341
+ "Invalid operand types: KANDD "
342
+ + ", ".join(map(format_operand_type, self.operands))
343
+ )
344
+ if nervapy.stream.active_stream is not None:
345
+ nervapy.stream.active_stream.add_instruction(self)
346
+
347
+
348
+ class KANDQ(Instruction):
349
+ """Bitwise Logical AND 64-bit Masks"""
350
+
351
+ def __init__(self, *args, **kwargs):
352
+ """Supported forms:
353
+
354
+ * KANDQ(k, k, k) [AVX512BW]
355
+ """
356
+
357
+ origin = kwargs.get("origin")
358
+ prototype = kwargs.get("prototype")
359
+ if (
360
+ origin is None
361
+ and prototype is None
362
+ and nervapy.x86_64.options.get_debug_level() > 0
363
+ ):
364
+ origin = inspect.stack()
365
+ super(KANDQ, self).__init__("KANDQ", origin=origin, prototype=prototype)
366
+ self.operands = tuple(map(check_operand, args))
367
+ if len(self.operands) != 3:
368
+ raise SyntaxError('Instruction "KANDQ" requires 3 operands')
369
+ if is_k(self.operands[0]) and is_k(self.operands[1]) and is_k(self.operands[2]):
370
+ self.encodings.append(
371
+ (
372
+ 0x00,
373
+ lambda op: bytearray(
374
+ [
375
+ 0xC4,
376
+ 0xE1,
377
+ 0xFC ^ (op[1].hlcode << 3),
378
+ 0x41,
379
+ 0xC0 | op[0].lcode << 3 | op[2].lcode,
380
+ ]
381
+ ),
382
+ )
383
+ )
384
+ self.in_regs = (False, True, True)
385
+ self.out_regs = (True, False, False)
386
+ self.out_operands = (True, False, False)
387
+ self.isa_extensions = frozenset([nervapy.x86_64.isa.avx512bw])
388
+ else:
389
+ raise SyntaxError(
390
+ "Invalid operand types: KANDQ "
391
+ + ", ".join(map(format_operand_type, self.operands))
392
+ )
393
+ if nervapy.stream.active_stream is not None:
394
+ nervapy.stream.active_stream.add_instruction(self)
395
+
396
+
397
+ class KANDNB(Instruction):
398
+ """Bitwise Logical AND NOT 8-bit Masks"""
399
+
400
+ def __init__(self, *args, **kwargs):
401
+ """Supported forms:
402
+
403
+ * KANDNB(k, k, k) [AVX512DQ]
404
+ """
405
+
406
+ origin = kwargs.get("origin")
407
+ prototype = kwargs.get("prototype")
408
+ if (
409
+ origin is None
410
+ and prototype is None
411
+ and nervapy.x86_64.options.get_debug_level() > 0
412
+ ):
413
+ origin = inspect.stack()
414
+ super(KANDNB, self).__init__("KANDNB", origin=origin, prototype=prototype)
415
+ self.operands = tuple(map(check_operand, args))
416
+ if len(self.operands) != 3:
417
+ raise SyntaxError('Instruction "KANDNB" requires 3 operands')
418
+ if is_k(self.operands[0]) and is_k(self.operands[1]) and is_k(self.operands[2]):
419
+ self.encodings.append(
420
+ (
421
+ 0x40,
422
+ lambda op, vex3=False: vex2(5, 0, None, op[1].hlcode, vex3)
423
+ + bytearray([0x42, 0xC0 | op[0].lcode << 3 | op[2].lcode]),
424
+ )
425
+ )
426
+ self.in_regs = (False, True, True)
427
+ self.out_regs = (True, False, False)
428
+ self.out_operands = (True, False, False)
429
+ self.isa_extensions = frozenset([nervapy.x86_64.isa.avx512dq])
430
+ else:
431
+ raise SyntaxError(
432
+ "Invalid operand types: KANDNB "
433
+ + ", ".join(map(format_operand_type, self.operands))
434
+ )
435
+ if nervapy.stream.active_stream is not None:
436
+ nervapy.stream.active_stream.add_instruction(self)
437
+
438
+
439
+ class KANDNW(Instruction):
440
+ """Bitwise Logical AND NOT 16-bit Masks"""
441
+
442
+ def __init__(self, *args, **kwargs):
443
+ """Supported forms:
444
+
445
+ * KANDNW(k, k, k) [AVX512F]
446
+ """
447
+
448
+ origin = kwargs.get("origin")
449
+ prototype = kwargs.get("prototype")
450
+ if (
451
+ origin is None
452
+ and prototype is None
453
+ and nervapy.x86_64.options.get_debug_level() > 0
454
+ ):
455
+ origin = inspect.stack()
456
+ super(KANDNW, self).__init__("KANDNW", origin=origin, prototype=prototype)
457
+ self.operands = tuple(map(check_operand, args))
458
+ if len(self.operands) != 3:
459
+ raise SyntaxError('Instruction "KANDNW" requires 3 operands')
460
+ if is_k(self.operands[0]) and is_k(self.operands[1]) and is_k(self.operands[2]):
461
+ self.encodings.append(
462
+ (
463
+ 0x40,
464
+ lambda op, vex3=False: vex2(4, 0, None, op[1].hlcode, vex3)
465
+ + bytearray([0x42, 0xC0 | op[0].lcode << 3 | op[2].lcode]),
466
+ )
467
+ )
468
+ self.in_regs = (False, True, True)
469
+ self.out_regs = (True, False, False)
470
+ self.out_operands = (True, False, False)
471
+ self.isa_extensions = frozenset([nervapy.x86_64.isa.avx512f])
472
+ else:
473
+ raise SyntaxError(
474
+ "Invalid operand types: KANDNW "
475
+ + ", ".join(map(format_operand_type, self.operands))
476
+ )
477
+ if nervapy.stream.active_stream is not None:
478
+ nervapy.stream.active_stream.add_instruction(self)
479
+
480
+
481
+ class KANDND(Instruction):
482
+ """Bitwise Logical AND NOT 32-bit Masks"""
483
+
484
+ def __init__(self, *args, **kwargs):
485
+ """Supported forms:
486
+
487
+ * KANDND(k, k, k) [AVX512BW]
488
+ """
489
+
490
+ origin = kwargs.get("origin")
491
+ prototype = kwargs.get("prototype")
492
+ if (
493
+ origin is None
494
+ and prototype is None
495
+ and nervapy.x86_64.options.get_debug_level() > 0
496
+ ):
497
+ origin = inspect.stack()
498
+ super(KANDND, self).__init__("KANDND", origin=origin, prototype=prototype)
499
+ self.operands = tuple(map(check_operand, args))
500
+ if len(self.operands) != 3:
501
+ raise SyntaxError('Instruction "KANDND" requires 3 operands')
502
+ if is_k(self.operands[0]) and is_k(self.operands[1]) and is_k(self.operands[2]):
503
+ self.encodings.append(
504
+ (
505
+ 0x00,
506
+ lambda op: bytearray(
507
+ [
508
+ 0xC4,
509
+ 0xE1,
510
+ 0xFD ^ (op[1].hlcode << 3),
511
+ 0x42,
512
+ 0xC0 | op[0].lcode << 3 | op[2].lcode,
513
+ ]
514
+ ),
515
+ )
516
+ )
517
+ self.in_regs = (False, True, True)
518
+ self.out_regs = (True, False, False)
519
+ self.out_operands = (True, False, False)
520
+ self.isa_extensions = frozenset([nervapy.x86_64.isa.avx512bw])
521
+ else:
522
+ raise SyntaxError(
523
+ "Invalid operand types: KANDND "
524
+ + ", ".join(map(format_operand_type, self.operands))
525
+ )
526
+ if nervapy.stream.active_stream is not None:
527
+ nervapy.stream.active_stream.add_instruction(self)
528
+
529
+
530
+ class KANDNQ(Instruction):
531
+ """Bitwise Logical AND NOT 64-bit Masks"""
532
+
533
+ def __init__(self, *args, **kwargs):
534
+ """Supported forms:
535
+
536
+ * KANDNQ(k, k, k) [AVX512BW]
537
+ """
538
+
539
+ origin = kwargs.get("origin")
540
+ prototype = kwargs.get("prototype")
541
+ if (
542
+ origin is None
543
+ and prototype is None
544
+ and nervapy.x86_64.options.get_debug_level() > 0
545
+ ):
546
+ origin = inspect.stack()
547
+ super(KANDNQ, self).__init__("KANDNQ", origin=origin, prototype=prototype)
548
+ self.operands = tuple(map(check_operand, args))
549
+ if len(self.operands) != 3:
550
+ raise SyntaxError('Instruction "KANDNQ" requires 3 operands')
551
+ if is_k(self.operands[0]) and is_k(self.operands[1]) and is_k(self.operands[2]):
552
+ self.encodings.append(
553
+ (
554
+ 0x00,
555
+ lambda op: bytearray(
556
+ [
557
+ 0xC4,
558
+ 0xE1,
559
+ 0xFC ^ (op[1].hlcode << 3),
560
+ 0x42,
561
+ 0xC0 | op[0].lcode << 3 | op[2].lcode,
562
+ ]
563
+ ),
564
+ )
565
+ )
566
+ self.in_regs = (False, True, True)
567
+ self.out_regs = (True, False, False)
568
+ self.out_operands = (True, False, False)
569
+ self.isa_extensions = frozenset([nervapy.x86_64.isa.avx512bw])
570
+ else:
571
+ raise SyntaxError(
572
+ "Invalid operand types: KANDNQ "
573
+ + ", ".join(map(format_operand_type, self.operands))
574
+ )
575
+ if nervapy.stream.active_stream is not None:
576
+ nervapy.stream.active_stream.add_instruction(self)
577
+
578
+
579
+ class KORB(Instruction):
580
+ """Bitwise Logical OR 8-bit Masks"""
581
+
582
+ def __init__(self, *args, **kwargs):
583
+ """Supported forms:
584
+
585
+ * KORB(k, k, k) [AVX512DQ]
586
+ """
587
+
588
+ origin = kwargs.get("origin")
589
+ prototype = kwargs.get("prototype")
590
+ if (
591
+ origin is None
592
+ and prototype is None
593
+ and nervapy.x86_64.options.get_debug_level() > 0
594
+ ):
595
+ origin = inspect.stack()
596
+ super(KORB, self).__init__("KORB", origin=origin, prototype=prototype)
597
+ self.operands = tuple(map(check_operand, args))
598
+ if len(self.operands) != 3:
599
+ raise SyntaxError('Instruction "KORB" requires 3 operands')
600
+ if is_k(self.operands[0]) and is_k(self.operands[1]) and is_k(self.operands[2]):
601
+ self.encodings.append(
602
+ (
603
+ 0x40,
604
+ lambda op, vex3=False: vex2(5, 0, None, op[1].hlcode, vex3)
605
+ + bytearray([0x45, 0xC0 | op[0].lcode << 3 | op[2].lcode]),
606
+ )
607
+ )
608
+ self.in_regs = (False, True, True)
609
+ self.out_regs = (True, False, False)
610
+ self.out_operands = (True, False, False)
611
+ self.isa_extensions = frozenset([nervapy.x86_64.isa.avx512dq])
612
+ else:
613
+ raise SyntaxError(
614
+ "Invalid operand types: KORB "
615
+ + ", ".join(map(format_operand_type, self.operands))
616
+ )
617
+ if nervapy.stream.active_stream is not None:
618
+ nervapy.stream.active_stream.add_instruction(self)
619
+
620
+
621
+ class KORW(Instruction):
622
+ """Bitwise Logical OR 16-bit Masks"""
623
+
624
+ def __init__(self, *args, **kwargs):
625
+ """Supported forms:
626
+
627
+ * KORW(k, k, k) [AVX512F]
628
+ """
629
+
630
+ origin = kwargs.get("origin")
631
+ prototype = kwargs.get("prototype")
632
+ if (
633
+ origin is None
634
+ and prototype is None
635
+ and nervapy.x86_64.options.get_debug_level() > 0
636
+ ):
637
+ origin = inspect.stack()
638
+ super(KORW, self).__init__("KORW", origin=origin, prototype=prototype)
639
+ self.operands = tuple(map(check_operand, args))
640
+ if len(self.operands) != 3:
641
+ raise SyntaxError('Instruction "KORW" requires 3 operands')
642
+ if is_k(self.operands[0]) and is_k(self.operands[1]) and is_k(self.operands[2]):
643
+ self.encodings.append(
644
+ (
645
+ 0x40,
646
+ lambda op, vex3=False: vex2(4, 0, None, op[1].hlcode, vex3)
647
+ + bytearray([0x45, 0xC0 | op[0].lcode << 3 | op[2].lcode]),
648
+ )
649
+ )
650
+ self.in_regs = (False, True, True)
651
+ self.out_regs = (True, False, False)
652
+ self.out_operands = (True, False, False)
653
+ self.isa_extensions = frozenset([nervapy.x86_64.isa.avx512f])
654
+ else:
655
+ raise SyntaxError(
656
+ "Invalid operand types: KORW "
657
+ + ", ".join(map(format_operand_type, self.operands))
658
+ )
659
+ if nervapy.stream.active_stream is not None:
660
+ nervapy.stream.active_stream.add_instruction(self)
661
+
662
+
663
+ class KORD(Instruction):
664
+ """Bitwise Logical OR 32-bit Masks"""
665
+
666
+ def __init__(self, *args, **kwargs):
667
+ """Supported forms:
668
+
669
+ * KORD(k, k, k) [AVX512BW]
670
+ """
671
+
672
+ origin = kwargs.get("origin")
673
+ prototype = kwargs.get("prototype")
674
+ if (
675
+ origin is None
676
+ and prototype is None
677
+ and nervapy.x86_64.options.get_debug_level() > 0
678
+ ):
679
+ origin = inspect.stack()
680
+ super(KORD, self).__init__("KORD", origin=origin, prototype=prototype)
681
+ self.operands = tuple(map(check_operand, args))
682
+ if len(self.operands) != 3:
683
+ raise SyntaxError('Instruction "KORD" requires 3 operands')
684
+ if is_k(self.operands[0]) and is_k(self.operands[1]) and is_k(self.operands[2]):
685
+ self.encodings.append(
686
+ (
687
+ 0x00,
688
+ lambda op: bytearray(
689
+ [
690
+ 0xC4,
691
+ 0xE1,
692
+ 0xFD ^ (op[1].hlcode << 3),
693
+ 0x45,
694
+ 0xC0 | op[0].lcode << 3 | op[2].lcode,
695
+ ]
696
+ ),
697
+ )
698
+ )
699
+ self.in_regs = (False, True, True)
700
+ self.out_regs = (True, False, False)
701
+ self.out_operands = (True, False, False)
702
+ self.isa_extensions = frozenset([nervapy.x86_64.isa.avx512bw])
703
+ else:
704
+ raise SyntaxError(
705
+ "Invalid operand types: KORD "
706
+ + ", ".join(map(format_operand_type, self.operands))
707
+ )
708
+ if nervapy.stream.active_stream is not None:
709
+ nervapy.stream.active_stream.add_instruction(self)
710
+
711
+
712
+ class KORQ(Instruction):
713
+ """Bitwise Logical OR 64-bit Masks"""
714
+
715
+ def __init__(self, *args, **kwargs):
716
+ """Supported forms:
717
+
718
+ * KORQ(k, k, k) [AVX512BW]
719
+ """
720
+
721
+ origin = kwargs.get("origin")
722
+ prototype = kwargs.get("prototype")
723
+ if (
724
+ origin is None
725
+ and prototype is None
726
+ and nervapy.x86_64.options.get_debug_level() > 0
727
+ ):
728
+ origin = inspect.stack()
729
+ super(KORQ, self).__init__("KORQ", origin=origin, prototype=prototype)
730
+ self.operands = tuple(map(check_operand, args))
731
+ if len(self.operands) != 3:
732
+ raise SyntaxError('Instruction "KORQ" requires 3 operands')
733
+ if is_k(self.operands[0]) and is_k(self.operands[1]) and is_k(self.operands[2]):
734
+ self.encodings.append(
735
+ (
736
+ 0x00,
737
+ lambda op: bytearray(
738
+ [
739
+ 0xC4,
740
+ 0xE1,
741
+ 0xFC ^ (op[1].hlcode << 3),
742
+ 0x45,
743
+ 0xC0 | op[0].lcode << 3 | op[2].lcode,
744
+ ]
745
+ ),
746
+ )
747
+ )
748
+ self.in_regs = (False, True, True)
749
+ self.out_regs = (True, False, False)
750
+ self.out_operands = (True, False, False)
751
+ self.isa_extensions = frozenset([nervapy.x86_64.isa.avx512bw])
752
+ else:
753
+ raise SyntaxError(
754
+ "Invalid operand types: KORQ "
755
+ + ", ".join(map(format_operand_type, self.operands))
756
+ )
757
+ if nervapy.stream.active_stream is not None:
758
+ nervapy.stream.active_stream.add_instruction(self)
759
+
760
+
761
+ class KXNORB(Instruction):
762
+ """Bitwise Logical XNOR 8-bit Masks"""
763
+
764
+ def __init__(self, *args, **kwargs):
765
+ """Supported forms:
766
+
767
+ * KXNORB(k, k, k) [AVX512DQ]
768
+ """
769
+
770
+ origin = kwargs.get("origin")
771
+ prototype = kwargs.get("prototype")
772
+ if (
773
+ origin is None
774
+ and prototype is None
775
+ and nervapy.x86_64.options.get_debug_level() > 0
776
+ ):
777
+ origin = inspect.stack()
778
+ super(KXNORB, self).__init__("KXNORB", origin=origin, prototype=prototype)
779
+ self.operands = tuple(map(check_operand, args))
780
+ if len(self.operands) != 3:
781
+ raise SyntaxError('Instruction "KXNORB" requires 3 operands')
782
+ if is_k(self.operands[0]) and is_k(self.operands[1]) and is_k(self.operands[2]):
783
+ self.encodings.append(
784
+ (
785
+ 0x40,
786
+ lambda op, vex3=False: vex2(5, 0, None, op[1].hlcode, vex3)
787
+ + bytearray([0x46, 0xC0 | op[0].lcode << 3 | op[2].lcode]),
788
+ )
789
+ )
790
+ self.in_regs = (False, True, True)
791
+ self.out_regs = (True, False, False)
792
+ self.out_operands = (True, False, False)
793
+ self.isa_extensions = frozenset([nervapy.x86_64.isa.avx512dq])
794
+ else:
795
+ raise SyntaxError(
796
+ "Invalid operand types: KXNORB "
797
+ + ", ".join(map(format_operand_type, self.operands))
798
+ )
799
+ if nervapy.stream.active_stream is not None:
800
+ nervapy.stream.active_stream.add_instruction(self)
801
+
802
+
803
+ class KXNORW(Instruction):
804
+ """Bitwise Logical XNOR 16-bit Masks"""
805
+
806
+ def __init__(self, *args, **kwargs):
807
+ """Supported forms:
808
+
809
+ * KXNORW(k, k, k) [AVX512F]
810
+ """
811
+
812
+ origin = kwargs.get("origin")
813
+ prototype = kwargs.get("prototype")
814
+ if (
815
+ origin is None
816
+ and prototype is None
817
+ and nervapy.x86_64.options.get_debug_level() > 0
818
+ ):
819
+ origin = inspect.stack()
820
+ super(KXNORW, self).__init__("KXNORW", origin=origin, prototype=prototype)
821
+ self.operands = tuple(map(check_operand, args))
822
+ if len(self.operands) != 3:
823
+ raise SyntaxError('Instruction "KXNORW" requires 3 operands')
824
+ if is_k(self.operands[0]) and is_k(self.operands[1]) and is_k(self.operands[2]):
825
+ self.encodings.append(
826
+ (
827
+ 0x40,
828
+ lambda op, vex3=False: vex2(4, 0, None, op[1].hlcode, vex3)
829
+ + bytearray([0x46, 0xC0 | op[0].lcode << 3 | op[2].lcode]),
830
+ )
831
+ )
832
+ self.in_regs = (False, True, True)
833
+ self.out_regs = (True, False, False)
834
+ self.out_operands = (True, False, False)
835
+ self.isa_extensions = frozenset([nervapy.x86_64.isa.avx512f])
836
+ else:
837
+ raise SyntaxError(
838
+ "Invalid operand types: KXNORW "
839
+ + ", ".join(map(format_operand_type, self.operands))
840
+ )
841
+ if nervapy.stream.active_stream is not None:
842
+ nervapy.stream.active_stream.add_instruction(self)
843
+
844
+
845
+ class KXNORD(Instruction):
846
+ """Bitwise Logical XNOR 32-bit Masks"""
847
+
848
+ def __init__(self, *args, **kwargs):
849
+ """Supported forms:
850
+
851
+ * KXNORD(k, k, k) [AVX512BW]
852
+ """
853
+
854
+ origin = kwargs.get("origin")
855
+ prototype = kwargs.get("prototype")
856
+ if (
857
+ origin is None
858
+ and prototype is None
859
+ and nervapy.x86_64.options.get_debug_level() > 0
860
+ ):
861
+ origin = inspect.stack()
862
+ super(KXNORD, self).__init__("KXNORD", origin=origin, prototype=prototype)
863
+ self.operands = tuple(map(check_operand, args))
864
+ if len(self.operands) != 3:
865
+ raise SyntaxError('Instruction "KXNORD" requires 3 operands')
866
+ if is_k(self.operands[0]) and is_k(self.operands[1]) and is_k(self.operands[2]):
867
+ self.encodings.append(
868
+ (
869
+ 0x00,
870
+ lambda op: bytearray(
871
+ [
872
+ 0xC4,
873
+ 0xE1,
874
+ 0xFD ^ (op[1].hlcode << 3),
875
+ 0x46,
876
+ 0xC0 | op[0].lcode << 3 | op[2].lcode,
877
+ ]
878
+ ),
879
+ )
880
+ )
881
+ self.in_regs = (False, True, True)
882
+ self.out_regs = (True, False, False)
883
+ self.out_operands = (True, False, False)
884
+ self.isa_extensions = frozenset([nervapy.x86_64.isa.avx512bw])
885
+ else:
886
+ raise SyntaxError(
887
+ "Invalid operand types: KXNORD "
888
+ + ", ".join(map(format_operand_type, self.operands))
889
+ )
890
+ if nervapy.stream.active_stream is not None:
891
+ nervapy.stream.active_stream.add_instruction(self)
892
+
893
+
894
+ class KXNORQ(Instruction):
895
+ """Bitwise Logical XNOR 64-bit Masks"""
896
+
897
+ def __init__(self, *args, **kwargs):
898
+ """Supported forms:
899
+
900
+ * KXNORQ(k, k, k) [AVX512BW]
901
+ """
902
+
903
+ origin = kwargs.get("origin")
904
+ prototype = kwargs.get("prototype")
905
+ if (
906
+ origin is None
907
+ and prototype is None
908
+ and nervapy.x86_64.options.get_debug_level() > 0
909
+ ):
910
+ origin = inspect.stack()
911
+ super(KXNORQ, self).__init__("KXNORQ", origin=origin, prototype=prototype)
912
+ self.operands = tuple(map(check_operand, args))
913
+ if len(self.operands) != 3:
914
+ raise SyntaxError('Instruction "KXNORQ" requires 3 operands')
915
+ if is_k(self.operands[0]) and is_k(self.operands[1]) and is_k(self.operands[2]):
916
+ self.encodings.append(
917
+ (
918
+ 0x00,
919
+ lambda op: bytearray(
920
+ [
921
+ 0xC4,
922
+ 0xE1,
923
+ 0xFC ^ (op[1].hlcode << 3),
924
+ 0x46,
925
+ 0xC0 | op[0].lcode << 3 | op[2].lcode,
926
+ ]
927
+ ),
928
+ )
929
+ )
930
+ self.in_regs = (False, True, True)
931
+ self.out_regs = (True, False, False)
932
+ self.out_operands = (True, False, False)
933
+ self.isa_extensions = frozenset([nervapy.x86_64.isa.avx512bw])
934
+ else:
935
+ raise SyntaxError(
936
+ "Invalid operand types: KXNORQ "
937
+ + ", ".join(map(format_operand_type, self.operands))
938
+ )
939
+ if nervapy.stream.active_stream is not None:
940
+ nervapy.stream.active_stream.add_instruction(self)
941
+
942
+
943
+ class KXORB(Instruction):
944
+ """Bitwise Logical XOR 8-bit Masks"""
945
+
946
+ def __init__(self, *args, **kwargs):
947
+ """Supported forms:
948
+
949
+ * KXORB(k, k, k) [AVX512DQ]
950
+ """
951
+
952
+ origin = kwargs.get("origin")
953
+ prototype = kwargs.get("prototype")
954
+ if (
955
+ origin is None
956
+ and prototype is None
957
+ and nervapy.x86_64.options.get_debug_level() > 0
958
+ ):
959
+ origin = inspect.stack()
960
+ super(KXORB, self).__init__("KXORB", origin=origin, prototype=prototype)
961
+ self.operands = tuple(map(check_operand, args))
962
+ if len(self.operands) != 3:
963
+ raise SyntaxError('Instruction "KXORB" requires 3 operands')
964
+ if is_k(self.operands[0]) and is_k(self.operands[1]) and is_k(self.operands[2]):
965
+ self.encodings.append(
966
+ (
967
+ 0x40,
968
+ lambda op, vex3=False: vex2(5, 0, None, op[1].hlcode, vex3)
969
+ + bytearray([0x47, 0xC0 | op[0].lcode << 3 | op[2].lcode]),
970
+ )
971
+ )
972
+ self.in_regs = (False, True, True)
973
+ self.out_regs = (True, False, False)
974
+ self.out_operands = (True, False, False)
975
+ self.isa_extensions = frozenset([nervapy.x86_64.isa.avx512dq])
976
+ else:
977
+ raise SyntaxError(
978
+ "Invalid operand types: KXORB "
979
+ + ", ".join(map(format_operand_type, self.operands))
980
+ )
981
+ if nervapy.stream.active_stream is not None:
982
+ nervapy.stream.active_stream.add_instruction(self)
983
+
984
+
985
+ class KXORW(Instruction):
986
+ """Bitwise Logical XOR 16-bit Masks"""
987
+
988
+ def __init__(self, *args, **kwargs):
989
+ """Supported forms:
990
+
991
+ * KXORW(k, k, k) [AVX512F]
992
+ """
993
+
994
+ origin = kwargs.get("origin")
995
+ prototype = kwargs.get("prototype")
996
+ if (
997
+ origin is None
998
+ and prototype is None
999
+ and nervapy.x86_64.options.get_debug_level() > 0
1000
+ ):
1001
+ origin = inspect.stack()
1002
+ super(KXORW, self).__init__("KXORW", origin=origin, prototype=prototype)
1003
+ self.operands = tuple(map(check_operand, args))
1004
+ if len(self.operands) != 3:
1005
+ raise SyntaxError('Instruction "KXORW" requires 3 operands')
1006
+ if is_k(self.operands[0]) and is_k(self.operands[1]) and is_k(self.operands[2]):
1007
+ self.encodings.append(
1008
+ (
1009
+ 0x40,
1010
+ lambda op, vex3=False: vex2(4, 0, None, op[1].hlcode, vex3)
1011
+ + bytearray([0x47, 0xC0 | op[0].lcode << 3 | op[2].lcode]),
1012
+ )
1013
+ )
1014
+ self.in_regs = (False, True, True)
1015
+ self.out_regs = (True, False, False)
1016
+ self.out_operands = (True, False, False)
1017
+ self.isa_extensions = frozenset([nervapy.x86_64.isa.avx512f])
1018
+ else:
1019
+ raise SyntaxError(
1020
+ "Invalid operand types: KXORW "
1021
+ + ", ".join(map(format_operand_type, self.operands))
1022
+ )
1023
+ if nervapy.stream.active_stream is not None:
1024
+ nervapy.stream.active_stream.add_instruction(self)
1025
+
1026
+
1027
+ class KXORD(Instruction):
1028
+ """Bitwise Logical XOR 32-bit Masks"""
1029
+
1030
+ def __init__(self, *args, **kwargs):
1031
+ """Supported forms:
1032
+
1033
+ * KXORD(k, k, k) [AVX512BW]
1034
+ """
1035
+
1036
+ origin = kwargs.get("origin")
1037
+ prototype = kwargs.get("prototype")
1038
+ if (
1039
+ origin is None
1040
+ and prototype is None
1041
+ and nervapy.x86_64.options.get_debug_level() > 0
1042
+ ):
1043
+ origin = inspect.stack()
1044
+ super(KXORD, self).__init__("KXORD", origin=origin, prototype=prototype)
1045
+ self.operands = tuple(map(check_operand, args))
1046
+ if len(self.operands) != 3:
1047
+ raise SyntaxError('Instruction "KXORD" requires 3 operands')
1048
+ if is_k(self.operands[0]) and is_k(self.operands[1]) and is_k(self.operands[2]):
1049
+ self.encodings.append(
1050
+ (
1051
+ 0x00,
1052
+ lambda op: bytearray(
1053
+ [
1054
+ 0xC4,
1055
+ 0xE1,
1056
+ 0xFD ^ (op[1].hlcode << 3),
1057
+ 0x47,
1058
+ 0xC0 | op[0].lcode << 3 | op[2].lcode,
1059
+ ]
1060
+ ),
1061
+ )
1062
+ )
1063
+ self.in_regs = (False, True, True)
1064
+ self.out_regs = (True, False, False)
1065
+ self.out_operands = (True, False, False)
1066
+ self.isa_extensions = frozenset([nervapy.x86_64.isa.avx512bw])
1067
+ else:
1068
+ raise SyntaxError(
1069
+ "Invalid operand types: KXORD "
1070
+ + ", ".join(map(format_operand_type, self.operands))
1071
+ )
1072
+ if nervapy.stream.active_stream is not None:
1073
+ nervapy.stream.active_stream.add_instruction(self)
1074
+
1075
+
1076
+ class KXORQ(Instruction):
1077
+ """Bitwise Logical XOR 64-bit Masks"""
1078
+
1079
+ def __init__(self, *args, **kwargs):
1080
+ """Supported forms:
1081
+
1082
+ * KXORQ(k, k, k) [AVX512BW]
1083
+ """
1084
+
1085
+ origin = kwargs.get("origin")
1086
+ prototype = kwargs.get("prototype")
1087
+ if (
1088
+ origin is None
1089
+ and prototype is None
1090
+ and nervapy.x86_64.options.get_debug_level() > 0
1091
+ ):
1092
+ origin = inspect.stack()
1093
+ super(KXORQ, self).__init__("KXORQ", origin=origin, prototype=prototype)
1094
+ self.operands = tuple(map(check_operand, args))
1095
+ if len(self.operands) != 3:
1096
+ raise SyntaxError('Instruction "KXORQ" requires 3 operands')
1097
+ if is_k(self.operands[0]) and is_k(self.operands[1]) and is_k(self.operands[2]):
1098
+ self.encodings.append(
1099
+ (
1100
+ 0x00,
1101
+ lambda op: bytearray(
1102
+ [
1103
+ 0xC4,
1104
+ 0xE1,
1105
+ 0xFC ^ (op[1].hlcode << 3),
1106
+ 0x47,
1107
+ 0xC0 | op[0].lcode << 3 | op[2].lcode,
1108
+ ]
1109
+ ),
1110
+ )
1111
+ )
1112
+ self.in_regs = (False, True, True)
1113
+ self.out_regs = (True, False, False)
1114
+ self.out_operands = (True, False, False)
1115
+ self.isa_extensions = frozenset([nervapy.x86_64.isa.avx512bw])
1116
+ else:
1117
+ raise SyntaxError(
1118
+ "Invalid operand types: KXORQ "
1119
+ + ", ".join(map(format_operand_type, self.operands))
1120
+ )
1121
+ if nervapy.stream.active_stream is not None:
1122
+ nervapy.stream.active_stream.add_instruction(self)
1123
+
1124
+
1125
+ class KMOVB(Instruction):
1126
+ """Move 8-bit Mask"""
1127
+
1128
+ def __init__(self, *args, **kwargs):
1129
+ """Supported forms:
1130
+
1131
+ * KMOVB(k, k) [AVX512DQ]
1132
+ * KMOVB(k, m8) [AVX512DQ]
1133
+ * KMOVB(k, r32) [AVX512DQ]
1134
+ * KMOVB(m8, k) [AVX512DQ]
1135
+ * KMOVB(r32, k) [AVX512DQ]
1136
+ """
1137
+
1138
+ origin = kwargs.get("origin")
1139
+ prototype = kwargs.get("prototype")
1140
+ if (
1141
+ origin is None
1142
+ and prototype is None
1143
+ and nervapy.x86_64.options.get_debug_level() > 0
1144
+ ):
1145
+ origin = inspect.stack()
1146
+ super(KMOVB, self).__init__("KMOVB", origin=origin, prototype=prototype)
1147
+ self.operands = tuple(map(check_operand, args))
1148
+ if len(self.operands) != 2:
1149
+ raise SyntaxError('Instruction "KMOVB" requires 2 operands')
1150
+ self.out_operands = (True, False)
1151
+ self.isa_extensions = frozenset([nervapy.x86_64.isa.avx512dq])
1152
+ if is_k(self.operands[0]) and is_k(self.operands[1]):
1153
+ self.encodings.append(
1154
+ (
1155
+ 0x40,
1156
+ lambda op, vex3=False: vex2(1, 0, None, 0, vex3)
1157
+ + bytearray([0x90, 0xC0 | op[0].lcode << 3 | op[1].lcode]),
1158
+ )
1159
+ )
1160
+ self.in_regs = (False, True)
1161
+ self.out_regs = (True, False)
1162
+ elif is_k(self.operands[0]) and is_r32(self.operands[1]):
1163
+ self.encodings.append(
1164
+ (
1165
+ 0x40,
1166
+ lambda op, vex3=False: vex2(1, 0, op[1], 0, vex3)
1167
+ + bytearray([0x92, 0xC0 | op[0].lcode << 3 | op[1].lcode]),
1168
+ )
1169
+ )
1170
+ self.in_regs = (False, True)
1171
+ self.out_regs = (True, False)
1172
+ elif is_k(self.operands[0]) and is_m8(self.operands[1]):
1173
+ self.encodings.append(
1174
+ (
1175
+ 0x50,
1176
+ lambda op, vex3=False, sib=False, min_disp=0: vex2(
1177
+ 1, 0, op[1].address, 0, vex3
1178
+ )
1179
+ + bytearray([0x90])
1180
+ + modrm_sib_disp(op[0].lcode, op[1].address, sib, min_disp),
1181
+ )
1182
+ )
1183
+ self.in_regs = (False, True)
1184
+ self.out_regs = (True, False)
1185
+ elif is_r32(self.operands[0]) and is_k(self.operands[1]):
1186
+ self.encodings.append(
1187
+ (
1188
+ 0x40,
1189
+ lambda op, vex3=False: vex2(1, op[0].hcode, None, 0, vex3)
1190
+ + bytearray([0x93, 0xC0 | op[0].lcode << 3 | op[1].lcode]),
1191
+ )
1192
+ )
1193
+ self.in_regs = (False, True)
1194
+ self.out_regs = (True, False)
1195
+ elif is_m8(self.operands[0]) and is_k(self.operands[1]):
1196
+ self.encodings.append(
1197
+ (
1198
+ 0x50,
1199
+ lambda op, vex3=False, sib=False, min_disp=0: vex2(
1200
+ 1, 0, op[0].address, 0, vex3
1201
+ )
1202
+ + bytearray([0x91])
1203
+ + modrm_sib_disp(op[1].lcode, op[0].address, sib, min_disp),
1204
+ )
1205
+ )
1206
+ self.in_regs = (True, True)
1207
+ self.out_regs = (False, False)
1208
+ else:
1209
+ raise SyntaxError(
1210
+ "Invalid operand types: KMOVB "
1211
+ + ", ".join(map(format_operand_type, self.operands))
1212
+ )
1213
+ if nervapy.stream.active_stream is not None:
1214
+ nervapy.stream.active_stream.add_instruction(self)
1215
+
1216
+
1217
+ class KMOVW(Instruction):
1218
+ """Move 16-bit Mask"""
1219
+
1220
+ def __init__(self, *args, **kwargs):
1221
+ """Supported forms:
1222
+
1223
+ * KMOVW(k, k) [AVX512F]
1224
+ * KMOVW(k, m16) [AVX512F]
1225
+ * KMOVW(k, r32) [AVX512F]
1226
+ * KMOVW(m16, k) [AVX512F]
1227
+ * KMOVW(r32, k) [AVX512F]
1228
+ """
1229
+
1230
+ origin = kwargs.get("origin")
1231
+ prototype = kwargs.get("prototype")
1232
+ if (
1233
+ origin is None
1234
+ and prototype is None
1235
+ and nervapy.x86_64.options.get_debug_level() > 0
1236
+ ):
1237
+ origin = inspect.stack()
1238
+ super(KMOVW, self).__init__("KMOVW", origin=origin, prototype=prototype)
1239
+ self.operands = tuple(map(check_operand, args))
1240
+ if len(self.operands) != 2:
1241
+ raise SyntaxError('Instruction "KMOVW" requires 2 operands')
1242
+ self.out_operands = (True, False)
1243
+ self.isa_extensions = frozenset([nervapy.x86_64.isa.avx512f])
1244
+ if is_k(self.operands[0]) and is_k(self.operands[1]):
1245
+ self.encodings.append(
1246
+ (
1247
+ 0x40,
1248
+ lambda op, vex3=False: vex2(0, 0, None, 0, vex3)
1249
+ + bytearray([0x90, 0xC0 | op[0].lcode << 3 | op[1].lcode]),
1250
+ )
1251
+ )
1252
+ self.in_regs = (False, True)
1253
+ self.out_regs = (True, False)
1254
+ elif is_k(self.operands[0]) and is_r32(self.operands[1]):
1255
+ self.encodings.append(
1256
+ (
1257
+ 0x40,
1258
+ lambda op, vex3=False: vex2(0, 0, op[1], 0, vex3)
1259
+ + bytearray([0x92, 0xC0 | op[0].lcode << 3 | op[1].lcode]),
1260
+ )
1261
+ )
1262
+ self.in_regs = (False, True)
1263
+ self.out_regs = (True, False)
1264
+ elif is_k(self.operands[0]) and is_m16(self.operands[1]):
1265
+ self.encodings.append(
1266
+ (
1267
+ 0x50,
1268
+ lambda op, vex3=False, sib=False, min_disp=0: vex2(
1269
+ 0, 0, op[1].address, 0, vex3
1270
+ )
1271
+ + bytearray([0x90])
1272
+ + modrm_sib_disp(op[0].lcode, op[1].address, sib, min_disp),
1273
+ )
1274
+ )
1275
+ self.in_regs = (False, True)
1276
+ self.out_regs = (True, False)
1277
+ elif is_r32(self.operands[0]) and is_k(self.operands[1]):
1278
+ self.encodings.append(
1279
+ (
1280
+ 0x40,
1281
+ lambda op, vex3=False: vex2(0, op[0].hcode, None, 0, vex3)
1282
+ + bytearray([0x93, 0xC0 | op[0].lcode << 3 | op[1].lcode]),
1283
+ )
1284
+ )
1285
+ self.in_regs = (False, True)
1286
+ self.out_regs = (True, False)
1287
+ elif is_m16(self.operands[0]) and is_k(self.operands[1]):
1288
+ self.encodings.append(
1289
+ (
1290
+ 0x50,
1291
+ lambda op, vex3=False, sib=False, min_disp=0: vex2(
1292
+ 0, 0, op[0].address, 0, vex3
1293
+ )
1294
+ + bytearray([0x91])
1295
+ + modrm_sib_disp(op[1].lcode, op[0].address, sib, min_disp),
1296
+ )
1297
+ )
1298
+ self.in_regs = (True, True)
1299
+ self.out_regs = (False, False)
1300
+ else:
1301
+ raise SyntaxError(
1302
+ "Invalid operand types: KMOVW "
1303
+ + ", ".join(map(format_operand_type, self.operands))
1304
+ )
1305
+ if nervapy.stream.active_stream is not None:
1306
+ nervapy.stream.active_stream.add_instruction(self)
1307
+
1308
+
1309
+ class KMOVD(Instruction):
1310
+ """Move 32-bit Mask"""
1311
+
1312
+ def __init__(self, *args, **kwargs):
1313
+ """Supported forms:
1314
+
1315
+ * KMOVD(k, k) [AVX512BW]
1316
+ * KMOVD(k, r32/m32) [AVX512BW]
1317
+ * KMOVD(r32/m32, k) [AVX512BW]
1318
+ """
1319
+
1320
+ origin = kwargs.get("origin")
1321
+ prototype = kwargs.get("prototype")
1322
+ if (
1323
+ origin is None
1324
+ and prototype is None
1325
+ and nervapy.x86_64.options.get_debug_level() > 0
1326
+ ):
1327
+ origin = inspect.stack()
1328
+ super(KMOVD, self).__init__("KMOVD", origin=origin, prototype=prototype)
1329
+ self.operands = tuple(map(check_operand, args))
1330
+ if len(self.operands) != 2:
1331
+ raise SyntaxError('Instruction "KMOVD" requires 2 operands')
1332
+ self.out_operands = (True, False)
1333
+ self.isa_extensions = frozenset([nervapy.x86_64.isa.avx512bw])
1334
+ if is_k(self.operands[0]) and is_k(self.operands[1]):
1335
+ self.encodings.append(
1336
+ (
1337
+ 0x00,
1338
+ lambda op: bytearray(
1339
+ [0xC4, 0xE1, 0xF9, 0x90, 0xC0 | op[0].lcode << 3 | op[1].lcode]
1340
+ ),
1341
+ )
1342
+ )
1343
+ self.in_regs = (False, True)
1344
+ self.out_regs = (True, False)
1345
+ elif is_k(self.operands[0]) and is_r32(self.operands[1]):
1346
+ self.encodings.append(
1347
+ (
1348
+ 0x40,
1349
+ lambda op, vex3=False: vex2(3, 0, op[1], 0, vex3)
1350
+ + bytearray([0x92, 0xC0 | op[0].lcode << 3 | op[1].lcode]),
1351
+ )
1352
+ )
1353
+ self.in_regs = (False, True)
1354
+ self.out_regs = (True, False)
1355
+ elif is_k(self.operands[0]) and is_m32(self.operands[1]):
1356
+ self.encodings.append(
1357
+ (
1358
+ 0x10,
1359
+ lambda op, sib=False, min_disp=0: vex3(
1360
+ 0xC4, 0b1, 0x81, 0, op[1].address
1361
+ )
1362
+ + bytearray([0x90])
1363
+ + modrm_sib_disp(op[0].lcode, op[1].address, sib, min_disp),
1364
+ )
1365
+ )
1366
+ self.in_regs = (False, True)
1367
+ self.out_regs = (True, False)
1368
+ elif is_r32(self.operands[0]) and is_k(self.operands[1]):
1369
+ self.encodings.append(
1370
+ (
1371
+ 0x40,
1372
+ lambda op, vex3=False: vex2(3, op[0].hcode, None, 0, vex3)
1373
+ + bytearray([0x93, 0xC0 | op[0].lcode << 3 | op[1].lcode]),
1374
+ )
1375
+ )
1376
+ self.in_regs = (False, True)
1377
+ self.out_regs = (True, False)
1378
+ elif is_m32(self.operands[0]) and is_k(self.operands[1]):
1379
+ self.encodings.append(
1380
+ (
1381
+ 0x10,
1382
+ lambda op, sib=False, min_disp=0: vex3(
1383
+ 0xC4, 0b1, 0x81, 0, op[0].address
1384
+ )
1385
+ + bytearray([0x91])
1386
+ + modrm_sib_disp(op[1].lcode, op[0].address, sib, min_disp),
1387
+ )
1388
+ )
1389
+ self.in_regs = (True, True)
1390
+ self.out_regs = (False, False)
1391
+ else:
1392
+ raise SyntaxError(
1393
+ "Invalid operand types: KMOVD "
1394
+ + ", ".join(map(format_operand_type, self.operands))
1395
+ )
1396
+ if nervapy.stream.active_stream is not None:
1397
+ nervapy.stream.active_stream.add_instruction(self)
1398
+
1399
+
1400
+ class KMOVQ(Instruction):
1401
+ """Move 64-bit Mask"""
1402
+
1403
+ def __init__(self, *args, **kwargs):
1404
+ """Supported forms:
1405
+
1406
+ * KMOVQ(k, k) [AVX512BW]
1407
+ * KMOVQ(k, r64/m64) [AVX512BW]
1408
+ * KMOVQ(r64/m64, k) [AVX512BW]
1409
+ """
1410
+
1411
+ origin = kwargs.get("origin")
1412
+ prototype = kwargs.get("prototype")
1413
+ if (
1414
+ origin is None
1415
+ and prototype is None
1416
+ and nervapy.x86_64.options.get_debug_level() > 0
1417
+ ):
1418
+ origin = inspect.stack()
1419
+ super(KMOVQ, self).__init__("KMOVQ", origin=origin, prototype=prototype)
1420
+ self.operands = tuple(map(check_operand, args))
1421
+ if len(self.operands) != 2:
1422
+ raise SyntaxError('Instruction "KMOVQ" requires 2 operands')
1423
+ self.out_operands = (True, False)
1424
+ self.isa_extensions = frozenset([nervapy.x86_64.isa.avx512bw])
1425
+ if is_k(self.operands[0]) and is_k(self.operands[1]):
1426
+ self.encodings.append(
1427
+ (
1428
+ 0x00,
1429
+ lambda op: bytearray(
1430
+ [0xC4, 0xE1, 0xF8, 0x90, 0xC0 | op[0].lcode << 3 | op[1].lcode]
1431
+ ),
1432
+ )
1433
+ )
1434
+ self.in_regs = (False, True)
1435
+ self.out_regs = (True, False)
1436
+ elif is_k(self.operands[0]) and is_r64(self.operands[1]):
1437
+ self.encodings.append(
1438
+ (
1439
+ 0x00,
1440
+ lambda op: bytearray(
1441
+ [
1442
+ 0xC4,
1443
+ 0xE1 ^ (op[1].hcode << 5),
1444
+ 0xFB,
1445
+ 0x92,
1446
+ 0xC0 | op[0].lcode << 3 | op[1].lcode,
1447
+ ]
1448
+ ),
1449
+ )
1450
+ )
1451
+ self.in_regs = (False, True)
1452
+ self.out_regs = (True, False)
1453
+ elif is_k(self.operands[0]) and is_m64(self.operands[1]):
1454
+ self.encodings.append(
1455
+ (
1456
+ 0x10,
1457
+ lambda op, sib=False, min_disp=0: vex3(
1458
+ 0xC4, 0b1, 0x80, 0, op[1].address
1459
+ )
1460
+ + bytearray([0x90])
1461
+ + modrm_sib_disp(op[0].lcode, op[1].address, sib, min_disp),
1462
+ )
1463
+ )
1464
+ self.in_regs = (False, True)
1465
+ self.out_regs = (True, False)
1466
+ elif is_r64(self.operands[0]) and is_k(self.operands[1]):
1467
+ self.encodings.append(
1468
+ (
1469
+ 0x00,
1470
+ lambda op: bytearray(
1471
+ [
1472
+ 0xC4,
1473
+ 0xE1 ^ (op[0].hcode << 7),
1474
+ 0xFB,
1475
+ 0x93,
1476
+ 0xC0 | op[0].lcode << 3 | op[1].lcode,
1477
+ ]
1478
+ ),
1479
+ )
1480
+ )
1481
+ self.in_regs = (False, True)
1482
+ self.out_regs = (True, False)
1483
+ elif is_m64(self.operands[0]) and is_k(self.operands[1]):
1484
+ self.encodings.append(
1485
+ (
1486
+ 0x10,
1487
+ lambda op, sib=False, min_disp=0: vex3(
1488
+ 0xC4, 0b1, 0x80, 0, op[0].address
1489
+ )
1490
+ + bytearray([0x91])
1491
+ + modrm_sib_disp(op[1].lcode, op[0].address, sib, min_disp),
1492
+ )
1493
+ )
1494
+ self.in_regs = (True, True)
1495
+ self.out_regs = (False, False)
1496
+ else:
1497
+ raise SyntaxError(
1498
+ "Invalid operand types: KMOVQ "
1499
+ + ", ".join(map(format_operand_type, self.operands))
1500
+ )
1501
+ if nervapy.stream.active_stream is not None:
1502
+ nervapy.stream.active_stream.add_instruction(self)
1503
+
1504
+
1505
+ class KNOTB(Instruction):
1506
+ """NOT 8-bit Mask Register"""
1507
+
1508
+ def __init__(self, *args, **kwargs):
1509
+ """Supported forms:
1510
+
1511
+ * KNOTB(k, k) [AVX512DQ]
1512
+ """
1513
+
1514
+ origin = kwargs.get("origin")
1515
+ prototype = kwargs.get("prototype")
1516
+ if (
1517
+ origin is None
1518
+ and prototype is None
1519
+ and nervapy.x86_64.options.get_debug_level() > 0
1520
+ ):
1521
+ origin = inspect.stack()
1522
+ super(KNOTB, self).__init__("KNOTB", origin=origin, prototype=prototype)
1523
+ self.operands = tuple(map(check_operand, args))
1524
+ if len(self.operands) != 2:
1525
+ raise SyntaxError('Instruction "KNOTB" requires 2 operands')
1526
+ if is_k(self.operands[0]) and is_k(self.operands[1]):
1527
+ self.encodings.append(
1528
+ (
1529
+ 0x40,
1530
+ lambda op, vex3=False: vex2(1, 0, None, 0, vex3)
1531
+ + bytearray([0x44, 0xC0 | op[0].lcode << 3 | op[1].lcode]),
1532
+ )
1533
+ )
1534
+ self.in_regs = (False, True)
1535
+ self.out_regs = (True, False)
1536
+ self.out_operands = (True, False)
1537
+ self.isa_extensions = frozenset([nervapy.x86_64.isa.avx512dq])
1538
+ else:
1539
+ raise SyntaxError(
1540
+ "Invalid operand types: KNOTB "
1541
+ + ", ".join(map(format_operand_type, self.operands))
1542
+ )
1543
+ if nervapy.stream.active_stream is not None:
1544
+ nervapy.stream.active_stream.add_instruction(self)
1545
+
1546
+
1547
+ class KNOTW(Instruction):
1548
+ """NOT 16-bit Mask Register"""
1549
+
1550
+ def __init__(self, *args, **kwargs):
1551
+ """Supported forms:
1552
+
1553
+ * KNOTW(k, k) [AVX512F]
1554
+ """
1555
+
1556
+ origin = kwargs.get("origin")
1557
+ prototype = kwargs.get("prototype")
1558
+ if (
1559
+ origin is None
1560
+ and prototype is None
1561
+ and nervapy.x86_64.options.get_debug_level() > 0
1562
+ ):
1563
+ origin = inspect.stack()
1564
+ super(KNOTW, self).__init__("KNOTW", origin=origin, prototype=prototype)
1565
+ self.operands = tuple(map(check_operand, args))
1566
+ if len(self.operands) != 2:
1567
+ raise SyntaxError('Instruction "KNOTW" requires 2 operands')
1568
+ if is_k(self.operands[0]) and is_k(self.operands[1]):
1569
+ self.encodings.append(
1570
+ (
1571
+ 0x40,
1572
+ lambda op, vex3=False: vex2(0, 0, None, 0, vex3)
1573
+ + bytearray([0x44, 0xC0 | op[0].lcode << 3 | op[1].lcode]),
1574
+ )
1575
+ )
1576
+ self.in_regs = (False, True)
1577
+ self.out_regs = (True, False)
1578
+ self.out_operands = (True, False)
1579
+ self.isa_extensions = frozenset([nervapy.x86_64.isa.avx512f])
1580
+ else:
1581
+ raise SyntaxError(
1582
+ "Invalid operand types: KNOTW "
1583
+ + ", ".join(map(format_operand_type, self.operands))
1584
+ )
1585
+ if nervapy.stream.active_stream is not None:
1586
+ nervapy.stream.active_stream.add_instruction(self)
1587
+
1588
+
1589
+ class KNOTD(Instruction):
1590
+ """NOT 32-bit Mask Register"""
1591
+
1592
+ def __init__(self, *args, **kwargs):
1593
+ """Supported forms:
1594
+
1595
+ * KNOTD(k, k) [AVX512BW]
1596
+ """
1597
+
1598
+ origin = kwargs.get("origin")
1599
+ prototype = kwargs.get("prototype")
1600
+ if (
1601
+ origin is None
1602
+ and prototype is None
1603
+ and nervapy.x86_64.options.get_debug_level() > 0
1604
+ ):
1605
+ origin = inspect.stack()
1606
+ super(KNOTD, self).__init__("KNOTD", origin=origin, prototype=prototype)
1607
+ self.operands = tuple(map(check_operand, args))
1608
+ if len(self.operands) != 2:
1609
+ raise SyntaxError('Instruction "KNOTD" requires 2 operands')
1610
+ if is_k(self.operands[0]) and is_k(self.operands[1]):
1611
+ self.encodings.append(
1612
+ (
1613
+ 0x00,
1614
+ lambda op: bytearray(
1615
+ [0xC4, 0xE1, 0xF9, 0x44, 0xC0 | op[0].lcode << 3 | op[1].lcode]
1616
+ ),
1617
+ )
1618
+ )
1619
+ self.in_regs = (False, True)
1620
+ self.out_regs = (True, False)
1621
+ self.out_operands = (True, False)
1622
+ self.isa_extensions = frozenset([nervapy.x86_64.isa.avx512bw])
1623
+ else:
1624
+ raise SyntaxError(
1625
+ "Invalid operand types: KNOTD "
1626
+ + ", ".join(map(format_operand_type, self.operands))
1627
+ )
1628
+ if nervapy.stream.active_stream is not None:
1629
+ nervapy.stream.active_stream.add_instruction(self)
1630
+
1631
+
1632
+ class KNOTQ(Instruction):
1633
+ """NOT 64-bit Mask Register"""
1634
+
1635
+ def __init__(self, *args, **kwargs):
1636
+ """Supported forms:
1637
+
1638
+ * KNOTQ(k, k) [AVX512BW]
1639
+ """
1640
+
1641
+ origin = kwargs.get("origin")
1642
+ prototype = kwargs.get("prototype")
1643
+ if (
1644
+ origin is None
1645
+ and prototype is None
1646
+ and nervapy.x86_64.options.get_debug_level() > 0
1647
+ ):
1648
+ origin = inspect.stack()
1649
+ super(KNOTQ, self).__init__("KNOTQ", origin=origin, prototype=prototype)
1650
+ self.operands = tuple(map(check_operand, args))
1651
+ if len(self.operands) != 2:
1652
+ raise SyntaxError('Instruction "KNOTQ" requires 2 operands')
1653
+ if is_k(self.operands[0]) and is_k(self.operands[1]):
1654
+ self.encodings.append(
1655
+ (
1656
+ 0x00,
1657
+ lambda op: bytearray(
1658
+ [0xC4, 0xE1, 0xF8, 0x44, 0xC0 | op[0].lcode << 3 | op[1].lcode]
1659
+ ),
1660
+ )
1661
+ )
1662
+ self.in_regs = (False, True)
1663
+ self.out_regs = (True, False)
1664
+ self.out_operands = (True, False)
1665
+ self.isa_extensions = frozenset([nervapy.x86_64.isa.avx512bw])
1666
+ else:
1667
+ raise SyntaxError(
1668
+ "Invalid operand types: KNOTQ "
1669
+ + ", ".join(map(format_operand_type, self.operands))
1670
+ )
1671
+ if nervapy.stream.active_stream is not None:
1672
+ nervapy.stream.active_stream.add_instruction(self)
1673
+
1674
+
1675
+ class KUNPCKBW(Instruction):
1676
+ """Unpack and Interleave 8-bit Masks"""
1677
+
1678
+ def __init__(self, *args, **kwargs):
1679
+ """Supported forms:
1680
+
1681
+ * KUNPCKBW(k, k, k) [AVX512F]
1682
+ """
1683
+
1684
+ origin = kwargs.get("origin")
1685
+ prototype = kwargs.get("prototype")
1686
+ if (
1687
+ origin is None
1688
+ and prototype is None
1689
+ and nervapy.x86_64.options.get_debug_level() > 0
1690
+ ):
1691
+ origin = inspect.stack()
1692
+ super(KUNPCKBW, self).__init__("KUNPCKBW", origin=origin, prototype=prototype)
1693
+ self.operands = tuple(map(check_operand, args))
1694
+ if len(self.operands) != 3:
1695
+ raise SyntaxError('Instruction "KUNPCKBW" requires 3 operands')
1696
+ if is_k(self.operands[0]) and is_k(self.operands[1]) and is_k(self.operands[2]):
1697
+ self.encodings.append(
1698
+ (
1699
+ 0x40,
1700
+ lambda op, vex3=False: vex2(5, 0, None, op[1].hlcode, vex3)
1701
+ + bytearray([0x4B, 0xC0 | op[0].lcode << 3 | op[2].lcode]),
1702
+ )
1703
+ )
1704
+ self.in_regs = (False, True, True)
1705
+ self.out_regs = (True, False, False)
1706
+ self.out_operands = (True, False, False)
1707
+ self.isa_extensions = frozenset([nervapy.x86_64.isa.avx512f])
1708
+ else:
1709
+ raise SyntaxError(
1710
+ "Invalid operand types: KUNPCKBW "
1711
+ + ", ".join(map(format_operand_type, self.operands))
1712
+ )
1713
+ if nervapy.stream.active_stream is not None:
1714
+ nervapy.stream.active_stream.add_instruction(self)
1715
+
1716
+
1717
+ class KUNPCKWD(Instruction):
1718
+ """Unpack and Interleave 16-bit Masks"""
1719
+
1720
+ def __init__(self, *args, **kwargs):
1721
+ """Supported forms:
1722
+
1723
+ * KUNPCKWD(k, k, k) [AVX512BW]
1724
+ """
1725
+
1726
+ origin = kwargs.get("origin")
1727
+ prototype = kwargs.get("prototype")
1728
+ if (
1729
+ origin is None
1730
+ and prototype is None
1731
+ and nervapy.x86_64.options.get_debug_level() > 0
1732
+ ):
1733
+ origin = inspect.stack()
1734
+ super(KUNPCKWD, self).__init__("KUNPCKWD", origin=origin, prototype=prototype)
1735
+ self.operands = tuple(map(check_operand, args))
1736
+ if len(self.operands) != 3:
1737
+ raise SyntaxError('Instruction "KUNPCKWD" requires 3 operands')
1738
+ if is_k(self.operands[0]) and is_k(self.operands[1]) and is_k(self.operands[2]):
1739
+ self.encodings.append(
1740
+ (
1741
+ 0x40,
1742
+ lambda op, vex3=False: vex2(4, 0, None, op[1].hlcode, vex3)
1743
+ + bytearray([0x4B, 0xC0 | op[0].lcode << 3 | op[2].lcode]),
1744
+ )
1745
+ )
1746
+ self.in_regs = (False, True, True)
1747
+ self.out_regs = (True, False, False)
1748
+ self.out_operands = (True, False, False)
1749
+ self.isa_extensions = frozenset([nervapy.x86_64.isa.avx512bw])
1750
+ else:
1751
+ raise SyntaxError(
1752
+ "Invalid operand types: KUNPCKWD "
1753
+ + ", ".join(map(format_operand_type, self.operands))
1754
+ )
1755
+ if nervapy.stream.active_stream is not None:
1756
+ nervapy.stream.active_stream.add_instruction(self)
1757
+
1758
+
1759
+ class KUNPCKDQ(Instruction):
1760
+ """Unpack and Interleave 32-bit Masks"""
1761
+
1762
+ def __init__(self, *args, **kwargs):
1763
+ """Supported forms:
1764
+
1765
+ * KUNPCKDQ(k, k, k) [AVX512BW]
1766
+ """
1767
+
1768
+ origin = kwargs.get("origin")
1769
+ prototype = kwargs.get("prototype")
1770
+ if (
1771
+ origin is None
1772
+ and prototype is None
1773
+ and nervapy.x86_64.options.get_debug_level() > 0
1774
+ ):
1775
+ origin = inspect.stack()
1776
+ super(KUNPCKDQ, self).__init__("KUNPCKDQ", origin=origin, prototype=prototype)
1777
+ self.operands = tuple(map(check_operand, args))
1778
+ if len(self.operands) != 3:
1779
+ raise SyntaxError('Instruction "KUNPCKDQ" requires 3 operands')
1780
+ if is_k(self.operands[0]) and is_k(self.operands[1]) and is_k(self.operands[2]):
1781
+ self.encodings.append(
1782
+ (
1783
+ 0x00,
1784
+ lambda op: bytearray(
1785
+ [
1786
+ 0xC4,
1787
+ 0xE1,
1788
+ 0xFC ^ (op[1].hlcode << 3),
1789
+ 0x4B,
1790
+ 0xC0 | op[0].lcode << 3 | op[2].lcode,
1791
+ ]
1792
+ ),
1793
+ )
1794
+ )
1795
+ self.in_regs = (False, True, True)
1796
+ self.out_regs = (True, False, False)
1797
+ self.out_operands = (True, False, False)
1798
+ self.isa_extensions = frozenset([nervapy.x86_64.isa.avx512bw])
1799
+ else:
1800
+ raise SyntaxError(
1801
+ "Invalid operand types: KUNPCKDQ "
1802
+ + ", ".join(map(format_operand_type, self.operands))
1803
+ )
1804
+ if nervapy.stream.active_stream is not None:
1805
+ nervapy.stream.active_stream.add_instruction(self)
1806
+
1807
+
1808
+ class KTESTB(Instruction):
1809
+ """Bit Test 8-bit Masks and Set Flags"""
1810
+
1811
+ def __init__(self, *args, **kwargs):
1812
+ """Supported forms:
1813
+
1814
+ * KTESTB(k, k) [AVX512DQ]
1815
+ """
1816
+
1817
+ origin = kwargs.get("origin")
1818
+ prototype = kwargs.get("prototype")
1819
+ if (
1820
+ origin is None
1821
+ and prototype is None
1822
+ and nervapy.x86_64.options.get_debug_level() > 0
1823
+ ):
1824
+ origin = inspect.stack()
1825
+ super(KTESTB, self).__init__("KTESTB", origin=origin, prototype=prototype)
1826
+ self.operands = tuple(map(check_operand, args))
1827
+ if len(self.operands) != 2:
1828
+ raise SyntaxError('Instruction "KTESTB" requires 2 operands')
1829
+ if is_k(self.operands[0]) and is_k(self.operands[1]):
1830
+ self.encodings.append(
1831
+ (
1832
+ 0x40,
1833
+ lambda op, vex3=False: vex2(1, 0, None, 0, vex3)
1834
+ + bytearray([0x99, 0xC0 | op[0].lcode << 3 | op[1].lcode]),
1835
+ )
1836
+ )
1837
+ self.in_regs = (True, True)
1838
+ self.out_regs = (False, False)
1839
+ self.out_operands = (False, False)
1840
+ self.isa_extensions = frozenset([nervapy.x86_64.isa.avx512dq])
1841
+ else:
1842
+ raise SyntaxError(
1843
+ "Invalid operand types: KTESTB "
1844
+ + ", ".join(map(format_operand_type, self.operands))
1845
+ )
1846
+ if nervapy.stream.active_stream is not None:
1847
+ nervapy.stream.active_stream.add_instruction(self)
1848
+
1849
+
1850
+ class KTESTW(Instruction):
1851
+ """Bit Test 16-bit Masks and Set Flags"""
1852
+
1853
+ def __init__(self, *args, **kwargs):
1854
+ """Supported forms:
1855
+
1856
+ * KTESTW(k, k) [AVX512DQ]
1857
+ """
1858
+
1859
+ origin = kwargs.get("origin")
1860
+ prototype = kwargs.get("prototype")
1861
+ if (
1862
+ origin is None
1863
+ and prototype is None
1864
+ and nervapy.x86_64.options.get_debug_level() > 0
1865
+ ):
1866
+ origin = inspect.stack()
1867
+ super(KTESTW, self).__init__("KTESTW", origin=origin, prototype=prototype)
1868
+ self.operands = tuple(map(check_operand, args))
1869
+ if len(self.operands) != 2:
1870
+ raise SyntaxError('Instruction "KTESTW" requires 2 operands')
1871
+ if is_k(self.operands[0]) and is_k(self.operands[1]):
1872
+ self.encodings.append(
1873
+ (
1874
+ 0x40,
1875
+ lambda op, vex3=False: vex2(0, 0, None, 0, vex3)
1876
+ + bytearray([0x99, 0xC0 | op[0].lcode << 3 | op[1].lcode]),
1877
+ )
1878
+ )
1879
+ self.in_regs = (True, True)
1880
+ self.out_regs = (False, False)
1881
+ self.out_operands = (False, False)
1882
+ self.isa_extensions = frozenset([nervapy.x86_64.isa.avx512dq])
1883
+ else:
1884
+ raise SyntaxError(
1885
+ "Invalid operand types: KTESTW "
1886
+ + ", ".join(map(format_operand_type, self.operands))
1887
+ )
1888
+ if nervapy.stream.active_stream is not None:
1889
+ nervapy.stream.active_stream.add_instruction(self)
1890
+
1891
+
1892
+ class KTESTD(Instruction):
1893
+ """Bit Test 32-bit Masks and Set Flags"""
1894
+
1895
+ def __init__(self, *args, **kwargs):
1896
+ """Supported forms:
1897
+
1898
+ * KTESTD(k, k) [AVX512BW]
1899
+ """
1900
+
1901
+ origin = kwargs.get("origin")
1902
+ prototype = kwargs.get("prototype")
1903
+ if (
1904
+ origin is None
1905
+ and prototype is None
1906
+ and nervapy.x86_64.options.get_debug_level() > 0
1907
+ ):
1908
+ origin = inspect.stack()
1909
+ super(KTESTD, self).__init__("KTESTD", origin=origin, prototype=prototype)
1910
+ self.operands = tuple(map(check_operand, args))
1911
+ if len(self.operands) != 2:
1912
+ raise SyntaxError('Instruction "KTESTD" requires 2 operands')
1913
+ if is_k(self.operands[0]) and is_k(self.operands[1]):
1914
+ self.encodings.append(
1915
+ (
1916
+ 0x00,
1917
+ lambda op: bytearray(
1918
+ [0xC4, 0xE1, 0xF9, 0x99, 0xC0 | op[0].lcode << 3 | op[1].lcode]
1919
+ ),
1920
+ )
1921
+ )
1922
+ self.in_regs = (True, True)
1923
+ self.out_regs = (False, False)
1924
+ self.out_operands = (False, False)
1925
+ self.isa_extensions = frozenset([nervapy.x86_64.isa.avx512bw])
1926
+ else:
1927
+ raise SyntaxError(
1928
+ "Invalid operand types: KTESTD "
1929
+ + ", ".join(map(format_operand_type, self.operands))
1930
+ )
1931
+ if nervapy.stream.active_stream is not None:
1932
+ nervapy.stream.active_stream.add_instruction(self)
1933
+
1934
+
1935
+ class KTESTQ(Instruction):
1936
+ """Bit Test 64-bit Masks and Set Flags"""
1937
+
1938
+ def __init__(self, *args, **kwargs):
1939
+ """Supported forms:
1940
+
1941
+ * KTESTQ(k, k) [AVX512BW]
1942
+ """
1943
+
1944
+ origin = kwargs.get("origin")
1945
+ prototype = kwargs.get("prototype")
1946
+ if (
1947
+ origin is None
1948
+ and prototype is None
1949
+ and nervapy.x86_64.options.get_debug_level() > 0
1950
+ ):
1951
+ origin = inspect.stack()
1952
+ super(KTESTQ, self).__init__("KTESTQ", origin=origin, prototype=prototype)
1953
+ self.operands = tuple(map(check_operand, args))
1954
+ if len(self.operands) != 2:
1955
+ raise SyntaxError('Instruction "KTESTQ" requires 2 operands')
1956
+ if is_k(self.operands[0]) and is_k(self.operands[1]):
1957
+ self.encodings.append(
1958
+ (
1959
+ 0x00,
1960
+ lambda op: bytearray(
1961
+ [0xC4, 0xE1, 0xF8, 0x99, 0xC0 | op[0].lcode << 3 | op[1].lcode]
1962
+ ),
1963
+ )
1964
+ )
1965
+ self.in_regs = (True, True)
1966
+ self.out_regs = (False, False)
1967
+ self.out_operands = (False, False)
1968
+ self.isa_extensions = frozenset([nervapy.x86_64.isa.avx512bw])
1969
+ else:
1970
+ raise SyntaxError(
1971
+ "Invalid operand types: KTESTQ "
1972
+ + ", ".join(map(format_operand_type, self.operands))
1973
+ )
1974
+ if nervapy.stream.active_stream is not None:
1975
+ nervapy.stream.active_stream.add_instruction(self)
1976
+
1977
+
1978
+ class KORTESTB(Instruction):
1979
+ """OR 8-bit Masks and Set Flags"""
1980
+
1981
+ def __init__(self, *args, **kwargs):
1982
+ """Supported forms:
1983
+
1984
+ * KORTESTB(k, k) [AVX512DQ]
1985
+ """
1986
+
1987
+ origin = kwargs.get("origin")
1988
+ prototype = kwargs.get("prototype")
1989
+ if (
1990
+ origin is None
1991
+ and prototype is None
1992
+ and nervapy.x86_64.options.get_debug_level() > 0
1993
+ ):
1994
+ origin = inspect.stack()
1995
+ super(KORTESTB, self).__init__("KORTESTB", origin=origin, prototype=prototype)
1996
+ self.operands = tuple(map(check_operand, args))
1997
+ if len(self.operands) != 2:
1998
+ raise SyntaxError('Instruction "KORTESTB" requires 2 operands')
1999
+ if is_k(self.operands[0]) and is_k(self.operands[1]):
2000
+ self.encodings.append(
2001
+ (
2002
+ 0x40,
2003
+ lambda op, vex3=False: vex2(1, 0, None, 0, vex3)
2004
+ + bytearray([0x98, 0xC0 | op[0].lcode << 3 | op[1].lcode]),
2005
+ )
2006
+ )
2007
+ self.in_regs = (True, True)
2008
+ self.out_regs = (False, False)
2009
+ self.out_operands = (False, False)
2010
+ self.isa_extensions = frozenset([nervapy.x86_64.isa.avx512dq])
2011
+ else:
2012
+ raise SyntaxError(
2013
+ "Invalid operand types: KORTESTB "
2014
+ + ", ".join(map(format_operand_type, self.operands))
2015
+ )
2016
+ if nervapy.stream.active_stream is not None:
2017
+ nervapy.stream.active_stream.add_instruction(self)
2018
+
2019
+
2020
+ class KORTESTW(Instruction):
2021
+ """OR 16-bit Masks and Set Flags"""
2022
+
2023
+ def __init__(self, *args, **kwargs):
2024
+ """Supported forms:
2025
+
2026
+ * KORTESTW(k, k) [AVX512F]
2027
+ """
2028
+
2029
+ origin = kwargs.get("origin")
2030
+ prototype = kwargs.get("prototype")
2031
+ if (
2032
+ origin is None
2033
+ and prototype is None
2034
+ and nervapy.x86_64.options.get_debug_level() > 0
2035
+ ):
2036
+ origin = inspect.stack()
2037
+ super(KORTESTW, self).__init__("KORTESTW", origin=origin, prototype=prototype)
2038
+ self.operands = tuple(map(check_operand, args))
2039
+ if len(self.operands) != 2:
2040
+ raise SyntaxError('Instruction "KORTESTW" requires 2 operands')
2041
+ if is_k(self.operands[0]) and is_k(self.operands[1]):
2042
+ self.encodings.append(
2043
+ (
2044
+ 0x40,
2045
+ lambda op, vex3=False: vex2(0, 0, None, 0, vex3)
2046
+ + bytearray([0x98, 0xC0 | op[0].lcode << 3 | op[1].lcode]),
2047
+ )
2048
+ )
2049
+ self.in_regs = (True, True)
2050
+ self.out_regs = (False, False)
2051
+ self.out_operands = (False, False)
2052
+ self.isa_extensions = frozenset([nervapy.x86_64.isa.avx512f])
2053
+ else:
2054
+ raise SyntaxError(
2055
+ "Invalid operand types: KORTESTW "
2056
+ + ", ".join(map(format_operand_type, self.operands))
2057
+ )
2058
+ if nervapy.stream.active_stream is not None:
2059
+ nervapy.stream.active_stream.add_instruction(self)
2060
+
2061
+
2062
+ class KORTESTD(Instruction):
2063
+ """OR 32-bit Masks and Set Flags"""
2064
+
2065
+ def __init__(self, *args, **kwargs):
2066
+ """Supported forms:
2067
+
2068
+ * KORTESTD(k, k) [AVX512BW]
2069
+ """
2070
+
2071
+ origin = kwargs.get("origin")
2072
+ prototype = kwargs.get("prototype")
2073
+ if (
2074
+ origin is None
2075
+ and prototype is None
2076
+ and nervapy.x86_64.options.get_debug_level() > 0
2077
+ ):
2078
+ origin = inspect.stack()
2079
+ super(KORTESTD, self).__init__("KORTESTD", origin=origin, prototype=prototype)
2080
+ self.operands = tuple(map(check_operand, args))
2081
+ if len(self.operands) != 2:
2082
+ raise SyntaxError('Instruction "KORTESTD" requires 2 operands')
2083
+ if is_k(self.operands[0]) and is_k(self.operands[1]):
2084
+ self.encodings.append(
2085
+ (
2086
+ 0x00,
2087
+ lambda op: bytearray(
2088
+ [0xC4, 0xE1, 0xF9, 0x98, 0xC0 | op[0].lcode << 3 | op[1].lcode]
2089
+ ),
2090
+ )
2091
+ )
2092
+ self.in_regs = (True, True)
2093
+ self.out_regs = (False, False)
2094
+ self.out_operands = (False, False)
2095
+ self.isa_extensions = frozenset([nervapy.x86_64.isa.avx512bw])
2096
+ else:
2097
+ raise SyntaxError(
2098
+ "Invalid operand types: KORTESTD "
2099
+ + ", ".join(map(format_operand_type, self.operands))
2100
+ )
2101
+ if nervapy.stream.active_stream is not None:
2102
+ nervapy.stream.active_stream.add_instruction(self)
2103
+
2104
+
2105
+ class KORTESTQ(Instruction):
2106
+ """OR 64-bit Masks and Set Flags"""
2107
+
2108
+ def __init__(self, *args, **kwargs):
2109
+ """Supported forms:
2110
+
2111
+ * KORTESTQ(k, k) [AVX512BW]
2112
+ """
2113
+
2114
+ origin = kwargs.get("origin")
2115
+ prototype = kwargs.get("prototype")
2116
+ if (
2117
+ origin is None
2118
+ and prototype is None
2119
+ and nervapy.x86_64.options.get_debug_level() > 0
2120
+ ):
2121
+ origin = inspect.stack()
2122
+ super(KORTESTQ, self).__init__("KORTESTQ", origin=origin, prototype=prototype)
2123
+ self.operands = tuple(map(check_operand, args))
2124
+ if len(self.operands) != 2:
2125
+ raise SyntaxError('Instruction "KORTESTQ" requires 2 operands')
2126
+ if is_k(self.operands[0]) and is_k(self.operands[1]):
2127
+ self.encodings.append(
2128
+ (
2129
+ 0x00,
2130
+ lambda op: bytearray(
2131
+ [0xC4, 0xE1, 0xF8, 0x98, 0xC0 | op[0].lcode << 3 | op[1].lcode]
2132
+ ),
2133
+ )
2134
+ )
2135
+ self.in_regs = (True, True)
2136
+ self.out_regs = (False, False)
2137
+ self.out_operands = (False, False)
2138
+ self.isa_extensions = frozenset([nervapy.x86_64.isa.avx512bw])
2139
+ else:
2140
+ raise SyntaxError(
2141
+ "Invalid operand types: KORTESTQ "
2142
+ + ", ".join(map(format_operand_type, self.operands))
2143
+ )
2144
+ if nervapy.stream.active_stream is not None:
2145
+ nervapy.stream.active_stream.add_instruction(self)
2146
+
2147
+
2148
+ class KSHIFTLB(Instruction):
2149
+ """Shift Left 8-bit Masks"""
2150
+
2151
+ def __init__(self, *args, **kwargs):
2152
+ """Supported forms:
2153
+
2154
+ * KSHIFTLB(k, k, imm8) [AVX512DQ]
2155
+ """
2156
+
2157
+ origin = kwargs.get("origin")
2158
+ prototype = kwargs.get("prototype")
2159
+ if (
2160
+ origin is None
2161
+ and prototype is None
2162
+ and nervapy.x86_64.options.get_debug_level() > 0
2163
+ ):
2164
+ origin = inspect.stack()
2165
+ super(KSHIFTLB, self).__init__("KSHIFTLB", origin=origin, prototype=prototype)
2166
+ self.operands = tuple(map(check_operand, args))
2167
+ if len(self.operands) != 3:
2168
+ raise SyntaxError('Instruction "KSHIFTLB" requires 3 operands')
2169
+ if (
2170
+ is_k(self.operands[0])
2171
+ and is_k(self.operands[1])
2172
+ and is_imm(self.operands[2])
2173
+ ):
2174
+ if not is_imm8(self.operands[2]):
2175
+ raise ValueError("Argument #2 can not be encoded as imm8")
2176
+ self.encodings.append(
2177
+ (
2178
+ 0x00,
2179
+ lambda op: bytearray(
2180
+ [
2181
+ 0xC4,
2182
+ 0xE3,
2183
+ 0x79,
2184
+ 0x32,
2185
+ 0xC0 | op[0].lcode << 3 | op[1].lcode,
2186
+ op[2] & 0xFF,
2187
+ ]
2188
+ ),
2189
+ )
2190
+ )
2191
+ self.in_regs = (False, True, False)
2192
+ self.out_regs = (True, False, False)
2193
+ self.out_operands = (True, False, False)
2194
+ self.isa_extensions = frozenset([nervapy.x86_64.isa.avx512dq])
2195
+ else:
2196
+ raise SyntaxError(
2197
+ "Invalid operand types: KSHIFTLB "
2198
+ + ", ".join(map(format_operand_type, self.operands))
2199
+ )
2200
+ if nervapy.stream.active_stream is not None:
2201
+ nervapy.stream.active_stream.add_instruction(self)
2202
+
2203
+
2204
+ class KSHIFTLW(Instruction):
2205
+ """Shift Left 16-bit Masks"""
2206
+
2207
+ def __init__(self, *args, **kwargs):
2208
+ """Supported forms:
2209
+
2210
+ * KSHIFTLW(k, k, imm8) [AVX512F]
2211
+ """
2212
+
2213
+ origin = kwargs.get("origin")
2214
+ prototype = kwargs.get("prototype")
2215
+ if (
2216
+ origin is None
2217
+ and prototype is None
2218
+ and nervapy.x86_64.options.get_debug_level() > 0
2219
+ ):
2220
+ origin = inspect.stack()
2221
+ super(KSHIFTLW, self).__init__("KSHIFTLW", origin=origin, prototype=prototype)
2222
+ self.operands = tuple(map(check_operand, args))
2223
+ if len(self.operands) != 3:
2224
+ raise SyntaxError('Instruction "KSHIFTLW" requires 3 operands')
2225
+ if (
2226
+ is_k(self.operands[0])
2227
+ and is_k(self.operands[1])
2228
+ and is_imm(self.operands[2])
2229
+ ):
2230
+ if not is_imm8(self.operands[2]):
2231
+ raise ValueError("Argument #2 can not be encoded as imm8")
2232
+ self.encodings.append(
2233
+ (
2234
+ 0x00,
2235
+ lambda op: bytearray(
2236
+ [
2237
+ 0xC4,
2238
+ 0xE3,
2239
+ 0xF9,
2240
+ 0x32,
2241
+ 0xC0 | op[0].lcode << 3 | op[1].lcode,
2242
+ op[2] & 0xFF,
2243
+ ]
2244
+ ),
2245
+ )
2246
+ )
2247
+ self.in_regs = (False, True, False)
2248
+ self.out_regs = (True, False, False)
2249
+ self.out_operands = (True, False, False)
2250
+ self.isa_extensions = frozenset([nervapy.x86_64.isa.avx512f])
2251
+ else:
2252
+ raise SyntaxError(
2253
+ "Invalid operand types: KSHIFTLW "
2254
+ + ", ".join(map(format_operand_type, self.operands))
2255
+ )
2256
+ if nervapy.stream.active_stream is not None:
2257
+ nervapy.stream.active_stream.add_instruction(self)
2258
+
2259
+
2260
+ class KSHIFTLD(Instruction):
2261
+ """Shift Left 32-bit Masks"""
2262
+
2263
+ def __init__(self, *args, **kwargs):
2264
+ """Supported forms:
2265
+
2266
+ * KSHIFTLD(k, k, imm8) [AVX512BW]
2267
+ """
2268
+
2269
+ origin = kwargs.get("origin")
2270
+ prototype = kwargs.get("prototype")
2271
+ if (
2272
+ origin is None
2273
+ and prototype is None
2274
+ and nervapy.x86_64.options.get_debug_level() > 0
2275
+ ):
2276
+ origin = inspect.stack()
2277
+ super(KSHIFTLD, self).__init__("KSHIFTLD", origin=origin, prototype=prototype)
2278
+ self.operands = tuple(map(check_operand, args))
2279
+ if len(self.operands) != 3:
2280
+ raise SyntaxError('Instruction "KSHIFTLD" requires 3 operands')
2281
+ if (
2282
+ is_k(self.operands[0])
2283
+ and is_k(self.operands[1])
2284
+ and is_imm(self.operands[2])
2285
+ ):
2286
+ if not is_imm8(self.operands[2]):
2287
+ raise ValueError("Argument #2 can not be encoded as imm8")
2288
+ self.encodings.append(
2289
+ (
2290
+ 0x00,
2291
+ lambda op: bytearray(
2292
+ [
2293
+ 0xC4,
2294
+ 0xE3,
2295
+ 0x79,
2296
+ 0x33,
2297
+ 0xC0 | op[0].lcode << 3 | op[1].lcode,
2298
+ op[2] & 0xFF,
2299
+ ]
2300
+ ),
2301
+ )
2302
+ )
2303
+ self.in_regs = (False, True, False)
2304
+ self.out_regs = (True, False, False)
2305
+ self.out_operands = (True, False, False)
2306
+ self.isa_extensions = frozenset([nervapy.x86_64.isa.avx512bw])
2307
+ else:
2308
+ raise SyntaxError(
2309
+ "Invalid operand types: KSHIFTLD "
2310
+ + ", ".join(map(format_operand_type, self.operands))
2311
+ )
2312
+ if nervapy.stream.active_stream is not None:
2313
+ nervapy.stream.active_stream.add_instruction(self)
2314
+
2315
+
2316
+ class KSHIFTLQ(Instruction):
2317
+ """Shift Left 64-bit Masks"""
2318
+
2319
+ def __init__(self, *args, **kwargs):
2320
+ """Supported forms:
2321
+
2322
+ * KSHIFTLQ(k, k, imm8) [AVX512BW]
2323
+ """
2324
+
2325
+ origin = kwargs.get("origin")
2326
+ prototype = kwargs.get("prototype")
2327
+ if (
2328
+ origin is None
2329
+ and prototype is None
2330
+ and nervapy.x86_64.options.get_debug_level() > 0
2331
+ ):
2332
+ origin = inspect.stack()
2333
+ super(KSHIFTLQ, self).__init__("KSHIFTLQ", origin=origin, prototype=prototype)
2334
+ self.operands = tuple(map(check_operand, args))
2335
+ if len(self.operands) != 3:
2336
+ raise SyntaxError('Instruction "KSHIFTLQ" requires 3 operands')
2337
+ if (
2338
+ is_k(self.operands[0])
2339
+ and is_k(self.operands[1])
2340
+ and is_imm(self.operands[2])
2341
+ ):
2342
+ if not is_imm8(self.operands[2]):
2343
+ raise ValueError("Argument #2 can not be encoded as imm8")
2344
+ self.encodings.append(
2345
+ (
2346
+ 0x00,
2347
+ lambda op: bytearray(
2348
+ [
2349
+ 0xC4,
2350
+ 0xE3,
2351
+ 0xF9,
2352
+ 0x33,
2353
+ 0xC0 | op[0].lcode << 3 | op[1].lcode,
2354
+ op[2] & 0xFF,
2355
+ ]
2356
+ ),
2357
+ )
2358
+ )
2359
+ self.in_regs = (False, True, False)
2360
+ self.out_regs = (True, False, False)
2361
+ self.out_operands = (True, False, False)
2362
+ self.isa_extensions = frozenset([nervapy.x86_64.isa.avx512bw])
2363
+ else:
2364
+ raise SyntaxError(
2365
+ "Invalid operand types: KSHIFTLQ "
2366
+ + ", ".join(map(format_operand_type, self.operands))
2367
+ )
2368
+ if nervapy.stream.active_stream is not None:
2369
+ nervapy.stream.active_stream.add_instruction(self)
2370
+
2371
+
2372
+ class KSHIFTRB(Instruction):
2373
+ """Shift Right 8-bit Masks"""
2374
+
2375
+ def __init__(self, *args, **kwargs):
2376
+ """Supported forms:
2377
+
2378
+ * KSHIFTRB(k, k, imm8) [AVX512DQ]
2379
+ """
2380
+
2381
+ origin = kwargs.get("origin")
2382
+ prototype = kwargs.get("prototype")
2383
+ if (
2384
+ origin is None
2385
+ and prototype is None
2386
+ and nervapy.x86_64.options.get_debug_level() > 0
2387
+ ):
2388
+ origin = inspect.stack()
2389
+ super(KSHIFTRB, self).__init__("KSHIFTRB", origin=origin, prototype=prototype)
2390
+ self.operands = tuple(map(check_operand, args))
2391
+ if len(self.operands) != 3:
2392
+ raise SyntaxError('Instruction "KSHIFTRB" requires 3 operands')
2393
+ if (
2394
+ is_k(self.operands[0])
2395
+ and is_k(self.operands[1])
2396
+ and is_imm(self.operands[2])
2397
+ ):
2398
+ if not is_imm8(self.operands[2]):
2399
+ raise ValueError("Argument #2 can not be encoded as imm8")
2400
+ self.encodings.append(
2401
+ (
2402
+ 0x00,
2403
+ lambda op: bytearray(
2404
+ [
2405
+ 0xC4,
2406
+ 0xE3,
2407
+ 0x79,
2408
+ 0x30,
2409
+ 0xC0 | op[0].lcode << 3 | op[1].lcode,
2410
+ op[2] & 0xFF,
2411
+ ]
2412
+ ),
2413
+ )
2414
+ )
2415
+ self.in_regs = (False, True, False)
2416
+ self.out_regs = (True, False, False)
2417
+ self.out_operands = (True, False, False)
2418
+ self.isa_extensions = frozenset([nervapy.x86_64.isa.avx512dq])
2419
+ else:
2420
+ raise SyntaxError(
2421
+ "Invalid operand types: KSHIFTRB "
2422
+ + ", ".join(map(format_operand_type, self.operands))
2423
+ )
2424
+ if nervapy.stream.active_stream is not None:
2425
+ nervapy.stream.active_stream.add_instruction(self)
2426
+
2427
+
2428
+ class KSHIFTRW(Instruction):
2429
+ """Shift Right 16-bit Masks"""
2430
+
2431
+ def __init__(self, *args, **kwargs):
2432
+ """Supported forms:
2433
+
2434
+ * KSHIFTRW(k, k, imm8) [AVX512F]
2435
+ """
2436
+
2437
+ origin = kwargs.get("origin")
2438
+ prototype = kwargs.get("prototype")
2439
+ if (
2440
+ origin is None
2441
+ and prototype is None
2442
+ and nervapy.x86_64.options.get_debug_level() > 0
2443
+ ):
2444
+ origin = inspect.stack()
2445
+ super(KSHIFTRW, self).__init__("KSHIFTRW", origin=origin, prototype=prototype)
2446
+ self.operands = tuple(map(check_operand, args))
2447
+ if len(self.operands) != 3:
2448
+ raise SyntaxError('Instruction "KSHIFTRW" requires 3 operands')
2449
+ if (
2450
+ is_k(self.operands[0])
2451
+ and is_k(self.operands[1])
2452
+ and is_imm(self.operands[2])
2453
+ ):
2454
+ if not is_imm8(self.operands[2]):
2455
+ raise ValueError("Argument #2 can not be encoded as imm8")
2456
+ self.encodings.append(
2457
+ (
2458
+ 0x00,
2459
+ lambda op: bytearray(
2460
+ [
2461
+ 0xC4,
2462
+ 0xE3,
2463
+ 0xF9,
2464
+ 0x30,
2465
+ 0xC0 | op[0].lcode << 3 | op[1].lcode,
2466
+ op[2] & 0xFF,
2467
+ ]
2468
+ ),
2469
+ )
2470
+ )
2471
+ self.in_regs = (False, True, False)
2472
+ self.out_regs = (True, False, False)
2473
+ self.out_operands = (True, False, False)
2474
+ self.isa_extensions = frozenset([nervapy.x86_64.isa.avx512f])
2475
+ else:
2476
+ raise SyntaxError(
2477
+ "Invalid operand types: KSHIFTRW "
2478
+ + ", ".join(map(format_operand_type, self.operands))
2479
+ )
2480
+ if nervapy.stream.active_stream is not None:
2481
+ nervapy.stream.active_stream.add_instruction(self)
2482
+
2483
+
2484
+ class KSHIFTRD(Instruction):
2485
+ """Shift Right 32-bit Masks"""
2486
+
2487
+ def __init__(self, *args, **kwargs):
2488
+ """Supported forms:
2489
+
2490
+ * KSHIFTRD(k, k, imm8) [AVX512BW]
2491
+ """
2492
+
2493
+ origin = kwargs.get("origin")
2494
+ prototype = kwargs.get("prototype")
2495
+ if (
2496
+ origin is None
2497
+ and prototype is None
2498
+ and nervapy.x86_64.options.get_debug_level() > 0
2499
+ ):
2500
+ origin = inspect.stack()
2501
+ super(KSHIFTRD, self).__init__("KSHIFTRD", origin=origin, prototype=prototype)
2502
+ self.operands = tuple(map(check_operand, args))
2503
+ if len(self.operands) != 3:
2504
+ raise SyntaxError('Instruction "KSHIFTRD" requires 3 operands')
2505
+ if (
2506
+ is_k(self.operands[0])
2507
+ and is_k(self.operands[1])
2508
+ and is_imm(self.operands[2])
2509
+ ):
2510
+ if not is_imm8(self.operands[2]):
2511
+ raise ValueError("Argument #2 can not be encoded as imm8")
2512
+ self.encodings.append(
2513
+ (
2514
+ 0x00,
2515
+ lambda op: bytearray(
2516
+ [
2517
+ 0xC4,
2518
+ 0xE3,
2519
+ 0x79,
2520
+ 0x31,
2521
+ 0xC0 | op[0].lcode << 3 | op[1].lcode,
2522
+ op[2] & 0xFF,
2523
+ ]
2524
+ ),
2525
+ )
2526
+ )
2527
+ self.in_regs = (False, True, False)
2528
+ self.out_regs = (True, False, False)
2529
+ self.out_operands = (True, False, False)
2530
+ self.isa_extensions = frozenset([nervapy.x86_64.isa.avx512bw])
2531
+ else:
2532
+ raise SyntaxError(
2533
+ "Invalid operand types: KSHIFTRD "
2534
+ + ", ".join(map(format_operand_type, self.operands))
2535
+ )
2536
+ if nervapy.stream.active_stream is not None:
2537
+ nervapy.stream.active_stream.add_instruction(self)
2538
+
2539
+
2540
+ class KSHIFTRQ(Instruction):
2541
+ """Shift Right 64-bit Masks"""
2542
+
2543
+ def __init__(self, *args, **kwargs):
2544
+ """Supported forms:
2545
+
2546
+ * KSHIFTRQ(k, k, imm8) [AVX512BW]
2547
+ """
2548
+
2549
+ origin = kwargs.get("origin")
2550
+ prototype = kwargs.get("prototype")
2551
+ if (
2552
+ origin is None
2553
+ and prototype is None
2554
+ and nervapy.x86_64.options.get_debug_level() > 0
2555
+ ):
2556
+ origin = inspect.stack()
2557
+ super(KSHIFTRQ, self).__init__("KSHIFTRQ", origin=origin, prototype=prototype)
2558
+ self.operands = tuple(map(check_operand, args))
2559
+ if len(self.operands) != 3:
2560
+ raise SyntaxError('Instruction "KSHIFTRQ" requires 3 operands')
2561
+ if (
2562
+ is_k(self.operands[0])
2563
+ and is_k(self.operands[1])
2564
+ and is_imm(self.operands[2])
2565
+ ):
2566
+ if not is_imm8(self.operands[2]):
2567
+ raise ValueError("Argument #2 can not be encoded as imm8")
2568
+ self.encodings.append(
2569
+ (
2570
+ 0x00,
2571
+ lambda op: bytearray(
2572
+ [
2573
+ 0xC4,
2574
+ 0xE3,
2575
+ 0xF9,
2576
+ 0x31,
2577
+ 0xC0 | op[0].lcode << 3 | op[1].lcode,
2578
+ op[2] & 0xFF,
2579
+ ]
2580
+ ),
2581
+ )
2582
+ )
2583
+ self.in_regs = (False, True, False)
2584
+ self.out_regs = (True, False, False)
2585
+ self.out_operands = (True, False, False)
2586
+ self.isa_extensions = frozenset([nervapy.x86_64.isa.avx512bw])
2587
+ else:
2588
+ raise SyntaxError(
2589
+ "Invalid operand types: KSHIFTRQ "
2590
+ + ", ".join(map(format_operand_type, self.operands))
2591
+ )
2592
+ if nervapy.stream.active_stream is not None:
2593
+ nervapy.stream.active_stream.add_instruction(self)