1{
2  "License": [
3    "Copyright (C) 2023 The Android Open Source Project",
4    "",
5    "Licensed under the Apache License, Version 2.0 (the “License”);",
6    "you may not use this file except in compliance with the License.",
7    "You may obtain a copy of the License at",
8    "",
9    "     http://www.apache.org/licenses/LICENSE-2.0",
10    "",
11    "Unless required by applicable law or agreed to in writing, software",
12    "distributed under the License is distributed on an “AS IS” BASIS,",
13    "WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.",
14    "See the License for the specific language governing permissions and",
15    "limitations under the License."
16  ],
17  "arch": "x86_64",
18  "insns": [
19    {
20      "encodings": {
21        "Adcq": { "opcodes": [ "13" ] },
22        "Sbbq": { "opcodes": [ "1B" ] }
23      },
24      "args": [
25        { "class": "GeneralReg64", "usage": "use_def" },
26        { "class": "Mem64", "usage": "use" },
27        { "class": "FLAGS", "usage": "use_def" }
28      ]
29    },
30    {
31      "encodings": {
32        "Adcq": { "opcodes": [ "81", "2" ] },
33        "Sbbq": { "opcodes": [ "81", "3" ] }
34      },
35      "args": [
36        { "class": "GeneralReg64/Mem64", "usage": "use_def" },
37        { "class": "Imm32" },
38        { "class": "FLAGS", "usage": "use_def" }
39      ]
40    },
41    {
42      "encodings": {
43        "Adcq": { "opcodes": [ "11" ], "reg_to_rm": true },
44        "Sbbq": { "opcodes": [ "19" ], "reg_to_rm": true }
45      },
46      "args": [
47        { "class": "GeneralReg64/Mem64", "usage": "use_def" },
48        { "class": "GeneralReg64", "usage": "use" },
49        { "class": "FLAGS", "usage": "use_def" }
50      ]
51    },
52    {
53      "encodings": {
54        "AdcqAccumulator": { "opcodes": [ "48", "15" ] },
55        "SbbqAccumulator": { "opcodes": [ "48", "1D" ] }
56      },
57      "args": [
58        { "class": "RAX", "usage": "use_def" },
59        { "class": "Imm32" },
60        { "class": "FLAGS", "usage": "use_def" }
61      ]
62    },
63    {
64      "encodings": {
65        "AdcqImm8": { "opcodes": [ "83", "2" ] },
66        "Rclq": { "opcodes": [ "C1", "2" ] },
67        "Rcrq": { "opcodes": [ "C1", "3" ] },
68        "SbbqImm8": { "opcodes": [ "83", "3" ] }
69      },
70      "args": [
71        { "class": "GeneralReg64/Mem64", "usage": "use_def" },
72        { "class": "Imm8" },
73        { "class": "FLAGS", "usage": "use_def" }
74      ]
75    },
76    {
77      "encodings": {
78        "Addq": { "opcodes": [ "01" ], "reg_to_rm": true },
79        "Andq": { "opcodes": [ "21" ], "reg_to_rm": true },
80        "Btcq": { "opcodes": [ "0F", "BB" ], "reg_to_rm": true },
81        "Btrq": { "opcodes": [ "0F", "B3" ], "reg_to_rm": true },
82        "Btsq": { "opcodes": [ "0F", "AB" ], "reg_to_rm": true },
83        "Orq": { "opcodes": [ "09" ], "reg_to_rm": true },
84        "Subq": { "opcodes": [ "29" ], "reg_to_rm": true },
85        "Xorq": { "opcodes": [ "31" ], "reg_to_rm": true }
86      },
87      "args": [
88        { "class": "GeneralReg64/Mem64", "usage": "use_def" },
89        { "class": "GeneralReg64", "usage": "use" },
90        { "class": "FLAGS", "usage": "def" }
91      ]
92    },
93    {
94      "encodings": {
95        "Addq": { "opcodes": [ "03" ] },
96        "Andq": { "opcodes": [ "23" ] },
97        "Orq": { "opcodes": [ "0B" ] },
98        "Subq": { "opcodes": [ "2B" ] },
99        "Xorq": { "opcodes": [ "33" ] }
100      },
101      "args": [
102        { "class": "GeneralReg64", "usage": "use_def" },
103        { "class": "Mem64", "usage": "use" },
104        { "class": "FLAGS", "usage": "def" }
105      ]
106    },
107    {
108      "encodings": {
109        "Addq": { "opcodes": [ "81", "0" ] },
110        "Andq": { "opcodes": [ "81", "4" ] },
111        "Orq": { "opcodes": [ "81", "1" ] },
112        "Subq": { "opcodes": [ "81", "5" ] },
113        "Xorq": { "opcodes": [ "81", "6" ] }
114      },
115      "args": [
116        { "class": "GeneralReg64/Mem64", "usage": "use_def" },
117        { "class": "Imm32" },
118        { "class": "FLAGS", "usage": "def" }
119      ]
120    },
121    {
122      "encodings": {
123        "AddqAccumulator": { "opcodes": [ "48", "05" ] },
124        "AndqAccumulator": { "opcodes": [ "48", "25" ] },
125        "OrqAccumulator": { "opcodes": [ "48", "0D" ] },
126        "SubqAccumulator": { "opcodes": [ "48", "2D" ] },
127        "XorqAccumulator": { "opcodes": [ "48", "35" ] }
128      },
129      "args": [
130        { "class": "RAX", "usage": "use_def" },
131        { "class": "Imm32" },
132        { "class": "FLAGS", "usage": "def" }
133      ]
134    },
135    {
136      "encodings": {
137        "AddqImm8": { "opcodes": [ "83", "0" ] },
138        "AndqImm8": { "opcodes": [ "83", "4" ] },
139        "Btcq": { "opcodes": [ "0F", "BA", "7" ] },
140        "Btq": { "opcodes": [ "0F", "BA", "4" ] },
141        "Btrq": { "opcodes": [ "0F", "BA", "6" ] },
142        "Btsq": { "opcodes": [ "0F", "BA", "5" ] },
143        "OrqImm8": { "opcodes": [ "83", "1" ] },
144        "Rolq": { "opcodes": [ "C1", "0" ] },
145        "Rorq": { "opcodes": [ "C1", "1" ] },
146        "Sarq": { "opcodes": [ "C1", "7" ] },
147        "Shlq": { "opcodes": [ "C1", "4" ] },
148        "Shrq": { "opcodes": [ "C1", "5" ] },
149        "SubqImm8": { "opcodes": [ "83", "5" ] },
150        "XorqImm8": { "opcodes": [ "83", "6" ] }
151      },
152      "args": [
153        { "class": "GeneralReg64/Mem64", "usage": "use_def" },
154        { "class": "Imm8" },
155        { "class": "FLAGS", "usage": "def" }
156      ]
157    },
158    {
159      "encodings": {
160        "Andnq": { "feature": "BMI", "opcodes": [ "C4", "02", "80", "F2" ], "vex_rm_to_reg": true }
161      },
162      "args": [
163        { "class": "GeneralReg64", "usage": "def" },
164        { "class": "GeneralReg64", "usage": "use" },
165        { "class": "GeneralReg64/Mem64", "usage": "use" },
166        { "class": "FLAGS", "usage": "def" }
167      ]
168    },
169    {
170      "encodings": {
171        "Bextrq": { "feature": "BMI", "opcodes": [ "C4", "02", "80", "F7" ] },
172        "Bzhiq": { "feature": "BMI2", "opcodes": [ "C4", "02", "80", "F5" ] }
173      },
174      "args": [
175        { "class": "GeneralReg64", "usage": "use_def" },
176        { "class": "GeneralReg64/Mem64", "usage": "use" },
177        { "class": "GeneralReg64", "usage": "use" },
178        { "class": "FLAGS", "usage": "def" }
179      ]
180    },
181    {
182      "encodings": {
183        "Blsiq": { "feature": "BMI", "opcodes": [ "C4", "02", "80", "F3", "3" ], "rm_to_vex": true },
184        "Blsmskq": { "feature": "BMI", "opcodes": [ "C4", "02", "80", "F3", "2" ], "rm_to_vex": true },
185        "Blsrq": { "feature": "BMI", "opcodes": [ "C4", "02", "80", "F3", "1" ], "rm_to_vex": true },
186        "Bsfq": { "opcodes": [ "0F", "BC" ] },
187        "Bsrq": { "opcodes": [ "0F", "BD" ] },
188        "Lzcntq": { "feature": "LZCNT", "opcodes": [ "F3", "0F", "BD" ] },
189        "Popcntq": { "feature": "POPCNT", "opcodes": [ "F3", "0F", "B8" ] },
190        "Tzcntq": { "feature": "BMI", "opcodes": [ "F3", "0F", "BC" ] }
191      },
192      "args": [
193        { "class": "GeneralReg64", "usage": "def" },
194        { "class": "GeneralReg64/Mem64", "usage": "use" },
195        { "class": "FLAGS", "usage": "def" }
196      ]
197    },
198    {
199      "encodings": {
200        "Bswapq": { "opcodes": [ "0F", "C8" ] }
201      },
202      "args": [
203        { "class": "GeneralReg64", "usage": "use_def" }
204      ]
205    },
206    {
207      "encodings": {
208        "Btq": { "opcodes": [ "0F", "A3" ], "reg_to_rm": true },
209        "Cmpq": { "opcodes": [ "39" ], "reg_to_rm": true },
210        "Testq": { "opcodes": [ "85" ], "reg_to_rm": true }
211      },
212      "args": [
213        { "class": "GeneralReg64/Mem64", "usage": "use" },
214        { "class": "GeneralReg64", "usage": "use" },
215        { "class": "FLAGS", "usage": "def" }
216      ]
217    },
218    {
219      "encodings": {
220        "Callq": { "opcodes": [ "FF", "2" ] }
221      },
222      "args": [
223        { "class": "RSP", "usage": "use_def" },
224        { "class": "VecMem64", "usage": "use" }
225      ]
226    },
227    {
228      "encodings": {
229        "Cdqe": { "opcodes": [ "48", "98" ] },
230        "Cltq": { "opcodes": [ "48", "98" ] }
231      },
232      "args": [
233        { "class": "EAX", "usage": "use" },
234        { "class": "RAX", "usage": "def" }
235      ]
236    },
237    {
238      "encodings": {
239        "Cmovq": { "opcodes": [ "0F", "40" ] }
240      },
241      "args": [
242        { "class": "Cond" },
243        { "class": "GeneralReg64", "usage": "use_def" },
244        { "class": "GeneralReg64/Mem64", "usage": "use" },
245        { "class": "FLAGS", "usage": "use" }
246      ]
247    },
248    {
249      "encodings": {
250        "CmpXchg16b": { "opcodes": [ "0F", "C7", "1" ] },
251        "LockCmpXchg16b": { "opcodes": [ "F0", "0F", "C7", "1" ] }
252      },
253      "args": [
254        { "class": "RAX", "usage": "use_def" },
255        { "class": "RDX", "usage": "use_def" },
256        { "class": "RBX", "usage": "use" },
257        { "class": "RCX", "usage": "use" },
258        { "class": "Mem128", "usage": "use_def" },
259        { "class": "FLAGS", "usage": "def" }
260      ]
261    },
262    {
263      "encodings": {
264        "CmpXchgq": { "opcodes": [ "0F", "B1" ], "reg_to_rm": true }
265      },
266      "args": [
267        { "class": "RAX", "usage": "use_def" },
268        { "class": "GeneralReg64/Mem64", "usage": "use_def" },
269        { "class": "GeneralReg64", "usage": "use" },
270        { "class": "FLAGS", "usage": "def" }
271      ]
272    },
273    {
274      "encodings": {
275        "Cmpq": { "opcodes": [ "81", "7" ] },
276        "Testq": { "opcodes": [ "F7", "0" ] }
277      },
278      "args": [
279        { "class": "GeneralReg64/Mem64", "usage": "use" },
280        { "class": "Imm32" },
281        { "class": "FLAGS", "usage": "def" }
282      ]
283    },
284    {
285      "encodings": {
286        "Cmpq": { "opcodes": [ "3B" ] }
287      },
288      "args": [
289        { "class": "GeneralReg64", "usage": "use" },
290        { "class": "Mem64", "usage": "use" },
291        { "class": "FLAGS", "usage": "def" }
292      ]
293    },
294    {
295      "encodings": {
296        "CmpqAccumulator": { "opcodes": [ "48", "3D" ] },
297        "TestqAccumulator": { "opcodes": [ "48", "A9" ] }
298      },
299      "args": [
300        { "class": "RAX", "usage": "use" },
301        { "class": "Imm32" },
302        { "class": "FLAGS", "usage": "def" }
303      ]
304    },
305    {
306      "encodings": {
307        "CmpqImm8": { "opcodes": [ "83", "7" ] }
308      },
309      "args": [
310        { "class": "GeneralReg64/Mem64", "usage": "use" },
311        { "class": "Imm8" },
312        { "class": "FLAGS", "usage": "def" }
313      ]
314    },
315    {
316      "encodings": {
317        "Cqo": { "opcodes": [ "48", "99" ] },
318        "Cqto": { "opcodes": [ "48", "99" ] }
319      },
320      "args": [
321        { "class": "RAX", "usage": "use" },
322        { "class": "RDX", "usage": "def" }
323      ]
324    },
325    {
326      "encodings": {
327        "Crc32q": { "opcodes": [ "F2", "0F", "38", "F1" ] }
328      },
329      "args": [
330        { "class": "GeneralReg64", "usage": "use_def" },
331        { "class": "GeneralReg64/Mem64", "usage": "use" }
332      ]
333    },
334    {
335      "encodings": {
336        "Cvtsd2siq": { "opcodes": [ "F2", "0F", "2D" ] },
337        "Cvttsd2siq": { "opcodes": [ "F2", "0F", "2C" ] }
338      },
339      "args": [
340        { "class": "GeneralReg64", "usage": "def" },
341        { "class": "FpReg64/VecMem64", "usage": "use" }
342      ]
343    },
344    {
345      "encodings": {
346        "Cvtsi2sdq": { "opcodes": [ "F2", "0F", "2A" ] }
347      },
348      "args": [
349        { "class": "FpReg64", "usage": "def" },
350        { "class": "GeneralReg64/Mem64", "usage": "use" }
351      ]
352    },
353    {
354      "encodings": {
355        "Cvtsi2ssq": { "opcodes": [ "F3", "0F", "2A" ] }
356      },
357      "args": [
358        { "class": "FpReg32", "usage": "def" },
359        { "class": "GeneralReg64/Mem64", "usage": "use" }
360      ]
361    },
362    {
363      "encodings": {
364        "Cvtss2siq": { "opcodes": [ "F3", "0F", "2D" ] },
365        "Cvttss2siq": { "opcodes": [ "F3", "0F", "2C" ] }
366      },
367      "args": [
368        { "class": "GeneralReg64", "usage": "def" },
369        { "class": "FpReg32/Mem32", "usage": "use" }
370      ]
371    },
372    {
373      "encodings": {
374        "Decl": { "opcodes": [ "FF", "1" ] },
375        "Incl": { "opcodes": [ "FF", "0" ] }
376      },
377      "args": [
378        { "class": "GeneralReg32", "usage": "use_def" },
379        { "class": "FLAGS", "usage": "def" }
380      ]
381    },
382    {
383      "encodings": {
384        "Decq": { "opcodes": [ "FF", "1" ] },
385        "Incq": { "opcodes": [ "FF", "0" ] },
386        "Negq": { "opcodes": [ "F7", "3" ] },
387        "RolqByOne": { "opcodes": [ "D1", "0" ] },
388        "RorqByOne": { "opcodes": [ "D1", "1" ] },
389        "SarqByOne": { "opcodes": [ "D1", "7" ] },
390        "ShlqByOne": { "opcodes": [ "D1", "4" ] },
391        "ShrqByOne": { "opcodes": [ "D1", "5" ] }
392      },
393      "args": [
394        { "class": "GeneralReg64/Mem64", "usage": "use_def" },
395        { "class": "FLAGS", "usage": "def" }
396      ]
397    },
398    {
399      "encodings": {
400        "Decw": { "opcodes": [ "66", "FF", "1" ] },
401        "Incw": { "opcodes": [ "66", "FF", "0" ] }
402      },
403      "args": [
404        { "class": "GeneralReg16", "usage": "use_def" },
405        { "class": "FLAGS", "usage": "def" }
406      ]
407    },
408    {
409      "encodings": {
410        "Divq": { "opcodes": [ "F7", "6" ] },
411        "Idivq": { "opcodes": [ "F7", "7" ] }
412      },
413      "args": [
414        { "class": "RAX", "usage": "use_def" },
415        { "class": "RDX", "usage": "use_def" },
416        { "class": "GeneralReg64/Mem64", "usage": "use" },
417        { "class": "FLAGS", "usage": "def" }
418      ]
419    },
420    {
421      "encodings": {
422        "Fxrstor64": { "opcodes": [ "0F", "AE", "1" ] }
423      },
424      "args": [
425        { "class": "Mem64", "usage": "use" },
426        { "class": "CC", "usage": "def" }
427      ]
428    },
429    {
430      "encodings": {
431        "Fxsave64": { "opcodes": [ "0F", "AE", "0" ] }
432      },
433      "args": [
434        { "class": "CC", "usage": "def" },
435        { "class": "Mem64", "usage": "use" }
436      ]
437    },
438    {
439      "encodings": {
440        "Imulq": { "opcodes": [ "F7", "5" ] },
441        "Mulq": { "opcodes": [ "F7", "4" ] }
442      },
443      "args": [
444        { "class": "RAX", "usage": "use_def" },
445        { "class": "RDX", "usage": "def" },
446        { "class": "GeneralReg64/Mem64", "usage": "use" },
447        { "class": "FLAGS", "usage": "def" }
448      ]
449    },
450    {
451      "encodings": {
452        "Imulq": { "opcodes": [ "69" ] }
453      },
454      "args": [
455        { "class": "GeneralReg64", "usage": "def" },
456        { "class": "GeneralReg64/Mem64", "usage": "use" },
457        { "class": "Imm32" },
458        { "class": "FLAGS", "usage": "def" }
459      ]
460    },
461    {
462      "encodings": {
463        "Imulq": { "opcodes": [ "0F", "AF" ] }
464      },
465      "args": [
466        { "class": "GeneralReg64", "usage": "use_def" },
467        { "class": "GeneralReg64/Mem64", "usage": "use" },
468        { "class": "FLAGS", "usage": "def" }
469      ]
470    },
471    {
472      "encodings": {
473        "ImulqImm8": { "opcodes": [ "6B" ] }
474      },
475      "args": [
476        { "class": "GeneralReg64", "usage": "def" },
477        { "class": "GeneralReg64/Mem64", "usage": "use" },
478        { "class": "Imm8" },
479        { "class": "FLAGS", "usage": "def" }
480      ]
481    },
482    {
483      "encodings": {
484        "Jmpq": { "opcodes": [ "FF", "4" ] }
485      },
486      "args": [
487        { "class": "VecMem64", "usage": "use" }
488      ]
489    },
490    {
491      "encodings": {
492        "Leaq": { "opcodes": [ "8D" ] },
493        "Movq": { "opcodes": [ "8B" ] }
494      },
495      "args": [
496        { "class": "GeneralReg64", "usage": "def" },
497        { "class": "Mem64", "usage": "use" }
498      ]
499    },
500    {
501      "encodings": {
502        "LockCmpXchgq": { "opcodes": [ "F0", "0F", "B1" ], "reg_to_rm": true }
503      },
504      "args": [
505        { "class": "RAX", "usage": "use_def" },
506        { "class": "Mem64", "usage": "use_def" },
507        { "class": "GeneralReg64", "usage": "use" },
508        { "class": "FLAGS", "usage": "def" }
509      ]
510    },
511    {
512      "encodings": {
513        "Movq": { "opcodes": [ "66", "0F", "7E" ], "reg_to_rm": true },
514        "Vmovq": { "feature": "AVX", "opcodes": [ "C4", "01", "81", "7E" ], "reg_to_rm": true }
515      },
516      "args": [
517        { "class": "GeneralReg64", "usage": "def" },
518        { "class": "XmmReg", "usage": "use" }
519      ]
520    },
521    {
522      "encodings": {
523        "Movq": { "opcodes": [ "66", "0F", "6E" ] },
524        "Vmovq": { "feature": "AVX", "opcodes": [ "C4", "01", "81", "6E" ] }
525      },
526      "args": [
527        { "class": "XmmReg", "usage": "def" },
528        { "class": "GeneralReg64", "usage": "use" }
529      ]
530    },
531    {
532      "stems": [ "Movq" ],
533      "args": [
534        { "class": "GeneralReg64", "usage": "def" },
535        { "class": "Imm64" }
536      ]
537    },
538    {
539      "encodings": {
540        "Movq": { "opcodes": [ "89" ], "reg_to_rm": true }
541      },
542      "args": [
543        { "class": "GeneralReg64/Mem64", "usage": "def" },
544        { "class": "GeneralReg64", "usage": "use" }
545      ]
546    },
547    {
548      "encodings": {
549        "Movq": { "opcodes": [ "C7", "0" ] }
550      },
551      "args": [
552        { "class": "Mem64", "usage": "def" },
553        { "class": "Imm32" }
554      ]
555    },
556    {
557      "encodings": {
558        "Movsxbq": { "opcodes": [ "0F", "BE" ] },
559        "Movzxbq": { "opcodes": [ "0F", "B6" ] }
560      },
561      "args": [
562        { "class": "GeneralReg64", "usage": "def" },
563        { "class": "GeneralReg8/Mem8", "usage": "use" }
564      ]
565    },
566    {
567      "encodings": {
568        "Movsxlq": { "opcodes": [ "63" ] }
569      },
570      "args": [
571        { "class": "GeneralReg64", "usage": "def" },
572        { "class": "GeneralReg32/Mem32", "usage": "use" }
573      ]
574    },
575    {
576      "encodings": {
577        "Movsxwq": { "opcodes": [ "0F", "BF" ] },
578        "Movzxwq": { "opcodes": [ "0F", "B7" ] }
579      },
580      "args": [
581        { "class": "GeneralReg64", "usage": "def" },
582        { "class": "GeneralReg16/Mem16", "usage": "use" }
583      ]
584    },
585    {
586      "encodings": {
587        "Mulxq": { "feature": "BMI2", "opcodes": [ "C4", "82", "83", "F6" ], "vex_rm_to_reg": true },
588        "Pdepq": { "feature": "BMI2", "opcodes": [ "C4", "82", "83", "F5" ], "vex_rm_to_reg": true },
589        "Pextq": { "feature": "BMI2", "opcodes": [ "C4", "82", "82", "F5" ], "vex_rm_to_reg": true }
590      },
591      "args": [
592        { "class": "GeneralReg64", "usage": "use_def" },
593        { "class": "GeneralReg64", "usage": "use" },
594        { "class": "GeneralReg64/Mem64", "usage": "use" }
595      ]
596    },
597    {
598      "encodings": {
599        "Notq": { "opcodes": [ "F7", "2" ] }
600      },
601      "args": [
602        { "class": "GeneralReg64/Mem64", "usage": "use_def" }
603      ]
604    },
605    {
606      "encodings": {
607        "Pextrq": { "feature": "SSE4_1", "opcodes": [ "66", "0F", "3A", "16" ], "reg_to_rm": true },
608        "Vpextrq": { "feature": "AVX", "opcodes": [ "C4", "03", "81", "16" ], "reg_to_rm": true }
609      },
610      "args": [
611        { "class": "GeneralReg64", "usage": "def" },
612        { "class": "VecReg128", "usage": "use" },
613        { "class": "Imm8" }
614      ]
615    },
616    {
617      "encodings": {
618        "Pinsrq": { "feature": "SSE4_1", "opcodes": [ "66", "0F", "3A", "22" ] }
619      },
620      "args": [
621        { "class": "VecReg128", "usage": "use_def" },
622        { "class": "GeneralReg64", "usage": "use" },
623        { "class": "Imm8" }
624      ]
625    },
626    {
627      "encodings": {
628        "Popq": { "opcodes": [ "8F", "0" ] }
629      },
630      "args": [
631        { "class": "RSP", "usage": "use_def" },
632        { "class": "VecMem64", "usage": "def" }
633      ]
634    },
635    {
636      "encodings": {
637        "Pushq": { "opcodes": [ "FF", "6" ] }
638      },
639      "args": [
640        { "class": "RSP", "usage": "use_def" },
641        { "class": "VecMem64", "usage": "use" }
642      ]
643    },
644    {
645      "encodings": {
646        "RclqByCl": { "opcodes": [ "D3", "2" ] },
647        "RcrqByCl": { "opcodes": [ "D3", "3" ] }
648      },
649      "args": [
650        { "class": "GeneralReg64/Mem64", "usage": "use_def" },
651        { "class": "CL", "usage": "use" },
652        { "class": "FLAGS", "usage": "use_def" }
653      ]
654    },
655    {
656      "encodings": {
657        "RclqByOne": { "opcodes": [ "D1", "2" ] },
658        "RcrqByOne": { "opcodes": [ "D1", "3" ] }
659      },
660      "args": [
661        { "class": "GeneralReg64/Mem64", "usage": "use_def" },
662        { "class": "FLAGS", "usage": "use_def" }
663      ]
664    },
665    {
666      "encodings": {
667        "RolqByCl": { "opcodes": [ "D3", "0" ] },
668        "RorqByCl": { "opcodes": [ "D3", "1" ] },
669        "SarqByCl": { "opcodes": [ "D3", "7" ] },
670        "ShlqByCl": { "opcodes": [ "D3", "4" ] },
671        "ShrqByCl": { "opcodes": [ "D3", "5" ] }
672      },
673      "args": [
674        { "class": "GeneralReg64/Mem64", "usage": "use_def" },
675        { "class": "CL", "usage": "use" },
676        { "class": "FLAGS", "usage": "def" }
677      ]
678    },
679    {
680      "encodings": {
681        "Rorxq": { "feature": "BMI2", "opcodes": [ "C4", "03", "83", "F0" ] }
682      },
683      "args": [
684        { "class": "GeneralReg64", "usage": "def" },
685        { "class": "GeneralReg64/Mem64", "usage": "use" },
686        { "class": "Imm8" }
687      ]
688    },
689    {
690      "encodings": {
691        "Sarxq": { "feature": "BMI2", "opcodes": [ "C4", "02", "82", "F7" ] },
692        "Shlxq": { "feature": "BMI2", "opcodes": [ "C4", "02", "81", "F7" ] },
693        "Shrxq": { "feature": "BMI2", "opcodes": [ "C4", "02", "83", "F7" ] }
694      },
695      "args": [
696        { "class": "GeneralReg64", "usage": "use_def" },
697        { "class": "GeneralReg64/Mem64", "usage": "use" },
698        { "class": "GeneralReg64", "usage": "use" }
699      ]
700    },
701    {
702      "encodings": {
703        "Shldq": { "opcodes": [ "0F", "A4" ], "reg_to_rm": true },
704        "Shrdq": { "opcodes": [ "0F", "AC" ], "reg_to_rm": true }
705      },
706      "args": [
707        { "class": "GeneralReg64/Mem64", "usage": "use_def" },
708        { "class": "GeneralReg64", "usage": "use" },
709        { "class": "Imm8" },
710        { "class": "FLAGS", "usage": "def" }
711      ]
712    },
713    {
714      "encodings": {
715        "ShldqByCl": { "opcodes": [ "0F", "A5" ], "reg_to_rm": true },
716        "ShrdqByCl": { "opcodes": [ "0F", "AD" ], "reg_to_rm": true }
717      },
718      "args": [
719        { "class": "GeneralReg64/Mem64", "usage": "use_def" },
720        { "class": "GeneralReg64", "usage": "use" },
721        { "class": "CL", "usage": "use" },
722        { "class": "FLAGS", "usage": "def" }
723      ]
724    },
725    {
726      "stems": [ "Vmovapd", "Vmovaps", "Vmovdqa", "Vmovdqu" ],
727      "feature": "AVX",
728      "args": [
729        { "class": "XmmReg", "usage": "def" },
730        { "class": "XmmReg", "usage": "use" }
731      ]
732    },
733    {
734      "stems": [ "Vmovsd", "Vmovss" ],
735      "args": [
736        { "class": "XmmReg", "usage": "def" },
737        { "class": "XmmReg", "usage": "use" },
738        { "class": "XmmReg", "usage": "use" }
739      ]
740    },
741    {
742      "encodings": {
743        "Vpinsrq": { "feature": "AVX", "opcodes": [ "C4", "03", "81", "22" ], "vex_rm_to_reg": true }
744      },
745      "args": [
746        { "class": "VecReg128", "usage": "def" },
747        { "class": "VecReg128", "usage": "use" },
748        { "class": "GeneralReg64", "usage": "use" },
749        { "class": "Imm8" }
750      ]
751    },
752    {
753      "stems": [ "Xchgq" ],
754      "args": [
755        { "class": "GeneralReg64", "usage": "use_def" },
756        { "class": "GeneralReg64", "usage": "use_def" }
757      ]
758    },
759    {
760      "encodings": {
761        "Xchgq": { "opcodes": [ "87" ] }
762      },
763      "args": [
764        { "class": "GeneralReg64", "usage": "use_def" },
765        { "class": "Mem64", "usage": "use_def" }
766      ]
767    }
768  ]
769}
770