aboutsummaryrefslogtreecommitdiff
path: root/target/arm/tcg/sme.decode
blob: 3c58fdd2a0e9266a4782e365b1d28596a748a1a8 (plain)
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
# AArch64 SME instruction descriptions
#
#  Copyright (c) 2022 Linaro, Ltd
#
# This library is free software; you can redistribute it and/or
# modify it under the terms of the GNU Lesser General Public
# License as published by the Free Software Foundation; either
# version 2.1 of the License, or (at your option) any later version.
#
# This library is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
# Lesser General Public License for more details.
#
# You should have received a copy of the GNU Lesser General Public
# License along with this library; if not, see <http://www.gnu.org/licenses/>.

#
# This file is processed by scripts/decodetree.py
#

### SME Misc

ZERO            11000000 00 001 00000000000 imm:8
ZERO_zt0        11000000 01 001 00000000000 00000001

### SME Move into/from Array

%mova_rs        13:2 !function=plus_12
%mova_rv        13:2 !function=plus_8
&mova_a         rv zr off
&mova_p         esz rs pg zr za off v:bool
&mova_t         esz rs zr za off v:bool

MOVA_tz         11000000 00 00000 0 v:1 .. pg:3 zr:5 0 off:4  \
                &mova_p rs=%mova_rs esz=0 za=0
MOVA_tz         11000000 01 00000 0 v:1 .. pg:3 zr:5 0 za:1 off:3  \
                &mova_p rs=%mova_rs esz=1
MOVA_tz         11000000 10 00000 0 v:1 .. pg:3 zr:5 0 za:2 off:2  \
                &mova_p rs=%mova_rs esz=2
MOVA_tz         11000000 11 00000 0 v:1 .. pg:3 zr:5 0 za:3 off:1  \
                &mova_p rs=%mova_rs esz=3
MOVA_tz         11000000 11 00000 1 v:1 .. pg:3 zr:5 0 za:4  \
                &mova_p rs=%mova_rs esz=4 off=0

MOVA_zt         11000000 00 00001 0 v:1 .. pg:3 0 off:4      zr:5  \
                &mova_p rs=%mova_rs esz=0 za=0
MOVA_zt         11000000 01 00001 0 v:1 .. pg:3 0 za:1 off:3 zr:5  \
                &mova_p rs=%mova_rs esz=1
MOVA_zt         11000000 10 00001 0 v:1 .. pg:3 0 za:2 off:2 zr:5  \
                &mova_p rs=%mova_rs esz=2
MOVA_zt         11000000 11 00001 0 v:1 .. pg:3 0 za:3 off:1 zr:5  \
                &mova_p rs=%mova_rs esz=3
MOVA_zt         11000000 11 00001 1 v:1 .. pg:3 0 za:4       zr:5  \
                &mova_p rs=%mova_rs esz=4 off=0

MOVA_tz2        11000000 00 00010 0 v:1 .. 000  zr:4 0 00      off:3  \
                &mova_t rs=%mova_rs esz=0 za=0
MOVA_tz2        11000000 01 00010 0 v:1 .. 000  zr:4 0 00 za:1 off:2  \
                &mova_t rs=%mova_rs esz=1
MOVA_tz2        11000000 10 00010 0 v:1 .. 000  zr:4 0 00 za:2 off:1  \
                &mova_t rs=%mova_rs esz=2
MOVA_tz2        11000000 11 00010 0 v:1 .. 000  zr:4 0 00 za:3        \
                &mova_t rs=%mova_rs esz=3 off=0

MOVA_zt2        11000000 00 00011 0 v:1 .. 000 00      off:3 zr:4 0 \
                &mova_t rs=%mova_rs esz=0 za=0
MOVA_zt2        11000000 01 00011 0 v:1 .. 000 00 za:1 off:2 zr:4 0 \
                &mova_t rs=%mova_rs esz=1
MOVA_zt2        11000000 10 00011 0 v:1 .. 000 00 za:2 off:1 zr:4 0 \
                &mova_t rs=%mova_rs esz=2
MOVA_zt2        11000000 11 00011 0 v:1 .. 000 00 za:3       zr:4 0 \
                &mova_t rs=%mova_rs esz=3 off=0

MOVA_tz4        11000000 00 00010 0 v:1 .. 001 zr:3 00 000      off:2  \
                &mova_t rs=%mova_rs esz=0 za=0
MOVA_tz4        11000000 01 00010 0 v:1 .. 001 zr:3 00 000 za:1 off:1  \
                &mova_t rs=%mova_rs esz=1
MOVA_tz4        11000000 10 00010 0 v:1 .. 001 zr:3 00 000 za:2        \
                &mova_t rs=%mova_rs esz=2 off=0
MOVA_tz4        11000000 11 00010 0 v:1 .. 001 zr:3 00 00 za:3         \
                &mova_t rs=%mova_rs esz=3 off=0

MOVA_zt4        11000000 00 00011 0 v:1 .. 001 000      off:2 zr:3 00 \
                &mova_t rs=%mova_rs esz=0 za=0
MOVA_zt4        11000000 01 00011 0 v:1 .. 001 000 za:1 off:1 zr:3 00 \
                &mova_t rs=%mova_rs esz=1
MOVA_zt4        11000000 10 00011 0 v:1 .. 001 000 za:2       zr:3 00 \
                &mova_t rs=%mova_rs esz=2 off=0
MOVA_zt4        11000000 11 00011 0 v:1 .. 001 00 za:3        zr:3 00 \
                &mova_t rs=%mova_rs esz=3 off=0

MOVA_az2        11000000 00 00010 00 .. 010 zr:4  000 off:3  \
                &mova_a rv=%mova_rv
MOVA_az4        11000000 00 00010 00 .. 011 zr:3 0000 off:3  \
                &mova_a rv=%mova_rv

MOVA_za2        11000000 00 00011 00 .. 010 00 off:3 zr:4 0  \
                &mova_a rv=%mova_rv
MOVA_za4        11000000 00 00011 00 .. 011 00 off:3 zr:3 00 \
                &mova_a rv=%mova_rv

### SME Move and Zero

MOVAZ_za2       11000000 00000110 0 .. 01010 off:3 zr:4 0    \
                &mova_a rv=%mova_rv
MOVAZ_za4       11000000 00000110 0 .. 01110 off:3 zr:3 00   \
                &mova_a rv=%mova_rv

MOVAZ_zt        11000000 00 00001 0 v:1 .. 0001 off:4 zr:5    \
                &mova_t rs=%mova_rs esz=0 za=0
MOVAZ_zt        11000000 01 00001 0 v:1 .. 0001 za:1 off:3 zr:5    \
                &mova_t rs=%mova_rs esz=1
MOVAZ_zt        11000000 10 00001 0 v:1 .. 0001 za:2 off:2 zr:5    \
                &mova_t rs=%mova_rs esz=2
MOVAZ_zt        11000000 11 00001 0 v:1 .. 0001 za:3 off:1 zr:5    \
                &mova_t rs=%mova_rs esz=3
MOVAZ_zt        11000000 11 00001 1 v:1 .. 0001 za:4 zr:5    \
                &mova_t rs=%mova_rs esz=4 off=0

MOVAZ_zt2       11000000 00 00011 0 v:1 .. 00010 off:3 zr:4 0 \
                &mova_t rs=%mova_rs esz=0 za=0
MOVAZ_zt2       11000000 01 00011 0 v:1 .. 00010 za:1 off:2 zr:4 0 \
                &mova_t rs=%mova_rs esz=1
MOVAZ_zt2       11000000 10 00011 0 v:1 .. 00010 za:2 off:1 zr:4 0 \
                &mova_t rs=%mova_rs esz=2
MOVAZ_zt2       11000000 11 00011 0 v:1 .. 00010 za:3 zr:4 0 \
                &mova_t rs=%mova_rs esz=3 off=0

MOVAZ_zt4       11000000 00 00011 0 v:1 .. 001100 off:2 zr:3 00 \
                &mova_t rs=%mova_rs esz=0 za=0
MOVAZ_zt4       11000000 01 00011 0 v:1 .. 001100 za:1 off:1 zr:3 00 \
                &mova_t rs=%mova_rs esz=1
MOVAZ_zt4       11000000 10 00011 0 v:1 .. 001100 za:2 zr:3 00 \
                &mova_t rs=%mova_rs esz=2 off=0
MOVAZ_zt4       11000000 11 00011 0 v:1 .. 00110 za:3 zr:3 00 \
                &mova_t rs=%mova_rs esz=3 off=0

### SME Move into/from ZT0

MOVT_rzt        1100 0000 0100 1100 0 off:3 00 11111 rt:5
MOVT_ztr        1100 0000 0100 1110 0 off:3 00 11111 rt:5

### SME Memory

&ldst           esz rs pg rn rm za off v:bool st:bool

LDST1           1110000 0 00 st:1 rm:5 v:1 .. pg:3 rn:5 0 off:4  \
                &ldst rs=%mova_rs esz=0 za=0
LDST1           1110000 0 01 st:1 rm:5 v:1 .. pg:3 rn:5 0 za:1 off:3  \
                &ldst rs=%mova_rs esz=1
LDST1           1110000 0 10 st:1 rm:5 v:1 .. pg:3 rn:5 0 za:2 off:2  \
                &ldst rs=%mova_rs esz=2
LDST1           1110000 0 11 st:1 rm:5 v:1 .. pg:3 rn:5 0 za:3 off:1  \
                &ldst rs=%mova_rs esz=3
LDST1           1110000 1 11 st:1 rm:5 v:1 .. pg:3 rn:5 0 za:4  \
                &ldst rs=%mova_rs esz=4 off=0

&ldstr          rv rn imm
@ldstr          ....... ... . ...... .. ... rn:5 . imm:4 \
                &ldstr rv=%mova_rs

LDR             1110000 100 0 000000 .. 000 ..... 0 ....        @ldstr
STR             1110000 100 1 000000 .. 000 ..... 0 ....        @ldstr

&ldstzt0        rn
@ldstzt0        ....... ... . ...... .. ... rn:5  .....         &ldstzt0

LDR_zt0         1110000 100 0 111111 00 000 ..... 00000         @ldstzt0
STR_zt0         1110000 100 1 111111 00 000 ..... 00000         @ldstzt0

### SME Add Vector to Array

&adda           zad zn pm pn
@adda_32        ........ .. ..... . pm:3 pn:3 zn:5 ... zad:2    &adda
@adda_64        ........ .. ..... . pm:3 pn:3 zn:5 ..  zad:3    &adda

ADDHA_s         11000000 10 01000 0 ... ... ..... 000 ..        @adda_32
ADDVA_s         11000000 10 01000 1 ... ... ..... 000 ..        @adda_32
ADDHA_d         11000000 11 01000 0 ... ... ..... 00 ...        @adda_64
ADDVA_d         11000000 11 01000 1 ... ... ..... 00 ...        @adda_64

### SME Outer Product

&op             zad zn zm pm pn sub:bool
@op_16          ........ ... zm:5 pm:3 pn:3 zn:5 sub:1 ... zad:1 &op
@op_32          ........ ... zm:5 pm:3 pn:3 zn:5 sub:1 .. zad:2 &op
@op_64          ........ ... zm:5 pm:3 pn:3 zn:5 sub:1 .  zad:3 &op

FMOPA_h         10000001 100 ..... ... ... ..... . 100 .        @op_16
FMOPA_s         10000000 100 ..... ... ... ..... . 00 ..        @op_32
FMOPA_d         10000000 110 ..... ... ... ..... . 0 ...        @op_64

BFMOPA_w        10000001 100 ..... ... ... ..... . 00 ..        @op_32
FMOPA_w_h       10000001 101 ..... ... ... ..... . 00 ..        @op_32

SMOPA_s         1010000 0 10 0 ..... ... ... ..... . 00 ..      @op_32
SUMOPA_s        1010000 0 10 1 ..... ... ... ..... . 00 ..      @op_32
USMOPA_s        1010000 1 10 0 ..... ... ... ..... . 00 ..      @op_32
UMOPA_s         1010000 1 10 1 ..... ... ... ..... . 00 ..      @op_32

SMOPA_d         1010000 0 11 0 ..... ... ... ..... . 0 ...      @op_64
SUMOPA_d        1010000 0 11 1 ..... ... ... ..... . 0 ...      @op_64
USMOPA_d        1010000 1 11 0 ..... ... ... ..... . 0 ...      @op_64
UMOPA_d         1010000 1 11 1 ..... ... ... ..... . 0 ...      @op_64

BMOPA           1000000 0 10 0 ..... ... ... ..... . 10 ..      @op_32
SMOPA2_s        1010000 0 10 0 ..... ... ... ..... . 10 ..      @op_32
UMOPA2_s        1010000 1 10 0 ..... ... ... ..... . 10 ..      @op_32

### SME2 Multi-vector Multiple and Single SVE Destructive

%zd_ax2         1:4 !function=times_2
%zd_ax4         2:3 !function=times_4

&z2z_en         zdn zm esz n
@z2z_2x1        ....... . esz:2 .. zm:4 ....0. ..... .... . \
                &z2z_en n=2 zdn=%zd_ax2
@z2z_4x1        ....... . esz:2 .. zm:4 ....1. ..... ...0 . \
                &z2z_en n=4 zdn=%zd_ax4

SMAX_n1        1100000 1 .. 10 .... 1010.0 00000 .... 0    @z2z_2x1
SMAX_n1        1100000 1 .. 10 .... 1010.0 00000 .... 0    @z2z_4x1
UMAX_n1        1100000 1 .. 10 .... 1010.0 00000 .... 1    @z2z_2x1
UMAX_n1        1100000 1 .. 10 .... 1010.0 00000 .... 1    @z2z_4x1
SMIN_n1        1100000 1 .. 10 .... 1010.0 00001 .... 0    @z2z_2x1
SMIN_n1        1100000 1 .. 10 .... 1010.0 00001 .... 0    @z2z_4x1
UMIN_n1        1100000 1 .. 10 .... 1010.0 00001 .... 1    @z2z_2x1
UMIN_n1        1100000 1 .. 10 .... 1010.0 00001 .... 1    @z2z_4x1

FMAX_n1        1100000 1 .. 10 .... 1010.0 01000 .... 0    @z2z_2x1
FMAX_n1        1100000 1 .. 10 .... 1010.0 01000 .... 0    @z2z_4x1
FMIN_n1        1100000 1 .. 10 .... 1010.0 01000 .... 1    @z2z_2x1
FMIN_n1        1100000 1 .. 10 .... 1010.0 01000 .... 1    @z2z_4x1
FMAXNM_n1      1100000 1 .. 10 .... 1010.0 01001 .... 0    @z2z_2x1
FMAXNM_n1      1100000 1 .. 10 .... 1010.0 01001 .... 0    @z2z_4x1
FMINNM_n1      1100000 1 .. 10 .... 1010.0 01001 .... 1    @z2z_2x1
FMINNM_n1      1100000 1 .. 10 .... 1010.0 01001 .... 1    @z2z_4x1

SRSHL_n1       1100000 1 .. 10 .... 1010.0 10001 .... 0    @z2z_2x1
SRSHL_n1       1100000 1 .. 10 .... 1010.0 10001 .... 0    @z2z_4x1
URSHL_n1       1100000 1 .. 10 .... 1010.0 10001 .... 1    @z2z_2x1
URSHL_n1       1100000 1 .. 10 .... 1010.0 10001 .... 1    @z2z_4x1

ADD_n1         1100000 1 .. 10 .... 1010.0 11000 .... 0    @z2z_2x1
ADD_n1         1100000 1 .. 10 .... 1010.0 11000 .... 0    @z2z_4x1

SQDMULH_n1     1100000 1 .. 10 .... 1010.1 00000 .... 0    @z2z_2x1
SQDMULH_n1     1100000 1 .. 10 .... 1010.1 00000 .... 0    @z2z_4x1

### SME2 Multi-vector Multiple Vectors SVE Destructive

%zm_ax2         17:4 !function=times_2
%zm_ax4         18:3 !function=times_4

@z2z_2x2        ....... . esz:2 . ....0 ....0. ..... .... . \
                &z2z_en n=2 zdn=%zd_ax2 zm=%zm_ax2
@z2z_4x4        ....... . esz:2 . ...00 ....1. ..... ...0 . \
                &z2z_en n=4 zdn=%zd_ax4 zm=%zm_ax4

SMAX_nn        1100000 1 .. 1 ..... 1011.0 00000 .... 0    @z2z_2x2
SMAX_nn        1100000 1 .. 1 ..... 1011.0 00000 .... 0    @z2z_4x4
UMAX_nn        1100000 1 .. 1 ..... 1011.0 00000 .... 1    @z2z_2x2
UMAX_nn        1100000 1 .. 1 ..... 1011.0 00000 .... 1    @z2z_4x4
SMIN_nn        1100000 1 .. 1 ..... 1011.0 00001 .... 0    @z2z_2x2
SMIN_nn        1100000 1 .. 1 ..... 1011.0 00001 .... 0    @z2z_4x4
UMIN_nn        1100000 1 .. 1 ..... 1011.0 00001 .... 1    @z2z_2x2
UMIN_nn        1100000 1 .. 1 ..... 1011.0 00001 .... 1    @z2z_4x4

FMAX_nn        1100000 1 .. 1 ..... 1011.0 01000 .... 0    @z2z_2x2
FMAX_nn        1100000 1 .. 1 ..... 1011.0 01000 .... 0    @z2z_4x4
FMIN_nn        1100000 1 .. 1 ..... 1011.0 01000 .... 1    @z2z_2x2
FMIN_nn        1100000 1 .. 1 ..... 1011.0 01000 .... 1    @z2z_4x4
FMAXNM_nn      1100000 1 .. 1 ..... 1011.0 01001 .... 0    @z2z_2x2
FMAXNM_nn      1100000 1 .. 1 ..... 1011.0 01001 .... 0    @z2z_4x4
FMINNM_nn      1100000 1 .. 1 ..... 1011.0 01001 .... 1    @z2z_2x2
FMINNM_nn      1100000 1 .. 1 ..... 1011.0 01001 .... 1    @z2z_4x4

SRSHL_nn       1100000 1 .. 1 ..... 1011.0 10001 .... 0    @z2z_2x2
SRSHL_nn       1100000 1 .. 1 ..... 1011.0 10001 .... 0    @z2z_4x4
URSHL_nn       1100000 1 .. 1 ..... 1011.0 10001 .... 1    @z2z_2x2
URSHL_nn       1100000 1 .. 1 ..... 1011.0 10001 .... 1    @z2z_4x4

SQDMULH_nn     1100000 1 .. 1 ..... 1011.1 00000 .... 0    @z2z_2x2
SQDMULH_nn     1100000 1 .. 1 ..... 1011.1 00000 .... 0    @z2z_4x4

### SME2 Multi-vector Multiple and Single Array Vectors

&azz_n          n off rv zn zm
@azz_nx1_o3     ........ .... zm:4 ...... zn:5 .. off:3     &azz_n rv=%mova_rv

ADD_azz_n1_s    11000001 0010 .... 0 .. 110 ..... 10 ...    @azz_nx1_o3 n=2
ADD_azz_n1_s    11000001 0011 .... 0 .. 110 ..... 10 ...    @azz_nx1_o3 n=4
ADD_azz_n1_d    11000001 0110 .... 0 .. 110 ..... 10 ...    @azz_nx1_o3 n=2
ADD_azz_n1_d    11000001 0111 .... 0 .. 110 ..... 10 ...    @azz_nx1_o3 n=4

SUB_azz_n1_s    11000001 0010 .... 0 .. 110 ..... 11 ...    @azz_nx1_o3 n=2
SUB_azz_n1_s    11000001 0011 .... 0 .. 110 ..... 11 ...    @azz_nx1_o3 n=4
SUB_azz_n1_d    11000001 0110 .... 0 .. 110 ..... 11 ...    @azz_nx1_o3 n=2
SUB_azz_n1_d    11000001 0111 .... 0 .. 110 ..... 11 ...    @azz_nx1_o3 n=4

%off3_x2        0:3 !function=times_2
%off2_x2        0:2 !function=times_2

@azz_nx1_o3x2   ........ ... . zm:4 . .. ... zn:5 .. ...    \
                &azz_n off=%off3_x2 rv=%mova_rv
@azz_nx1_o2x2   ........ ... . zm:4 . .. ... zn:5 ... ..    \
                &azz_n off=%off2_x2 rv=%mova_rv

FMLAL_n1        11000001 001 0 .... 0 .. 011 ..... 00 ...   @azz_nx1_o3x2 n=1
FMLAL_n1        11000001 001 0 .... 0 .. 010 ..... 000 ..   @azz_nx1_o2x2 n=2
FMLAL_n1        11000001 001 1 .... 0 .. 010 ..... 000 ..   @azz_nx1_o2x2 n=4

FMLSL_n1        11000001 001 0 .... 0 .. 011 ..... 01 ...   @azz_nx1_o3x2 n=1
FMLSL_n1        11000001 001 0 .... 0 .. 010 ..... 010 ..   @azz_nx1_o2x2 n=2
FMLSL_n1        11000001 001 1 .... 0 .. 010 ..... 010 ..   @azz_nx1_o2x2 n=4

BFMLAL_n1       11000001 001 0 .... 0 .. 011 ..... 10 ...   @azz_nx1_o3x2 n=1
BFMLAL_n1       11000001 001 0 .... 0 .. 010 ..... 100 ..   @azz_nx1_o2x2 n=2
BFMLAL_n1       11000001 001 1 .... 0 .. 010 ..... 100 ..   @azz_nx1_o2x2 n=4

BFMLSL_n1       11000001 001 0 .... 0 .. 011 ..... 11 ...   @azz_nx1_o3x2 n=1
BFMLSL_n1       11000001 001 0 .... 0 .. 010 ..... 110 ..   @azz_nx1_o2x2 n=2
BFMLSL_n1       11000001 001 1 .... 0 .. 010 ..... 110 ..   @azz_nx1_o2x2 n=4

FDOT_n1         11000001 001 0 .... 0 .. 100 ..... 00 ...   @azz_nx1_o3 n=2
FDOT_n1         11000001 001 1 .... 0 .. 100 ..... 00 ...   @azz_nx1_o3 n=4

BFDOT_n1        11000001 001 0 .... 0 .. 100 ..... 10 ...   @azz_nx1_o3 n=2
BFDOT_n1        11000001 001 1 .... 0 .. 100 ..... 10 ...   @azz_nx1_o3 n=4

USDOT_n1        11000001 001 0 .... 0 .. 101 ..... 01 ...   @azz_nx1_o3 n=2
USDOT_n1        11000001 001 1 .... 0 .. 101 ..... 01 ...   @azz_nx1_o3 n=4

SUDOT_n1        11000001 001 0 .... 0 .. 101 ..... 11 ...   @azz_nx1_o3 n=2
SUDOT_n1        11000001 001 1 .... 0 .. 101 ..... 11 ...   @azz_nx1_o3 n=4

SDOT_n1_4b      11000001 001 0 .... 0 .. 101 ..... 00 ...   @azz_nx1_o3 n=2
SDOT_n1_4b      11000001 001 1 .... 0 .. 101 ..... 00 ...   @azz_nx1_o3 n=4
SDOT_n1_4h      11000001 011 0 .... 0 .. 101 ..... 00 ...   @azz_nx1_o3 n=2
SDOT_n1_4h      11000001 011 1 .... 0 .. 101 ..... 00 ...   @azz_nx1_o3 n=4
SDOT_n1_2h      11000001 011 0 .... 0 .. 101 ..... 01 ...   @azz_nx1_o3 n=2
SDOT_n1_2h      11000001 011 1 .... 0 .. 101 ..... 01 ...   @azz_nx1_o3 n=4

UDOT_n1_4b      11000001 001 0 .... 0 .. 101 ..... 10 ...   @azz_nx1_o3 n=2
UDOT_n1_4b      11000001 001 1 .... 0 .. 101 ..... 10 ...   @azz_nx1_o3 n=4
UDOT_n1_4h      11000001 011 0 .... 0 .. 101 ..... 10 ...   @azz_nx1_o3 n=2
UDOT_n1_4h      11000001 011 1 .... 0 .. 101 ..... 10 ...   @azz_nx1_o3 n=4
UDOT_n1_2h      11000001 011 0 .... 0 .. 101 ..... 11 ...   @azz_nx1_o3 n=2
UDOT_n1_2h      11000001 011 1 .... 0 .. 101 ..... 11 ...   @azz_nx1_o3 n=4

SMLAL_n1        11000001 011 0 .... 0 .. 011 ..... 00 ...   @azz_nx1_o3x2 n=1
SMLAL_n1        11000001 011 0 .... 0 .. 010 ..... 000 ..   @azz_nx1_o2x2 n=2
SMLAL_n1        11000001 011 1 .... 0 .. 010 ..... 000 ..   @azz_nx1_o2x2 n=4

SMLSL_n1        11000001 011 0 .... 0 .. 011 ..... 01 ...   @azz_nx1_o3x2 n=1
SMLSL_n1        11000001 011 0 .... 0 .. 010 ..... 010 ..   @azz_nx1_o2x2 n=2
SMLSL_n1        11000001 011 1 .... 0 .. 010 ..... 010 ..   @azz_nx1_o2x2 n=4

UMLAL_n1        11000001 011 0 .... 0 .. 011 ..... 10 ...   @azz_nx1_o3x2 n=1
UMLAL_n1        11000001 011 0 .... 0 .. 010 ..... 100 ..   @azz_nx1_o2x2 n=2
UMLAL_n1        11000001 011 1 .... 0 .. 010 ..... 100 ..   @azz_nx1_o2x2 n=4

UMLSL_n1        11000001 011 0 .... 0 .. 011 ..... 11 ...   @azz_nx1_o3x2 n=1
UMLSL_n1        11000001 011 0 .... 0 .. 010 ..... 110 ..   @azz_nx1_o2x2 n=2
UMLSL_n1        11000001 011 1 .... 0 .. 010 ..... 110 ..   @azz_nx1_o2x2 n=4

%off2_x4        0:2 !function=times_4
%off1_x4        0:1 !function=times_4

@azz_nx1_o2x4   ........ ... . zm:4 . .. ... zn:5 ... ..    \
                &azz_n off=%off2_x4 rv=%mova_rv
@azz_nx1_o1x4   ........ ... . zm:4 . .. ... zn:5 .... .    \
                &azz_n off=%off1_x4 rv=%mova_rv

SMLALL_n1_s     11000001 001 0 .... 0 .. 001 ..... 000 ..   @azz_nx1_o2x4 n=1
SMLALL_n1_d     11000001 011 0 .... 0 .. 001 ..... 000 ..   @azz_nx1_o2x4 n=1
SMLALL_n1_s     11000001 001 0 .... 0 .. 000 ..... 0000 .   @azz_nx1_o1x4 n=2
SMLALL_n1_d     11000001 011 0 .... 0 .. 000 ..... 0000 .   @azz_nx1_o1x4 n=2
SMLALL_n1_s     11000001 001 1 .... 0 .. 000 ..... 0000 .   @azz_nx1_o1x4 n=4
SMLALL_n1_d     11000001 011 1 .... 0 .. 000 ..... 0000 .   @azz_nx1_o1x4 n=4

SMLSLL_n1_s     11000001 001 0 .... 0 .. 001 ..... 010 ..   @azz_nx1_o2x4 n=1
SMLSLL_n1_d     11000001 011 0 .... 0 .. 001 ..... 010 ..   @azz_nx1_o2x4 n=1
SMLSLL_n1_s     11000001 001 0 .... 0 .. 000 ..... 0100 .   @azz_nx1_o1x4 n=2
SMLSLL_n1_d     11000001 011 0 .... 0 .. 000 ..... 0100 .   @azz_nx1_o1x4 n=2
SMLSLL_n1_s     11000001 001 1 .... 0 .. 000 ..... 0100 .   @azz_nx1_o1x4 n=4
SMLSLL_n1_d     11000001 011 1 .... 0 .. 000 ..... 0100 .   @azz_nx1_o1x4 n=4

UMLALL_n1_s     11000001 001 0 .... 0 .. 001 ..... 100 ..   @azz_nx1_o2x4 n=1
UMLALL_n1_d     11000001 011 0 .... 0 .. 001 ..... 100 ..   @azz_nx1_o2x4 n=1
UMLALL_n1_s     11000001 001 0 .... 0 .. 000 ..... 1000 .   @azz_nx1_o1x4 n=2
UMLALL_n1_d     11000001 011 0 .... 0 .. 000 ..... 1000 .   @azz_nx1_o1x4 n=2
UMLALL_n1_s     11000001 001 1 .... 0 .. 000 ..... 1000 .   @azz_nx1_o1x4 n=4
UMLALL_n1_d     11000001 011 1 .... 0 .. 000 ..... 1000 .   @azz_nx1_o1x4 n=4

UMLSLL_n1_s     11000001 001 0 .... 0 .. 001 ..... 110 ..   @azz_nx1_o2x4 n=1
UMLSLL_n1_d     11000001 011 0 .... 0 .. 001 ..... 110 ..   @azz_nx1_o2x4 n=1
UMLSLL_n1_s     11000001 001 0 .... 0 .. 000 ..... 1100 .   @azz_nx1_o1x4 n=2
UMLSLL_n1_d     11000001 011 0 .... 0 .. 000 ..... 1100 .   @azz_nx1_o1x4 n=2
UMLSLL_n1_s     11000001 001 1 .... 0 .. 000 ..... 1100 .   @azz_nx1_o1x4 n=4
UMLSLL_n1_d     11000001 011 1 .... 0 .. 000 ..... 1100 .   @azz_nx1_o1x4 n=4

USMLALL_n1_s    11000001 001 0 .... 0 .. 001 ..... 001 ..   @azz_nx1_o2x4 n=1
USMLALL_n1_s    11000001 001 0 .... 0 .. 000 ..... 0010 .   @azz_nx1_o1x4 n=2
USMLALL_n1_s    11000001 001 1 .... 0 .. 000 ..... 0010 .   @azz_nx1_o1x4 n=4

SUMLALL_n1_s    11000001 001 0 .... 0 .. 000 ..... 1010 .   @azz_nx1_o1x4 n=2
SUMLALL_n1_s    11000001 001 1 .... 0 .. 000 ..... 1010 .   @azz_nx1_o1x4 n=4

BFMLA_n1        11000001 011 0 .... 0 .. 111 ..... 00 ...   @azz_nx1_o3 n=2
FMLA_n1_h       11000001 001 0 .... 0 .. 111 ..... 00 ...   @azz_nx1_o3 n=2
FMLA_n1_s       11000001 001 0 .... 0 .. 110 ..... 00 ...   @azz_nx1_o3 n=2
FMLA_n1_d       11000001 011 0 .... 0 .. 110 ..... 00 ...   @azz_nx1_o3 n=2

BFMLA_n1        11000001 011 1 .... 0 .. 111 ..... 00 ...   @azz_nx1_o3 n=4
FMLA_n1_h       11000001 001 1 .... 0 .. 111 ..... 00 ...   @azz_nx1_o3 n=4
FMLA_n1_s       11000001 001 1 .... 0 .. 110 ..... 00 ...   @azz_nx1_o3 n=4
FMLA_n1_d       11000001 011 1 .... 0 .. 110 ..... 00 ...   @azz_nx1_o3 n=4

BFMLS_n1        11000001 011 0 .... 0 .. 111 ..... 01 ...   @azz_nx1_o3 n=2
FMLS_n1_h       11000001 001 0 .... 0 .. 111 ..... 01 ...   @azz_nx1_o3 n=2
FMLS_n1_s       11000001 001 0 .... 0 .. 110 ..... 01 ...   @azz_nx1_o3 n=2
FMLS_n1_d       11000001 011 0 .... 0 .. 110 ..... 01 ...   @azz_nx1_o3 n=2

BFMLS_n1        11000001 011 1 .... 0 .. 111 ..... 01 ...   @azz_nx1_o3 n=4
FMLS_n1_h       11000001 001 1 .... 0 .. 111 ..... 01 ...   @azz_nx1_o3 n=4
FMLS_n1_s       11000001 001 1 .... 0 .. 110 ..... 01 ...   @azz_nx1_o3 n=4
FMLS_n1_d       11000001 011 1 .... 0 .. 110 ..... 01 ...   @azz_nx1_o3 n=4

### SME2 Multi-vector Multiple Array Vectors

%zn_ax2         6:4 !function=times_2
%zn_ax4         7:3 !function=times_4

@azz_2x2_o3     ........ ... ..... . .. ... ..... .. off:3  \
                &azz_n n=2 rv=%mova_rv zn=%zn_ax2 zm=%zm_ax2
@azz_4x4_o3     ........ ... ..... . .. ... ..... .. off:3  \
                &azz_n n=4 rv=%mova_rv zn=%zn_ax4 zm=%zm_ax4

ADD_azz_nn_s    11000001 101 ....0 0 .. 110 ....0 10 ...    @azz_2x2_o3
ADD_azz_nn_s    11000001 101 ...01 0 .. 110 ...00 10 ...    @azz_4x4_o3
ADD_azz_nn_d    11000001 111 ....0 0 .. 110 ....0 10 ...    @azz_2x2_o3
ADD_azz_nn_d    11000001 111 ...01 0 .. 110 ...00 10 ...    @azz_4x4_o3

SUB_azz_nn_s    11000001 101 ....0 0 .. 110 ....0 11 ...    @azz_2x2_o3
SUB_azz_nn_s    11000001 101 ...01 0 .. 110 ...00 11 ...    @azz_4x4_o3
SUB_azz_nn_d    11000001 111 ....0 0 .. 110 ....0 11 ...    @azz_2x2_o3
SUB_azz_nn_d    11000001 111 ...01 0 .. 110 ...00 11 ...    @azz_4x4_o3

@azz_2x2_o2x2   ........ ... ..... . .. ... ..... ... ..    \
                &azz_n n=2 rv=%mova_rv zn=%zn_ax2 zm=%zm_ax2 off=%off2_x2
@azz_4x4_o2x2   ........ ... ..... . .. ... ..... ... ..    \
                &azz_n n=4 rv=%mova_rv zn=%zn_ax4 zm=%zm_ax4 off=%off2_x2

FMLAL_nn        11000001 101 ....0 0 .. 010 ....0 000 ..    @azz_2x2_o2x2
FMLAL_nn        11000001 101 ...01 0 .. 010 ...00 000 ..    @azz_4x4_o2x2

FMLSL_nn        11000001 101 ....0 0 .. 010 ....0 010 ..    @azz_2x2_o2x2
FMLSL_nn        11000001 101 ...01 0 .. 010 ...00 010 ..    @azz_4x4_o2x2

BFMLAL_nn       11000001 101 ....0 0 .. 010 ....0 100 ..    @azz_2x2_o2x2
BFMLAL_nn       11000001 101 ...01 0 .. 010 ...00 100 ..    @azz_4x4_o2x2

BFMLSL_nn       11000001 101 ....0 0 .. 010 ....0 110 ..    @azz_2x2_o2x2
BFMLSL_nn       11000001 101 ...01 0 .. 010 ...00 110 ..    @azz_4x4_o2x2

FDOT_nn         11000001 101 ....0 0 .. 100 ....0 00 ...    @azz_2x2_o3
FDOT_nn         11000001 101 ...01 0 .. 100 ...00 00 ...    @azz_4x4_o3

BFDOT_nn        11000001 101 ....0 0 .. 100 ....0 10 ...    @azz_2x2_o3
BFDOT_nn        11000001 101 ...01 0 .. 100 ...00 10 ...    @azz_4x4_o3

USDOT_nn        11000001 101 ....0 0 .. 101 ....0 01 ...    @azz_2x2_o3
USDOT_nn        11000001 101 ...01 0 .. 101 ...00 01 ...    @azz_4x4_o3

SDOT_nn_4b      11000001 101 ....0 0 .. 101 ....0 00 ...    @azz_2x2_o3
SDOT_nn_4b      11000001 101 ...01 0 .. 101 ...00 00 ...    @azz_4x4_o3
SDOT_nn_4h      11000001 111 ....0 0 .. 101 ....0 00 ...    @azz_2x2_o3
SDOT_nn_4h      11000001 111 ...01 0 .. 101 ...00 00 ...    @azz_4x4_o3
SDOT_nn_2h      11000001 111 ....0 0 .. 101 ....0 01 ...    @azz_2x2_o3
SDOT_nn_2h      11000001 111 ...01 0 .. 101 ...00 01 ...    @azz_4x4_o3

UDOT_nn_4b      11000001 101 ....0 0 .. 101 ....0 10 ...    @azz_2x2_o3
UDOT_nn_4b      11000001 101 ...01 0 .. 101 ...00 10 ...    @azz_4x4_o3
UDOT_nn_4h      11000001 111 ....0 0 .. 101 ....0 10 ...    @azz_2x2_o3
UDOT_nn_4h      11000001 111 ...01 0 .. 101 ...00 10 ...    @azz_4x4_o3
UDOT_nn_2h      11000001 111 ....0 0 .. 101 ....0 11 ...    @azz_2x2_o3
UDOT_nn_2h      11000001 111 ...01 0 .. 101 ...00 11 ...    @azz_4x4_o3

SMLAL_nn        11000001 111 ....0 0 .. 010 ....0 000 ..    @azz_2x2_o2x2
SMLAL_nn        11000001 111 ...01 0 .. 010 ...00 000 ..    @azz_4x4_o2x2

SMLSL_nn        11000001 111 ....0 0 .. 010 ....0 010 ..    @azz_2x2_o2x2
SMLSL_nn        11000001 111 ...01 0 .. 010 ...00 010 ..    @azz_4x4_o2x2

UMLAL_nn        11000001 111 ....0 0 .. 010 ....0 100 ..    @azz_2x2_o2x2
UMLAL_nn        11000001 111 ...01 0 .. 010 ...00 100 ..    @azz_4x4_o2x2

UMLSL_nn        11000001 111 ....0 0 .. 010 ....0 110 ..    @azz_2x2_o2x2
UMLSL_nn        11000001 111 ...01 0 .. 010 ...00 110 ..    @azz_4x4_o2x2

@azz_2x2_o1x4   ........ ... ..... . .. ... ..... ... ..    \
                &azz_n n=2 rv=%mova_rv zn=%zn_ax2 zm=%zm_ax2 off=%off1_x4
@azz_4x4_o1x4   ........ ... ..... . .. ... ..... ... ..    \
                &azz_n n=4 rv=%mova_rv zn=%zn_ax4 zm=%zm_ax4 off=%off1_x4

SMLALL_nn_s     11000001 101 ....0 0 .. 000 ....0 0000 .    @azz_2x2_o1x4
SMLALL_nn_d     11000001 111 ....0 0 .. 000 ....0 0000 .    @azz_2x2_o1x4
SMLALL_nn_s     11000001 101 ...01 0 .. 000 ...00 0000 .    @azz_4x4_o1x4
SMLALL_nn_d     11000001 111 ...01 0 .. 000 ...00 0000 .    @azz_4x4_o1x4

SMLSLL_nn_s     11000001 101 ....0 0 .. 000 ....0 0100 .    @azz_2x2_o1x4
SMLSLL_nn_d     11000001 111 ....0 0 .. 000 ....0 0100 .    @azz_2x2_o1x4
SMLSLL_nn_s     11000001 101 ...01 0 .. 000 ...00 0100 .    @azz_4x4_o1x4
SMLSLL_nn_d     11000001 111 ...01 0 .. 000 ...00 0100 .    @azz_4x4_o1x4

UMLALL_nn_s     11000001 101 ....0 0 .. 000 ....0 1000 .    @azz_2x2_o1x4
UMLALL_nn_d     11000001 111 ....0 0 .. 000 ....0 1000 .    @azz_2x2_o1x4
UMLALL_nn_s     11000001 101 ...01 0 .. 000 ...00 1000 .    @azz_4x4_o1x4
UMLALL_nn_d     11000001 111 ...01 0 .. 000 ...00 1000 .    @azz_4x4_o1x4

UMLSLL_nn_s     11000001 101 ....0 0 .. 000 ....0 1100 .    @azz_2x2_o1x4
UMLSLL_nn_d     11000001 111 ....0 0 .. 000 ....0 1100 .    @azz_2x2_o1x4
UMLSLL_nn_s     11000001 101 ...01 0 .. 000 ...00 1100 .    @azz_4x4_o1x4
UMLSLL_nn_d     11000001 111 ...01 0 .. 000 ...00 1100 .    @azz_4x4_o1x4

USMLALL_nn_s    11000001 101 ....0 0 .. 000 ....0 0010 .    @azz_2x2_o1x4
USMLALL_nn_s    11000001 101 ...01 0 .. 000 ...00 0010 .    @azz_4x4_o1x4

BFMLA_nn        11000001 111 ....0 0 .. 100 ....0 01 ...    @azz_2x2_o3
FMLA_nn_h       11000001 101 ....0 0 .. 100 ....0 01 ...    @azz_2x2_o3
FMLA_nn_s       11000001 101 ....0 0 .. 110 ....0 00 ...    @azz_2x2_o3
FMLA_nn_d       11000001 111 ....0 0 .. 110 ....0 00 ...    @azz_2x2_o3

BFMLA_nn        11000001 111 ...01 0 .. 100 ...00 01 ...    @azz_4x4_o3
FMLA_nn_h       11000001 101 ...01 0 .. 100 ...00 01 ...    @azz_4x4_o3
FMLA_nn_s       11000001 101 ...01 0 .. 110 ...00 00 ...    @azz_4x4_o3
FMLA_nn_d       11000001 111 ...01 0 .. 110 ...00 00 ...    @azz_4x4_o3

BFMLS_nn        11000001 111 ....0 0 .. 100 ....0 11 ...    @azz_2x2_o3
FMLS_nn_h       11000001 101 ....0 0 .. 100 ....0 11 ...    @azz_2x2_o3
FMLS_nn_s       11000001 101 ....0 0 .. 110 ....0 01 ...    @azz_2x2_o3
FMLS_nn_d       11000001 111 ....0 0 .. 110 ....0 01 ...    @azz_2x2_o3

BFMLS_nn        11000001 111 ...01 0 .. 100 ...00 11 ...    @azz_4x4_o3
FMLS_nn_h       11000001 101 ...01 0 .. 100 ...00 11 ...    @azz_4x4_o3
FMLS_nn_s       11000001 101 ...01 0 .. 110 ...00 01 ...    @azz_4x4_o3
FMLS_nn_d       11000001 111 ...01 0 .. 110 ...00 01 ...    @azz_4x4_o3

&az_n           n off rv zm
@az_2x2_o3      ........ ... ..... . .. ... ..... .. off:3  \
                &az_n n=2 rv=%mova_rv zm=%zn_ax2
@az_4x4_o3      ........ ... ..... . .. ... ..... .. off:3  \
                &az_n n=4 rv=%mova_rv zm=%zn_ax4

FADD_nn_h       11000001 101 00100 0 .. 111 ....0 00 ...    @az_2x2_o3
FADD_nn_s       11000001 101 00000 0 .. 111 ....0 00 ...    @az_2x2_o3
FADD_nn_d       11000001 111 00000 0 .. 111 ....0 00 ...    @az_2x2_o3
FADD_nn_h       11000001 101 00101 0 .. 111 ...00 00 ...    @az_4x4_o3
FADD_nn_s       11000001 101 00001 0 .. 111 ...00 00 ...    @az_4x4_o3
FADD_nn_d       11000001 111 00001 0 .. 111 ...00 00 ...    @az_4x4_o3

FSUB_nn_h       11000001 101 00100 0 .. 111 ....0 01 ...    @az_2x2_o3
FSUB_nn_s       11000001 101 00000 0 .. 111 ....0 01 ...    @az_2x2_o3
FSUB_nn_d       11000001 111 00000 0 .. 111 ....0 01 ...    @az_2x2_o3
FSUB_nn_h       11000001 101 00101 0 .. 111 ...00 01 ...    @az_4x4_o3
FSUB_nn_s       11000001 101 00001 0 .. 111 ...00 01 ...    @az_4x4_o3
FSUB_nn_d       11000001 111 00001 0 .. 111 ...00 01 ...    @az_4x4_o3

BFADD_nn        11000001 111 00100 0 .. 111 ....0 00 ...    @az_2x2_o3
BFADD_nn        11000001 111 00101 0 .. 111 ...00 00 ...    @az_4x4_o3
BFSUB_nn        11000001 111 00100 0 .. 111 ....0 01 ...    @az_2x2_o3
BFSUB_nn        11000001 111 00101 0 .. 111 ...00 01 ...    @az_4x4_o3

### SME2 Multi-vector Indexed

&azx_n          n off rv zn zm idx

%idx3_15_10     15:1 10:2
%idx2_10_2      10:2 2:1

@azx_1x1_o3x2   ........ .... zm:4 . .. . .. zn:5 .. ...    \
                &azx_n n=1 rv=%mova_rv off=%off3_x2 idx=%idx3_15_10
@azx_2x1_o2x2   ........ .... zm:4 . .. . .. ..... .. ...   \
                &azx_n n=2 rv=%mova_rv off=%off2_x2 zn=%zn_ax2 idx=%idx2_10_2
@azx_4x1_o2x2   ........ .... zm:4 . .. . .. ..... .. ...   \
                &azx_n n=4 rv=%mova_rv off=%off2_x2 zn=%zn_ax4 idx=%idx2_10_2

FMLAL_nx        11000001 1000 .... . .. 1 .. ..... 00 ...   @azx_1x1_o3x2
FMLAL_nx        11000001 1001 .... 0 .. 1 .. ....0 00 ...   @azx_2x1_o2x2
FMLAL_nx        11000001 1001 .... 1 .. 1 .. ...00 00 ...   @azx_4x1_o2x2

FMLSL_nx        11000001 1000 .... . .. 1 .. ..... 01 ...   @azx_1x1_o3x2
FMLSL_nx        11000001 1001 .... 0 .. 1 .. ....0 01 ...   @azx_2x1_o2x2
FMLSL_nx        11000001 1001 .... 1 .. 1 .. ...00 01 ...   @azx_4x1_o2x2

BFMLAL_nx       11000001 1000 .... . .. 1 .. ..... 10 ...   @azx_1x1_o3x2
BFMLAL_nx       11000001 1001 .... 0 .. 1 .. ....0 10 ...   @azx_2x1_o2x2
BFMLAL_nx       11000001 1001 .... 1 .. 1 .. ...00 10 ...   @azx_4x1_o2x2

BFMLSL_nx       11000001 1000 .... . .. 1 .. ..... 11 ...   @azx_1x1_o3x2
BFMLSL_nx       11000001 1001 .... 0 .. 1 .. ....0 11 ...   @azx_2x1_o2x2
BFMLSL_nx       11000001 1001 .... 1 .. 1 .. ...00 11 ...   @azx_4x1_o2x2

@azx_2x1_i2_o3  ........ .... zm:4 . .. . idx:2 .... ... off:3 \
                &azx_n n=2 rv=%mova_rv zn=%zn_ax2
@azx_4x1_i2_o3  ........ .... zm:4 . .. . idx:2 .... ... off:3 \
                &azx_n n=4 rv=%mova_rv zn=%zn_ax4
@azx_2x1_i1_o3  ........ .... zm:4 . .. .. idx:1 .... ... off:3 \
                &azx_n n=2 rv=%mova_rv zn=%zn_ax2
@azx_4x1_i1_o3  ........ .... zm:4 . .. .. idx:1 .... ... off:3 \
                &azx_n n=4 rv=%mova_rv zn=%zn_ax4

FDOT_nx         11000001 0101 .... 0 .. 1 .. ....0 01 ...   @azx_2x1_i2_o3
FDOT_nx         11000001 0101 .... 1 .. 1 .. ...00 01 ...   @azx_4x1_i2_o3

BFDOT_nx        11000001 0101 .... 0 .. 1 .. ....0 11 ...   @azx_2x1_i2_o3
BFDOT_nx        11000001 0101 .... 1 .. 1 .. ...00 11 ...   @azx_4x1_i2_o3

FVDOT           11000001 0101 .... 0 .. 0 .. ....0 01 ...   @azx_2x1_i2_o3
BFVDOT          11000001 0101 .... 0 .. 0 .. ....0 11 ...   @azx_2x1_i2_o3

SDOT_nx_2h      11000001 0101 .... 0 .. 1 .. ....0 00 ...   @azx_2x1_i2_o3
SDOT_nx_2h      11000001 0101 .... 1 .. 1 .. ...00 00 ...   @azx_4x1_i2_o3
SDOT_nx_4b      11000001 0101 .... 0 .. 1 .. ....1 00 ...   @azx_2x1_i2_o3
SDOT_nx_4b      11000001 0101 .... 1 .. 1 .. ...01 00 ...   @azx_4x1_i2_o3
SDOT_nx_4h      11000001 1101 .... 0 .. 00 . ....0 01 ...   @azx_2x1_i1_o3
SDOT_nx_4h      11000001 1101 .... 1 .. 00 . ...00 01 ...   @azx_4x1_i1_o3

UDOT_nx_2h      11000001 0101 .... 0 .. 1 .. ....0 10 ...   @azx_2x1_i2_o3
UDOT_nx_2h      11000001 0101 .... 1 .. 1 .. ...00 10 ...   @azx_4x1_i2_o3
UDOT_nx_4b      11000001 0101 .... 0 .. 1 .. ....1 10 ...   @azx_2x1_i2_o3
UDOT_nx_4b      11000001 0101 .... 1 .. 1 .. ...01 10 ...   @azx_4x1_i2_o3
UDOT_nx_4h      11000001 1101 .... 0 .. 00 . ....0 11 ...   @azx_2x1_i1_o3
UDOT_nx_4h      11000001 1101 .... 1 .. 00 . ...00 11 ...   @azx_4x1_i1_o3

USDOT_nx        11000001 0101 .... 0 .. 1 .. ....1 01 ...   @azx_2x1_i2_o3
USDOT_nx        11000001 0101 .... 1 .. 1 .. ...01 01 ...   @azx_4x1_i2_o3

SUDOT_nx        11000001 0101 .... 0 .. 1 .. ....1 11 ...   @azx_2x1_i2_o3
SUDOT_nx        11000001 0101 .... 1 .. 1 .. ...01 11 ...   @azx_4x1_i2_o3

SVDOT_nx_2h     11000001 0101 .... 0 .. 0 .. ....1 00 ...   @azx_2x1_i2_o3
SVDOT_nx_4b     11000001 0101 .... 1 .. 0 .. ...01 00 ...   @azx_4x1_i2_o3
SVDOT_nx_4h     11000001 1101 .... 1 .. 01 . ...00 01 ...   @azx_4x1_i1_o3

UVDOT_nx_2h     11000001 0101 .... 0 .. 0 .. ....1 10 ...   @azx_2x1_i2_o3
UVDOT_nx_4b     11000001 0101 .... 1 .. 0 .. ...01 10 ...   @azx_4x1_i2_o3
UVDOT_nx_4h     11000001 1101 .... 1 .. 01 . ...00 11 ...   @azx_4x1_i1_o3

SUVDOT_nx_4b    11000001 0101 .... 1 .. 0 .. ...01 11 ...   @azx_4x1_i2_o3
USVDOT_nx_4b    11000001 0101 .... 1 .. 0 .. ...01 01 ...   @azx_4x1_i2_o3

SMLAL_nx        11000001 1100 .... . .. 1 .. ..... 00 ...   @azx_1x1_o3x2
SMLAL_nx        11000001 1101 .... 0 .. 1 .. ....0 00 ...   @azx_2x1_o2x2
SMLAL_nx        11000001 1101 .... 1 .. 1 .. ...00 00 ...   @azx_4x1_o2x2

SMLSL_nx        11000001 1100 .... . .. 1 .. ..... 01 ...   @azx_1x1_o3x2
SMLSL_nx        11000001 1101 .... 0 .. 1 .. ....0 01 ...   @azx_2x1_o2x2
SMLSL_nx        11000001 1101 .... 1 .. 1 .. ...00 01 ...   @azx_4x1_o2x2

UMLAL_nx        11000001 1100 .... . .. 1 .. ..... 10 ...   @azx_1x1_o3x2
UMLAL_nx        11000001 1101 .... 0 .. 1 .. ....0 10 ...   @azx_2x1_o2x2
UMLAL_nx        11000001 1101 .... 1 .. 1 .. ...00 10 ...   @azx_4x1_o2x2

UMLSL_nx        11000001 1100 .... . .. 1 .. ..... 11 ...   @azx_1x1_o3x2
UMLSL_nx        11000001 1101 .... 0 .. 1 .. ....0 11 ...   @azx_2x1_o2x2
UMLSL_nx        11000001 1101 .... 1 .. 1 .. ...00 11 ...   @azx_4x1_o2x2

%idx4_15_10     15:1 10:3
%idx4_10_1      10:2 1:2
%idx3_10_1      10:1 1:2

@azx_1x1_i4_o2  ........ .... zm:4 . .. ... zn:5 ... ..     \
                &azx_n n=1 rv=%mova_rv off=%off2_x4 idx=%idx4_15_10
@azx_1x1_i3_o2  ........ .... zm:4 . .. ... zn:5 ... ..     \
                &azx_n n=1 rv=%mova_rv off=%off2_x4 idx=%idx3_15_10
@azx_2x1_i4_o1  ........ .... zm:4 . .. ... ..... ... ..     \
                &azx_n n=2 rv=%mova_rv off=%off1_x4 zn=%zn_ax2 idx=%idx4_10_1
@azx_2x1_i3_o1  ........ .... zm:4 . .. ... ..... ... ..     \
                &azx_n n=2 rv=%mova_rv off=%off1_x4 zn=%zn_ax2 idx=%idx3_10_1
@azx_4x1_i4_o1  ........ .... zm:4 . .. ... ..... ... ..     \
                &azx_n n=4 rv=%mova_rv off=%off1_x4 zn=%zn_ax4 idx=%idx4_10_1
@azx_4x1_i3_o1  ........ .... zm:4 . .. ... ..... ... ..     \
                &azx_n n=4 rv=%mova_rv off=%off1_x4 zn=%zn_ax4 idx=%idx3_10_1

SMLALL_nx_s     11000001 0000 .... . .. ... ..... 000 ..    @azx_1x1_i4_o2
SMLALL_nx_d     11000001 1000 .... . .. 0.. ..... 000 ..    @azx_1x1_i3_o2
SMLALL_nx_s     11000001 0001 .... 0 .. 0.. ....0 00 ...    @azx_2x1_i4_o1
SMLALL_nx_d     11000001 1001 .... 0 .. 00. ....0 00 ...    @azx_2x1_i3_o1
SMLALL_nx_s     11000001 0001 .... 1 .. 0.. ...00 00 ...    @azx_4x1_i4_o1
SMLALL_nx_d     11000001 1001 .... 1 .. 00. ...00 00 ...    @azx_4x1_i3_o1

SMLSLL_nx_s     11000001 0000 .... . .. ... ..... 010 ..    @azx_1x1_i4_o2
SMLSLL_nx_d     11000001 1000 .... . .. 0.. ..... 010 ..    @azx_1x1_i3_o2
SMLSLL_nx_s     11000001 0001 .... 0 .. 0.. ....0 01 ...    @azx_2x1_i4_o1
SMLSLL_nx_d     11000001 1001 .... 0 .. 00. ....0 01 ...    @azx_2x1_i3_o1
SMLSLL_nx_s     11000001 0001 .... 1 .. 0.. ...00 01 ...    @azx_4x1_i4_o1
SMLSLL_nx_d     11000001 1001 .... 1 .. 00. ...00 01 ...    @azx_4x1_i3_o1

UMLALL_nx_s     11000001 0000 .... . .. ... ..... 100 ..    @azx_1x1_i4_o2
UMLALL_nx_d     11000001 1000 .... . .. 0.. ..... 100 ..    @azx_1x1_i3_o2
UMLALL_nx_s     11000001 0001 .... 0 .. 0.. ....0 10 ...    @azx_2x1_i4_o1
UMLALL_nx_d     11000001 1001 .... 0 .. 00. ....0 10 ...    @azx_2x1_i3_o1
UMLALL_nx_s     11000001 0001 .... 1 .. 0.. ...00 10 ...    @azx_4x1_i4_o1
UMLALL_nx_d     11000001 1001 .... 1 .. 00. ...00 10 ...    @azx_4x1_i3_o1

UMLSLL_nx_s     11000001 0000 .... . .. ... ..... 110 ..    @azx_1x1_i4_o2
UMLSLL_nx_d     11000001 1000 .... . .. 0.. ..... 110 ..    @azx_1x1_i3_o2
UMLSLL_nx_s     11000001 0001 .... 0 .. 0.. ....0 11 ...    @azx_2x1_i4_o1
UMLSLL_nx_d     11000001 1001 .... 0 .. 00. ....0 11 ...    @azx_2x1_i3_o1
UMLSLL_nx_s     11000001 0001 .... 1 .. 0.. ...00 11 ...    @azx_4x1_i4_o1
UMLSLL_nx_d     11000001 1001 .... 1 .. 00. ...00 11 ...    @azx_4x1_i3_o1

USMLALL_nx_s    11000001 0000 .... . .. ... ..... 001 ..    @azx_1x1_i4_o2
USMLALL_nx_s    11000001 0001 .... 0 .. 0.. ....1 00 ...    @azx_2x1_i4_o1
USMLALL_nx_s    11000001 0001 .... 1 .. 0.. ...01 00 ...    @azx_4x1_i4_o1

SUMLALL_nx_s    11000001 0000 .... . .. ... ..... 101 ..    @azx_1x1_i4_o2
SUMLALL_nx_s    11000001 0001 .... 0 .. 0.. ....1 10 ...    @azx_2x1_i4_o1
SUMLALL_nx_s    11000001 0001 .... 1 .. 0.. ...01 10 ...    @azx_4x1_i4_o1

%idx3_10_3      10:2 3:1
@azx_2x1_i3_o3  ........ .... zm:4 . .. ... ..... .. off:3  \
                &azx_n n=2 rv=%mova_rv zn=%zn_ax2 idx=%idx3_10_3
@azx_4x1_i3_o3  ........ .... zm:4 . .. ... ..... .. off:3  \
                &azx_n n=4 rv=%mova_rv zn=%zn_ax4 idx=%idx3_10_3

BFMLA_nx        11000001 0001 .... 0 .. 1.. ....1 0 ....    @azx_2x1_i3_o3
FMLA_nx_h       11000001 0001 .... 0 .. 1.. ....0 0 ....    @azx_2x1_i3_o3
FMLA_nx_s       11000001 0101 .... 0 .. 0.. ....0 00 ...    @azx_2x1_i2_o3
FMLA_nx_d       11000001 1101 .... 0 .. 00. ....0 00 ...    @azx_2x1_i1_o3

BFMLA_nx        11000001 0001 .... 1 .. 1.. ...01 0 ....    @azx_4x1_i3_o3
FMLA_nx_h       11000001 0001 .... 1 .. 1.. ...00 0 ....    @azx_4x1_i3_o3
FMLA_nx_s       11000001 0101 .... 1 .. 0.. ...00 00 ...    @azx_4x1_i2_o3
FMLA_nx_d       11000001 1101 .... 1 .. 00. ...00 00 ...    @azx_4x1_i1_o3

BFMLS_nx        11000001 0001 .... 0 .. 1.. ....1 1 ....    @azx_2x1_i3_o3
FMLS_nx_h       11000001 0001 .... 0 .. 1.. ....0 1 ....    @azx_2x1_i3_o3
FMLS_nx_s       11000001 0101 .... 0 .. 0.. ....0 10 ...    @azx_2x1_i2_o3
FMLS_nx_d       11000001 1101 .... 0 .. 00. ....0 10 ...    @azx_2x1_i1_o3

BFMLS_nx        11000001 0001 .... 1 .. 1.. ...01 1 ....    @azx_4x1_i3_o3
FMLS_nx_h       11000001 0001 .... 1 .. 1.. ...00 1 ....    @azx_4x1_i3_o3
FMLS_nx_s       11000001 0101 .... 1 .. 0.. ...00 10 ...    @azx_4x1_i2_o3
FMLS_nx_d       11000001 1101 .... 1 .. 00. ...00 10 ...    @azx_4x1_i1_o3

### SME2 Add / Sub array accumulators

ADD_aaz_s       11000001 101 000000 .. 111 ....0 10 ...     @az_2x2_o3
ADD_aaz_s       11000001 101 000010 .. 111 ...00 10 ...     @az_4x4_o3
ADD_aaz_d       11000001 111 000000 .. 111 ....0 10 ...     @az_2x2_o3
ADD_aaz_d       11000001 111 000010 .. 111 ...00 10 ...     @az_4x4_o3

SUB_aaz_s       11000001 101 000000 .. 111 ....0 11 ...     @az_2x2_o3
SUB_aaz_s       11000001 101 000010 .. 111 ...00 11 ...     @az_4x4_o3
SUB_aaz_d       11000001 111 000000 .. 111 ....0 11 ...     @az_2x2_o3
SUB_aaz_d       11000001 111 000010 .. 111 ...00 11 ...     @az_4x4_o3

### SME2 Multi-vector SVE Constructive Unary

&zz_e           zd zn esz
&zz_n           zd zn n
@zz_1x2         ........ ... ..... ...... ..... zd:5        \
                &zz_n n=1 zn=%zn_ax2
@zz_1x4         ........ ... ..... ...... ..... zd:5        \
                &zz_n n=1 zn=%zn_ax4
@zz_2x1         ........ ... ..... ...... zn:5  .....       \
                &zz_n n=1 zd=%zd_ax2
@zz_2x2         ........ ... ..... ...... .... . .....      \
                &zz_n n=2 zd=%zd_ax2 zn=%zn_ax2
@zz_4x4         ........ ... ..... ...... .... . .....      \
                &zz_n n=4 zd=%zd_ax4 zn=%zn_ax4
@zz_4x2_n1      ........ ... ..... ...... .... . .....      \
                &zz_n n=1 zd=%zd_ax4 zn=%zn_ax2

BFCVT           11000001 011 00000 111000 ....0 .....       @zz_1x2
BFCVTN          11000001 011 00000 111000 ....1 .....       @zz_1x2

FCVT_n          11000001 001 00000 111000 ....0 .....       @zz_1x2
FCVTN           11000001 001 00000 111000 ....1 .....       @zz_1x2

FCVT_w          11000001 101 00000 111000 ..... ....0       @zz_2x1
FCVTL           11000001 101 00000 111000 ..... ....1       @zz_2x1

FCVTZS          11000001 001 00001 111000 ....0 ....0       @zz_2x2
FCVTZS          11000001 001 10001 111000 ...00 ...00       @zz_4x4
FCVTZU          11000001 001 00001 111000 ....1 ....0       @zz_2x2
FCVTZU          11000001 001 10001 111000 ...01 ...00       @zz_4x4

SCVTF           11000001 001 00010 111000 ....0 ....0       @zz_2x2
SCVTF           11000001 001 10010 111000 ...00 ...00       @zz_4x4
UCVTF           11000001 001 00010 111000 ....1 ....0       @zz_2x2
UCVTF           11000001 001 10010 111000 ...01 ...00       @zz_4x4

FRINTN          11000001 101 01000 111000 ....0 ....0       @zz_2x2
FRINTN          11000001 101 11000 111000 ...00 ...00       @zz_4x4
FRINTP          11000001 101 01001 111000 ....0 ....0       @zz_2x2
FRINTP          11000001 101 11001 111000 ...00 ...00       @zz_4x4
FRINTM          11000001 101 01010 111000 ....0 ....0       @zz_2x2
FRINTM          11000001 101 11010 111000 ...00 ...00       @zz_4x4
FRINTA          11000001 101 01100 111000 ....0 ....0       @zz_2x2
FRINTA          11000001 101 11100 111000 ...00 ...00       @zz_4x4

SQCVT_sh        11000001 001 00011 111000 ....0 .....       @zz_1x2
UQCVT_sh        11000001 001 00011 111000 ....1 .....       @zz_1x2
SQCVTU_sh       11000001 011 00011 111000 ....0 .....       @zz_1x2

SQCVT_sb        11000001 001 10011 111000 ...00 .....       @zz_1x4
UQCVT_sb        11000001 001 10011 111000 ...01 .....       @zz_1x4
SQCVTU_sb       11000001 011 10011 111000 ...00 .....       @zz_1x4

SQCVT_dh        11000001 101 10011 111000 ...00 .....       @zz_1x4
UQCVT_dh        11000001 101 10011 111000 ...01 .....       @zz_1x4
SQCVTU_dh       11000001 111 10011 111000 ...00 .....       @zz_1x4

SQCVTN_sb       11000001 001 10011 111000 ...10 .....       @zz_1x4
UQCVTN_sb       11000001 001 10011 111000 ...11 .....       @zz_1x4
SQCVTUN_sb      11000001 011 10011 111000 ...10 .....       @zz_1x4

SQCVTN_dh       11000001 101 10011 111000 ...10 .....       @zz_1x4
UQCVTN_dh       11000001 101 10011 111000 ...11 .....       @zz_1x4
SQCVTUN_dh      11000001 111 10011 111000 ...10 .....       @zz_1x4

SUNPK_2bh       11000001 011 00101 111000 ..... ....0       @zz_2x1
SUNPK_2hs       11000001 101 00101 111000 ..... ....0       @zz_2x1
SUNPK_2sd       11000001 111 00101 111000 ..... ....0       @zz_2x1

UUNPK_2bh       11000001 011 00101 111000 ..... ....1       @zz_2x1
UUNPK_2hs       11000001 101 00101 111000 ..... ....1       @zz_2x1
UUNPK_2sd       11000001 111 00101 111000 ..... ....1       @zz_2x1

SUNPK_4bh       11000001 011 10101 111000 ....0 ...00       @zz_4x2_n1
SUNPK_4hs       11000001 101 10101 111000 ....0 ...00       @zz_4x2_n1
SUNPK_4sd       11000001 111 10101 111000 ....0 ...00       @zz_4x2_n1

UUNPK_4bh       11000001 011 10101 111000 ....0 ...01       @zz_4x2_n1
UUNPK_4hs       11000001 101 10101 111000 ....0 ...01       @zz_4x2_n1
UUNPK_4sd       11000001 111 10101 111000 ....0 ...01       @zz_4x2_n1

ZIP_4           11000001 esz:2 1 10110 111000 ...00 ... 00   \
                &zz_e zd=%zd_ax4 zn=%zn_ax4
ZIP_4           11000001 001     10111 111000 ...00 ... 00   \
                &zz_e esz=4 zd=%zd_ax4 zn=%zn_ax4

UZP_4           11000001 esz:2 1 10110 111000 ...00 ... 10   \
                &zz_e zd=%zd_ax4 zn=%zn_ax4
UZP_4           11000001 001     10111 111000 ...00 ... 10   \
                &zz_e esz=4 zd=%zd_ax4 zn=%zn_ax4

### SME2 Multi-vector SVE Constructive Binary

&rshr           zd zn shift

%rshr_sh_shift  16:4 !function=rsub_16
%rshr_sb_shift  16:5 !function=rsub_32
%rshr_dh_shift  22:1 16:5 !function=rsub_64

@rshr_sh        ........ .... .... ...... ..... zd:5        \
                &rshr zn=%zn_ax2 shift=%rshr_sh_shift
@rshr_sb        ........ ... ..... ...... ..... zd:5        \
                &rshr zn=%zn_ax4 shift=%rshr_sb_shift
@rshr_dh        ........ ... ..... ...... ..... zd:5        \
                &rshr zn=%zn_ax4 shift=%rshr_dh_shift

SQRSHR_sh       11000001 1110 .... 110101 ....0 .....       @rshr_sh
UQRSHR_sh       11000001 1110 .... 110101 ....1 .....       @rshr_sh
SQRSHRU_sh      11000001 1111 .... 110101 ....0 .....       @rshr_sh

SQRSHR_sb       11000001 011 ..... 110110 ...00 .....       @rshr_sb
SQRSHR_dh       11000001 1.1 ..... 110110 ...00 .....       @rshr_dh
UQRSHR_sb       11000001 011 ..... 110110 ...01 .....       @rshr_sb
UQRSHR_dh       11000001 1.1 ..... 110110 ...01 .....       @rshr_dh
SQRSHRU_sb      11000001 011 ..... 110110 ...10 .....       @rshr_sb
SQRSHRU_dh      11000001 1.1 ..... 110110 ...10 .....       @rshr_dh

SQRSHRN_sh      01000101 1011 .... 001010 ....0 .....       @rshr_sh
UQRSHRN_sh      01000101 1011 .... 001110 ....0 .....       @rshr_sh
SQRSHRUN_sh     01000101 1011 .... 000010 ....0 .....       @rshr_sh

SQRSHRN_sb      11000001 011 ..... 110111 ...00 .....       @rshr_sb
SQRSHRN_dh      11000001 1.1 ..... 110111 ...00 .....       @rshr_dh
UQRSHRN_sb      11000001 011 ..... 110111 ...01 .....       @rshr_sb
UQRSHRN_dh      11000001 1.1 ..... 110111 ...01 .....       @rshr_dh
SQRSHRUN_sb     11000001 011 ..... 110111 ...10 .....       @rshr_sb
SQRSHRUN_dh     11000001 1.1 ..... 110111 ...10 .....       @rshr_dh

&zzz_e          zd zn zm esz

ZIP_2           11000001 esz:2 1 zm:5 110100 zn:5 .... 0    \
                &zzz_e zd=%zd_ax2
ZIP_2           11000001 00    1 zm:5 110101 zn:5 .... 0    \
                &zzz_e zd=%zd_ax2 esz=4

UZP_2           11000001 esz:2 1 zm:5 110100 zn:5 .... 1    \
                &zzz_e zd=%zd_ax2
UZP_2           11000001 00    1 zm:5 110101 zn:5 .... 1    \
                &zzz_e zd=%zd_ax2 esz=4

&zzz_en         zd zn zm esz n

FCLAMP          11000001 esz:2 1 zm:5 110000 zn:5 .... 0    \
                &zzz_en zd=%zd_ax2 n=2
FCLAMP          11000001 esz:2 1 zm:5 110010 zn:5 ...0 0    \
                &zzz_en zd=%zd_ax4 n=4

SCLAMP          11000001 esz:2 1 zm:5 110001 zn:5 .... 0    \
                &zzz_en zd=%zd_ax2 n=2
SCLAMP          11000001 esz:2 1 zm:5 110011 zn:5 ...0 0    \
                &zzz_en zd=%zd_ax4 n=4

UCLAMP          11000001 esz:2 1 zm:5 110001 zn:5 .... 1    \
                &zzz_en zd=%zd_ax2 n=2
UCLAMP          11000001 esz:2 1 zm:5 110011 zn:5 ...0 1    \
                &zzz_en zd=%zd_ax4 n=4

### SME2 Multi-vector SVE Select

%sel_pg         10:3 !function=plus_8

SEL             11000001 esz:2 1 ....0 100 ... ....0 ....0  \
                n=2 zd=%zd_ax2 zn=%zn_ax2 zm=%zm_ax2 pg=%sel_pg
SEL             11000001 esz:2 1 ...01 100 ... ...00 ...00  \
                n=4 zd=%zd_ax4 zn=%zn_ax4 zm=%zm_ax4 pg=%sel_pg

### SME Multiple Zero

&zero_za        rv off ngrp nvec

ZERO_za         11000000 000011 000 .. 0000000000 off:3 \
                &zero_za ngrp=2 nvec=1 rv=%mova_rv
ZERO_za         11000000 000011 100 .. 0000000000 off:3 \
                &zero_za ngrp=4 nvec=1 rv=%mova_rv

ZERO_za         11000000 000011 001 .. 0000000000 ...   \
                &zero_za ngrp=1 nvec=2 rv=%mova_rv off=%off3_x2
ZERO_za         11000000 000011 010 .. 0000000000 0..   \
                &zero_za ngrp=2 nvec=2 rv=%mova_rv off=%off2_x2
ZERO_za         11000000 000011 011 .. 0000000000 0..   \
                &zero_za ngrp=4 nvec=2 rv=%mova_rv off=%off2_x2

ZERO_za         11000000 000011 101 .. 0000000000 0..   \
                &zero_za ngrp=1 nvec=4 rv=%mova_rv off=%off2_x4
ZERO_za         11000000 000011 110 .. 0000000000 00.   \
                &zero_za ngrp=2 nvec=4 rv=%mova_rv off=%off1_x4
ZERO_za         11000000 000011 111 .. 0000000000 00.   \
                &zero_za ngrp=4 nvec=4 rv=%mova_rv off=%off1_x4

### SME Lookup Table Read

&lut            zd zn idx

# LUTI2, consecutive
LUTI2_c_1b      1100 0000 1100 11 idx:4    00 00 zn:5 zd:5      &lut
LUTI2_c_1h      1100 0000 1100 11 idx:4    01 00 zn:5 zd:5      &lut
LUTI2_c_1s      1100 0000 1100 11 idx:4    10 00 zn:5 zd:5      &lut

LUTI2_c_2b      1100 0000 1000 11 idx:3  1 00 00 zn:5 .... 0    &lut zd=%zd_ax2
LUTI2_c_2h      1100 0000 1000 11 idx:3  1 01 00 zn:5 .... 0    &lut zd=%zd_ax2
LUTI2_c_2s      1100 0000 1000 11 idx:3  1 10 00 zn:5 .... 0    &lut zd=%zd_ax2

LUTI2_c_4b      1100 0000 1000 11 idx:2 10 00 00 zn:5 ... 00    &lut zd=%zd_ax4
LUTI2_c_4h      1100 0000 1000 11 idx:2 10 01 00 zn:5 ... 00    &lut zd=%zd_ax4
LUTI2_c_4s      1100 0000 1000 11 idx:2 10 10 00 zn:5 ... 00    &lut zd=%zd_ax4

# LUTI2, strided (must check zd alignment)
LUTI2_s_2b      1100 0000 1001 11 idx:3  1 00 00 zn:5 zd:5      &lut
LUTI2_s_2h      1100 0000 1001 11 idx:3  1 01 00 zn:5 zd:5      &lut

LUTI2_s_4b      1100 0000 1001 11 idx:2 10 00 00 zn:5 zd:5      &lut
LUTI2_s_4h      1100 0000 1001 11 idx:2 10 01 00 zn:5 zd:5      &lut

# LUTI4, consecutive
LUTI4_c_1b      1100 0000 1100 101 idx:3    00 00 zn:5 zd:5     &lut
LUTI4_c_1h      1100 0000 1100 101 idx:3    01 00 zn:5 zd:5     &lut
LUTI4_c_1s      1100 0000 1100 101 idx:3    10 00 zn:5 zd:5     &lut

LUTI4_c_2b      1100 0000 1000 101 idx:2  1 00 00 zn:5 .... 0   &lut zd=%zd_ax2
LUTI4_c_2h      1100 0000 1000 101 idx:2  1 01 00 zn:5 .... 0   &lut zd=%zd_ax2
LUTI4_c_2s      1100 0000 1000 101 idx:2  1 10 00 zn:5 .... 0   &lut zd=%zd_ax2

LUTI4_c_4h      1100 0000 1000 101 idx:1 10 01 00 zn:5 ... 00   &lut zd=%zd_ax4
LUTI4_c_4s      1100 0000 1000 101 idx:1 10 10 00 zn:5 ... 00   &lut zd=%zd_ax4

# LUTI4, strided (must check zd alignment)
LUTI4_s_2b      1100 0000 1001 101 idx:2  1 00 00 zn:5 zd:5     &lut
LUTI4_s_2h      1100 0000 1001 101 idx:2  1 01 00 zn:5 zd:5     &lut

LUTI4_s_4h      1100 0000 1001 101 idx:1 10 01 00 zn:5 zd:5     &lut