-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathinstr_opnd_api.h
4664 lines (4388 loc) · 195 KB
/
instr_opnd_api.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
#ifndef _INSTR_OPND_API_H_
#define _INSTR_OPND_API_H_ 1
#include "codec.h"
#define AARCH64
#define X64
#define AARCHXX
#define TESTALL(mask, var) (((mask) & (var)) == (mask))
#define TESTANY(mask, var) (((mask) & (var)) != 0)
#define TEST TESTANY
#ifndef IN
# define IN /* marks input param */
#endif
#ifndef OUT
# define OUT /* marks output param */
#endif
#ifndef INOUT
# define INOUT /* marks input+output param */
#endif
#ifndef INSTR_INLINE
# ifdef DR_FAST_IR
# define INSTR_INLINE inline
# else
# define INSTR_INLINE
# endif
#endif
/* macros to make conditional compilation look prettier */
#ifdef DEBUG
# define IF_DEBUG(x) x
# define _IF_DEBUG(x) , x
# define IF_DEBUG_(x) x,
# define IF_DEBUG_ELSE(x, y) x
# define IF_DEBUG_ELSE_0(x) (x)
# define IF_DEBUG_ELSE_NULL(x) (x)
#else
# define IF_DEBUG(x)
# define _IF_DEBUG(x)
# define IF_DEBUG_(x)
# define IF_DEBUG_ELSE(x, y) y
# define IF_DEBUG_ELSE_0(x) 0
# define IF_DEBUG_ELSE_NULL(x) (NULL)
#endif
#ifdef DEBUG
# define CLIENT_ASSERT(x, msg) apicheck(x, msg)
#else
# define CLIENT_ASSERT(x, msg) /* PR 215261: nothing in release builds */
# define CLIENT_ASSERT_(cond, msg)
#endif
#define CLIENT_ASSERT_BITFIELD_TRUNCATE(width, val, msg) \
CLIENT_ASSERT((val) < (1 << ((width) + 1)), msg);
#define CLIENT_ASSERT_TRUNCATE(var, type, val, msg) \
CLIENT_ASSERT(sizeof(type) == sizeof(var) && CHECK_TRUNCATE_TYPE_##type(val), msg)
#ifdef X86
# define IF_X86(x) x
# define IF_X86_ELSE(x, y) x
# define IF_X86_(x) x,
# define _IF_X86(x) , x
# define IF_NOT_X86(x)
# define IF_NOT_X86_(x)
# define _IF_NOT_X86(x)
#else
# define IF_X86(x)
# define IF_X86_ELSE(x, y) y
# define IF_X86_(x)
# define _IF_X86(x)
# define IF_NOT_X86(x) x
# define IF_NOT_X86_(x) x,
# define _IF_NOT_X86(x) , x
#endif
#ifdef ARM
# define IF_ARM(x) x
# define IF_ARM_ELSE(x, y) x
# define IF_ARM_(x) x,
# define _IF_ARM(x) , x
# define IF_NOT_ARM(x)
# define _IF_NOT_ARM(x)
#else
# define IF_ARM(x)
# define IF_ARM_ELSE(x, y) y
# define IF_ARM_(x)
# define _IF_ARM(x)
# define IF_NOT_ARM(x) x
# define _IF_NOT_ARM(x) , x
#endif
#ifdef AARCH64
# define IF_AARCH64(x) x
# define IF_AARCH64_ELSE(x, y) x
# define IF_AARCH64_(x) x,
# define _IF_AARCH64(x) , x
# define IF_NOT_AARCH64(x)
# define _IF_NOT_AARCH64(x)
#else
# define IF_AARCH64(x)
# define IF_AARCH64_ELSE(x, y) y
# define IF_AARCH64_(x)
# define _IF_AARCH64(x)
# define IF_NOT_AARCH64(x) x
# define _IF_NOT_AARCH64(x) , x
#endif
#ifdef AARCHXX
# define IF_AARCHXX(x) x
# define IF_AARCHXX_ELSE(x, y) x
# define IF_AARCHXX_(x) x,
# define _IF_AARCHXX(x) , x
# define IF_NOT_AARCHXX(x)
# define _IF_NOT_AARCHXX(x)
#else
# define IF_AARCHXX(x)
# define IF_AARCHXX_ELSE(x, y) y
# define IF_AARCHXX_(x)
# define _IF_AARCHXX(x)
# define IF_NOT_AARCHXX(x) x
# define _IF_NOT_AARCHXX(x) , x
#endif
#ifdef ANDROID
# define IF_ANDROID(x) x
# define IF_ANDROID_ELSE(x, y) x
# define IF_NOT_ANDROID(x)
#else
# define IF_ANDROID(x)
# define IF_ANDROID_ELSE(x, y) y
# define IF_NOT_ANDROID(x) x
#endif
#ifdef X64
# define IF_X64(x) x
# define IF_X64_ELSE(x, y) x
# define IF_X64_(x) x,
# define _IF_X64(x) , x
# define IF_NOT_X64(x)
# define _IF_NOT_X64(x)
#else
# define IF_X64(x)
# define IF_X64_ELSE(x, y) y
# define IF_X64_(x)
# define _IF_X64(x)
# define IF_NOT_X64(x) x
# define _IF_NOT_X64(x) , x
#endif
#if defined(X86) && !defined(X64)
# define IF_X86_32(x) x
#else
# define IF_X86_32(x)
#endif
#if defined(X86) && defined(X64)
# define IF_X86_64(x) x
# define IF_X86_64_ELSE(x, y) x
# define IF_X86_64_(x) x,
# define _IF_X86_64(x) , x
# define IF_NOT_X86_64(x)
# define _IF_NOT_X86_64(x)
#else
# define IF_X86_64(x)
# define IF_X86_64_ELSE(x, y) y
# define IF_X86_64_(x)
# define _IF_X86_64(x)
# define IF_NOT_X86_64(x) x
# define _IF_NOT_X86_64(x) , x
#endif
#if defined(X64) || defined(ARM)
# define IF_X64_OR_ARM(x) x
# define IF_NOT_X64_OR_ARM(x)
#else
# define IF_X64_OR_ARM(x)
# define IF_NOT_X64_OR_ARM(x) x
#endif
#ifdef WINDOWS
# define DR_EXPORT __declspec(dllexport)
# define LINK_ONCE __declspec(selectany)
# define ALIGN_VAR(x) __declspec(align(x))
# define INLINE_FORCED __forceinline
# define WEAK /* no equivalent, but .obj overrides .lib */
# define NOINLINE __declspec(noinline)
#else
/* We assume gcc is being used. If the client is using -fvisibility
* (in gcc >= 3.4) to not export symbols by default, setting
* USE_VISIBILITY_ATTRIBUTES will properly export.
*/
# ifdef USE_VISIBILITY_ATTRIBUTES
# define DR_EXPORT __attribute__((visibility("default")))
# else
# define DR_EXPORT
# endif
# define LINK_ONCE __attribute__((weak))
# define ALIGN_VAR(x) __attribute__((aligned(x)))
# define INLINE_FORCED inline
# define WEAK __attribute__((weak))
# define NOINLINE __attribute__((noinline))
#endif
/* currently we always export statistics structure */
#define DYNAMORIO_STATS_EXPORTS 1
#ifdef WINDOWS
# define DYNAMORIO_EXPORT __declspec(dllexport)
#elif defined(USE_VISIBILITY_ATTRIBUTES)
/* PR 262804: we use "protected" instead of "default" to ensure our
* own uses won't be preempted. Note that for DR_APP_API in
* lib/dr_app.h we get a link error trying to use "protected": but we
* don't use dr_app_* internally anyway, so leaving as default.
*/
# define DYNAMORIO_EXPORT __attribute__((visibility("protected")))
#else
/* visibility attribute not available in gcc < 3.3 (we use linker script) */
# define DYNAMORIO_EXPORT
#endif
/* We always export nowadays. */
#define DR_API DYNAMORIO_EXPORT
#if (defined(DEBUG) && defined(BUILD_TESTS)) || defined(UNSUPPORTED_API)
# define DR_UNS_EXCEPT_TESTS_API DR_API
#else
# define DR_UNS_EXCEPT_TESTS_API /* nothing */
#endif
#ifdef UNSUPPORTED_API
/* TODO i#4045: Remove unsupported API support. After i#3092's header refactoring,
* we can't just change a define and export these anymore anyway: they would have
* to be moved to the _api.h public headers.
*/
# define DR_UNS_API DR_API
#else
# define DR_UNS_API /* nothing */
#endif
#ifndef DR_DO_NOT_DEFINE_uint
typedef unsigned int uint;
#endif
#ifndef DR_DO_NOT_DEFINE_ushort
typedef unsigned short ushort;
#endif
#ifndef DR_DO_NOT_DEFINE_byte
typedef unsigned char byte;
#endif
#ifndef DR_DO_NOT_DEFINE_sbyte
typedef signed char sbyte;
#endif
#ifndef DR_DEFINE_FOR_uint64
#define DR_DEFINE_FOR_uint64 unsigned long int
#endif
#ifndef DR_DEFINE_FOR_int64
#define DR_DEFINE_FOR_int64 long int
#endif
#ifndef DR_DO_NOT_DEFINE_int64
typedef DR_DEFINE_FOR_int64 int64;
#endif
#ifndef DR_DO_NOT_DEFINE_uint64
typedef DR_DEFINE_FOR_uint64 uint64;
#endif
typedef byte *app_pc;
/* a register value: could be of any type; size is what matters. */
#ifdef X64
typedef uint64 reg_t;
#else
typedef uint reg_t;
#endif
/* integer whose size is based on pointers: ptr diff, mask, etc. */
typedef reg_t ptr_uint_t;
#ifdef X64
typedef int64 ptr_int_t;
#else
typedef int ptr_int_t;
#endif
/* We assume all addressing regs are in the lower 256 of the DR_REG_ enum. */
# define REG_SPECIFIER_BITS 8
# define SCALE_SPECIFIER_BITS 4
typedef ptr_int_t atomic_int_t;
/* we avoid typedef-ing the enum, as its storage size is compiler-specific */
typedef ushort reg_id_t; /**< The type of a DR_REG_ enum value. */
/* For x86 we do store reg_id_t here, but the x86 DR_REG_ enum is small enough
* (checked in d_r_arch_init()).
*/
typedef byte opnd_size_t; /**< The type of an OPSZ_ enum value. */
enum {
INSTR_DO_NOT_MANGLE = 0x00200000,
};
/****************************************************************************
* OPCODES
*/
/**
* @file dr_ir_opcodes_aarch64.h
* @brief Instruction opcode constants for AArch64.
*/
/** Opcode constants for use in the instr_t data structure. */
enum {
/* 0 */ OP_INVALID, /* NULL, */ /**< INVALID opcode */
/* 1 */ OP_UNDECODED, /* NULL, */ /**< UNDECODED opcode */
/* 2 */ OP_CONTD, /* NULL, */ /**< CONTD opcode */
/* 3 */ OP_LABEL, /* NULL, */ /**< LABEL opcode */
/* 4 */ OP_xx, /* placeholder for undecoded instructions */
/* 5 */ OP_ldstex, /* single-entry single-exit block with exclusive load/store */
/* 6 */ OP_abs = 6, /**< AArch64 abs opcode. */
/* 7 */ OP_adc = 7, /**< AArch64 adc opcode. */
/* 8 */ OP_adcs = 8, /**< AArch64 adcs opcode. */
/* 9 */ OP_add = 9, /**< AArch64 add opcode. */
/* 10 */ OP_addhn = 10, /**< AArch64 addhn opcode. */
/* 11 */ OP_addhn2 = 11, /**< AArch64 addhn2 opcode. */
/* 12 */ OP_addp = 12, /**< AArch64 addp opcode. */
/* 13 */ OP_adds = 13, /**< AArch64 adds opcode. */
/* 14 */ OP_addv = 14, /**< AArch64 addv opcode. */
/* 15 */ OP_adr = 15, /**< AArch64 adr opcode. */
/* 16 */ OP_adrp = 16, /**< AArch64 adrp opcode. */
/* 17 */ OP_aesd = 17, /**< AArch64 aesd opcode. */
/* 18 */ OP_aese = 18, /**< AArch64 aese opcode. */
/* 19 */ OP_aesimc = 19, /**< AArch64 aesimc opcode. */
/* 20 */ OP_aesmc = 20, /**< AArch64 aesmc opcode. */
/* 21 */ OP_and = 21, /**< AArch64 and opcode. */
/* 22 */ OP_ands = 22, /**< AArch64 ands opcode. */
/* 23 */ OP_asrv = 23, /**< AArch64 asrv opcode. */
/* 24 */ OP_autia1716 = 24, /**< AArch64 autia1716 opcode. */
/* 25 */ OP_autib1716 = 25, /**< AArch64 autib1716 opcode. */
/* 26 */ OP_b = 26, /**< AArch64 b opcode. */
/* 27 */ OP_bcond = 27, /**< AArch64 bcond opcode. */
/* 28 */ OP_bfm = 28, /**< AArch64 bfm opcode. */
/* 29 */ OP_bic = 29, /**< AArch64 bic opcode. */
/* 30 */ OP_bics = 30, /**< AArch64 bics opcode. */
/* 31 */ OP_bif = 31, /**< AArch64 bif opcode. */
/* 32 */ OP_bit = 32, /**< AArch64 bit opcode. */
/* 33 */ OP_bl = 33, /**< AArch64 bl opcode. */
/* 34 */ OP_blr = 34, /**< AArch64 blr opcode. */
/* 35 */ OP_br = 35, /**< AArch64 br opcode. */
/* 36 */ OP_brk = 36, /**< AArch64 brk opcode. */
/* 37 */ OP_bsl = 37, /**< AArch64 bsl opcode. */
/* 38 */ OP_cas = 38, /**< AArch64 cas opcode. */
/* 39 */ OP_casa = 39, /**< AArch64 casa opcode. */
/* 40 */ OP_casab = 40, /**< AArch64 casab opcode. */
/* 41 */ OP_casah = 41, /**< AArch64 casah opcode. */
/* 42 */ OP_casal = 42, /**< AArch64 casal opcode. */
/* 43 */ OP_casalb = 43, /**< AArch64 casalb opcode. */
/* 44 */ OP_casalh = 44, /**< AArch64 casalh opcode. */
/* 45 */ OP_casb = 45, /**< AArch64 casb opcode. */
/* 46 */ OP_cash = 46, /**< AArch64 cash opcode. */
/* 47 */ OP_casl = 47, /**< AArch64 casl opcode. */
/* 48 */ OP_caslb = 48, /**< AArch64 caslb opcode. */
/* 49 */ OP_caslh = 49, /**< AArch64 caslh opcode. */
/* 50 */ OP_casp = 50, /**< AArch64 casp opcode. */
/* 51 */ OP_caspa = 51, /**< AArch64 caspa opcode. */
/* 52 */ OP_caspal = 52, /**< AArch64 caspal opcode. */
/* 53 */ OP_caspl = 53, /**< AArch64 caspl opcode. */
/* 54 */ OP_cbnz = 54, /**< AArch64 cbnz opcode. */
/* 55 */ OP_cbz = 55, /**< AArch64 cbz opcode. */
/* 56 */ OP_ccmn = 56, /**< AArch64 ccmn opcode. */
/* 57 */ OP_ccmp = 57, /**< AArch64 ccmp opcode. */
/* 58 */ OP_clrex = 58, /**< AArch64 clrex opcode. */
/* 59 */ OP_cls = 59, /**< AArch64 cls opcode. */
/* 60 */ OP_clz = 60, /**< AArch64 clz opcode. */
/* 61 */ OP_cmeq = 61, /**< AArch64 cmeq opcode. */
/* 62 */ OP_cmge = 62, /**< AArch64 cmge opcode. */
/* 63 */ OP_cmgt = 63, /**< AArch64 cmgt opcode. */
/* 64 */ OP_cmhi = 64, /**< AArch64 cmhi opcode. */
/* 65 */ OP_cmhs = 65, /**< AArch64 cmhs opcode. */
/* 66 */ OP_cmle = 66, /**< AArch64 cmle opcode. */
/* 67 */ OP_cmlt = 67, /**< AArch64 cmlt opcode. */
/* 68 */ OP_cmtst = 68, /**< AArch64 cmtst opcode. */
/* 69 */ OP_cnt = 69, /**< AArch64 cnt opcode. */
/* 70 */ OP_crc32b = 70, /**< AArch64 crc32b opcode. */
/* 71 */ OP_crc32cb = 71, /**< AArch64 crc32cb opcode. */
/* 72 */ OP_crc32ch = 72, /**< AArch64 crc32ch opcode. */
/* 73 */ OP_crc32cw = 73, /**< AArch64 crc32cw opcode. */
/* 74 */ OP_crc32cx = 74, /**< AArch64 crc32cx opcode. */
/* 75 */ OP_crc32h = 75, /**< AArch64 crc32h opcode. */
/* 76 */ OP_crc32w = 76, /**< AArch64 crc32w opcode. */
/* 77 */ OP_crc32x = 77, /**< AArch64 crc32x opcode. */
/* 78 */ OP_csel = 78, /**< AArch64 csel opcode. */
/* 79 */ OP_csinc = 79, /**< AArch64 csinc opcode. */
/* 80 */ OP_csinv = 80, /**< AArch64 csinv opcode. */
/* 81 */ OP_csneg = 81, /**< AArch64 csneg opcode. */
/* 82 */ OP_dcps1 = 82, /**< AArch64 dcps1 opcode. */
/* 83 */ OP_dcps2 = 83, /**< AArch64 dcps2 opcode. */
/* 84 */ OP_dcps3 = 84, /**< AArch64 dcps3 opcode. */
/* 85 */ OP_dmb = 85, /**< AArch64 dmb opcode. */
/* 86 */ OP_drps = 86, /**< AArch64 drps opcode. */
/* 87 */ OP_dsb = 87, /**< AArch64 dsb opcode. */
/* 88 */ OP_dup = 88, /**< AArch64 dup opcode. */
/* 89 */ OP_eon = 89, /**< AArch64 eon opcode. */
/* 90 */ OP_eor = 90, /**< AArch64 eor opcode. */
/* 91 */ OP_eret = 91, /**< AArch64 eret opcode. */
/* 92 */ OP_ext = 92, /**< AArch64 ext opcode. */
/* 93 */ OP_extr = 93, /**< AArch64 extr opcode. */
/* 94 */ OP_fabd = 94, /**< AArch64 fabd opcode. */
/* 95 */ OP_fabs = 95, /**< AArch64 fabs opcode. */
/* 96 */ OP_facge = 96, /**< AArch64 facge opcode. */
/* 97 */ OP_facgt = 97, /**< AArch64 facgt opcode. */
/* 98 */ OP_fadd = 98, /**< AArch64 fadd opcode. */
/* 99 */ OP_faddp = 99, /**< AArch64 faddp opcode. */
/* 100 */ OP_fccmp = 100, /**< AArch64 fccmp opcode. */
/* 101 */ OP_fccmpe = 101, /**< AArch64 fccmpe opcode. */
/* 102 */ OP_fcmeq = 102, /**< AArch64 fcmeq opcode. */
/* 103 */ OP_fcmge = 103, /**< AArch64 fcmge opcode. */
/* 104 */ OP_fcmgt = 104, /**< AArch64 fcmgt opcode. */
/* 105 */ OP_fcmle = 105, /**< AArch64 fcmle opcode. */
/* 106 */ OP_fcmlt = 106, /**< AArch64 fcmlt opcode. */
/* 107 */ OP_fcmp = 107, /**< AArch64 fcmp opcode. */
/* 108 */ OP_fcmpe = 108, /**< AArch64 fcmpe opcode. */
/* 109 */ OP_fcsel = 109, /**< AArch64 fcsel opcode. */
/* 110 */ OP_fcvt = 110, /**< AArch64 fcvt opcode. */
/* 111 */ OP_fcvtas = 111, /**< AArch64 fcvtas opcode. */
/* 112 */ OP_fcvtau = 112, /**< AArch64 fcvtau opcode. */
/* 113 */ OP_fcvtl = 113, /**< AArch64 fcvtl opcode. */
/* 114 */ OP_fcvtl2 = 114, /**< AArch64 fcvtl2 opcode. */
/* 115 */ OP_fcvtms = 115, /**< AArch64 fcvtms opcode. */
/* 116 */ OP_fcvtmu = 116, /**< AArch64 fcvtmu opcode. */
/* 117 */ OP_fcvtn = 117, /**< AArch64 fcvtn opcode. */
/* 118 */ OP_fcvtn2 = 118, /**< AArch64 fcvtn2 opcode. */
/* 119 */ OP_fcvtns = 119, /**< AArch64 fcvtns opcode. */
/* 120 */ OP_fcvtnu = 120, /**< AArch64 fcvtnu opcode. */
/* 121 */ OP_fcvtps = 121, /**< AArch64 fcvtps opcode. */
/* 122 */ OP_fcvtpu = 122, /**< AArch64 fcvtpu opcode. */
/* 123 */ OP_fcvtxn = 123, /**< AArch64 fcvtxn opcode. */
/* 124 */ OP_fcvtxn2 = 124, /**< AArch64 fcvtxn2 opcode. */
/* 125 */ OP_fcvtzs = 125, /**< AArch64 fcvtzs opcode. */
/* 126 */ OP_fcvtzu = 126, /**< AArch64 fcvtzu opcode. */
/* 127 */ OP_fdiv = 127, /**< AArch64 fdiv opcode. */
/* 128 */ OP_fmadd = 128, /**< AArch64 fmadd opcode. */
/* 129 */ OP_fmax = 129, /**< AArch64 fmax opcode. */
/* 130 */ OP_fmaxnm = 130, /**< AArch64 fmaxnm opcode. */
/* 131 */ OP_fmaxnmp = 131, /**< AArch64 fmaxnmp opcode. */
/* 132 */ OP_fmaxnmv = 132, /**< AArch64 fmaxnmv opcode. */
/* 133 */ OP_fmaxp = 133, /**< AArch64 fmaxp opcode. */
/* 134 */ OP_fmaxv = 134, /**< AArch64 fmaxv opcode. */
/* 135 */ OP_fmin = 135, /**< AArch64 fmin opcode. */
/* 136 */ OP_fminnm = 136, /**< AArch64 fminnm opcode. */
/* 137 */ OP_fminnmp = 137, /**< AArch64 fminnmp opcode. */
/* 138 */ OP_fminnmv = 138, /**< AArch64 fminnmv opcode. */
/* 139 */ OP_fminp = 139, /**< AArch64 fminp opcode. */
/* 140 */ OP_fminv = 140, /**< AArch64 fminv opcode. */
/* 141 */ OP_fmla = 141, /**< AArch64 fmla opcode. */
/* 142 */ OP_fmlal = 142, /**< AArch64 fmlal opcode. */
/* 143 */ OP_fmlal2 = 143, /**< AArch64 fmlal2 opcode. */
/* 144 */ OP_fmls = 144, /**< AArch64 fmls opcode. */
/* 145 */ OP_fmlsl = 145, /**< AArch64 fmlsl opcode. */
/* 146 */ OP_fmlsl2 = 146, /**< AArch64 fmlsl2 opcode. */
/* 147 */ OP_fmov = 147, /**< AArch64 fmov opcode. */
/* 148 */ OP_fmsub = 148, /**< AArch64 fmsub opcode. */
/* 149 */ OP_fmul = 149, /**< AArch64 fmul opcode. */
/* 150 */ OP_fmulx = 150, /**< AArch64 fmulx opcode. */
/* 151 */ OP_fneg = 151, /**< AArch64 fneg opcode. */
/* 152 */ OP_fnmadd = 152, /**< AArch64 fnmadd opcode. */
/* 153 */ OP_fnmsub = 153, /**< AArch64 fnmsub opcode. */
/* 154 */ OP_fnmul = 154, /**< AArch64 fnmul opcode. */
/* 155 */ OP_frecpe = 155, /**< AArch64 frecpe opcode. */
/* 156 */ OP_frecps = 156, /**< AArch64 frecps opcode. */
/* 157 */ OP_frecpx = 157, /**< AArch64 frecpx opcode. */
/* 158 */ OP_frinta = 158, /**< AArch64 frinta opcode. */
/* 159 */ OP_frinti = 159, /**< AArch64 frinti opcode. */
/* 160 */ OP_frintm = 160, /**< AArch64 frintm opcode. */
/* 161 */ OP_frintn = 161, /**< AArch64 frintn opcode. */
/* 162 */ OP_frintp = 162, /**< AArch64 frintp opcode. */
/* 163 */ OP_frintx = 163, /**< AArch64 frintx opcode. */
/* 164 */ OP_frintz = 164, /**< AArch64 frintz opcode. */
/* 165 */ OP_frsqrte = 165, /**< AArch64 frsqrte opcode. */
/* 166 */ OP_frsqrts = 166, /**< AArch64 frsqrts opcode. */
/* 167 */ OP_fsqrt = 167, /**< AArch64 fsqrt opcode. */
/* 168 */ OP_fsub = 168, /**< AArch64 fsub opcode. */
/* 169 */ OP_hlt = 169, /**< AArch64 hlt opcode. */
/* 170 */ OP_hvc = 170, /**< AArch64 hvc opcode. */
/* 171 */ OP_ins = 171, /**< AArch64 ins opcode. */
/* 172 */ OP_isb = 172, /**< AArch64 isb opcode. */
/* 173 */ OP_ld1 = 173, /**< AArch64 ld1 opcode. */
/* 174 */ OP_ld1r = 174, /**< AArch64 ld1r opcode. */
/* 175 */ OP_ld2 = 175, /**< AArch64 ld2 opcode. */
/* 176 */ OP_ld2r = 176, /**< AArch64 ld2r opcode. */
/* 177 */ OP_ld3 = 177, /**< AArch64 ld3 opcode. */
/* 178 */ OP_ld3r = 178, /**< AArch64 ld3r opcode. */
/* 179 */ OP_ld4 = 179, /**< AArch64 ld4 opcode. */
/* 180 */ OP_ld4r = 180, /**< AArch64 ld4r opcode. */
/* 181 */ OP_ldadd = 181, /**< AArch64 ldadd opcode. */
/* 182 */ OP_ldadda = 182, /**< AArch64 ldadda opcode. */
/* 183 */ OP_ldaddab = 183, /**< AArch64 ldaddab opcode. */
/* 184 */ OP_ldaddah = 184, /**< AArch64 ldaddah opcode. */
/* 185 */ OP_ldaddal = 185, /**< AArch64 ldaddal opcode. */
/* 186 */ OP_ldaddalb = 186, /**< AArch64 ldaddalb opcode. */
/* 187 */ OP_ldaddalh = 187, /**< AArch64 ldaddalh opcode. */
/* 188 */ OP_ldaddb = 188, /**< AArch64 ldaddb opcode. */
/* 189 */ OP_ldaddh = 189, /**< AArch64 ldaddh opcode. */
/* 190 */ OP_ldaddl = 190, /**< AArch64 ldaddl opcode. */
/* 191 */ OP_ldaddlb = 191, /**< AArch64 ldaddlb opcode. */
/* 192 */ OP_ldaddlh = 192, /**< AArch64 ldaddlh opcode. */
/* 193 */ OP_ldar = 193, /**< AArch64 ldar opcode. */
/* 194 */ OP_ldarb = 194, /**< AArch64 ldarb opcode. */
/* 195 */ OP_ldarh = 195, /**< AArch64 ldarh opcode. */
/* 196 */ OP_ldaxp = 196, /**< AArch64 ldaxp opcode. */
/* 197 */ OP_ldaxr = 197, /**< AArch64 ldaxr opcode. */
/* 198 */ OP_ldaxrb = 198, /**< AArch64 ldaxrb opcode. */
/* 199 */ OP_ldaxrh = 199, /**< AArch64 ldaxrh opcode. */
/* 200 */ OP_ldclr = 200, /**< AArch64 ldclr opcode. */
/* 201 */ OP_ldclra = 201, /**< AArch64 ldclra opcode. */
/* 202 */ OP_ldclrab = 202, /**< AArch64 ldclrab opcode. */
/* 203 */ OP_ldclrah = 203, /**< AArch64 ldclrah opcode. */
/* 204 */ OP_ldclral = 204, /**< AArch64 ldclral opcode. */
/* 205 */ OP_ldclralb = 205, /**< AArch64 ldclralb opcode. */
/* 206 */ OP_ldclralh = 206, /**< AArch64 ldclralh opcode. */
/* 207 */ OP_ldclrb = 207, /**< AArch64 ldclrb opcode. */
/* 208 */ OP_ldclrh = 208, /**< AArch64 ldclrh opcode. */
/* 209 */ OP_ldclrl = 209, /**< AArch64 ldclrl opcode. */
/* 210 */ OP_ldclrlb = 210, /**< AArch64 ldclrlb opcode. */
/* 211 */ OP_ldclrlh = 211, /**< AArch64 ldclrlh opcode. */
/* 212 */ OP_ldeor = 212, /**< AArch64 ldeor opcode. */
/* 213 */ OP_ldeora = 213, /**< AArch64 ldeora opcode. */
/* 214 */ OP_ldeorab = 214, /**< AArch64 ldeorab opcode. */
/* 215 */ OP_ldeorah = 215, /**< AArch64 ldeorah opcode. */
/* 216 */ OP_ldeoral = 216, /**< AArch64 ldeoral opcode. */
/* 217 */ OP_ldeoralb = 217, /**< AArch64 ldeoralb opcode. */
/* 218 */ OP_ldeoralh = 218, /**< AArch64 ldeoralh opcode. */
/* 219 */ OP_ldeorb = 219, /**< AArch64 ldeorb opcode. */
/* 220 */ OP_ldeorh = 220, /**< AArch64 ldeorh opcode. */
/* 221 */ OP_ldeorl = 221, /**< AArch64 ldeorl opcode. */
/* 222 */ OP_ldeorlb = 222, /**< AArch64 ldeorlb opcode. */
/* 223 */ OP_ldeorlh = 223, /**< AArch64 ldeorlh opcode. */
/* 224 */ OP_ldnp = 224, /**< AArch64 ldnp opcode. */
/* 225 */ OP_ldp = 225, /**< AArch64 ldp opcode. */
/* 226 */ OP_ldpsw = 226, /**< AArch64 ldpsw opcode. */
/* 227 */ OP_ldr = 227, /**< AArch64 ldr opcode. */
/* 228 */ OP_ldrb = 228, /**< AArch64 ldrb opcode. */
/* 229 */ OP_ldrh = 229, /**< AArch64 ldrh opcode. */
/* 230 */ OP_ldrsb = 230, /**< AArch64 ldrsb opcode. */
/* 231 */ OP_ldrsh = 231, /**< AArch64 ldrsh opcode. */
/* 232 */ OP_ldrsw = 232, /**< AArch64 ldrsw opcode. */
/* 233 */ OP_ldset = 233, /**< AArch64 ldset opcode. */
/* 234 */ OP_ldseta = 234, /**< AArch64 ldseta opcode. */
/* 235 */ OP_ldsetab = 235, /**< AArch64 ldsetab opcode. */
/* 236 */ OP_ldsetah = 236, /**< AArch64 ldsetah opcode. */
/* 237 */ OP_ldsetal = 237, /**< AArch64 ldsetal opcode. */
/* 238 */ OP_ldsetalb = 238, /**< AArch64 ldsetalb opcode. */
/* 239 */ OP_ldsetalh = 239, /**< AArch64 ldsetalh opcode. */
/* 240 */ OP_ldsetb = 240, /**< AArch64 ldsetb opcode. */
/* 241 */ OP_ldseth = 241, /**< AArch64 ldseth opcode. */
/* 242 */ OP_ldsetl = 242, /**< AArch64 ldsetl opcode. */
/* 243 */ OP_ldsetlb = 243, /**< AArch64 ldsetlb opcode. */
/* 244 */ OP_ldsetlh = 244, /**< AArch64 ldsetlh opcode. */
/* 245 */ OP_ldsmax = 245, /**< AArch64 ldsmax opcode. */
/* 246 */ OP_ldsmaxa = 246, /**< AArch64 ldsmaxa opcode. */
/* 247 */ OP_ldsmaxab = 247, /**< AArch64 ldsmaxab opcode. */
/* 248 */ OP_ldsmaxah = 248, /**< AArch64 ldsmaxah opcode. */
/* 249 */ OP_ldsmaxal = 249, /**< AArch64 ldsmaxal opcode. */
/* 250 */ OP_ldsmaxalb = 250, /**< AArch64 ldsmaxalb opcode. */
/* 251 */ OP_ldsmaxalh = 251, /**< AArch64 ldsmaxalh opcode. */
/* 252 */ OP_ldsmaxb = 252, /**< AArch64 ldsmaxb opcode. */
/* 253 */ OP_ldsmaxh = 253, /**< AArch64 ldsmaxh opcode. */
/* 254 */ OP_ldsmaxl = 254, /**< AArch64 ldsmaxl opcode. */
/* 255 */ OP_ldsmaxlb = 255, /**< AArch64 ldsmaxlb opcode. */
/* 256 */ OP_ldsmaxlh = 256, /**< AArch64 ldsmaxlh opcode. */
/* 257 */ OP_ldsmin = 257, /**< AArch64 ldsmin opcode. */
/* 258 */ OP_ldsmina = 258, /**< AArch64 ldsmina opcode. */
/* 259 */ OP_ldsminab = 259, /**< AArch64 ldsminab opcode. */
/* 260 */ OP_ldsminah = 260, /**< AArch64 ldsminah opcode. */
/* 261 */ OP_ldsminal = 261, /**< AArch64 ldsminal opcode. */
/* 262 */ OP_ldsminalb = 262, /**< AArch64 ldsminalb opcode. */
/* 263 */ OP_ldsminalh = 263, /**< AArch64 ldsminalh opcode. */
/* 264 */ OP_ldsminb = 264, /**< AArch64 ldsminb opcode. */
/* 265 */ OP_ldsminh = 265, /**< AArch64 ldsminh opcode. */
/* 266 */ OP_ldsminl = 266, /**< AArch64 ldsminl opcode. */
/* 267 */ OP_ldsminlb = 267, /**< AArch64 ldsminlb opcode. */
/* 268 */ OP_ldsminlh = 268, /**< AArch64 ldsminlh opcode. */
/* 269 */ OP_ldtr = 269, /**< AArch64 ldtr opcode. */
/* 270 */ OP_ldtrb = 270, /**< AArch64 ldtrb opcode. */
/* 271 */ OP_ldtrh = 271, /**< AArch64 ldtrh opcode. */
/* 272 */ OP_ldtrsb = 272, /**< AArch64 ldtrsb opcode. */
/* 273 */ OP_ldtrsh = 273, /**< AArch64 ldtrsh opcode. */
/* 274 */ OP_ldtrsw = 274, /**< AArch64 ldtrsw opcode. */
/* 275 */ OP_ldumax = 275, /**< AArch64 ldumax opcode. */
/* 276 */ OP_ldumaxa = 276, /**< AArch64 ldumaxa opcode. */
/* 277 */ OP_ldumaxab = 277, /**< AArch64 ldumaxab opcode. */
/* 278 */ OP_ldumaxah = 278, /**< AArch64 ldumaxah opcode. */
/* 279 */ OP_ldumaxal = 279, /**< AArch64 ldumaxal opcode. */
/* 280 */ OP_ldumaxalb = 280, /**< AArch64 ldumaxalb opcode. */
/* 281 */ OP_ldumaxalh = 281, /**< AArch64 ldumaxalh opcode. */
/* 282 */ OP_ldumaxb = 282, /**< AArch64 ldumaxb opcode. */
/* 283 */ OP_ldumaxh = 283, /**< AArch64 ldumaxh opcode. */
/* 284 */ OP_ldumaxl = 284, /**< AArch64 ldumaxl opcode. */
/* 285 */ OP_ldumaxlb = 285, /**< AArch64 ldumaxlb opcode. */
/* 286 */ OP_ldumaxlh = 286, /**< AArch64 ldumaxlh opcode. */
/* 287 */ OP_ldumin = 287, /**< AArch64 ldumin opcode. */
/* 288 */ OP_ldumina = 288, /**< AArch64 ldumina opcode. */
/* 289 */ OP_lduminab = 289, /**< AArch64 lduminab opcode. */
/* 290 */ OP_lduminah = 290, /**< AArch64 lduminah opcode. */
/* 291 */ OP_lduminal = 291, /**< AArch64 lduminal opcode. */
/* 292 */ OP_lduminalb = 292, /**< AArch64 lduminalb opcode. */
/* 293 */ OP_lduminalh = 293, /**< AArch64 lduminalh opcode. */
/* 294 */ OP_lduminb = 294, /**< AArch64 lduminb opcode. */
/* 295 */ OP_lduminh = 295, /**< AArch64 lduminh opcode. */
/* 296 */ OP_lduminl = 296, /**< AArch64 lduminl opcode. */
/* 297 */ OP_lduminlb = 297, /**< AArch64 lduminlb opcode. */
/* 298 */ OP_lduminlh = 298, /**< AArch64 lduminlh opcode. */
/* 299 */ OP_ldur = 299, /**< AArch64 ldur opcode. */
/* 300 */ OP_ldurb = 300, /**< AArch64 ldurb opcode. */
/* 301 */ OP_ldurh = 301, /**< AArch64 ldurh opcode. */
/* 302 */ OP_ldursb = 302, /**< AArch64 ldursb opcode. */
/* 303 */ OP_ldursh = 303, /**< AArch64 ldursh opcode. */
/* 304 */ OP_ldursw = 304, /**< AArch64 ldursw opcode. */
/* 305 */ OP_ldxp = 305, /**< AArch64 ldxp opcode. */
/* 306 */ OP_ldxr = 306, /**< AArch64 ldxr opcode. */
/* 307 */ OP_ldxrb = 307, /**< AArch64 ldxrb opcode. */
/* 308 */ OP_ldxrh = 308, /**< AArch64 ldxrh opcode. */
/* 309 */ OP_lslv = 309, /**< AArch64 lslv opcode. */
/* 310 */ OP_lsrv = 310, /**< AArch64 lsrv opcode. */
/* 311 */ OP_madd = 311, /**< AArch64 madd opcode. */
/* 312 */ OP_mla = 312, /**< AArch64 mla opcode. */
/* 313 */ OP_mls = 313, /**< AArch64 mls opcode. */
/* 314 */ OP_movi = 314, /**< AArch64 movi opcode. */
/* 315 */ OP_movk = 315, /**< AArch64 movk opcode. */
/* 316 */ OP_movn = 316, /**< AArch64 movn opcode. */
/* 317 */ OP_movz = 317, /**< AArch64 movz opcode. */
/* 318 */ OP_mrs = 318, /**< AArch64 mrs opcode. */
/* 319 */ OP_msr = 319, /**< AArch64 msr opcode. */
/* 320 */ OP_msub = 320, /**< AArch64 msub opcode. */
/* 321 */ OP_mul = 321, /**< AArch64 mul opcode. */
/* 322 */ OP_mvni = 322, /**< AArch64 mvni opcode. */
/* 323 */ OP_neg = 323, /**< AArch64 neg opcode. */
/* 324 */ OP_nop = 324, /**< AArch64 nop opcode. */
/* 325 */ OP_not = 325, /**< AArch64 not opcode. */
/* 326 */ OP_orn = 326, /**< AArch64 orn opcode. */
/* 327 */ OP_orr = 327, /**< AArch64 orr opcode. */
/* 328 */ OP_pmul = 328, /**< AArch64 pmul opcode. */
/* 329 */ OP_pmull = 329, /**< AArch64 pmull opcode. */
/* 330 */ OP_pmull2 = 330, /**< AArch64 pmull2 opcode. */
/* 331 */ OP_prfm = 331, /**< AArch64 prfm opcode. */
/* 332 */ OP_prfum = 332, /**< AArch64 prfum opcode. */
/* 333 */ OP_raddhn = 333, /**< AArch64 raddhn opcode. */
/* 334 */ OP_raddhn2 = 334, /**< AArch64 raddhn2 opcode. */
/* 335 */ OP_rbit = 335, /**< AArch64 rbit opcode. */
/* 336 */ OP_ret = 336, /**< AArch64 ret opcode. */
/* 337 */ OP_rev = 337, /**< AArch64 rev opcode. */
/* 338 */ OP_rev16 = 338, /**< AArch64 rev16 opcode. */
/* 339 */ OP_rev32 = 339, /**< AArch64 rev32 opcode. */
/* 340 */ OP_rev64 = 340, /**< AArch64 rev64 opcode. */
/* 341 */ OP_rorv = 341, /**< AArch64 rorv opcode. */
/* 342 */ OP_rshrn = 342, /**< AArch64 rshrn opcode. */
/* 343 */ OP_rshrn2 = 343, /**< AArch64 rshrn2 opcode. */
/* 344 */ OP_rsubhn = 344, /**< AArch64 rsubhn opcode. */
/* 345 */ OP_rsubhn2 = 345, /**< AArch64 rsubhn2 opcode. */
/* 346 */ OP_saba = 346, /**< AArch64 saba opcode. */
/* 347 */ OP_sabal = 347, /**< AArch64 sabal opcode. */
/* 348 */ OP_sabal2 = 348, /**< AArch64 sabal2 opcode. */
/* 349 */ OP_sabd = 349, /**< AArch64 sabd opcode. */
/* 350 */ OP_sabdl = 350, /**< AArch64 sabdl opcode. */
/* 351 */ OP_sabdl2 = 351, /**< AArch64 sabdl2 opcode. */
/* 352 */ OP_sadalp = 352, /**< AArch64 sadalp opcode. */
/* 353 */ OP_saddl = 353, /**< AArch64 saddl opcode. */
/* 354 */ OP_saddl2 = 354, /**< AArch64 saddl2 opcode. */
/* 355 */ OP_saddlp = 355, /**< AArch64 saddlp opcode. */
/* 356 */ OP_saddlv = 356, /**< AArch64 saddlv opcode. */
/* 357 */ OP_saddw = 357, /**< AArch64 saddw opcode. */
/* 358 */ OP_saddw2 = 358, /**< AArch64 saddw2 opcode. */
/* 359 */ OP_sbc = 359, /**< AArch64 sbc opcode. */
/* 360 */ OP_sbcs = 360, /**< AArch64 sbcs opcode. */
/* 361 */ OP_sbfm = 361, /**< AArch64 sbfm opcode. */
/* 362 */ OP_scvtf = 362, /**< AArch64 scvtf opcode. */
/* 363 */ OP_sdiv = 363, /**< AArch64 sdiv opcode. */
/* 364 */ OP_sdot = 364, /**< AArch64 sdot opcode. */
/* 365 */ OP_sev = 365, /**< AArch64 sev opcode. */
/* 366 */ OP_sevl = 366, /**< AArch64 sevl opcode. */
/* 367 */ OP_sha1c = 367, /**< AArch64 sha1c opcode. */
/* 368 */ OP_sha1h = 368, /**< AArch64 sha1h opcode. */
/* 369 */ OP_sha1m = 369, /**< AArch64 sha1m opcode. */
/* 370 */ OP_sha1p = 370, /**< AArch64 sha1p opcode. */
/* 371 */ OP_sha1su0 = 371, /**< AArch64 sha1su0 opcode. */
/* 372 */ OP_sha1su1 = 372, /**< AArch64 sha1su1 opcode. */
/* 373 */ OP_sha256h = 373, /**< AArch64 sha256h opcode. */
/* 374 */ OP_sha256h2 = 374, /**< AArch64 sha256h2 opcode. */
/* 375 */ OP_sha256su0 = 375, /**< AArch64 sha256su0 opcode. */
/* 376 */ OP_sha256su1 = 376, /**< AArch64 sha256su1 opcode. */
/* 377 */ OP_shadd = 377, /**< AArch64 shadd opcode. */
/* 378 */ OP_shl = 378, /**< AArch64 shl opcode. */
/* 379 */ OP_shll = 379, /**< AArch64 shll opcode. */
/* 380 */ OP_shll2 = 380, /**< AArch64 shll2 opcode. */
/* 381 */ OP_shrn = 381, /**< AArch64 shrn opcode. */
/* 382 */ OP_shrn2 = 382, /**< AArch64 shrn2 opcode. */
/* 383 */ OP_shsub = 383, /**< AArch64 shsub opcode. */
/* 384 */ OP_sli = 384, /**< AArch64 sli opcode. */
/* 385 */ OP_smaddl = 385, /**< AArch64 smaddl opcode. */
/* 386 */ OP_smax = 386, /**< AArch64 smax opcode. */
/* 387 */ OP_smaxp = 387, /**< AArch64 smaxp opcode. */
/* 388 */ OP_smaxv = 388, /**< AArch64 smaxv opcode. */
/* 389 */ OP_smc = 389, /**< AArch64 smc opcode. */
/* 390 */ OP_smin = 390, /**< AArch64 smin opcode. */
/* 391 */ OP_sminp = 391, /**< AArch64 sminp opcode. */
/* 392 */ OP_sminv = 392, /**< AArch64 sminv opcode. */
/* 393 */ OP_smlal = 393, /**< AArch64 smlal opcode. */
/* 394 */ OP_smlal2 = 394, /**< AArch64 smlal2 opcode. */
/* 395 */ OP_smlsl = 395, /**< AArch64 smlsl opcode. */
/* 396 */ OP_smlsl2 = 396, /**< AArch64 smlsl2 opcode. */
/* 397 */ OP_smov = 397, /**< AArch64 smov opcode. */
/* 398 */ OP_smsubl = 398, /**< AArch64 smsubl opcode. */
/* 399 */ OP_smulh = 399, /**< AArch64 smulh opcode. */
/* 400 */ OP_smull = 400, /**< AArch64 smull opcode. */
/* 401 */ OP_smull2 = 401, /**< AArch64 smull2 opcode. */
/* 402 */ OP_sqabs = 402, /**< AArch64 sqabs opcode. */
/* 403 */ OP_sqadd = 403, /**< AArch64 sqadd opcode. */
/* 404 */ OP_sqdmlal = 404, /**< AArch64 sqdmlal opcode. */
/* 405 */ OP_sqdmlal2 = 405, /**< AArch64 sqdmlal2 opcode. */
/* 406 */ OP_sqdmlsl = 406, /**< AArch64 sqdmlsl opcode. */
/* 407 */ OP_sqdmlsl2 = 407, /**< AArch64 sqdmlsl2 opcode. */
/* 408 */ OP_sqdmulh = 408, /**< AArch64 sqdmulh opcode. */
/* 409 */ OP_sqdmull = 409, /**< AArch64 sqdmull opcode. */
/* 410 */ OP_sqdmull2 = 410, /**< AArch64 sqdmull2 opcode. */
/* 411 */ OP_sqneg = 411, /**< AArch64 sqneg opcode. */
/* 412 */ OP_sqrdmlah = 412, /**< AArch64 sqrdmlah opcode. */
/* 413 */ OP_sqrdmulh = 413, /**< AArch64 sqrdmulh opcode. */
/* 414 */ OP_sqrshl = 414, /**< AArch64 sqrshl opcode. */
/* 415 */ OP_sqrshrn = 415, /**< AArch64 sqrshrn opcode. */
/* 416 */ OP_sqrshrn2 = 416, /**< AArch64 sqrshrn2 opcode. */
/* 417 */ OP_sqrshrun = 417, /**< AArch64 sqrshrun opcode. */
/* 418 */ OP_sqrshrun2 = 418, /**< AArch64 sqrshrun2 opcode. */
/* 419 */ OP_sqshl = 419, /**< AArch64 sqshl opcode. */
/* 420 */ OP_sqshlu = 420, /**< AArch64 sqshlu opcode. */
/* 421 */ OP_sqshrn = 421, /**< AArch64 sqshrn opcode. */
/* 422 */ OP_sqshrn2 = 422, /**< AArch64 sqshrn2 opcode. */
/* 423 */ OP_sqshrun = 423, /**< AArch64 sqshrun opcode. */
/* 424 */ OP_sqshrun2 = 424, /**< AArch64 sqshrun2 opcode. */
/* 425 */ OP_sqsub = 425, /**< AArch64 sqsub opcode. */
/* 426 */ OP_sqxtn = 426, /**< AArch64 sqxtn opcode. */
/* 427 */ OP_sqxtn2 = 427, /**< AArch64 sqxtn2 opcode. */
/* 428 */ OP_sqxtun = 428, /**< AArch64 sqxtun opcode. */
/* 429 */ OP_sqxtun2 = 429, /**< AArch64 sqxtun2 opcode. */
/* 430 */ OP_srhadd = 430, /**< AArch64 srhadd opcode. */
/* 431 */ OP_sri = 431, /**< AArch64 sri opcode. */
/* 432 */ OP_srshl = 432, /**< AArch64 srshl opcode. */
/* 433 */ OP_srshr = 433, /**< AArch64 srshr opcode. */
/* 434 */ OP_srsra = 434, /**< AArch64 srsra opcode. */
/* 435 */ OP_sshl = 435, /**< AArch64 sshl opcode. */
/* 436 */ OP_sshll = 436, /**< AArch64 sshll opcode. */
/* 437 */ OP_sshll2 = 437, /**< AArch64 sshll2 opcode. */
/* 438 */ OP_sshr = 438, /**< AArch64 sshr opcode. */
/* 439 */ OP_ssra = 439, /**< AArch64 ssra opcode. */
/* 440 */ OP_ssubl = 440, /**< AArch64 ssubl opcode. */
/* 441 */ OP_ssubl2 = 441, /**< AArch64 ssubl2 opcode. */
/* 442 */ OP_ssubw = 442, /**< AArch64 ssubw opcode. */
/* 443 */ OP_ssubw2 = 443, /**< AArch64 ssubw2 opcode. */
/* 444 */ OP_st1 = 444, /**< AArch64 st1 opcode. */
/* 445 */ OP_st2 = 445, /**< AArch64 st2 opcode. */
/* 446 */ OP_st3 = 446, /**< AArch64 st3 opcode. */
/* 447 */ OP_st4 = 447, /**< AArch64 st4 opcode. */
/* 448 */ OP_stlr = 448, /**< AArch64 stlr opcode. */
/* 449 */ OP_stlrb = 449, /**< AArch64 stlrb opcode. */
/* 450 */ OP_stlrh = 450, /**< AArch64 stlrh opcode. */
/* 451 */ OP_stlxp = 451, /**< AArch64 stlxp opcode. */
/* 452 */ OP_stlxr = 452, /**< AArch64 stlxr opcode. */
/* 453 */ OP_stlxrb = 453, /**< AArch64 stlxrb opcode. */
/* 454 */ OP_stlxrh = 454, /**< AArch64 stlxrh opcode. */
/* 455 */ OP_stnp = 455, /**< AArch64 stnp opcode. */
/* 456 */ OP_stp = 456, /**< AArch64 stp opcode. */
/* 457 */ OP_str = 457, /**< AArch64 str opcode. */
/* 458 */ OP_strb = 458, /**< AArch64 strb opcode. */
/* 459 */ OP_strh = 459, /**< AArch64 strh opcode. */
/* 460 */ OP_sttr = 460, /**< AArch64 sttr opcode. */
/* 461 */ OP_sttrb = 461, /**< AArch64 sttrb opcode. */
/* 462 */ OP_sttrh = 462, /**< AArch64 sttrh opcode. */
/* 463 */ OP_stur = 463, /**< AArch64 stur opcode. */
/* 464 */ OP_sturb = 464, /**< AArch64 sturb opcode. */
/* 465 */ OP_sturh = 465, /**< AArch64 sturh opcode. */
/* 466 */ OP_stxp = 466, /**< AArch64 stxp opcode. */
/* 467 */ OP_stxr = 467, /**< AArch64 stxr opcode. */
/* 468 */ OP_stxrb = 468, /**< AArch64 stxrb opcode. */
/* 469 */ OP_stxrh = 469, /**< AArch64 stxrh opcode. */
/* 470 */ OP_sub = 470, /**< AArch64 sub opcode. */
/* 471 */ OP_subhn = 471, /**< AArch64 subhn opcode. */
/* 472 */ OP_subhn2 = 472, /**< AArch64 subhn2 opcode. */
/* 473 */ OP_subs = 473, /**< AArch64 subs opcode. */
/* 474 */ OP_suqadd = 474, /**< AArch64 suqadd opcode. */
/* 475 */ OP_svc = 475, /**< AArch64 svc opcode. */
/* 476 */ OP_swp = 476, /**< AArch64 swp opcode. */
/* 477 */ OP_swpa = 477, /**< AArch64 swpa opcode. */
/* 478 */ OP_swpab = 478, /**< AArch64 swpab opcode. */
/* 479 */ OP_swpah = 479, /**< AArch64 swpah opcode. */
/* 480 */ OP_swpal = 480, /**< AArch64 swpal opcode. */
/* 481 */ OP_swpalb = 481, /**< AArch64 swpalb opcode. */
/* 482 */ OP_swpalh = 482, /**< AArch64 swpalh opcode. */
/* 483 */ OP_swpb = 483, /**< AArch64 swpb opcode. */
/* 484 */ OP_swph = 484, /**< AArch64 swph opcode. */
/* 485 */ OP_swpl = 485, /**< AArch64 swpl opcode. */
/* 486 */ OP_swplb = 486, /**< AArch64 swplb opcode. */
/* 487 */ OP_swplh = 487, /**< AArch64 swplh opcode. */
/* 488 */ OP_sys = 488, /**< AArch64 sys opcode. */
/* 489 */ OP_sysl = 489, /**< AArch64 sysl opcode. */
/* 490 */ OP_tbl = 490, /**< AArch64 tbl opcode. */
/* 491 */ OP_tbnz = 491, /**< AArch64 tbnz opcode. */
/* 492 */ OP_tbx = 492, /**< AArch64 tbx opcode. */
/* 493 */ OP_tbz = 493, /**< AArch64 tbz opcode. */
/* 494 */ OP_trn1 = 494, /**< AArch64 trn1 opcode. */
/* 495 */ OP_trn2 = 495, /**< AArch64 trn2 opcode. */
/* 496 */ OP_uaba = 496, /**< AArch64 uaba opcode. */
/* 497 */ OP_uabal = 497, /**< AArch64 uabal opcode. */
/* 498 */ OP_uabal2 = 498, /**< AArch64 uabal2 opcode. */
/* 499 */ OP_uabd = 499, /**< AArch64 uabd opcode. */
/* 500 */ OP_uabdl = 500, /**< AArch64 uabdl opcode. */
/* 501 */ OP_uabdl2 = 501, /**< AArch64 uabdl2 opcode. */
/* 502 */ OP_uadalp = 502, /**< AArch64 uadalp opcode. */
/* 503 */ OP_uaddl = 503, /**< AArch64 uaddl opcode. */
/* 504 */ OP_uaddl2 = 504, /**< AArch64 uaddl2 opcode. */
/* 505 */ OP_uaddlp = 505, /**< AArch64 uaddlp opcode. */
/* 506 */ OP_uaddlv = 506, /**< AArch64 uaddlv opcode. */
/* 507 */ OP_uaddw = 507, /**< AArch64 uaddw opcode. */
/* 508 */ OP_uaddw2 = 508, /**< AArch64 uaddw2 opcode. */
/* 509 */ OP_ubfm = 509, /**< AArch64 ubfm opcode. */
/* 510 */ OP_ucvtf = 510, /**< AArch64 ucvtf opcode. */
/* 511 */ OP_udiv = 511, /**< AArch64 udiv opcode. */
/* 512 */ OP_udot = 512, /**< AArch64 udot opcode. */
/* 513 */ OP_uhadd = 513, /**< AArch64 uhadd opcode. */
/* 514 */ OP_uhsub = 514, /**< AArch64 uhsub opcode. */
/* 515 */ OP_umaddl = 515, /**< AArch64 umaddl opcode. */
/* 516 */ OP_umax = 516, /**< AArch64 umax opcode. */
/* 517 */ OP_umaxp = 517, /**< AArch64 umaxp opcode. */
/* 518 */ OP_umaxv = 518, /**< AArch64 umaxv opcode. */
/* 519 */ OP_umin = 519, /**< AArch64 umin opcode. */
/* 520 */ OP_uminp = 520, /**< AArch64 uminp opcode. */
/* 521 */ OP_uminv = 521, /**< AArch64 uminv opcode. */
/* 522 */ OP_umlal = 522, /**< AArch64 umlal opcode. */
/* 523 */ OP_umlal2 = 523, /**< AArch64 umlal2 opcode. */
/* 524 */ OP_umlsl = 524, /**< AArch64 umlsl opcode. */
/* 525 */ OP_umlsl2 = 525, /**< AArch64 umlsl2 opcode. */
/* 526 */ OP_umov = 526, /**< AArch64 umov opcode. */
/* 527 */ OP_umsubl = 527, /**< AArch64 umsubl opcode. */
/* 528 */ OP_umulh = 528, /**< AArch64 umulh opcode. */
/* 529 */ OP_umull = 529, /**< AArch64 umull opcode. */
/* 530 */ OP_umull2 = 530, /**< AArch64 umull2 opcode. */
/* 531 */ OP_uqadd = 531, /**< AArch64 uqadd opcode. */
/* 532 */ OP_uqrshl = 532, /**< AArch64 uqrshl opcode. */
/* 533 */ OP_uqrshrn = 533, /**< AArch64 uqrshrn opcode. */
/* 534 */ OP_uqrshrn2 = 534, /**< AArch64 uqrshrn2 opcode. */
/* 535 */ OP_uqshl = 535, /**< AArch64 uqshl opcode. */
/* 536 */ OP_uqshrn = 536, /**< AArch64 uqshrn opcode. */
/* 537 */ OP_uqshrn2 = 537, /**< AArch64 uqshrn2 opcode. */
/* 538 */ OP_uqsub = 538, /**< AArch64 uqsub opcode. */
/* 539 */ OP_uqxtn = 539, /**< AArch64 uqxtn opcode. */
/* 540 */ OP_uqxtn2 = 540, /**< AArch64 uqxtn2 opcode. */
/* 541 */ OP_urecpe = 541, /**< AArch64 urecpe opcode. */
/* 542 */ OP_urhadd = 542, /**< AArch64 urhadd opcode. */
/* 543 */ OP_urshl = 543, /**< AArch64 urshl opcode. */
/* 544 */ OP_urshr = 544, /**< AArch64 urshr opcode. */
/* 545 */ OP_ursqrte = 545, /**< AArch64 ursqrte opcode. */
/* 546 */ OP_ursra = 546, /**< AArch64 ursra opcode. */
/* 547 */ OP_ushl = 547, /**< AArch64 ushl opcode. */
/* 548 */ OP_ushll = 548, /**< AArch64 ushll opcode. */
/* 549 */ OP_ushll2 = 549, /**< AArch64 ushll2 opcode. */
/* 550 */ OP_ushr = 550, /**< AArch64 ushr opcode. */
/* 551 */ OP_usqadd = 551, /**< AArch64 usqadd opcode. */
/* 552 */ OP_usra = 552, /**< AArch64 usra opcode. */
/* 553 */ OP_usubl = 553, /**< AArch64 usubl opcode. */
/* 554 */ OP_usubl2 = 554, /**< AArch64 usubl2 opcode. */
/* 555 */ OP_usubw = 555, /**< AArch64 usubw opcode. */
/* 556 */ OP_usubw2 = 556, /**< AArch64 usubw2 opcode. */
/* 557 */ OP_uzp1 = 557, /**< AArch64 uzp1 opcode. */
/* 558 */ OP_uzp2 = 558, /**< AArch64 uzp2 opcode. */
/* 559 */ OP_wfe = 559, /**< AArch64 wfe opcode. */
/* 560 */ OP_wfi = 560, /**< AArch64 wfi opcode. */
/* 561 */ OP_xpaclri = 561, /**< AArch64 xpaclri opcode. */
/* 562 */ OP_xtn = 562, /**< AArch64 xtn opcode. */
/* 563 */ OP_xtn2 = 563, /**< AArch64 xtn2 opcode. */
/* 564 */ OP_yield = 564, /**< AArch64 yield opcode. */
/* 565 */ OP_zip1 = 565, /**< AArch64 zip1 opcode. */
/* 566 */ OP_zip2 = 566, /**< AArch64 zip2 opcode. */
/* 567 */ OP_udf = 567, /**< AArch64 udf opcode. */
/* 568 */ OP_dc_zva = 568, /**< AArch64 dc_zva opcode. */
/* 569 */ OP_dc_cisw = 569, /**< AArch64 dc_cisw opcode. */
/* 570 */ OP_dc_civac = 570, /**< AArch64 dc_civac opcode. */
/* 571 */ OP_dc_csw = 571, /**< AArch64 dc_csw opcode. */
/* 572 */ OP_dc_cvac = 572, /**< AArch64 dc_cvac opcode. */
/* 573 */ OP_dc_cvau = 573, /**< AArch64 dc_cvau opcode. */
/* 574 */ OP_dc_isw = 574, /**< AArch64 dc_isw opcode. */
/* 575 */ OP_dc_ivac = 575, /**< AArch64 dc_ivac opcode. */
/* 576 */ OP_ic_iallu = 576, /**< AArch64 ic_iallu opcode. */
/* 577 */ OP_ic_ialluis = 577, /**< AArch64 ic_ialluis opcode. */
/* 578 */ OP_ic_ivau = 578, /**< AArch64 ic_ivau opcode. */
OP_AFTER_LAST,
OP_FIRST = OP_LABEL + 1, /**< First real opcode. */
OP_LAST = OP_AFTER_LAST - 1, /**< Last real opcode. */
};
/* alternative names */
#define OP_load OP_ldr /**< Platform-independent opcode name for load. */
#define OP_store OP_str /**< Platform-independent opcode name for store. */
/* alternative names */
#define OP_ldmia OP_ldm /**< Alternative opcode name for ldm. */
#define OP_rfeia OP_rfe /**< Alternative opcode name for rfe. */
#define OP_srsia OP_srs /**< Alternative opcode name for srs. */
#define OP_stmia OP_stm /**< Alternative opcode name for stm. */
#define OP_vldmia OP_vldm /**< Alternative opcode name for vldm. */
#define OP_vstmia OP_vstm /**< Alternative opcode name for vstm. */
#define OP_fldmx OP_vldm /**< Alternative opcode name for vldm. */
#define OP_fstmx OP_vstm /**< Alternative opcode name for vstm. */
#define OP_pop OP_ldr /**< Alternative opcode name for ldr. */
#define OP_push OP_stmdb /**< Alternative opcode name for stmdb. */
#define OP_vpop OP_vldmia /**< Alternative opcode name for vldmia. */
#define OP_vpush OP_vstmdb /**< Alternative opcode name for vstmdb. */
#define OP_cpy OP_mov /**< Alternative opcode name for reg-reg mov. */
#define OP_jmp OP_b /**< Platform-independent opcode name for jump. */
#define OP_jmp_short OP_b_short /**< Platform-independent opcode name for short jump. */
#define OP_load OP_ldr /**< Platform-independent opcode name for load. */
#define OP_store OP_str /**< Platform-independent opcode name for store. */
struct _opnd_t;
typedef struct _opnd_t opnd_t;
struct _instr_t;
typedef struct _instr_t instr_t;
typedef struct _dr_instr_label_data_t {
ptr_uint_t data[4]; /**< Generic fields for storing user-controlled data */
} dr_instr_label_data_t;
typedef void (*instr_label_callback_t)(instr_t *instr);
/**
* opnd_t type exposed for optional "fast IR" access. Note that DynamoRIO
* reserves the right to change this structure across releases and does
* not guarantee binary or source compatibility when this structure's fields
* are directly accessed. If the OPND_ macros are used, DynamoRIO does
* guarantee source compatibility, but not binary compatibility. If binary
* compatibility is desired, do not use the fast IR feature.
*/
struct _opnd_t {
byte kind;
/* Size field: used for immed_ints and addresses and registers,
* but for registers, if 0, the full size of the register is assumed.
* It holds a OPSZ_ field from decode.h.
* We need it so we can pick the proper instruction form for
* encoding -- an alternative would be to split all the opcodes
* up into different data size versions.
*/
opnd_size_t size;
/* To avoid increasing our union beyond 64 bits, we store additional data
* needed for x64 operand types here in the alignment padding.
*/
union {
ushort far_pc_seg_selector; /* FAR_PC_kind and FAR_INSTR_kind */
/* We could fit segment in value.base_disp but more consistent here */
reg_id_t segment : REG_SPECIFIER_BITS; /* BASE_DISP_kind, REL_ADDR_kind,
* and ABS_ADDR_kind, on x86 */
ushort disp; /* MEM_INSTR_kind */
ushort shift; /* INSTR_kind */
/* We have to use a shorter type, not the enum type, to get cl to not align */
/* Used for ARM: REG_kind, BASE_DISP_kind, and IMMED_INTEGER_kind */
ushort /*dr_opnd_flags_t*/ flags;
} aux;
union {
/* all are 64 bits or less */
/* NULL_kind has no value */
ptr_int_t immed_int; /* IMMED_INTEGER_kind */
struct {
int low; /* IMMED_INTEGER_kind with DR_OPND_MULTI_PART */
int high; /* IMMED_INTEGER_kind with DR_OPND_MULTI_PART */
} immed_int_multi_part;
float immed_float; /* IMMED_FLOAT_kind */
# ifndef WINDOWS
/* XXX i#4488: x87 floating point immediates should be double precision.
* Currently not included for Windows because sizeof(opnd_t) does not
* equal EXPECTED_SIZEOF_OPND, triggering the ASSERT in d_r_arch_init().
*/
/* For 32-bit ARM we keep alignment at 4 to avoid changing the opnd_t shape.
* Marking this field as packed seems to do it and avoids other changes
* that might occur if packing the whole struct.
* XXX i#4488: Do any double-loading instructions require 8-byte alignment?
* Perhaps we should just break compatibility and align this to 8 for
* x86 and ARM 32-bit.
*/
double immed_double IF_ARM(__attribute__((__packed__))); /* IMMED_DOUBLE_kind */
# endif
/* PR 225937: today we provide no way of specifying a 16-bit immediate
* (encoded as a data16 prefix, which also implies a 16-bit EIP,
* making it only useful for far pcs)
*/
app_pc pc; /* PC_kind and FAR_PC_kind */
/* For FAR_PC_kind and FAR_INSTR_kind, we use pc/instr, and keep the
* segment selector (which is NOT a DR_SEG_ constant) in far_pc_seg_selector
* above, to save space.
*/
instr_t *instr; /* INSTR_kind, FAR_INSTR_kind, and MEM_INSTR_kind */
reg_id_t reg; /* REG_kind */
struct {
/* For ARM, either disp==0 or index_reg==DR_REG_NULL: can't have both */
int disp;
reg_id_t base_reg : REG_SPECIFIER_BITS;
reg_id_t index_reg : REG_SPECIFIER_BITS;