charm 0.0.1

ARM assembler & disassembler generated from the ARM exploration tools.
Documentation
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
1001
1002
1003
1004
1005
1006
1007
1008
1009
1010
1011
1012
1013
1014
1015
1016
1017
1018
1019
1020
1021
1022
1023
1024
1025
1026
1027
1028
1029
1030
1031
1032
1033
1034
1035
1036
1037
1038
1039
#![allow(non_snake_case)]
#![allow(unused)]
use std::collections::HashMap;
use crate::error::Result;
use super::super::consts::*;
use super::super::instructions::*;
use super::super::instruction::Instruction;

pub fn encode(instr: &Instruction, buf: &mut Vec<u8>) -> Result<usize> {
    match instr.code {
        Code::Invalid => todo!(),
        Code::AND_r_T1 => AndRT1::encode(instr, buf),
        Code::LSRS_MOV_r_T2 => LsrsMovRT2::encode(instr, buf),
        Code::BICS_r_T2 => BicsRT2::encode(instr, buf),
        Code::ORNS_i_T1 => OrnsIT1::encode(instr, buf),
        Code::SMMLA_T1 => SmmlaT1::encode(instr, buf),
        Code::SHSUB8_T1 => Shsub8T1::encode(instr, buf),
        Code::QADD8_T1 => Qadd8T1::encode(instr, buf),
        Code::CMP_r_T2 => CmpRT2::encode(instr, buf),
        Code::SMMLAR_T1 => SmmlarT1::encode(instr, buf),
        Code::CPSID_T2_AS => CpsidT2As::encode(instr, buf),
        Code::LDRB_r_T1 => LdrbRT1::encode(instr, buf),
        Code::BLX_r_T1 => BlxRT1::encode(instr, buf),
        Code::ADD_i_T2 => AddIT2::encode(instr, buf),
        Code::ADC_r_T1 => AdcRT1::encode(instr, buf),
        Code::LDR_r_T1 => LdrRT1::encode(instr, buf),
        Code::BX_T1 => BxT1::encode(instr, buf),
        Code::LDAB_T1 => LdabT1::encode(instr, buf),
        Code::LDC_l_T1_unind => LdcLT1Unind::encode(instr, buf),
        Code::ORN_r_T1 => OrnRT1::encode(instr, buf),
        Code::ADD_ADR_T3 => AddAdrT3::encode(instr, buf),
        Code::LSLS_MOVS_rr_T2 => LslsMovsRrT2::encode(instr, buf),
        Code::LDREX_T1 => LdrexT1::encode(instr, buf),
        Code::UXTH_T2 => UxthT2::encode(instr, buf),
        Code::LDRSHT_T1 => LdrshtT1::encode(instr, buf),
        Code::SMULTT_T1 => SmulttT1::encode(instr, buf),
        Code::STC_T1_unind => StcT1Unind::encode(instr, buf),
        Code::CPSIE_T1_AS => CpsieT1As::encode(instr, buf),
        Code::TST_r_T2 => TstRT2::encode(instr, buf),
        Code::TST_i_T1 => TstIT1::encode(instr, buf),
        Code::STR_i_T4_off => StrIT4Off::encode(instr, buf),
        Code::STC_T1_off => StcT1Off::encode(instr, buf),
        Code::QADD16_T1 => Qadd16T1::encode(instr, buf),
        Code::LDRH_r_T2 => LdrhRT2::encode(instr, buf),
        Code::MSR_r_T1_AS => MsrRT1As::encode(instr, buf),
        Code::MOV_rr_T1_ASR => MovRrT1Asr::encode(instr, buf),
        Code::REV16_T1 => Rev16T1::encode(instr, buf),
        Code::RSBS_i_T2 => RsbsIT2::encode(instr, buf),
        Code::BFC_T1 => BfcT1::encode(instr, buf),
        Code::ADD_r_T3_RRX => AddRT3Rrx::encode(instr, buf),
        Code::UHADD8_T1 => Uhadd8T1::encode(instr, buf),
        Code::SEVL_T2 => SevlT2::encode(instr, buf),
        Code::STC_T1_post => StcT1Post::encode(instr, buf),
        Code::SB_T1 => SbT1::encode(instr, buf),
        Code::STRB_r_T1 => StrbRT1::encode(instr, buf),
        Code::PLI_i_T3 => PliIT3::encode(instr, buf),
        Code::ASR_MOV_rr_T1_ASR => AsrMovRrT1Asr::encode(instr, buf),
        Code::SMLSD_T1 => SmlsdT1::encode(instr, buf),
        Code::STLEXD_T1 => StlexdT1::encode(instr, buf),
        Code::SMLAWT_T1 => SmlawtT1::encode(instr, buf),
        Code::SUBS_PC_T5_AS => SubsPcT5As::encode(instr, buf),
        Code::UDF_T1 => UdfT1::encode(instr, buf),
        Code::RRXS_MOVS_r_T3_RRX => RrxsMovsRT3Rrx::encode(instr, buf),
        Code::MUL_T1 => MulT1::encode(instr, buf),
        Code::MOV_r_T2 => MovRT2::encode(instr, buf),
        Code::DSB_T1 => DsbT1::encode(instr, buf),
        Code::STM_T1 => StmT1::encode(instr, buf),
        Code::LDRT_T1 => LdrtT1::encode(instr, buf),
        Code::SUB_SP_i_T1 => SubSpIT1::encode(instr, buf),
        Code::NOP_T2 => NopT2::encode(instr, buf),
        Code::UXTB16_T1 => Uxtb16T1::encode(instr, buf),
        Code::STRB_r_T2 => StrbRT2::encode(instr, buf),
        Code::HVC_T1 => HvcT1::encode(instr, buf),
        Code::SXTAH_T1 => SxtahT1::encode(instr, buf),
        Code::UXTAB_T1 => UxtabT1::encode(instr, buf),
        Code::MOV_rr_T1_LSL => MovRrT1Lsl::encode(instr, buf),
        Code::MRS_br_T1_AS => MrsBrT1As::encode(instr, buf),
        Code::SUBS_SP_r_T1 => SubsSpRT1::encode(instr, buf),
        Code::LDM_T1 => LdmT1::encode(instr, buf),
        Code::ADD_SP_r_T3_RRX => AddSpRT3Rrx::encode(instr, buf),
        Code::SMUSD_T1 => SmusdT1::encode(instr, buf),
        Code::SBC_r_T2_RRX => SbcRT2Rrx::encode(instr, buf),
        Code::USAD8_T1 => Usad8T1::encode(instr, buf),
        Code::ADDS_r_T3 => AddsRT3::encode(instr, buf),
        Code::QADD_T1 => QaddT1::encode(instr, buf),
        Code::MOV_i_T2 => MovIT2::encode(instr, buf),
        Code::STRT_T1 => StrtT1::encode(instr, buf),
        Code::EORS_i_T1 => EorsIT1::encode(instr, buf),
        Code::SVC_T1 => SvcT1::encode(instr, buf),
        Code::ORRS_r_T2 => OrrsRT2::encode(instr, buf),
        Code::SXTAB16_T1 => Sxtab16T1::encode(instr, buf),
        Code::MOV_i_T3 => MovIT3::encode(instr, buf),
        Code::CMN_r_T1 => CmnRT1::encode(instr, buf),
        Code::LDRSB_l_T1 => LdrsbLT1::encode(instr, buf),
        Code::ADR_T2 => AdrT2::encode(instr, buf),
        Code::SUB_SP_i_T3 => SubSpIT3::encode(instr, buf),
        Code::UMAAL_T1 => UmaalT1::encode(instr, buf),
        Code::ANDS_r_T2 => AndsRT2::encode(instr, buf),
        Code::UHASX_T1 => UhasxT1::encode(instr, buf),
        Code::LDRB_l_T1 => LdrbLT1::encode(instr, buf),
        Code::MVNS_r_T2 => MvnsRT2::encode(instr, buf),
        Code::LDM_T2 => LdmT2::encode(instr, buf),
        Code::BIC_r_T2 => BicRT2::encode(instr, buf),
        Code::ADDS_SP_r_T3 => AddsSpRT3::encode(instr, buf),
        Code::QSUB_T1 => QsubT1::encode(instr, buf),
        Code::SBFX_T1 => SbfxT1::encode(instr, buf),
        Code::STLEXB_T1 => StlexbT1::encode(instr, buf),
        Code::ADD_SP_r_T1 => AddSpRT1::encode(instr, buf),
        Code::ADDS_SP_i_T3 => AddsSpIT3::encode(instr, buf),
        Code::LDC_l_T1_off => LdcLT1Off::encode(instr, buf),
        Code::CRC32CH_T1 => Crc32chT1::encode(instr, buf),
        Code::SSAT_T1_ASR => SsatT1Asr::encode(instr, buf),
        Code::SBC_r_T1 => SbcRT1::encode(instr, buf),
        Code::MSR_br_T1_AS => MsrBrT1As::encode(instr, buf),
        Code::RFE_T2_AS => RfeT2As::encode(instr, buf),
        Code::LDRD_l_T1_off => LdrdLT1Off::encode(instr, buf),
        Code::MLS_T1 => MlsT1::encode(instr, buf),
        Code::ADD_SP_i_T2 => AddSpIT2::encode(instr, buf),
        Code::ADR_T3 => AdrT3::encode(instr, buf),
        Code::SMLALBT_T1 => SmlalbtT1::encode(instr, buf),
        Code::SMULBB_T1 => SmulbbT1::encode(instr, buf),
        Code::UMULL_T1 => UmullT1::encode(instr, buf),
        Code::UXTAH_T1 => UxtahT1::encode(instr, buf),
        Code::UQASX_T1 => UqasxT1::encode(instr, buf),
        Code::UBFX_T1 => UbfxT1::encode(instr, buf),
        Code::ANDS_r_T2_RRX => AndsRT2Rrx::encode(instr, buf),
        Code::BL_i_T2 => BlIT2::encode(instr, buf),
        Code::USAT_T1_ASR => UsatT1Asr::encode(instr, buf),
        Code::SMULTB_T1 => SmultbT1::encode(instr, buf),
        Code::SXTH_T2 => SxthT2::encode(instr, buf),
        Code::ADD_SP_r_T2 => AddSpRT2::encode(instr, buf),
        Code::WFI_T1 => WfiT1::encode(instr, buf),
        Code::CLREX_T1 => ClrexT1::encode(instr, buf),
        Code::SUB_r_T1 => SubRT1::encode(instr, buf),
        Code::ADD_SP_r_T3 => AddSpRT3::encode(instr, buf),
        Code::QDSUB_T1 => QdsubT1::encode(instr, buf),
        Code::LDRB_i_T3_off => LdrbIT3Off::encode(instr, buf),
        Code::SSAT16_T1 => Ssat16T1::encode(instr, buf),
        Code::LSR_MOV_rr_T2 => LsrMovRrT2::encode(instr, buf),
        Code::MOVS_rr_T2 => MovsRrT2::encode(instr, buf),
        Code::SUBS_r_T2_RRX => SubsRT2Rrx::encode(instr, buf),
        Code::ADD_r_T3 => AddRT3::encode(instr, buf),
        Code::SHASX_T1 => ShasxT1::encode(instr, buf),
        Code::STR_i_T3 => StrIT3::encode(instr, buf),
        Code::SMMLSR_T1 => SmmlsrT1::encode(instr, buf),
        Code::SMLAWB_T1 => SmlawbT1::encode(instr, buf),
        Code::SMLATB_T1 => SmlatbT1::encode(instr, buf),
        Code::SMULL_T1 => SmullT1::encode(instr, buf),
        Code::RORS_MOVS_rr_T2 => RorsMovsRrT2::encode(instr, buf),
        Code::LDRSH_i_T2_pre => LdrshIT2Pre::encode(instr, buf),
        Code::STRB_i_T3_offn => StrbIT3Offn::encode(instr, buf),
        Code::LDAEXB_T1 => LdaexbT1::encode(instr, buf),
        Code::LSLS_MOVS_r_T3 => LslsMovsRT3::encode(instr, buf),
        Code::LDR_i_T1 => LdrIT1::encode(instr, buf),
        Code::ADD_ADR_T1 => AddAdrT1::encode(instr, buf),
        Code::STRBT_T1 => StrbtT1::encode(instr, buf),
        Code::HLT_T1 => HltT1::encode(instr, buf),
        Code::SEV_T1 => SevT1::encode(instr, buf),
        Code::EOR_r_T2_RRX => EorRT2Rrx::encode(instr, buf),
        Code::MOVT_T1 => MovtT1::encode(instr, buf),
        Code::MRS_T1_AS => MrsT1As::encode(instr, buf),
        Code::CSDB_T1 => CsdbT1::encode(instr, buf),
        Code::ESB_T1 => EsbT1::encode(instr, buf),
        Code::CPSID_T1_AS => CpsidT1As::encode(instr, buf),
        Code::SMULWT_T1 => SmulwtT1::encode(instr, buf),
        Code::LDRSH_l_T1 => LdrshLT1::encode(instr, buf),
        Code::CMP_i_T2 => CmpIT2::encode(instr, buf),
        Code::UQADD16_T1 => Uqadd16T1::encode(instr, buf),
        Code::PKHBT_T1 => PkhbtT1::encode(instr, buf),
        Code::STLEXH_T1 => StlexhT1::encode(instr, buf),
        Code::SMLALDX_T1 => SmlaldxT1::encode(instr, buf),
        Code::USAT16_T1 => Usat16T1::encode(instr, buf),
        Code::SMLABB_T1 => SmlabbT1::encode(instr, buf),
        Code::SMLADX_T1 => SmladxT1::encode(instr, buf),
        Code::SBC_i_T1 => SbcIT1::encode(instr, buf),
        Code::STRB_i_T1 => StrbIT1::encode(instr, buf),
        Code::LDRD_l_T1_pre => LdrdLT1Pre::encode(instr, buf),
        Code::PLD_r_T1 => PldRT1::encode(instr, buf),
        Code::REV_T2 => RevT2::encode(instr, buf),
        Code::LSR_MOV_r_T3 => LsrMovRT3::encode(instr, buf),
        Code::SMLSDX_T1 => SmlsdxT1::encode(instr, buf),
        Code::STRH_r_T1 => StrhRT1::encode(instr, buf),
        Code::ADCS_r_T2_RRX => AdcsRT2Rrx::encode(instr, buf),
        Code::CMP_i_T1 => CmpIT1::encode(instr, buf),
        Code::ORN_r_T1_RRX => OrnRT1Rrx::encode(instr, buf),
        Code::LDC_i_T1_pre => LdcIT1Pre::encode(instr, buf),
        Code::SHADD16_T1 => Shadd16T1::encode(instr, buf),
        Code::REVSH_T1 => RevshT1::encode(instr, buf),
        Code::SADD8_T1 => Sadd8T1::encode(instr, buf),
        Code::SMLATT_T1 => SmlattT1::encode(instr, buf),
        Code::SBC_r_T2 => SbcRT2::encode(instr, buf),
        Code::CLZ_T1 => ClzT1::encode(instr, buf),
        Code::REV16_T2 => Rev16T2::encode(instr, buf),
        Code::SUB_r_T2_RRX => SubRT2Rrx::encode(instr, buf),
        Code::PSSBB_T1 => PssbbT1::encode(instr, buf),
        Code::SMUSDX_T1 => SmusdxT1::encode(instr, buf),
        Code::SRS_T2_AS => SrsT2As::encode(instr, buf),
        Code::CRC32B_T1 => Crc32bT1::encode(instr, buf),
        Code::STR_r_T1 => StrRT1::encode(instr, buf),
        Code::LDRSB_i_T2_post => LdrsbIT2Post::encode(instr, buf),
        Code::BIC_r_T2_RRX => BicRT2Rrx::encode(instr, buf),
        Code::LSL_MOV_r_T3 => LslMovRT3::encode(instr, buf),
        Code::SMLSLDX_T1 => SmlsldxT1::encode(instr, buf),
        Code::LSRS_MOVS_rr_T2 => LsrsMovsRrT2::encode(instr, buf),
        Code::SETPAN_T1 => SetpanT1::encode(instr, buf),
        Code::ADDS_i_T3 => AddsIT3::encode(instr, buf),
        Code::ADR_T1 => AdrT1::encode(instr, buf),
        Code::CMN_i_T1 => CmnIT1::encode(instr, buf),
        Code::SXTB_T2 => SxtbT2::encode(instr, buf),
        Code::RORS_MOVS_r_T3 => RorsMovsRT3::encode(instr, buf),
        Code::ADD_i_T3 => AddIT3::encode(instr, buf),
        Code::MOV_r_T3_RRX => MovRT3Rrx::encode(instr, buf),
        Code::B_T2 => BT2::encode(instr, buf),
        Code::SUB_i_T1 => SubIT1::encode(instr, buf),
        Code::RFE_T1_AS => RfeT1As::encode(instr, buf),
        Code::UHADD16_T1 => Uhadd16T1::encode(instr, buf),
        Code::STRB_i_T3_pre => StrbIT3Pre::encode(instr, buf),
        Code::CMP_r_T1 => CmpRT1::encode(instr, buf),
        Code::MOVS_r_T3 => MovsRT3::encode(instr, buf),
        Code::ERET_T1 => EretT1::encode(instr, buf),
        Code::STREXD_T1 => StrexdT1::encode(instr, buf),
        Code::MOV_r_T1 => MovRT1::encode(instr, buf),
        Code::USADA8_T1 => Usada8T1::encode(instr, buf),
        Code::MVNS_i_T1 => MvnsIT1::encode(instr, buf),
        Code::SMLSLD_T1 => SmlsldT1::encode(instr, buf),
        Code::CRC32CW_T1 => Crc32cwT1::encode(instr, buf),
        Code::ADC_r_T2 => AdcRT2::encode(instr, buf),
        Code::DBG_T1 => DbgT1::encode(instr, buf),
        Code::SBCS_i_T1 => SbcsIT1::encode(instr, buf),
        Code::LDRB_i_T2 => LdrbIT2::encode(instr, buf),
        Code::TEQ_r_T1_RRX => TeqRT1Rrx::encode(instr, buf),
        Code::RBIT_T1 => RbitT1::encode(instr, buf),
        Code::LDAH_T1 => LdahT1::encode(instr, buf),
        Code::LDRD_i_T1_pre => LdrdIT1Pre::encode(instr, buf),
        Code::CRC32W_T1 => Crc32wT1::encode(instr, buf),
        Code::PLD_l_T1 => PldLT1::encode(instr, buf),
        Code::PLD_i_T2 => PldIT2::encode(instr, buf),
        Code::LDRD_i_T1_off => LdrdIT1Off::encode(instr, buf),
        Code::ADC_r_T2_RRX => AdcRT2Rrx::encode(instr, buf),
        Code::RORS_MOV_rr_T1_ROR => RorsMovRrT1Ror::encode(instr, buf),
        Code::SUB_SP_r_T1_RRX => SubSpRT1Rrx::encode(instr, buf),
        Code::RSBS_r_T1 => RsbsRT1::encode(instr, buf),
        Code::MVN_r_T2_RRX => MvnRT2Rrx::encode(instr, buf),
        Code::PUSH_STMDB_T1 => PushStmdbT1::encode(instr, buf),
        Code::LDR_i_T4_post => LdrIT4Post::encode(instr, buf),
        Code::LSL_MOV_rr_T1_LSL => LslMovRrT1Lsl::encode(instr, buf),
        Code::SUB_r_T2 => SubRT2::encode(instr, buf),
        Code::LDR_l_T2 => LdrLT2::encode(instr, buf),
        Code::MVN_r_T1 => MvnRT1::encode(instr, buf),
        Code::SSUB16_T1 => Ssub16T1::encode(instr, buf),
        Code::ADDS_SP_r_T3_RRX => AddsSpRT3Rrx::encode(instr, buf),
        Code::LDRSH_i_T1 => LdrshIT1::encode(instr, buf),
        Code::CRC32H_T1 => Crc32hT1::encode(instr, buf),
        Code::LDRSH_r_T1 => LdrshRT1::encode(instr, buf),
        Code::SUBS_SP_r_T1_RRX => SubsSpRT1Rrx::encode(instr, buf),
        Code::LDAEXD_T1 => LdaexdT1::encode(instr, buf),
        Code::LDREXB_T1 => LdrexbT1::encode(instr, buf),
        Code::TST_r_T1 => TstRT1::encode(instr, buf),
        Code::LDRSB_i_T2_off => LdrsbIT2Off::encode(instr, buf),
        Code::CPSIE_T2_AS => CpsieT2As::encode(instr, buf),
        Code::ROR_MOV_r_T3 => RorMovRT3::encode(instr, buf),
        Code::SMMULR_T1 => SmmulrT1::encode(instr, buf),
        Code::LSLS_MOV_rr_T1_LSL => LslsMovRrT1Lsl::encode(instr, buf),
        Code::IT_T1 => ItT1::encode(instr, buf),
        Code::LDRH_i_T2 => LdrhIT2::encode(instr, buf),
        Code::SMUADX_T1 => SmuadxT1::encode(instr, buf),
        Code::POP_LDR_i_T4_post => PopLdrIT4Post::encode(instr, buf),
        Code::ADCS_i_T1 => AdcsIT1::encode(instr, buf),
        Code::SUB_SP_i_T2 => SubSpIT2::encode(instr, buf),
        Code::STRB_i_T2 => StrbIT2::encode(instr, buf),
        Code::UDIV_T1 => UdivT1::encode(instr, buf),
        Code::BKPT_T1 => BkptT1::encode(instr, buf),
        Code::LDRH_i_T3_off => LdrhIT3Off::encode(instr, buf),
        Code::PLDW_r_T1 => PldwRT1::encode(instr, buf),
        Code::LDRSH_i_T2_off => LdrshIT2Off::encode(instr, buf),
        Code::SUB_SP_r_T1 => SubSpRT1::encode(instr, buf),
        Code::STRH_i_T3_pre => StrhIT3Pre::encode(instr, buf),
        Code::PLI_i_T1 => PliIT1::encode(instr, buf),
        Code::USUB8_T1 => Usub8T1::encode(instr, buf),
        Code::UXTB_T1 => UxtbT1::encode(instr, buf),
        Code::STRD_i_T1_pre => StrdIT1Pre::encode(instr, buf),
        Code::QDADD_T1 => QdaddT1::encode(instr, buf),
        Code::SUBS_i_T3 => SubsIT3::encode(instr, buf),
        Code::ORR_r_T2 => OrrRT2::encode(instr, buf),
        Code::ADD_SP_i_T3 => AddSpIT3::encode(instr, buf),
        Code::CMP_r_T3 => CmpRT3::encode(instr, buf),
        Code::EOR_r_T2 => EorRT2::encode(instr, buf),
        Code::LDC_l_T1_post => LdcLT1Post::encode(instr, buf),
        Code::DCPS3_T1 => Dcps3T1::encode(instr, buf),
        Code::ASRS_MOVS_rr_T2 => AsrsMovsRrT2::encode(instr, buf),
        Code::CMN_r_T2 => CmnRT2::encode(instr, buf),
        Code::USUB16_T1 => Usub16T1::encode(instr, buf),
        Code::LDRH_l_T1 => LdrhLT1::encode(instr, buf),
        Code::UASX_T1 => UasxT1::encode(instr, buf),
        Code::EORS_r_T2 => EorsRT2::encode(instr, buf),
        Code::RSB_i_T2 => RsbIT2::encode(instr, buf),
        Code::SMULWB_T1 => SmulwbT1::encode(instr, buf),
        Code::ASR_MOV_r_T2 => AsrMovRT2::encode(instr, buf),
        Code::LDRB_r_T2 => LdrbRT2::encode(instr, buf),
        Code::CLRBHB_T1 => ClrbhbT1::encode(instr, buf),
        Code::STLH_T1 => StlhT1::encode(instr, buf),
        Code::SSUB8_T1 => Ssub8T1::encode(instr, buf),
        Code::LDREXD_T1 => LdrexdT1::encode(instr, buf),
        Code::SMLAD_T1 => SmladT1::encode(instr, buf),
        Code::STRH_r_T2 => StrhRT2::encode(instr, buf),
        Code::RSBS_r_T1_RRX => RsbsRT1Rrx::encode(instr, buf),
        Code::ROR_MOV_rr_T1_ROR => RorMovRrT1Ror::encode(instr, buf),
        Code::UHSAX_T1 => UhsaxT1::encode(instr, buf),
        Code::WFI_T2 => WfiT2::encode(instr, buf),
        Code::STR_i_T2 => StrIT2::encode(instr, buf),
        Code::MOV_rr_T1_LSR => MovRrT1Lsr::encode(instr, buf),
        Code::UDF_T2 => UdfT2::encode(instr, buf),
        Code::ADD_i_T4 => AddIT4::encode(instr, buf),
        Code::ORNS_r_T1 => OrnsRT1::encode(instr, buf),
        Code::EOR_i_T1 => EorIT1::encode(instr, buf),
        Code::STR_i_T1 => StrIT1::encode(instr, buf),
        Code::STM_T2 => StmT2::encode(instr, buf),
        Code::LSR_MOV_rr_T1_LSR => LsrMovRrT1Lsr::encode(instr, buf),
        Code::SUBS_r_T2 => SubsRT2::encode(instr, buf),
        Code::MVN_r_T2 => MvnRT2::encode(instr, buf),
        Code::SMULBT_T1 => SmulbtT1::encode(instr, buf),
        Code::SXTB16_T1 => Sxtb16T1::encode(instr, buf),
        Code::SMLALTB_T1 => SmlaltbT1::encode(instr, buf),
        Code::PUSH_T1 => PushT1::encode(instr, buf),
        Code::STRB_i_T3_post => StrbIT3Post::encode(instr, buf),
        Code::LDRSB_r_T2 => LdrsbRT2::encode(instr, buf),
        Code::MVN_i_T1 => MvnIT1::encode(instr, buf),
        Code::SMLABT_T1 => SmlabtT1::encode(instr, buf),
        Code::CPSID_T2_ASM => CpsidT2Asm::encode(instr, buf),
        Code::CMN_r_T2_RRX => CmnRT2Rrx::encode(instr, buf),
        Code::REV_T1 => RevT1::encode(instr, buf),
        Code::ISB_T1 => IsbT1::encode(instr, buf),
        Code::RSB_i_T1 => RsbIT1::encode(instr, buf),
        Code::LSRS_MOVS_r_T3 => LsrsMovsRT3::encode(instr, buf),
        Code::LDRSH_r_T2 => LdrshRT2::encode(instr, buf),
        Code::LDRD_l_T1_post => LdrdLT1Post::encode(instr, buf),
        Code::SXTAB_T1 => SxtabT1::encode(instr, buf),
        Code::PLDW_i_T1 => PldwIT1::encode(instr, buf),
        Code::STRHT_T1 => StrhtT1::encode(instr, buf),
        Code::SXTB_T1 => SxtbT1::encode(instr, buf),
        Code::EORS_r_T2_RRX => EorsRT2Rrx::encode(instr, buf),
        Code::CPS_T2_AS => CpsT2As::encode(instr, buf),
        Code::ADC_i_T1 => AdcIT1::encode(instr, buf),
        Code::BFI_T1 => BfiT1::encode(instr, buf),
        Code::POP_LDM_T2 => PopLdmT2::encode(instr, buf),
        Code::UMLAL_T1 => UmlalT1::encode(instr, buf),
        Code::YIELD_T1 => YieldT1::encode(instr, buf),
        Code::MOV_rr_T1_ROR => MovRrT1Ror::encode(instr, buf),
        Code::SMLALD_T1 => SmlaldT1::encode(instr, buf),
        Code::PLDW_i_T2 => PldwIT2::encode(instr, buf),
        Code::LSL_MOV_r_T2 => LslMovRT2::encode(instr, buf),
        Code::ASRS_MOVS_r_T3 => AsrsMovsRT3::encode(instr, buf),
        Code::TBH_T1 => TbhT1::encode(instr, buf),
        Code::TSB_T1 => TsbT1::encode(instr, buf),
        Code::ORR_r_T2_RRX => OrrRT2Rrx::encode(instr, buf),
        Code::SHADD8_T1 => Shadd8T1::encode(instr, buf),
        Code::MOV_i_T1 => MovIT1::encode(instr, buf),
        Code::STRD_i_T1_off => StrdIT1Off::encode(instr, buf),
        Code::MOVS_i_T2 => MovsIT2::encode(instr, buf),
        Code::LDRSBT_T1 => LdrsbtT1::encode(instr, buf),
        Code::STREXB_T1 => StrexbT1::encode(instr, buf),
        Code::LDAEXH_T1 => LdaexhT1::encode(instr, buf),
        Code::UXTAB16_T1 => Uxtab16T1::encode(instr, buf),
        Code::DCPS1_T1 => Dcps1T1::encode(instr, buf),
        Code::ASRS_MOV_r_T2 => AsrsMovRT2::encode(instr, buf),
        Code::LSRS_MOV_rr_T1_LSR => LsrsMovRrT1Lsr::encode(instr, buf),
        Code::SBCS_r_T2_RRX => SbcsRT2Rrx::encode(instr, buf),
        Code::STREX_T1 => StrexT1::encode(instr, buf),
        Code::MVNS_r_T2_RRX => MvnsRT2Rrx::encode(instr, buf),
        Code::PKHTB_T1 => PkhtbT1::encode(instr, buf),
        Code::UQSAX_T1 => UqsaxT1::encode(instr, buf),
        Code::ORRS_r_T2_RRX => OrrsRT2Rrx::encode(instr, buf),
        Code::ADD_r_T1 => AddRT1::encode(instr, buf),
        Code::TEQ_i_T1 => TeqIT1::encode(instr, buf),
        Code::ADD_i_T1 => AddIT1::encode(instr, buf),
        Code::CBNZ_T1 => CbnzT1::encode(instr, buf),
        Code::LDRHT_T1 => LdrhtT1::encode(instr, buf),
        Code::STR_r_T2 => StrRT2::encode(instr, buf),
        Code::LDRB_i_T3_pre => LdrbIT3Pre::encode(instr, buf),
        Code::B_T1 => BT1::encode(instr, buf),
        Code::B_T4 => BT4::encode(instr, buf),
        Code::LDRB_i_T3_post => LdrbIT3Post::encode(instr, buf),
        Code::TBB_T1 => TbbT1::encode(instr, buf),
        Code::ROR_MOV_rr_T2 => RorMovRrT2::encode(instr, buf),
        Code::QASX_T1 => QasxT1::encode(instr, buf),
        Code::USAX_T1 => UsaxT1::encode(instr, buf),
        Code::LDRSB_i_T1 => LdrsbIT1::encode(instr, buf),
        Code::LDRH_i_T1 => LdrhIT1::encode(instr, buf),
        Code::LDRSB_i_T2_pre => LdrsbIT2Pre::encode(instr, buf),
        Code::SMC_T1_AS => SmcT1As::encode(instr, buf),
        Code::MOV_r_T3 => MovRT3::encode(instr, buf),
        Code::BICS_i_T1 => BicsIT1::encode(instr, buf),
        Code::EOR_r_T1 => EorRT1::encode(instr, buf),
        Code::UADD8_T1 => Uadd8T1::encode(instr, buf),
        Code::B_T3 => BT3::encode(instr, buf),
        Code::SMLALTT_T1 => SmlalttT1::encode(instr, buf),
        Code::BIC_r_T1 => BicRT1::encode(instr, buf),
        Code::SMMLS_T1 => SmmlsT1::encode(instr, buf),
        Code::RSB_r_T1 => RsbRT1::encode(instr, buf),
        Code::UQSUB8_T1 => Uqsub8T1::encode(instr, buf),
        Code::RSB_r_T1_RRX => RsbRT1Rrx::encode(instr, buf),
        Code::SASX_T1 => SasxT1::encode(instr, buf),
        Code::MCR_T1 => McrT1::encode(instr, buf),
        Code::CMP_r_T3_RRX => CmpRT3Rrx::encode(instr, buf),
        Code::LDMDB_T1 => LdmdbT1::encode(instr, buf),
        Code::LDC_l_T1_pre => LdcLT1Pre::encode(instr, buf),
        Code::SETEND_T1 => SetendT1::encode(instr, buf),
        Code::STRH_i_T3_post => StrhIT3Post::encode(instr, buf),
        Code::ASR_MOV_r_T3 => AsrMovRT3::encode(instr, buf),
        Code::SUB_i_T3 => SubIT3::encode(instr, buf),
        Code::SEVL_T1 => SevlT1::encode(instr, buf),
        Code::REVSH_T2 => RevshT2::encode(instr, buf),
        Code::PLI_r_T1 => PliRT1::encode(instr, buf),
        Code::MRC_T1 => MrcT1::encode(instr, buf),
        Code::ORR_i_T1 => OrrIT1::encode(instr, buf),
        Code::UADD16_T1 => Uadd16T1::encode(instr, buf),
        Code::STRH_i_T2 => StrhIT2::encode(instr, buf),
        Code::LDRSH_i_T2_post => LdrshIT2Post::encode(instr, buf),
        Code::SUBS_SP_i_T2 => SubsSpIT2::encode(instr, buf),
        Code::SSAX_T1 => SsaxT1::encode(instr, buf),
        Code::STC_T1_pre => StcT1Pre::encode(instr, buf),
        Code::LDAEX_T1 => LdaexT1::encode(instr, buf),
        Code::MOV_rr_T2 => MovRrT2::encode(instr, buf),
        Code::STRH_i_T3_offn => StrhIT3Offn::encode(instr, buf),
        Code::SADD16_T1 => Sadd16T1::encode(instr, buf),
        Code::SMUAD_T1 => SmuadT1::encode(instr, buf),
        Code::LDREXH_T1 => LdrexhT1::encode(instr, buf),
        Code::ADD_SP_i_T1 => AddSpIT1::encode(instr, buf),
        Code::LDR_i_T4_off => LdrIT4Off::encode(instr, buf),
        Code::ASR_MOV_rr_T2 => AsrMovRrT2::encode(instr, buf),
        Code::ADD_r_T2 => AddRT2::encode(instr, buf),
        Code::ADCS_r_T2 => AdcsRT2::encode(instr, buf),
        Code::ORNS_r_T1_RRX => OrnsRT1Rrx::encode(instr, buf),
        Code::CPSIE_T2_ASM => CpsieT2Asm::encode(instr, buf),
        Code::STRD_i_T1_post => StrdIT1Post::encode(instr, buf),
        Code::UXTH_T1 => UxthT1::encode(instr, buf),
        Code::SEL_T1 => SelT1::encode(instr, buf),
        Code::SBCS_r_T2 => SbcsRT2::encode(instr, buf),
        Code::LDRB_i_T1 => LdrbIT1::encode(instr, buf),
        Code::LDA_T1 => LdaT1::encode(instr, buf),
        Code::LSR_MOV_r_T2 => LsrMovRT2::encode(instr, buf),
        Code::LDC_i_T1_post => LdcIT1Post::encode(instr, buf),
        Code::UQADD8_T1 => Uqadd8T1::encode(instr, buf),
        Code::LDC_i_T1_off => LdcIT1Off::encode(instr, buf),
        Code::SSBB_T1 => SsbbT1::encode(instr, buf),
        Code::MUL_T2 => MulT2::encode(instr, buf),
        Code::STMDB_T1 => StmdbT1::encode(instr, buf),
        Code::BICS_r_T2_RRX => BicsRT2Rrx::encode(instr, buf),
        Code::SUB_ADR_T2 => SubAdrT2::encode(instr, buf),
        Code::WFE_T1 => WfeT1::encode(instr, buf),
        Code::MOVS_r_T3_RRX => MovsRT3Rrx::encode(instr, buf),
        Code::LDR_i_T4_pre => LdrIT4Pre::encode(instr, buf),
        Code::LDC_i_T1_unind => LdcIT1Unind::encode(instr, buf),
        Code::UHSUB16_T1 => Uhsub16T1::encode(instr, buf),
        Code::STLEX_T1 => StlexT1::encode(instr, buf),
        Code::STR_i_T4_post => StrIT4Post::encode(instr, buf),
        Code::BXJ_T1 => BxjT1::encode(instr, buf),
        Code::TST_r_T2_RRX => TstRT2Rrx::encode(instr, buf),
        Code::CBZ_T1 => CbzT1::encode(instr, buf),
        Code::AND_i_T1 => AndIT1::encode(instr, buf),
        Code::SSAT_T1_LSL => SsatT1Lsl::encode(instr, buf),
        Code::LDR_r_T2 => LdrRT2::encode(instr, buf),
        Code::AND_r_T2 => AndRT2::encode(instr, buf),
        Code::ORR_r_T1 => OrrRT1::encode(instr, buf),
        Code::SDIV_T1 => SdivT1::encode(instr, buf),
        Code::LDR_i_T2 => LdrIT2::encode(instr, buf),
        Code::UXTB_T2 => UxtbT2::encode(instr, buf),
        Code::LDRBT_T1 => LdrbtT1::encode(instr, buf),
        Code::SHSAX_T1 => ShsaxT1::encode(instr, buf),
        Code::ASRS_MOV_rr_T1_ASR => AsrsMovRrT1Asr::encode(instr, buf),
        Code::ADD_SP_i_T4 => AddSpIT4::encode(instr, buf),
        Code::UQSUB16_T1 => Uqsub16T1::encode(instr, buf),
        Code::NOP_T1 => NopT1::encode(instr, buf),
        Code::SMMUL_T1 => SmmulT1::encode(instr, buf),
        Code::AND_r_T2_RRX => AndRT2Rrx::encode(instr, buf),
        Code::PUSH_STR_i_T4_pre => PushStrIT4Pre::encode(instr, buf),
        Code::POP_T1 => PopT1::encode(instr, buf),
        Code::LSL_MOV_rr_T2 => LslMovRrT2::encode(instr, buf),
        Code::SHSUB16_T1 => Shsub16T1::encode(instr, buf),
        Code::PLD_i_T1 => PldIT1::encode(instr, buf),
        Code::SEV_T2 => SevT2::encode(instr, buf),
        Code::ANDS_i_T1 => AndsIT1::encode(instr, buf),
        Code::TEQ_r_T1 => TeqRT1::encode(instr, buf),
        Code::STREXH_T1 => StrexhT1::encode(instr, buf),
        Code::ADDS_r_T3_RRX => AddsRT3Rrx::encode(instr, buf),
        Code::PLI_i_T2 => PliIT2::encode(instr, buf),
        Code::SMLALBB_T1 => SmlalbbT1::encode(instr, buf),
        Code::ORRS_i_T1 => OrrsIT1::encode(instr, buf),
        Code::ORN_i_T1 => OrnIT1::encode(instr, buf),
        Code::QSUB8_T1 => Qsub8T1::encode(instr, buf),
        Code::UHSUB8_T1 => Uhsub8T1::encode(instr, buf),
        Code::QSUB16_T1 => Qsub16T1::encode(instr, buf),
        Code::SUB_i_T2 => SubIT2::encode(instr, buf),
        Code::STR_i_T4_pre => StrIT4Pre::encode(instr, buf),
        Code::LDRH_i_T3_post => LdrhIT3Post::encode(instr, buf),
        Code::MRRC_T1 => MrrcT1::encode(instr, buf),
        Code::MLA_T1 => MlaT1::encode(instr, buf),
        Code::STLB_T1 => StlbT1::encode(instr, buf),
        Code::LDRH_r_T1 => LdrhRT1::encode(instr, buf),
        Code::LDRH_i_T3_pre => LdrhIT3Pre::encode(instr, buf),
        Code::SXTH_T1 => SxthT1::encode(instr, buf),
        Code::BL_i_T1 => BlIT1::encode(instr, buf),
        Code::LDRD_i_T1_post => LdrdIT1Post::encode(instr, buf),
        Code::SMLAL_T1 => SmlalT1::encode(instr, buf),
        Code::DCPS2_T1 => Dcps2T1::encode(instr, buf),
        Code::MCRR_T1 => McrrT1::encode(instr, buf),
        Code::LSLS_MOV_r_T2 => LslsMovRT2::encode(instr, buf),
        Code::STL_T1 => StlT1::encode(instr, buf),
        Code::STRH_i_T1 => StrhIT1::encode(instr, buf),
        Code::SUB_i_T4 => SubIT4::encode(instr, buf),
        Code::LDR_i_T3 => LdrIT3::encode(instr, buf),
        Code::YIELD_T2 => YieldT2::encode(instr, buf),
        Code::RRX_MOV_r_T3_RRX => RrxMovRT3Rrx::encode(instr, buf),
        Code::DMB_T1 => DmbT1::encode(instr, buf),
        Code::SRS_T1_AS => SrsT1As::encode(instr, buf),
        Code::CRC32CB_T1 => Crc32cbT1::encode(instr, buf),
        Code::LDRSB_r_T1 => LdrsbRT1::encode(instr, buf),
        Code::WFE_T2 => WfeT2::encode(instr, buf),
        Code::QSAX_T1 => QsaxT1::encode(instr, buf),
        Code::USAT_T1_LSL => UsatT1Lsl::encode(instr, buf),
        Code::BIC_i_T1 => BicIT1::encode(instr, buf),
    }
}

pub fn encode_block(instr: &mut Instruction, buf: &mut Vec<u8>, labels: &HashMap<u64, u64>) -> Result<usize> {
    match instr.code {
        Code::Invalid => todo!(),
        Code::AND_r_T1 => AndRT1::encode_block(instr, buf, labels),
        Code::LSRS_MOV_r_T2 => LsrsMovRT2::encode_block(instr, buf, labels),
        Code::BICS_r_T2 => BicsRT2::encode_block(instr, buf, labels),
        Code::ORNS_i_T1 => OrnsIT1::encode_block(instr, buf, labels),
        Code::SMMLA_T1 => SmmlaT1::encode_block(instr, buf, labels),
        Code::SHSUB8_T1 => Shsub8T1::encode_block(instr, buf, labels),
        Code::QADD8_T1 => Qadd8T1::encode_block(instr, buf, labels),
        Code::CMP_r_T2 => CmpRT2::encode_block(instr, buf, labels),
        Code::SMMLAR_T1 => SmmlarT1::encode_block(instr, buf, labels),
        Code::CPSID_T2_AS => CpsidT2As::encode_block(instr, buf, labels),
        Code::LDRB_r_T1 => LdrbRT1::encode_block(instr, buf, labels),
        Code::BLX_r_T1 => BlxRT1::encode_block(instr, buf, labels),
        Code::ADD_i_T2 => AddIT2::encode_block(instr, buf, labels),
        Code::ADC_r_T1 => AdcRT1::encode_block(instr, buf, labels),
        Code::LDR_r_T1 => LdrRT1::encode_block(instr, buf, labels),
        Code::BX_T1 => BxT1::encode_block(instr, buf, labels),
        Code::LDAB_T1 => LdabT1::encode_block(instr, buf, labels),
        Code::LDC_l_T1_unind => LdcLT1Unind::encode_block(instr, buf, labels),
        Code::ORN_r_T1 => OrnRT1::encode_block(instr, buf, labels),
        Code::ADD_ADR_T3 => AddAdrT3::encode_block(instr, buf, labels),
        Code::LSLS_MOVS_rr_T2 => LslsMovsRrT2::encode_block(instr, buf, labels),
        Code::LDREX_T1 => LdrexT1::encode_block(instr, buf, labels),
        Code::UXTH_T2 => UxthT2::encode_block(instr, buf, labels),
        Code::LDRSHT_T1 => LdrshtT1::encode_block(instr, buf, labels),
        Code::SMULTT_T1 => SmulttT1::encode_block(instr, buf, labels),
        Code::STC_T1_unind => StcT1Unind::encode_block(instr, buf, labels),
        Code::CPSIE_T1_AS => CpsieT1As::encode_block(instr, buf, labels),
        Code::TST_r_T2 => TstRT2::encode_block(instr, buf, labels),
        Code::TST_i_T1 => TstIT1::encode_block(instr, buf, labels),
        Code::STR_i_T4_off => StrIT4Off::encode_block(instr, buf, labels),
        Code::STC_T1_off => StcT1Off::encode_block(instr, buf, labels),
        Code::QADD16_T1 => Qadd16T1::encode_block(instr, buf, labels),
        Code::LDRH_r_T2 => LdrhRT2::encode_block(instr, buf, labels),
        Code::MSR_r_T1_AS => MsrRT1As::encode_block(instr, buf, labels),
        Code::MOV_rr_T1_ASR => MovRrT1Asr::encode_block(instr, buf, labels),
        Code::REV16_T1 => Rev16T1::encode_block(instr, buf, labels),
        Code::RSBS_i_T2 => RsbsIT2::encode_block(instr, buf, labels),
        Code::BFC_T1 => BfcT1::encode_block(instr, buf, labels),
        Code::ADD_r_T3_RRX => AddRT3Rrx::encode_block(instr, buf, labels),
        Code::UHADD8_T1 => Uhadd8T1::encode_block(instr, buf, labels),
        Code::SEVL_T2 => SevlT2::encode_block(instr, buf, labels),
        Code::STC_T1_post => StcT1Post::encode_block(instr, buf, labels),
        Code::SB_T1 => SbT1::encode_block(instr, buf, labels),
        Code::STRB_r_T1 => StrbRT1::encode_block(instr, buf, labels),
        Code::PLI_i_T3 => PliIT3::encode_block(instr, buf, labels),
        Code::ASR_MOV_rr_T1_ASR => AsrMovRrT1Asr::encode_block(instr, buf, labels),
        Code::SMLSD_T1 => SmlsdT1::encode_block(instr, buf, labels),
        Code::STLEXD_T1 => StlexdT1::encode_block(instr, buf, labels),
        Code::SMLAWT_T1 => SmlawtT1::encode_block(instr, buf, labels),
        Code::SUBS_PC_T5_AS => SubsPcT5As::encode_block(instr, buf, labels),
        Code::UDF_T1 => UdfT1::encode_block(instr, buf, labels),
        Code::RRXS_MOVS_r_T3_RRX => RrxsMovsRT3Rrx::encode_block(instr, buf, labels),
        Code::MUL_T1 => MulT1::encode_block(instr, buf, labels),
        Code::MOV_r_T2 => MovRT2::encode_block(instr, buf, labels),
        Code::DSB_T1 => DsbT1::encode_block(instr, buf, labels),
        Code::STM_T1 => StmT1::encode_block(instr, buf, labels),
        Code::LDRT_T1 => LdrtT1::encode_block(instr, buf, labels),
        Code::SUB_SP_i_T1 => SubSpIT1::encode_block(instr, buf, labels),
        Code::NOP_T2 => NopT2::encode_block(instr, buf, labels),
        Code::UXTB16_T1 => Uxtb16T1::encode_block(instr, buf, labels),
        Code::STRB_r_T2 => StrbRT2::encode_block(instr, buf, labels),
        Code::HVC_T1 => HvcT1::encode_block(instr, buf, labels),
        Code::SXTAH_T1 => SxtahT1::encode_block(instr, buf, labels),
        Code::UXTAB_T1 => UxtabT1::encode_block(instr, buf, labels),
        Code::MOV_rr_T1_LSL => MovRrT1Lsl::encode_block(instr, buf, labels),
        Code::MRS_br_T1_AS => MrsBrT1As::encode_block(instr, buf, labels),
        Code::SUBS_SP_r_T1 => SubsSpRT1::encode_block(instr, buf, labels),
        Code::LDM_T1 => LdmT1::encode_block(instr, buf, labels),
        Code::ADD_SP_r_T3_RRX => AddSpRT3Rrx::encode_block(instr, buf, labels),
        Code::SMUSD_T1 => SmusdT1::encode_block(instr, buf, labels),
        Code::SBC_r_T2_RRX => SbcRT2Rrx::encode_block(instr, buf, labels),
        Code::USAD8_T1 => Usad8T1::encode_block(instr, buf, labels),
        Code::ADDS_r_T3 => AddsRT3::encode_block(instr, buf, labels),
        Code::QADD_T1 => QaddT1::encode_block(instr, buf, labels),
        Code::MOV_i_T2 => MovIT2::encode_block(instr, buf, labels),
        Code::STRT_T1 => StrtT1::encode_block(instr, buf, labels),
        Code::EORS_i_T1 => EorsIT1::encode_block(instr, buf, labels),
        Code::SVC_T1 => SvcT1::encode_block(instr, buf, labels),
        Code::ORRS_r_T2 => OrrsRT2::encode_block(instr, buf, labels),
        Code::SXTAB16_T1 => Sxtab16T1::encode_block(instr, buf, labels),
        Code::MOV_i_T3 => MovIT3::encode_block(instr, buf, labels),
        Code::CMN_r_T1 => CmnRT1::encode_block(instr, buf, labels),
        Code::LDRSB_l_T1 => LdrsbLT1::encode_block(instr, buf, labels),
        Code::ADR_T2 => AdrT2::encode_block(instr, buf, labels),
        Code::SUB_SP_i_T3 => SubSpIT3::encode_block(instr, buf, labels),
        Code::UMAAL_T1 => UmaalT1::encode_block(instr, buf, labels),
        Code::ANDS_r_T2 => AndsRT2::encode_block(instr, buf, labels),
        Code::UHASX_T1 => UhasxT1::encode_block(instr, buf, labels),
        Code::LDRB_l_T1 => LdrbLT1::encode_block(instr, buf, labels),
        Code::MVNS_r_T2 => MvnsRT2::encode_block(instr, buf, labels),
        Code::LDM_T2 => LdmT2::encode_block(instr, buf, labels),
        Code::BIC_r_T2 => BicRT2::encode_block(instr, buf, labels),
        Code::ADDS_SP_r_T3 => AddsSpRT3::encode_block(instr, buf, labels),
        Code::QSUB_T1 => QsubT1::encode_block(instr, buf, labels),
        Code::SBFX_T1 => SbfxT1::encode_block(instr, buf, labels),
        Code::STLEXB_T1 => StlexbT1::encode_block(instr, buf, labels),
        Code::ADD_SP_r_T1 => AddSpRT1::encode_block(instr, buf, labels),
        Code::ADDS_SP_i_T3 => AddsSpIT3::encode_block(instr, buf, labels),
        Code::LDC_l_T1_off => LdcLT1Off::encode_block(instr, buf, labels),
        Code::CRC32CH_T1 => Crc32chT1::encode_block(instr, buf, labels),
        Code::SSAT_T1_ASR => SsatT1Asr::encode_block(instr, buf, labels),
        Code::SBC_r_T1 => SbcRT1::encode_block(instr, buf, labels),
        Code::MSR_br_T1_AS => MsrBrT1As::encode_block(instr, buf, labels),
        Code::RFE_T2_AS => RfeT2As::encode_block(instr, buf, labels),
        Code::LDRD_l_T1_off => LdrdLT1Off::encode_block(instr, buf, labels),
        Code::MLS_T1 => MlsT1::encode_block(instr, buf, labels),
        Code::ADD_SP_i_T2 => AddSpIT2::encode_block(instr, buf, labels),
        Code::ADR_T3 => AdrT3::encode_block(instr, buf, labels),
        Code::SMLALBT_T1 => SmlalbtT1::encode_block(instr, buf, labels),
        Code::SMULBB_T1 => SmulbbT1::encode_block(instr, buf, labels),
        Code::UMULL_T1 => UmullT1::encode_block(instr, buf, labels),
        Code::UXTAH_T1 => UxtahT1::encode_block(instr, buf, labels),
        Code::UQASX_T1 => UqasxT1::encode_block(instr, buf, labels),
        Code::UBFX_T1 => UbfxT1::encode_block(instr, buf, labels),
        Code::ANDS_r_T2_RRX => AndsRT2Rrx::encode_block(instr, buf, labels),
        Code::BL_i_T2 => BlIT2::encode_block(instr, buf, labels),
        Code::USAT_T1_ASR => UsatT1Asr::encode_block(instr, buf, labels),
        Code::SMULTB_T1 => SmultbT1::encode_block(instr, buf, labels),
        Code::SXTH_T2 => SxthT2::encode_block(instr, buf, labels),
        Code::ADD_SP_r_T2 => AddSpRT2::encode_block(instr, buf, labels),
        Code::WFI_T1 => WfiT1::encode_block(instr, buf, labels),
        Code::CLREX_T1 => ClrexT1::encode_block(instr, buf, labels),
        Code::SUB_r_T1 => SubRT1::encode_block(instr, buf, labels),
        Code::ADD_SP_r_T3 => AddSpRT3::encode_block(instr, buf, labels),
        Code::QDSUB_T1 => QdsubT1::encode_block(instr, buf, labels),
        Code::LDRB_i_T3_off => LdrbIT3Off::encode_block(instr, buf, labels),
        Code::SSAT16_T1 => Ssat16T1::encode_block(instr, buf, labels),
        Code::LSR_MOV_rr_T2 => LsrMovRrT2::encode_block(instr, buf, labels),
        Code::MOVS_rr_T2 => MovsRrT2::encode_block(instr, buf, labels),
        Code::SUBS_r_T2_RRX => SubsRT2Rrx::encode_block(instr, buf, labels),
        Code::ADD_r_T3 => AddRT3::encode_block(instr, buf, labels),
        Code::SHASX_T1 => ShasxT1::encode_block(instr, buf, labels),
        Code::STR_i_T3 => StrIT3::encode_block(instr, buf, labels),
        Code::SMMLSR_T1 => SmmlsrT1::encode_block(instr, buf, labels),
        Code::SMLAWB_T1 => SmlawbT1::encode_block(instr, buf, labels),
        Code::SMLATB_T1 => SmlatbT1::encode_block(instr, buf, labels),
        Code::SMULL_T1 => SmullT1::encode_block(instr, buf, labels),
        Code::RORS_MOVS_rr_T2 => RorsMovsRrT2::encode_block(instr, buf, labels),
        Code::LDRSH_i_T2_pre => LdrshIT2Pre::encode_block(instr, buf, labels),
        Code::STRB_i_T3_offn => StrbIT3Offn::encode_block(instr, buf, labels),
        Code::LDAEXB_T1 => LdaexbT1::encode_block(instr, buf, labels),
        Code::LSLS_MOVS_r_T3 => LslsMovsRT3::encode_block(instr, buf, labels),
        Code::LDR_i_T1 => LdrIT1::encode_block(instr, buf, labels),
        Code::ADD_ADR_T1 => AddAdrT1::encode_block(instr, buf, labels),
        Code::STRBT_T1 => StrbtT1::encode_block(instr, buf, labels),
        Code::HLT_T1 => HltT1::encode_block(instr, buf, labels),
        Code::SEV_T1 => SevT1::encode_block(instr, buf, labels),
        Code::EOR_r_T2_RRX => EorRT2Rrx::encode_block(instr, buf, labels),
        Code::MOVT_T1 => MovtT1::encode_block(instr, buf, labels),
        Code::MRS_T1_AS => MrsT1As::encode_block(instr, buf, labels),
        Code::CSDB_T1 => CsdbT1::encode_block(instr, buf, labels),
        Code::ESB_T1 => EsbT1::encode_block(instr, buf, labels),
        Code::CPSID_T1_AS => CpsidT1As::encode_block(instr, buf, labels),
        Code::SMULWT_T1 => SmulwtT1::encode_block(instr, buf, labels),
        Code::LDRSH_l_T1 => LdrshLT1::encode_block(instr, buf, labels),
        Code::CMP_i_T2 => CmpIT2::encode_block(instr, buf, labels),
        Code::UQADD16_T1 => Uqadd16T1::encode_block(instr, buf, labels),
        Code::PKHBT_T1 => PkhbtT1::encode_block(instr, buf, labels),
        Code::STLEXH_T1 => StlexhT1::encode_block(instr, buf, labels),
        Code::SMLALDX_T1 => SmlaldxT1::encode_block(instr, buf, labels),
        Code::USAT16_T1 => Usat16T1::encode_block(instr, buf, labels),
        Code::SMLABB_T1 => SmlabbT1::encode_block(instr, buf, labels),
        Code::SMLADX_T1 => SmladxT1::encode_block(instr, buf, labels),
        Code::SBC_i_T1 => SbcIT1::encode_block(instr, buf, labels),
        Code::STRB_i_T1 => StrbIT1::encode_block(instr, buf, labels),
        Code::LDRD_l_T1_pre => LdrdLT1Pre::encode_block(instr, buf, labels),
        Code::PLD_r_T1 => PldRT1::encode_block(instr, buf, labels),
        Code::REV_T2 => RevT2::encode_block(instr, buf, labels),
        Code::LSR_MOV_r_T3 => LsrMovRT3::encode_block(instr, buf, labels),
        Code::SMLSDX_T1 => SmlsdxT1::encode_block(instr, buf, labels),
        Code::STRH_r_T1 => StrhRT1::encode_block(instr, buf, labels),
        Code::ADCS_r_T2_RRX => AdcsRT2Rrx::encode_block(instr, buf, labels),
        Code::CMP_i_T1 => CmpIT1::encode_block(instr, buf, labels),
        Code::ORN_r_T1_RRX => OrnRT1Rrx::encode_block(instr, buf, labels),
        Code::LDC_i_T1_pre => LdcIT1Pre::encode_block(instr, buf, labels),
        Code::SHADD16_T1 => Shadd16T1::encode_block(instr, buf, labels),
        Code::REVSH_T1 => RevshT1::encode_block(instr, buf, labels),
        Code::SADD8_T1 => Sadd8T1::encode_block(instr, buf, labels),
        Code::SMLATT_T1 => SmlattT1::encode_block(instr, buf, labels),
        Code::SBC_r_T2 => SbcRT2::encode_block(instr, buf, labels),
        Code::CLZ_T1 => ClzT1::encode_block(instr, buf, labels),
        Code::REV16_T2 => Rev16T2::encode_block(instr, buf, labels),
        Code::SUB_r_T2_RRX => SubRT2Rrx::encode_block(instr, buf, labels),
        Code::PSSBB_T1 => PssbbT1::encode_block(instr, buf, labels),
        Code::SMUSDX_T1 => SmusdxT1::encode_block(instr, buf, labels),
        Code::SRS_T2_AS => SrsT2As::encode_block(instr, buf, labels),
        Code::CRC32B_T1 => Crc32bT1::encode_block(instr, buf, labels),
        Code::STR_r_T1 => StrRT1::encode_block(instr, buf, labels),
        Code::LDRSB_i_T2_post => LdrsbIT2Post::encode_block(instr, buf, labels),
        Code::BIC_r_T2_RRX => BicRT2Rrx::encode_block(instr, buf, labels),
        Code::LSL_MOV_r_T3 => LslMovRT3::encode_block(instr, buf, labels),
        Code::SMLSLDX_T1 => SmlsldxT1::encode_block(instr, buf, labels),
        Code::LSRS_MOVS_rr_T2 => LsrsMovsRrT2::encode_block(instr, buf, labels),
        Code::SETPAN_T1 => SetpanT1::encode_block(instr, buf, labels),
        Code::ADDS_i_T3 => AddsIT3::encode_block(instr, buf, labels),
        Code::ADR_T1 => AdrT1::encode_block(instr, buf, labels),
        Code::CMN_i_T1 => CmnIT1::encode_block(instr, buf, labels),
        Code::SXTB_T2 => SxtbT2::encode_block(instr, buf, labels),
        Code::RORS_MOVS_r_T3 => RorsMovsRT3::encode_block(instr, buf, labels),
        Code::ADD_i_T3 => AddIT3::encode_block(instr, buf, labels),
        Code::MOV_r_T3_RRX => MovRT3Rrx::encode_block(instr, buf, labels),
        Code::B_T2 => BT2::encode_block(instr, buf, labels),
        Code::SUB_i_T1 => SubIT1::encode_block(instr, buf, labels),
        Code::RFE_T1_AS => RfeT1As::encode_block(instr, buf, labels),
        Code::UHADD16_T1 => Uhadd16T1::encode_block(instr, buf, labels),
        Code::STRB_i_T3_pre => StrbIT3Pre::encode_block(instr, buf, labels),
        Code::CMP_r_T1 => CmpRT1::encode_block(instr, buf, labels),
        Code::MOVS_r_T3 => MovsRT3::encode_block(instr, buf, labels),
        Code::ERET_T1 => EretT1::encode_block(instr, buf, labels),
        Code::STREXD_T1 => StrexdT1::encode_block(instr, buf, labels),
        Code::MOV_r_T1 => MovRT1::encode_block(instr, buf, labels),
        Code::USADA8_T1 => Usada8T1::encode_block(instr, buf, labels),
        Code::MVNS_i_T1 => MvnsIT1::encode_block(instr, buf, labels),
        Code::SMLSLD_T1 => SmlsldT1::encode_block(instr, buf, labels),
        Code::CRC32CW_T1 => Crc32cwT1::encode_block(instr, buf, labels),
        Code::ADC_r_T2 => AdcRT2::encode_block(instr, buf, labels),
        Code::DBG_T1 => DbgT1::encode_block(instr, buf, labels),
        Code::SBCS_i_T1 => SbcsIT1::encode_block(instr, buf, labels),
        Code::LDRB_i_T2 => LdrbIT2::encode_block(instr, buf, labels),
        Code::TEQ_r_T1_RRX => TeqRT1Rrx::encode_block(instr, buf, labels),
        Code::RBIT_T1 => RbitT1::encode_block(instr, buf, labels),
        Code::LDAH_T1 => LdahT1::encode_block(instr, buf, labels),
        Code::LDRD_i_T1_pre => LdrdIT1Pre::encode_block(instr, buf, labels),
        Code::CRC32W_T1 => Crc32wT1::encode_block(instr, buf, labels),
        Code::PLD_l_T1 => PldLT1::encode_block(instr, buf, labels),
        Code::PLD_i_T2 => PldIT2::encode_block(instr, buf, labels),
        Code::LDRD_i_T1_off => LdrdIT1Off::encode_block(instr, buf, labels),
        Code::ADC_r_T2_RRX => AdcRT2Rrx::encode_block(instr, buf, labels),
        Code::RORS_MOV_rr_T1_ROR => RorsMovRrT1Ror::encode_block(instr, buf, labels),
        Code::SUB_SP_r_T1_RRX => SubSpRT1Rrx::encode_block(instr, buf, labels),
        Code::RSBS_r_T1 => RsbsRT1::encode_block(instr, buf, labels),
        Code::MVN_r_T2_RRX => MvnRT2Rrx::encode_block(instr, buf, labels),
        Code::PUSH_STMDB_T1 => PushStmdbT1::encode_block(instr, buf, labels),
        Code::LDR_i_T4_post => LdrIT4Post::encode_block(instr, buf, labels),
        Code::LSL_MOV_rr_T1_LSL => LslMovRrT1Lsl::encode_block(instr, buf, labels),
        Code::SUB_r_T2 => SubRT2::encode_block(instr, buf, labels),
        Code::LDR_l_T2 => LdrLT2::encode_block(instr, buf, labels),
        Code::MVN_r_T1 => MvnRT1::encode_block(instr, buf, labels),
        Code::SSUB16_T1 => Ssub16T1::encode_block(instr, buf, labels),
        Code::ADDS_SP_r_T3_RRX => AddsSpRT3Rrx::encode_block(instr, buf, labels),
        Code::LDRSH_i_T1 => LdrshIT1::encode_block(instr, buf, labels),
        Code::CRC32H_T1 => Crc32hT1::encode_block(instr, buf, labels),
        Code::LDRSH_r_T1 => LdrshRT1::encode_block(instr, buf, labels),
        Code::SUBS_SP_r_T1_RRX => SubsSpRT1Rrx::encode_block(instr, buf, labels),
        Code::LDAEXD_T1 => LdaexdT1::encode_block(instr, buf, labels),
        Code::LDREXB_T1 => LdrexbT1::encode_block(instr, buf, labels),
        Code::TST_r_T1 => TstRT1::encode_block(instr, buf, labels),
        Code::LDRSB_i_T2_off => LdrsbIT2Off::encode_block(instr, buf, labels),
        Code::CPSIE_T2_AS => CpsieT2As::encode_block(instr, buf, labels),
        Code::ROR_MOV_r_T3 => RorMovRT3::encode_block(instr, buf, labels),
        Code::SMMULR_T1 => SmmulrT1::encode_block(instr, buf, labels),
        Code::LSLS_MOV_rr_T1_LSL => LslsMovRrT1Lsl::encode_block(instr, buf, labels),
        Code::IT_T1 => ItT1::encode_block(instr, buf, labels),
        Code::LDRH_i_T2 => LdrhIT2::encode_block(instr, buf, labels),
        Code::SMUADX_T1 => SmuadxT1::encode_block(instr, buf, labels),
        Code::POP_LDR_i_T4_post => PopLdrIT4Post::encode_block(instr, buf, labels),
        Code::ADCS_i_T1 => AdcsIT1::encode_block(instr, buf, labels),
        Code::SUB_SP_i_T2 => SubSpIT2::encode_block(instr, buf, labels),
        Code::STRB_i_T2 => StrbIT2::encode_block(instr, buf, labels),
        Code::UDIV_T1 => UdivT1::encode_block(instr, buf, labels),
        Code::BKPT_T1 => BkptT1::encode_block(instr, buf, labels),
        Code::LDRH_i_T3_off => LdrhIT3Off::encode_block(instr, buf, labels),
        Code::PLDW_r_T1 => PldwRT1::encode_block(instr, buf, labels),
        Code::LDRSH_i_T2_off => LdrshIT2Off::encode_block(instr, buf, labels),
        Code::SUB_SP_r_T1 => SubSpRT1::encode_block(instr, buf, labels),
        Code::STRH_i_T3_pre => StrhIT3Pre::encode_block(instr, buf, labels),
        Code::PLI_i_T1 => PliIT1::encode_block(instr, buf, labels),
        Code::USUB8_T1 => Usub8T1::encode_block(instr, buf, labels),
        Code::UXTB_T1 => UxtbT1::encode_block(instr, buf, labels),
        Code::STRD_i_T1_pre => StrdIT1Pre::encode_block(instr, buf, labels),
        Code::QDADD_T1 => QdaddT1::encode_block(instr, buf, labels),
        Code::SUBS_i_T3 => SubsIT3::encode_block(instr, buf, labels),
        Code::ORR_r_T2 => OrrRT2::encode_block(instr, buf, labels),
        Code::ADD_SP_i_T3 => AddSpIT3::encode_block(instr, buf, labels),
        Code::CMP_r_T3 => CmpRT3::encode_block(instr, buf, labels),
        Code::EOR_r_T2 => EorRT2::encode_block(instr, buf, labels),
        Code::LDC_l_T1_post => LdcLT1Post::encode_block(instr, buf, labels),
        Code::DCPS3_T1 => Dcps3T1::encode_block(instr, buf, labels),
        Code::ASRS_MOVS_rr_T2 => AsrsMovsRrT2::encode_block(instr, buf, labels),
        Code::CMN_r_T2 => CmnRT2::encode_block(instr, buf, labels),
        Code::USUB16_T1 => Usub16T1::encode_block(instr, buf, labels),
        Code::LDRH_l_T1 => LdrhLT1::encode_block(instr, buf, labels),
        Code::UASX_T1 => UasxT1::encode_block(instr, buf, labels),
        Code::EORS_r_T2 => EorsRT2::encode_block(instr, buf, labels),
        Code::RSB_i_T2 => RsbIT2::encode_block(instr, buf, labels),
        Code::SMULWB_T1 => SmulwbT1::encode_block(instr, buf, labels),
        Code::ASR_MOV_r_T2 => AsrMovRT2::encode_block(instr, buf, labels),
        Code::LDRB_r_T2 => LdrbRT2::encode_block(instr, buf, labels),
        Code::CLRBHB_T1 => ClrbhbT1::encode_block(instr, buf, labels),
        Code::STLH_T1 => StlhT1::encode_block(instr, buf, labels),
        Code::SSUB8_T1 => Ssub8T1::encode_block(instr, buf, labels),
        Code::LDREXD_T1 => LdrexdT1::encode_block(instr, buf, labels),
        Code::SMLAD_T1 => SmladT1::encode_block(instr, buf, labels),
        Code::STRH_r_T2 => StrhRT2::encode_block(instr, buf, labels),
        Code::RSBS_r_T1_RRX => RsbsRT1Rrx::encode_block(instr, buf, labels),
        Code::ROR_MOV_rr_T1_ROR => RorMovRrT1Ror::encode_block(instr, buf, labels),
        Code::UHSAX_T1 => UhsaxT1::encode_block(instr, buf, labels),
        Code::WFI_T2 => WfiT2::encode_block(instr, buf, labels),
        Code::STR_i_T2 => StrIT2::encode_block(instr, buf, labels),
        Code::MOV_rr_T1_LSR => MovRrT1Lsr::encode_block(instr, buf, labels),
        Code::UDF_T2 => UdfT2::encode_block(instr, buf, labels),
        Code::ADD_i_T4 => AddIT4::encode_block(instr, buf, labels),
        Code::ORNS_r_T1 => OrnsRT1::encode_block(instr, buf, labels),
        Code::EOR_i_T1 => EorIT1::encode_block(instr, buf, labels),
        Code::STR_i_T1 => StrIT1::encode_block(instr, buf, labels),
        Code::STM_T2 => StmT2::encode_block(instr, buf, labels),
        Code::LSR_MOV_rr_T1_LSR => LsrMovRrT1Lsr::encode_block(instr, buf, labels),
        Code::SUBS_r_T2 => SubsRT2::encode_block(instr, buf, labels),
        Code::MVN_r_T2 => MvnRT2::encode_block(instr, buf, labels),
        Code::SMULBT_T1 => SmulbtT1::encode_block(instr, buf, labels),
        Code::SXTB16_T1 => Sxtb16T1::encode_block(instr, buf, labels),
        Code::SMLALTB_T1 => SmlaltbT1::encode_block(instr, buf, labels),
        Code::PUSH_T1 => PushT1::encode_block(instr, buf, labels),
        Code::STRB_i_T3_post => StrbIT3Post::encode_block(instr, buf, labels),
        Code::LDRSB_r_T2 => LdrsbRT2::encode_block(instr, buf, labels),
        Code::MVN_i_T1 => MvnIT1::encode_block(instr, buf, labels),
        Code::SMLABT_T1 => SmlabtT1::encode_block(instr, buf, labels),
        Code::CPSID_T2_ASM => CpsidT2Asm::encode_block(instr, buf, labels),
        Code::CMN_r_T2_RRX => CmnRT2Rrx::encode_block(instr, buf, labels),
        Code::REV_T1 => RevT1::encode_block(instr, buf, labels),
        Code::ISB_T1 => IsbT1::encode_block(instr, buf, labels),
        Code::RSB_i_T1 => RsbIT1::encode_block(instr, buf, labels),
        Code::LSRS_MOVS_r_T3 => LsrsMovsRT3::encode_block(instr, buf, labels),
        Code::LDRSH_r_T2 => LdrshRT2::encode_block(instr, buf, labels),
        Code::LDRD_l_T1_post => LdrdLT1Post::encode_block(instr, buf, labels),
        Code::SXTAB_T1 => SxtabT1::encode_block(instr, buf, labels),
        Code::PLDW_i_T1 => PldwIT1::encode_block(instr, buf, labels),
        Code::STRHT_T1 => StrhtT1::encode_block(instr, buf, labels),
        Code::SXTB_T1 => SxtbT1::encode_block(instr, buf, labels),
        Code::EORS_r_T2_RRX => EorsRT2Rrx::encode_block(instr, buf, labels),
        Code::CPS_T2_AS => CpsT2As::encode_block(instr, buf, labels),
        Code::ADC_i_T1 => AdcIT1::encode_block(instr, buf, labels),
        Code::BFI_T1 => BfiT1::encode_block(instr, buf, labels),
        Code::POP_LDM_T2 => PopLdmT2::encode_block(instr, buf, labels),
        Code::UMLAL_T1 => UmlalT1::encode_block(instr, buf, labels),
        Code::YIELD_T1 => YieldT1::encode_block(instr, buf, labels),
        Code::MOV_rr_T1_ROR => MovRrT1Ror::encode_block(instr, buf, labels),
        Code::SMLALD_T1 => SmlaldT1::encode_block(instr, buf, labels),
        Code::PLDW_i_T2 => PldwIT2::encode_block(instr, buf, labels),
        Code::LSL_MOV_r_T2 => LslMovRT2::encode_block(instr, buf, labels),
        Code::ASRS_MOVS_r_T3 => AsrsMovsRT3::encode_block(instr, buf, labels),
        Code::TBH_T1 => TbhT1::encode_block(instr, buf, labels),
        Code::TSB_T1 => TsbT1::encode_block(instr, buf, labels),
        Code::ORR_r_T2_RRX => OrrRT2Rrx::encode_block(instr, buf, labels),
        Code::SHADD8_T1 => Shadd8T1::encode_block(instr, buf, labels),
        Code::MOV_i_T1 => MovIT1::encode_block(instr, buf, labels),
        Code::STRD_i_T1_off => StrdIT1Off::encode_block(instr, buf, labels),
        Code::MOVS_i_T2 => MovsIT2::encode_block(instr, buf, labels),
        Code::LDRSBT_T1 => LdrsbtT1::encode_block(instr, buf, labels),
        Code::STREXB_T1 => StrexbT1::encode_block(instr, buf, labels),
        Code::LDAEXH_T1 => LdaexhT1::encode_block(instr, buf, labels),
        Code::UXTAB16_T1 => Uxtab16T1::encode_block(instr, buf, labels),
        Code::DCPS1_T1 => Dcps1T1::encode_block(instr, buf, labels),
        Code::ASRS_MOV_r_T2 => AsrsMovRT2::encode_block(instr, buf, labels),
        Code::LSRS_MOV_rr_T1_LSR => LsrsMovRrT1Lsr::encode_block(instr, buf, labels),
        Code::SBCS_r_T2_RRX => SbcsRT2Rrx::encode_block(instr, buf, labels),
        Code::STREX_T1 => StrexT1::encode_block(instr, buf, labels),
        Code::MVNS_r_T2_RRX => MvnsRT2Rrx::encode_block(instr, buf, labels),
        Code::PKHTB_T1 => PkhtbT1::encode_block(instr, buf, labels),
        Code::UQSAX_T1 => UqsaxT1::encode_block(instr, buf, labels),
        Code::ORRS_r_T2_RRX => OrrsRT2Rrx::encode_block(instr, buf, labels),
        Code::ADD_r_T1 => AddRT1::encode_block(instr, buf, labels),
        Code::TEQ_i_T1 => TeqIT1::encode_block(instr, buf, labels),
        Code::ADD_i_T1 => AddIT1::encode_block(instr, buf, labels),
        Code::CBNZ_T1 => CbnzT1::encode_block(instr, buf, labels),
        Code::LDRHT_T1 => LdrhtT1::encode_block(instr, buf, labels),
        Code::STR_r_T2 => StrRT2::encode_block(instr, buf, labels),
        Code::LDRB_i_T3_pre => LdrbIT3Pre::encode_block(instr, buf, labels),
        Code::B_T1 => BT1::encode_block(instr, buf, labels),
        Code::B_T4 => BT4::encode_block(instr, buf, labels),
        Code::LDRB_i_T3_post => LdrbIT3Post::encode_block(instr, buf, labels),
        Code::TBB_T1 => TbbT1::encode_block(instr, buf, labels),
        Code::ROR_MOV_rr_T2 => RorMovRrT2::encode_block(instr, buf, labels),
        Code::QASX_T1 => QasxT1::encode_block(instr, buf, labels),
        Code::USAX_T1 => UsaxT1::encode_block(instr, buf, labels),
        Code::LDRSB_i_T1 => LdrsbIT1::encode_block(instr, buf, labels),
        Code::LDRH_i_T1 => LdrhIT1::encode_block(instr, buf, labels),
        Code::LDRSB_i_T2_pre => LdrsbIT2Pre::encode_block(instr, buf, labels),
        Code::SMC_T1_AS => SmcT1As::encode_block(instr, buf, labels),
        Code::MOV_r_T3 => MovRT3::encode_block(instr, buf, labels),
        Code::BICS_i_T1 => BicsIT1::encode_block(instr, buf, labels),
        Code::EOR_r_T1 => EorRT1::encode_block(instr, buf, labels),
        Code::UADD8_T1 => Uadd8T1::encode_block(instr, buf, labels),
        Code::B_T3 => BT3::encode_block(instr, buf, labels),
        Code::SMLALTT_T1 => SmlalttT1::encode_block(instr, buf, labels),
        Code::BIC_r_T1 => BicRT1::encode_block(instr, buf, labels),
        Code::SMMLS_T1 => SmmlsT1::encode_block(instr, buf, labels),
        Code::RSB_r_T1 => RsbRT1::encode_block(instr, buf, labels),
        Code::UQSUB8_T1 => Uqsub8T1::encode_block(instr, buf, labels),
        Code::RSB_r_T1_RRX => RsbRT1Rrx::encode_block(instr, buf, labels),
        Code::SASX_T1 => SasxT1::encode_block(instr, buf, labels),
        Code::MCR_T1 => McrT1::encode_block(instr, buf, labels),
        Code::CMP_r_T3_RRX => CmpRT3Rrx::encode_block(instr, buf, labels),
        Code::LDMDB_T1 => LdmdbT1::encode_block(instr, buf, labels),
        Code::LDC_l_T1_pre => LdcLT1Pre::encode_block(instr, buf, labels),
        Code::SETEND_T1 => SetendT1::encode_block(instr, buf, labels),
        Code::STRH_i_T3_post => StrhIT3Post::encode_block(instr, buf, labels),
        Code::ASR_MOV_r_T3 => AsrMovRT3::encode_block(instr, buf, labels),
        Code::SUB_i_T3 => SubIT3::encode_block(instr, buf, labels),
        Code::SEVL_T1 => SevlT1::encode_block(instr, buf, labels),
        Code::REVSH_T2 => RevshT2::encode_block(instr, buf, labels),
        Code::PLI_r_T1 => PliRT1::encode_block(instr, buf, labels),
        Code::MRC_T1 => MrcT1::encode_block(instr, buf, labels),
        Code::ORR_i_T1 => OrrIT1::encode_block(instr, buf, labels),
        Code::UADD16_T1 => Uadd16T1::encode_block(instr, buf, labels),
        Code::STRH_i_T2 => StrhIT2::encode_block(instr, buf, labels),
        Code::LDRSH_i_T2_post => LdrshIT2Post::encode_block(instr, buf, labels),
        Code::SUBS_SP_i_T2 => SubsSpIT2::encode_block(instr, buf, labels),
        Code::SSAX_T1 => SsaxT1::encode_block(instr, buf, labels),
        Code::STC_T1_pre => StcT1Pre::encode_block(instr, buf, labels),
        Code::LDAEX_T1 => LdaexT1::encode_block(instr, buf, labels),
        Code::MOV_rr_T2 => MovRrT2::encode_block(instr, buf, labels),
        Code::STRH_i_T3_offn => StrhIT3Offn::encode_block(instr, buf, labels),
        Code::SADD16_T1 => Sadd16T1::encode_block(instr, buf, labels),
        Code::SMUAD_T1 => SmuadT1::encode_block(instr, buf, labels),
        Code::LDREXH_T1 => LdrexhT1::encode_block(instr, buf, labels),
        Code::ADD_SP_i_T1 => AddSpIT1::encode_block(instr, buf, labels),
        Code::LDR_i_T4_off => LdrIT4Off::encode_block(instr, buf, labels),
        Code::ASR_MOV_rr_T2 => AsrMovRrT2::encode_block(instr, buf, labels),
        Code::ADD_r_T2 => AddRT2::encode_block(instr, buf, labels),
        Code::ADCS_r_T2 => AdcsRT2::encode_block(instr, buf, labels),
        Code::ORNS_r_T1_RRX => OrnsRT1Rrx::encode_block(instr, buf, labels),
        Code::CPSIE_T2_ASM => CpsieT2Asm::encode_block(instr, buf, labels),
        Code::STRD_i_T1_post => StrdIT1Post::encode_block(instr, buf, labels),
        Code::UXTH_T1 => UxthT1::encode_block(instr, buf, labels),
        Code::SEL_T1 => SelT1::encode_block(instr, buf, labels),
        Code::SBCS_r_T2 => SbcsRT2::encode_block(instr, buf, labels),
        Code::LDRB_i_T1 => LdrbIT1::encode_block(instr, buf, labels),
        Code::LDA_T1 => LdaT1::encode_block(instr, buf, labels),
        Code::LSR_MOV_r_T2 => LsrMovRT2::encode_block(instr, buf, labels),
        Code::LDC_i_T1_post => LdcIT1Post::encode_block(instr, buf, labels),
        Code::UQADD8_T1 => Uqadd8T1::encode_block(instr, buf, labels),
        Code::LDC_i_T1_off => LdcIT1Off::encode_block(instr, buf, labels),
        Code::SSBB_T1 => SsbbT1::encode_block(instr, buf, labels),
        Code::MUL_T2 => MulT2::encode_block(instr, buf, labels),
        Code::STMDB_T1 => StmdbT1::encode_block(instr, buf, labels),
        Code::BICS_r_T2_RRX => BicsRT2Rrx::encode_block(instr, buf, labels),
        Code::SUB_ADR_T2 => SubAdrT2::encode_block(instr, buf, labels),
        Code::WFE_T1 => WfeT1::encode_block(instr, buf, labels),
        Code::MOVS_r_T3_RRX => MovsRT3Rrx::encode_block(instr, buf, labels),
        Code::LDR_i_T4_pre => LdrIT4Pre::encode_block(instr, buf, labels),
        Code::LDC_i_T1_unind => LdcIT1Unind::encode_block(instr, buf, labels),
        Code::UHSUB16_T1 => Uhsub16T1::encode_block(instr, buf, labels),
        Code::STLEX_T1 => StlexT1::encode_block(instr, buf, labels),
        Code::STR_i_T4_post => StrIT4Post::encode_block(instr, buf, labels),
        Code::BXJ_T1 => BxjT1::encode_block(instr, buf, labels),
        Code::TST_r_T2_RRX => TstRT2Rrx::encode_block(instr, buf, labels),
        Code::CBZ_T1 => CbzT1::encode_block(instr, buf, labels),
        Code::AND_i_T1 => AndIT1::encode_block(instr, buf, labels),
        Code::SSAT_T1_LSL => SsatT1Lsl::encode_block(instr, buf, labels),
        Code::LDR_r_T2 => LdrRT2::encode_block(instr, buf, labels),
        Code::AND_r_T2 => AndRT2::encode_block(instr, buf, labels),
        Code::ORR_r_T1 => OrrRT1::encode_block(instr, buf, labels),
        Code::SDIV_T1 => SdivT1::encode_block(instr, buf, labels),
        Code::LDR_i_T2 => LdrIT2::encode_block(instr, buf, labels),
        Code::UXTB_T2 => UxtbT2::encode_block(instr, buf, labels),
        Code::LDRBT_T1 => LdrbtT1::encode_block(instr, buf, labels),
        Code::SHSAX_T1 => ShsaxT1::encode_block(instr, buf, labels),
        Code::ASRS_MOV_rr_T1_ASR => AsrsMovRrT1Asr::encode_block(instr, buf, labels),
        Code::ADD_SP_i_T4 => AddSpIT4::encode_block(instr, buf, labels),
        Code::UQSUB16_T1 => Uqsub16T1::encode_block(instr, buf, labels),
        Code::NOP_T1 => NopT1::encode_block(instr, buf, labels),
        Code::SMMUL_T1 => SmmulT1::encode_block(instr, buf, labels),
        Code::AND_r_T2_RRX => AndRT2Rrx::encode_block(instr, buf, labels),
        Code::PUSH_STR_i_T4_pre => PushStrIT4Pre::encode_block(instr, buf, labels),
        Code::POP_T1 => PopT1::encode_block(instr, buf, labels),
        Code::LSL_MOV_rr_T2 => LslMovRrT2::encode_block(instr, buf, labels),
        Code::SHSUB16_T1 => Shsub16T1::encode_block(instr, buf, labels),
        Code::PLD_i_T1 => PldIT1::encode_block(instr, buf, labels),
        Code::SEV_T2 => SevT2::encode_block(instr, buf, labels),
        Code::ANDS_i_T1 => AndsIT1::encode_block(instr, buf, labels),
        Code::TEQ_r_T1 => TeqRT1::encode_block(instr, buf, labels),
        Code::STREXH_T1 => StrexhT1::encode_block(instr, buf, labels),
        Code::ADDS_r_T3_RRX => AddsRT3Rrx::encode_block(instr, buf, labels),
        Code::PLI_i_T2 => PliIT2::encode_block(instr, buf, labels),
        Code::SMLALBB_T1 => SmlalbbT1::encode_block(instr, buf, labels),
        Code::ORRS_i_T1 => OrrsIT1::encode_block(instr, buf, labels),
        Code::ORN_i_T1 => OrnIT1::encode_block(instr, buf, labels),
        Code::QSUB8_T1 => Qsub8T1::encode_block(instr, buf, labels),
        Code::UHSUB8_T1 => Uhsub8T1::encode_block(instr, buf, labels),
        Code::QSUB16_T1 => Qsub16T1::encode_block(instr, buf, labels),
        Code::SUB_i_T2 => SubIT2::encode_block(instr, buf, labels),
        Code::STR_i_T4_pre => StrIT4Pre::encode_block(instr, buf, labels),
        Code::LDRH_i_T3_post => LdrhIT3Post::encode_block(instr, buf, labels),
        Code::MRRC_T1 => MrrcT1::encode_block(instr, buf, labels),
        Code::MLA_T1 => MlaT1::encode_block(instr, buf, labels),
        Code::STLB_T1 => StlbT1::encode_block(instr, buf, labels),
        Code::LDRH_r_T1 => LdrhRT1::encode_block(instr, buf, labels),
        Code::LDRH_i_T3_pre => LdrhIT3Pre::encode_block(instr, buf, labels),
        Code::SXTH_T1 => SxthT1::encode_block(instr, buf, labels),
        Code::BL_i_T1 => BlIT1::encode_block(instr, buf, labels),
        Code::LDRD_i_T1_post => LdrdIT1Post::encode_block(instr, buf, labels),
        Code::SMLAL_T1 => SmlalT1::encode_block(instr, buf, labels),
        Code::DCPS2_T1 => Dcps2T1::encode_block(instr, buf, labels),
        Code::MCRR_T1 => McrrT1::encode_block(instr, buf, labels),
        Code::LSLS_MOV_r_T2 => LslsMovRT2::encode_block(instr, buf, labels),
        Code::STL_T1 => StlT1::encode_block(instr, buf, labels),
        Code::STRH_i_T1 => StrhIT1::encode_block(instr, buf, labels),
        Code::SUB_i_T4 => SubIT4::encode_block(instr, buf, labels),
        Code::LDR_i_T3 => LdrIT3::encode_block(instr, buf, labels),
        Code::YIELD_T2 => YieldT2::encode_block(instr, buf, labels),
        Code::RRX_MOV_r_T3_RRX => RrxMovRT3Rrx::encode_block(instr, buf, labels),
        Code::DMB_T1 => DmbT1::encode_block(instr, buf, labels),
        Code::SRS_T1_AS => SrsT1As::encode_block(instr, buf, labels),
        Code::CRC32CB_T1 => Crc32cbT1::encode_block(instr, buf, labels),
        Code::LDRSB_r_T1 => LdrsbRT1::encode_block(instr, buf, labels),
        Code::WFE_T2 => WfeT2::encode_block(instr, buf, labels),
        Code::QSAX_T1 => QsaxT1::encode_block(instr, buf, labels),
        Code::USAT_T1_LSL => UsatT1Lsl::encode_block(instr, buf, labels),
        Code::BIC_i_T1 => BicIT1::encode_block(instr, buf, labels),
    }
}