xref: /openbmc/qemu/target/arm/tcg/a64.decode (revision f698e452)
1# AArch64 A64 allowed instruction decoding
2#
3#  Copyright (c) 2023 Linaro, Ltd
4#
5# This library is free software; you can redistribute it and/or
6# modify it under the terms of the GNU Lesser General Public
7# License as published by the Free Software Foundation; either
8# version 2.1 of the License, or (at your option) any later version.
9#
10# This library is distributed in the hope that it will be useful,
11# but WITHOUT ANY WARRANTY; without even the implied warranty of
12# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
13# Lesser General Public License for more details.
14#
15# You should have received a copy of the GNU Lesser General Public
16# License along with this library; if not, see <http://www.gnu.org/licenses/>.
17
18#
19# This file is processed by scripts/decodetree.py
20#
21
22%rd             0:5
23%esz_sd         22:1 !function=plus_2
24%esz_hsd        22:2 !function=xor_2
25%hl             11:1 21:1
26%hlm            11:1 20:2
27
28&r              rn
29&ri             rd imm
30&rri_sf         rd rn imm sf
31&i              imm
32&rr_e           rd rn esz
33&rrr_e          rd rn rm esz
34&rrx_e          rd rn rm idx esz
35&rrrr_e         rd rn rm ra esz
36&qrr_e          q rd rn esz
37&qrrr_e         q rd rn rm esz
38&qrrx_e         q rd rn rm idx esz
39&qrrrr_e        q rd rn rm ra esz
40
41@rr_h           ........ ... ..... ...... rn:5 rd:5     &rr_e esz=1
42@rr_d           ........ ... ..... ...... rn:5 rd:5     &rr_e esz=3
43@rr_sd          ........ ... ..... ...... rn:5 rd:5     &rr_e esz=%esz_sd
44
45@rrr_h          ........ ... rm:5 ...... rn:5 rd:5      &rrr_e esz=1
46@rrr_d          ........ ... rm:5 ...... rn:5 rd:5      &rrr_e esz=3
47@rrr_sd         ........ ... rm:5 ...... rn:5 rd:5      &rrr_e esz=%esz_sd
48@rrr_hsd        ........ ... rm:5 ...... rn:5 rd:5      &rrr_e esz=%esz_hsd
49@rrr_e          ........ esz:2 . rm:5 ...... rn:5 rd:5  &rrr_e
50@r2r_e          ........ esz:2 . ..... ...... rm:5 rd:5 &rrr_e rn=%rd
51
52@rrx_h          ........ .. .. rm:4 .... . . rn:5 rd:5  &rrx_e esz=1 idx=%hlm
53@rrx_s          ........ .. . rm:5  .... . . rn:5 rd:5  &rrx_e esz=2 idx=%hl
54@rrx_d          ........ .. . rm:5  .... idx:1 . rn:5 rd:5  &rrx_e esz=3
55
56@rr_q1e0        ........ ........ ...... rn:5 rd:5      &qrr_e q=1 esz=0
57@r2r_q1e0       ........ ........ ...... rm:5 rd:5      &qrrr_e rn=%rd q=1 esz=0
58@rrr_q1e0       ........ ... rm:5 ...... rn:5 rd:5      &qrrr_e q=1 esz=0
59@rrr_q1e3       ........ ... rm:5 ...... rn:5 rd:5      &qrrr_e q=1 esz=3
60@rrrr_q1e3      ........ ... rm:5 . ra:5 rn:5 rd:5      &qrrrr_e q=1 esz=3
61
62@qrrr_b         . q:1 ...... ... rm:5 ...... rn:5 rd:5  &qrrr_e esz=0
63@qrrr_h         . q:1 ...... ... rm:5 ...... rn:5 rd:5  &qrrr_e esz=1
64@qrrr_sd        . q:1 ...... ... rm:5 ...... rn:5 rd:5  &qrrr_e esz=%esz_sd
65@qrrr_e         . q:1 ...... esz:2 . rm:5 ...... rn:5 rd:5  &qrrr_e
66@qr2r_e         . q:1 ...... esz:2 . ..... ...... rm:5 rd:5 &qrrr_e rn=%rd
67
68@qrrx_h         . q:1 .. .... .. .. rm:4 .... . . rn:5 rd:5 \
69                &qrrx_e esz=1 idx=%hlm
70@qrrx_s         . q:1 .. .... .. . rm:5  .... . . rn:5 rd:5 \
71                &qrrx_e esz=2 idx=%hl
72@qrrx_d         . q:1 .. .... .. . rm:5  .... idx:1 . rn:5 rd:5 \
73                &qrrx_e esz=3
74
75### Data Processing - Immediate
76
77# PC-rel addressing
78
79%imm_pcrel      5:s19 29:2
80@pcrel          . .. ..... ................... rd:5     &ri imm=%imm_pcrel
81
82ADR             0 .. 10000 ................... .....    @pcrel
83ADRP            1 .. 10000 ................... .....    @pcrel
84
85# Add/subtract (immediate)
86
87%imm12_sh12     10:12 !function=shl_12
88@addsub_imm     sf:1 .. ...... . imm:12 rn:5 rd:5
89@addsub_imm12   sf:1 .. ...... . ............ rn:5 rd:5 imm=%imm12_sh12
90
91ADD_i           . 00 100010 0 ............ ..... .....  @addsub_imm
92ADD_i           . 00 100010 1 ............ ..... .....  @addsub_imm12
93ADDS_i          . 01 100010 0 ............ ..... .....  @addsub_imm
94ADDS_i          . 01 100010 1 ............ ..... .....  @addsub_imm12
95
96SUB_i           . 10 100010 0 ............ ..... .....  @addsub_imm
97SUB_i           . 10 100010 1 ............ ..... .....  @addsub_imm12
98SUBS_i          . 11 100010 0 ............ ..... .....  @addsub_imm
99SUBS_i          . 11 100010 1 ............ ..... .....  @addsub_imm12
100
101# Add/subtract (immediate with tags)
102
103&rri_tag        rd rn uimm6 uimm4
104@addsub_imm_tag . .. ...... . uimm6:6 .. uimm4:4 rn:5 rd:5 &rri_tag
105
106ADDG_i          1 00 100011 0 ...... 00 .... ..... ..... @addsub_imm_tag
107SUBG_i          1 10 100011 0 ...... 00 .... ..... ..... @addsub_imm_tag
108
109# Logical (immediate)
110
111&rri_log        rd rn sf dbm
112@logic_imm_64   1 .. ...... dbm:13 rn:5 rd:5            &rri_log sf=1
113@logic_imm_32   0 .. ...... 0 dbm:12 rn:5 rd:5          &rri_log sf=0
114
115AND_i           . 00 100100 . ...... ...... ..... ..... @logic_imm_64
116AND_i           . 00 100100 . ...... ...... ..... ..... @logic_imm_32
117ORR_i           . 01 100100 . ...... ...... ..... ..... @logic_imm_64
118ORR_i           . 01 100100 . ...... ...... ..... ..... @logic_imm_32
119EOR_i           . 10 100100 . ...... ...... ..... ..... @logic_imm_64
120EOR_i           . 10 100100 . ...... ...... ..... ..... @logic_imm_32
121ANDS_i          . 11 100100 . ...... ...... ..... ..... @logic_imm_64
122ANDS_i          . 11 100100 . ...... ...... ..... ..... @logic_imm_32
123
124# Move wide (immediate)
125
126&movw           rd sf imm hw
127@movw_64        1 .. ...... hw:2   imm:16 rd:5          &movw sf=1
128@movw_32        0 .. ...... 0 hw:1 imm:16 rd:5          &movw sf=0
129
130MOVN            . 00 100101 .. ................ .....   @movw_64
131MOVN            . 00 100101 .. ................ .....   @movw_32
132MOVZ            . 10 100101 .. ................ .....   @movw_64
133MOVZ            . 10 100101 .. ................ .....   @movw_32
134MOVK            . 11 100101 .. ................ .....   @movw_64
135MOVK            . 11 100101 .. ................ .....   @movw_32
136
137# Bitfield
138
139&bitfield       rd rn sf immr imms
140@bitfield_64    1 .. ...... 1 immr:6 imms:6 rn:5 rd:5      &bitfield sf=1
141@bitfield_32    0 .. ...... 0 0 immr:5 0 imms:5 rn:5 rd:5  &bitfield sf=0
142
143SBFM            . 00 100110 . ...... ...... ..... ..... @bitfield_64
144SBFM            . 00 100110 . ...... ...... ..... ..... @bitfield_32
145BFM             . 01 100110 . ...... ...... ..... ..... @bitfield_64
146BFM             . 01 100110 . ...... ...... ..... ..... @bitfield_32
147UBFM            . 10 100110 . ...... ...... ..... ..... @bitfield_64
148UBFM            . 10 100110 . ...... ...... ..... ..... @bitfield_32
149
150# Extract
151
152&extract        rd rn rm imm sf
153
154EXTR            1 00 100111 1 0 rm:5 imm:6 rn:5 rd:5     &extract sf=1
155EXTR            0 00 100111 0 0 rm:5 0 imm:5 rn:5 rd:5   &extract sf=0
156
157# Branches
158
159%imm26   0:s26 !function=times_4
160@branch         . ..... .......................... &i imm=%imm26
161
162B               0 00101 .......................... @branch
163BL              1 00101 .......................... @branch
164
165%imm19   5:s19 !function=times_4
166&cbz     rt imm sf nz
167
168CBZ             sf:1 011010 nz:1 ................... rt:5 &cbz imm=%imm19
169
170%imm14     5:s14 !function=times_4
171%imm31_19  31:1 19:5
172&tbz       rt imm nz bitpos
173
174TBZ             . 011011 nz:1 ..... .............. rt:5 &tbz  imm=%imm14 bitpos=%imm31_19
175
176# B.cond and BC.cond
177B_cond          0101010 0 ................... c:1 cond:4 imm=%imm19
178
179BR              1101011 0000 11111 000000 rn:5 00000 &r
180BLR             1101011 0001 11111 000000 rn:5 00000 &r
181RET             1101011 0010 11111 000000 rn:5 00000 &r
182
183&braz       rn m
184BRAZ            1101011 0000 11111 00001 m:1 rn:5 11111 &braz   # BRAAZ, BRABZ
185BLRAZ           1101011 0001 11111 00001 m:1 rn:5 11111 &braz   # BLRAAZ, BLRABZ
186
187&reta       m
188RETA            1101011 0010 11111 00001 m:1 11111 11111 &reta  # RETAA, RETAB
189
190&bra        rn rm m
191BRA             1101011 1000 11111 00001 m:1 rn:5 rm:5 &bra # BRAA, BRAB
192BLRA            1101011 1001 11111 00001 m:1 rn:5 rm:5 &bra # BLRAA, BLRAB
193
194ERET            1101011 0100 11111 000000 11111 00000
195ERETA           1101011 0100 11111 00001 m:1 11111 11111 &reta  # ERETAA, ERETAB
196
197# We don't need to decode DRPS because it always UNDEFs except when
198# the processor is in halting debug state (which we don't implement).
199# The pattern is listed here as documentation.
200# DRPS            1101011 0101 11111 000000 11111 00000
201
202# Hint instruction group
203{
204  [
205    YIELD       1101 0101 0000 0011 0010 0000 001 11111
206    WFE         1101 0101 0000 0011 0010 0000 010 11111
207    WFI         1101 0101 0000 0011 0010 0000 011 11111
208    # We implement WFE to never block, so our SEV/SEVL are NOPs
209    # SEV       1101 0101 0000 0011 0010 0000 100 11111
210    # SEVL      1101 0101 0000 0011 0010 0000 101 11111
211    # Our DGL is a NOP because we don't merge memory accesses anyway.
212    # DGL       1101 0101 0000 0011 0010 0000 110 11111
213    XPACLRI     1101 0101 0000 0011 0010 0000 111 11111
214    PACIA1716   1101 0101 0000 0011 0010 0001 000 11111
215    PACIB1716   1101 0101 0000 0011 0010 0001 010 11111
216    AUTIA1716   1101 0101 0000 0011 0010 0001 100 11111
217    AUTIB1716   1101 0101 0000 0011 0010 0001 110 11111
218    ESB         1101 0101 0000 0011 0010 0010 000 11111
219    PACIAZ      1101 0101 0000 0011 0010 0011 000 11111
220    PACIASP     1101 0101 0000 0011 0010 0011 001 11111
221    PACIBZ      1101 0101 0000 0011 0010 0011 010 11111
222    PACIBSP     1101 0101 0000 0011 0010 0011 011 11111
223    AUTIAZ      1101 0101 0000 0011 0010 0011 100 11111
224    AUTIASP     1101 0101 0000 0011 0010 0011 101 11111
225    AUTIBZ      1101 0101 0000 0011 0010 0011 110 11111
226    AUTIBSP     1101 0101 0000 0011 0010 0011 111 11111
227  ]
228  # The canonical NOP has CRm == op2 == 0, but all of the space
229  # that isn't specifically allocated to an instruction must NOP
230  NOP           1101 0101 0000 0011 0010 ---- --- 11111
231}
232
233# System instructions with register argument
234WFET            1101 0101 0000 0011 0001 0000 000 rd:5
235WFIT            1101 0101 0000 0011 0001 0000 001 rd:5
236
237# Barriers
238
239CLREX           1101 0101 0000 0011 0011 ---- 010 11111
240DSB_DMB         1101 0101 0000 0011 0011 domain:2 types:2 10- 11111
241ISB             1101 0101 0000 0011 0011 ---- 110 11111
242SB              1101 0101 0000 0011 0011 0000 111 11111
243
244# PSTATE
245
246CFINV           1101 0101 0000 0 000 0100 0000 000 11111
247XAFLAG          1101 0101 0000 0 000 0100 0000 001 11111
248AXFLAG          1101 0101 0000 0 000 0100 0000 010 11111
249
250# These are architecturally all "MSR (immediate)"; we decode the destination
251# register too because there is no commonality in our implementation.
252@msr_i          .... .... .... . ... .... imm:4 ... .....
253MSR_i_UAO       1101 0101 0000 0 000 0100 .... 011 11111 @msr_i
254MSR_i_PAN       1101 0101 0000 0 000 0100 .... 100 11111 @msr_i
255MSR_i_SPSEL     1101 0101 0000 0 000 0100 .... 101 11111 @msr_i
256MSR_i_SBSS      1101 0101 0000 0 011 0100 .... 001 11111 @msr_i
257MSR_i_DIT       1101 0101 0000 0 011 0100 .... 010 11111 @msr_i
258MSR_i_TCO       1101 0101 0000 0 011 0100 .... 100 11111 @msr_i
259MSR_i_DAIFSET   1101 0101 0000 0 011 0100 .... 110 11111 @msr_i
260MSR_i_DAIFCLEAR 1101 0101 0000 0 011 0100 .... 111 11111 @msr_i
261MSR_i_ALLINT    1101 0101 0000 0 001 0100 000 imm:1 000 11111
262MSR_i_SVCR      1101 0101 0000 0 011 0100 0 mask:2 imm:1 011 11111
263
264# MRS, MSR (register), SYS, SYSL. These are all essentially the
265# same instruction as far as QEMU is concerned.
266# NB: op0 is bits [20:19], but op0=0b00 is other insns, so we have
267# to hand-decode it.
268SYS             1101 0101 00 l:1 01 op1:3 crn:4 crm:4 op2:3 rt:5 op0=1
269SYS             1101 0101 00 l:1 10 op1:3 crn:4 crm:4 op2:3 rt:5 op0=2
270SYS             1101 0101 00 l:1 11 op1:3 crn:4 crm:4 op2:3 rt:5 op0=3
271
272# Exception generation
273
274@i16            .... .... ... imm:16           ... .. &i
275SVC             1101 0100 000 ................ 000 01 @i16
276HVC             1101 0100 000 ................ 000 10 @i16
277SMC             1101 0100 000 ................ 000 11 @i16
278BRK             1101 0100 001 ................ 000 00 @i16
279HLT             1101 0100 010 ................ 000 00 @i16
280# These insns always UNDEF unless in halting debug state, which
281# we don't implement. So we don't need to decode them. The patterns
282# are listed here as documentation.
283# DCPS1         1101 0100 101 ................ 000 01 @i16
284# DCPS2         1101 0100 101 ................ 000 10 @i16
285# DCPS3         1101 0100 101 ................ 000 11 @i16
286
287# Loads and stores
288
289&stxr           rn rt rt2 rs sz lasr
290&stlr           rn rt sz lasr
291@stxr           sz:2 ...... ... rs:5 lasr:1 rt2:5 rn:5 rt:5 &stxr
292@stlr           sz:2 ...... ... ..... lasr:1 ..... rn:5 rt:5 &stlr
293%imm1_30_p2 30:1 !function=plus_2
294@stxp           .. ...... ... rs:5 lasr:1 rt2:5 rn:5 rt:5 &stxr sz=%imm1_30_p2
295STXR            .. 001000 000 ..... . ..... ..... ..... @stxr  # inc STLXR
296LDXR            .. 001000 010 ..... . ..... ..... ..... @stxr  # inc LDAXR
297STLR            .. 001000 100 11111 . 11111 ..... ..... @stlr  # inc STLLR
298LDAR            .. 001000 110 11111 . 11111 ..... ..... @stlr  # inc LDLAR
299
300STXP            1 . 001000 001 ..... . ..... ..... ..... @stxp # inc STLXP
301LDXP            1 . 001000 011 ..... . ..... ..... ..... @stxp # inc LDAXP
302
303# CASP, CASPA, CASPAL, CASPL (we don't decode the bits that determine
304# acquire/release semantics because QEMU's cmpxchg always has those)
305CASP            0 . 001000 0 - 1 rs:5 - 11111 rn:5 rt:5 sz=%imm1_30_p2
306# CAS, CASA, CASAL, CASL
307CAS             sz:2 001000 1 - 1 rs:5 - 11111 rn:5 rt:5
308
309&ldlit          rt imm sz sign
310@ldlit          .. ... . .. ................... rt:5 &ldlit imm=%imm19
311
312LD_lit          00 011 0 00 ................... ..... @ldlit sz=2 sign=0
313LD_lit          01 011 0 00 ................... ..... @ldlit sz=3 sign=0
314LD_lit          10 011 0 00 ................... ..... @ldlit sz=2 sign=1
315LD_lit_v        00 011 1 00 ................... ..... @ldlit sz=2 sign=0
316LD_lit_v        01 011 1 00 ................... ..... @ldlit sz=3 sign=0
317LD_lit_v        10 011 1 00 ................... ..... @ldlit sz=4 sign=0
318
319# PRFM
320NOP             11 011 0 00 ------------------- -----
321
322&ldstpair       rt2 rt rn imm sz sign w p
323@ldstpair       .. ... . ... . imm:s7 rt2:5 rn:5 rt:5 &ldstpair
324
325# STNP, LDNP: Signed offset, non-temporal hint. We don't emulate caches
326# so we ignore hints about data access patterns, and handle these like
327# plain signed offset.
328STP             00 101 0 000 0 ....... ..... ..... ..... @ldstpair sz=2 sign=0 p=0 w=0
329LDP             00 101 0 000 1 ....... ..... ..... ..... @ldstpair sz=2 sign=0 p=0 w=0
330STP             10 101 0 000 0 ....... ..... ..... ..... @ldstpair sz=3 sign=0 p=0 w=0
331LDP             10 101 0 000 1 ....... ..... ..... ..... @ldstpair sz=3 sign=0 p=0 w=0
332STP_v           00 101 1 000 0 ....... ..... ..... ..... @ldstpair sz=2 sign=0 p=0 w=0
333LDP_v           00 101 1 000 1 ....... ..... ..... ..... @ldstpair sz=2 sign=0 p=0 w=0
334STP_v           01 101 1 000 0 ....... ..... ..... ..... @ldstpair sz=3 sign=0 p=0 w=0
335LDP_v           01 101 1 000 1 ....... ..... ..... ..... @ldstpair sz=3 sign=0 p=0 w=0
336STP_v           10 101 1 000 0 ....... ..... ..... ..... @ldstpair sz=4 sign=0 p=0 w=0
337LDP_v           10 101 1 000 1 ....... ..... ..... ..... @ldstpair sz=4 sign=0 p=0 w=0
338
339# STP and LDP: post-indexed
340STP             00 101 0 001 0 ....... ..... ..... ..... @ldstpair sz=2 sign=0 p=1 w=1
341LDP             00 101 0 001 1 ....... ..... ..... ..... @ldstpair sz=2 sign=0 p=1 w=1
342LDP             01 101 0 001 1 ....... ..... ..... ..... @ldstpair sz=2 sign=1 p=1 w=1
343STP             10 101 0 001 0 ....... ..... ..... ..... @ldstpair sz=3 sign=0 p=1 w=1
344LDP             10 101 0 001 1 ....... ..... ..... ..... @ldstpair sz=3 sign=0 p=1 w=1
345STP_v           00 101 1 001 0 ....... ..... ..... ..... @ldstpair sz=2 sign=0 p=1 w=1
346LDP_v           00 101 1 001 1 ....... ..... ..... ..... @ldstpair sz=2 sign=0 p=1 w=1
347STP_v           01 101 1 001 0 ....... ..... ..... ..... @ldstpair sz=3 sign=0 p=1 w=1
348LDP_v           01 101 1 001 1 ....... ..... ..... ..... @ldstpair sz=3 sign=0 p=1 w=1
349STP_v           10 101 1 001 0 ....... ..... ..... ..... @ldstpair sz=4 sign=0 p=1 w=1
350LDP_v           10 101 1 001 1 ....... ..... ..... ..... @ldstpair sz=4 sign=0 p=1 w=1
351
352# STP and LDP: offset
353STP             00 101 0 010 0 ....... ..... ..... ..... @ldstpair sz=2 sign=0 p=0 w=0
354LDP             00 101 0 010 1 ....... ..... ..... ..... @ldstpair sz=2 sign=0 p=0 w=0
355LDP             01 101 0 010 1 ....... ..... ..... ..... @ldstpair sz=2 sign=1 p=0 w=0
356STP             10 101 0 010 0 ....... ..... ..... ..... @ldstpair sz=3 sign=0 p=0 w=0
357LDP             10 101 0 010 1 ....... ..... ..... ..... @ldstpair sz=3 sign=0 p=0 w=0
358STP_v           00 101 1 010 0 ....... ..... ..... ..... @ldstpair sz=2 sign=0 p=0 w=0
359LDP_v           00 101 1 010 1 ....... ..... ..... ..... @ldstpair sz=2 sign=0 p=0 w=0
360STP_v           01 101 1 010 0 ....... ..... ..... ..... @ldstpair sz=3 sign=0 p=0 w=0
361LDP_v           01 101 1 010 1 ....... ..... ..... ..... @ldstpair sz=3 sign=0 p=0 w=0
362STP_v           10 101 1 010 0 ....... ..... ..... ..... @ldstpair sz=4 sign=0 p=0 w=0
363LDP_v           10 101 1 010 1 ....... ..... ..... ..... @ldstpair sz=4 sign=0 p=0 w=0
364
365# STP and LDP: pre-indexed
366STP             00 101 0 011 0 ....... ..... ..... ..... @ldstpair sz=2 sign=0 p=0 w=1
367LDP             00 101 0 011 1 ....... ..... ..... ..... @ldstpair sz=2 sign=0 p=0 w=1
368LDP             01 101 0 011 1 ....... ..... ..... ..... @ldstpair sz=2 sign=1 p=0 w=1
369STP             10 101 0 011 0 ....... ..... ..... ..... @ldstpair sz=3 sign=0 p=0 w=1
370LDP             10 101 0 011 1 ....... ..... ..... ..... @ldstpair sz=3 sign=0 p=0 w=1
371STP_v           00 101 1 011 0 ....... ..... ..... ..... @ldstpair sz=2 sign=0 p=0 w=1
372LDP_v           00 101 1 011 1 ....... ..... ..... ..... @ldstpair sz=2 sign=0 p=0 w=1
373STP_v           01 101 1 011 0 ....... ..... ..... ..... @ldstpair sz=3 sign=0 p=0 w=1
374LDP_v           01 101 1 011 1 ....... ..... ..... ..... @ldstpair sz=3 sign=0 p=0 w=1
375STP_v           10 101 1 011 0 ....... ..... ..... ..... @ldstpair sz=4 sign=0 p=0 w=1
376LDP_v           10 101 1 011 1 ....... ..... ..... ..... @ldstpair sz=4 sign=0 p=0 w=1
377
378# STGP: store tag and pair
379STGP            01 101 0 001 0 ....... ..... ..... ..... @ldstpair sz=3 sign=0 p=1 w=1
380STGP            01 101 0 010 0 ....... ..... ..... ..... @ldstpair sz=3 sign=0 p=0 w=0
381STGP            01 101 0 011 0 ....... ..... ..... ..... @ldstpair sz=3 sign=0 p=0 w=1
382
383# Load/store register (unscaled immediate)
384&ldst_imm       rt rn imm sz sign w p unpriv ext
385@ldst_imm       .. ... . .. .. . imm:s9 .. rn:5 rt:5 &ldst_imm unpriv=0 p=0 w=0
386@ldst_imm_pre   .. ... . .. .. . imm:s9 .. rn:5 rt:5 &ldst_imm unpriv=0 p=0 w=1
387@ldst_imm_post  .. ... . .. .. . imm:s9 .. rn:5 rt:5 &ldst_imm unpriv=0 p=1 w=1
388@ldst_imm_user  .. ... . .. .. . imm:s9 .. rn:5 rt:5 &ldst_imm unpriv=1 p=0 w=0
389
390STR_i           sz:2 111 0 00 00 0 ......... 00 ..... ..... @ldst_imm sign=0 ext=0
391LDR_i           00 111 0 00 01 0 ......... 00 ..... ..... @ldst_imm sign=0 ext=1 sz=0
392LDR_i           01 111 0 00 01 0 ......... 00 ..... ..... @ldst_imm sign=0 ext=1 sz=1
393LDR_i           10 111 0 00 01 0 ......... 00 ..... ..... @ldst_imm sign=0 ext=1 sz=2
394LDR_i           11 111 0 00 01 0 ......... 00 ..... ..... @ldst_imm sign=0 ext=0 sz=3
395LDR_i           00 111 0 00 10 0 ......... 00 ..... ..... @ldst_imm sign=1 ext=0 sz=0
396LDR_i           01 111 0 00 10 0 ......... 00 ..... ..... @ldst_imm sign=1 ext=0 sz=1
397LDR_i           10 111 0 00 10 0 ......... 00 ..... ..... @ldst_imm sign=1 ext=0 sz=2
398LDR_i           00 111 0 00 11 0 ......... 00 ..... ..... @ldst_imm sign=1 ext=1 sz=0
399LDR_i           01 111 0 00 11 0 ......... 00 ..... ..... @ldst_imm sign=1 ext=1 sz=1
400
401STR_i           sz:2 111 0 00 00 0 ......... 01 ..... ..... @ldst_imm_post sign=0 ext=0
402LDR_i           00 111 0 00 01 0 ......... 01 ..... ..... @ldst_imm_post sign=0 ext=1 sz=0
403LDR_i           01 111 0 00 01 0 ......... 01 ..... ..... @ldst_imm_post sign=0 ext=1 sz=1
404LDR_i           10 111 0 00 01 0 ......... 01 ..... ..... @ldst_imm_post sign=0 ext=1 sz=2
405LDR_i           11 111 0 00 01 0 ......... 01 ..... ..... @ldst_imm_post sign=0 ext=0 sz=3
406LDR_i           00 111 0 00 10 0 ......... 01 ..... ..... @ldst_imm_post sign=1 ext=0 sz=0
407LDR_i           01 111 0 00 10 0 ......... 01 ..... ..... @ldst_imm_post sign=1 ext=0 sz=1
408LDR_i           10 111 0 00 10 0 ......... 01 ..... ..... @ldst_imm_post sign=1 ext=0 sz=2
409LDR_i           00 111 0 00 11 0 ......... 01 ..... ..... @ldst_imm_post sign=1 ext=1 sz=0
410LDR_i           01 111 0 00 11 0 ......... 01 ..... ..... @ldst_imm_post sign=1 ext=1 sz=1
411
412STR_i           sz:2 111 0 00 00 0 ......... 10 ..... ..... @ldst_imm_user sign=0 ext=0
413LDR_i           00 111 0 00 01 0 ......... 10 ..... ..... @ldst_imm_user sign=0 ext=1 sz=0
414LDR_i           01 111 0 00 01 0 ......... 10 ..... ..... @ldst_imm_user sign=0 ext=1 sz=1
415LDR_i           10 111 0 00 01 0 ......... 10 ..... ..... @ldst_imm_user sign=0 ext=1 sz=2
416LDR_i           11 111 0 00 01 0 ......... 10 ..... ..... @ldst_imm_user sign=0 ext=0 sz=3
417LDR_i           00 111 0 00 10 0 ......... 10 ..... ..... @ldst_imm_user sign=1 ext=0 sz=0
418LDR_i           01 111 0 00 10 0 ......... 10 ..... ..... @ldst_imm_user sign=1 ext=0 sz=1
419LDR_i           10 111 0 00 10 0 ......... 10 ..... ..... @ldst_imm_user sign=1 ext=0 sz=2
420LDR_i           00 111 0 00 11 0 ......... 10 ..... ..... @ldst_imm_user sign=1 ext=1 sz=0
421LDR_i           01 111 0 00 11 0 ......... 10 ..... ..... @ldst_imm_user sign=1 ext=1 sz=1
422
423STR_i           sz:2 111 0 00 00 0 ......... 11 ..... ..... @ldst_imm_pre sign=0 ext=0
424LDR_i           00 111 0 00 01 0 ......... 11 ..... ..... @ldst_imm_pre sign=0 ext=1 sz=0
425LDR_i           01 111 0 00 01 0 ......... 11 ..... ..... @ldst_imm_pre sign=0 ext=1 sz=1
426LDR_i           10 111 0 00 01 0 ......... 11 ..... ..... @ldst_imm_pre sign=0 ext=1 sz=2
427LDR_i           11 111 0 00 01 0 ......... 11 ..... ..... @ldst_imm_pre sign=0 ext=0 sz=3
428LDR_i           00 111 0 00 10 0 ......... 11 ..... ..... @ldst_imm_pre sign=1 ext=0 sz=0
429LDR_i           01 111 0 00 10 0 ......... 11 ..... ..... @ldst_imm_pre sign=1 ext=0 sz=1
430LDR_i           10 111 0 00 10 0 ......... 11 ..... ..... @ldst_imm_pre sign=1 ext=0 sz=2
431LDR_i           00 111 0 00 11 0 ......... 11 ..... ..... @ldst_imm_pre sign=1 ext=1 sz=0
432LDR_i           01 111 0 00 11 0 ......... 11 ..... ..... @ldst_imm_pre sign=1 ext=1 sz=1
433
434# PRFM : prefetch memory: a no-op for QEMU
435NOP             11 111 0 00 10 0 --------- 00 ----- -----
436
437STR_v_i         sz:2 111 1 00 00 0 ......... 00 ..... ..... @ldst_imm sign=0 ext=0
438STR_v_i         00 111 1 00 10 0 ......... 00 ..... ..... @ldst_imm sign=0 ext=0 sz=4
439LDR_v_i         sz:2 111 1 00 01 0 ......... 00 ..... ..... @ldst_imm sign=0 ext=0
440LDR_v_i         00 111 1 00 11 0 ......... 00 ..... ..... @ldst_imm sign=0 ext=0 sz=4
441
442STR_v_i         sz:2 111 1 00 00 0 ......... 01 ..... ..... @ldst_imm_post sign=0 ext=0
443STR_v_i         00 111 1 00 10 0 ......... 01 ..... ..... @ldst_imm_post sign=0 ext=0 sz=4
444LDR_v_i         sz:2 111 1 00 01 0 ......... 01 ..... ..... @ldst_imm_post sign=0 ext=0
445LDR_v_i         00 111 1 00 11 0 ......... 01 ..... ..... @ldst_imm_post sign=0 ext=0 sz=4
446
447STR_v_i         sz:2 111 1 00 00 0 ......... 11 ..... ..... @ldst_imm_pre sign=0 ext=0
448STR_v_i         00 111 1 00 10 0 ......... 11 ..... ..... @ldst_imm_pre sign=0 ext=0 sz=4
449LDR_v_i         sz:2 111 1 00 01 0 ......... 11 ..... ..... @ldst_imm_pre sign=0 ext=0
450LDR_v_i         00 111 1 00 11 0 ......... 11 ..... ..... @ldst_imm_pre sign=0 ext=0 sz=4
451
452# Load/store with an unsigned 12 bit immediate, which is scaled by the
453# element size. The function gets the sz:imm and returns the scaled immediate.
454%uimm_scaled   10:12 sz:3 !function=uimm_scaled
455
456@ldst_uimm      .. ... . .. .. ............ rn:5 rt:5 &ldst_imm unpriv=0 p=0 w=0 imm=%uimm_scaled
457
458STR_i           sz:2 111 0 01 00 ............ ..... ..... @ldst_uimm sign=0 ext=0
459LDR_i           00 111 0 01 01 ............ ..... ..... @ldst_uimm sign=0 ext=1 sz=0
460LDR_i           01 111 0 01 01 ............ ..... ..... @ldst_uimm sign=0 ext=1 sz=1
461LDR_i           10 111 0 01 01 ............ ..... ..... @ldst_uimm sign=0 ext=1 sz=2
462LDR_i           11 111 0 01 01 ............ ..... ..... @ldst_uimm sign=0 ext=0 sz=3
463LDR_i           00 111 0 01 10 ............ ..... ..... @ldst_uimm sign=1 ext=0 sz=0
464LDR_i           01 111 0 01 10 ............ ..... ..... @ldst_uimm sign=1 ext=0 sz=1
465LDR_i           10 111 0 01 10 ............ ..... ..... @ldst_uimm sign=1 ext=0 sz=2
466LDR_i           00 111 0 01 11 ............ ..... ..... @ldst_uimm sign=1 ext=1 sz=0
467LDR_i           01 111 0 01 11 ............ ..... ..... @ldst_uimm sign=1 ext=1 sz=1
468
469# PRFM
470NOP             11 111 0 01 10 ------------ ----- -----
471
472STR_v_i         sz:2 111 1 01 00 ............ ..... ..... @ldst_uimm sign=0 ext=0
473STR_v_i         00 111 1 01 10 ............ ..... ..... @ldst_uimm sign=0 ext=0 sz=4
474LDR_v_i         sz:2 111 1 01 01 ............ ..... ..... @ldst_uimm sign=0 ext=0
475LDR_v_i         00 111 1 01 11 ............ ..... ..... @ldst_uimm sign=0 ext=0 sz=4
476
477# Load/store with register offset
478&ldst rm rn rt sign ext sz opt s
479@ldst           .. ... . .. .. . rm:5 opt:3 s:1 .. rn:5 rt:5 &ldst
480STR             sz:2 111 0 00 00 1 ..... ... . 10 ..... ..... @ldst sign=0 ext=0
481LDR             00 111 0 00 01 1 ..... ... . 10 ..... ..... @ldst sign=0 ext=1 sz=0
482LDR             01 111 0 00 01 1 ..... ... . 10 ..... ..... @ldst sign=0 ext=1 sz=1
483LDR             10 111 0 00 01 1 ..... ... . 10 ..... ..... @ldst sign=0 ext=1 sz=2
484LDR             11 111 0 00 01 1 ..... ... . 10 ..... ..... @ldst sign=0 ext=0 sz=3
485LDR             00 111 0 00 10 1 ..... ... . 10 ..... ..... @ldst sign=1 ext=0 sz=0
486LDR             01 111 0 00 10 1 ..... ... . 10 ..... ..... @ldst sign=1 ext=0 sz=1
487LDR             10 111 0 00 10 1 ..... ... . 10 ..... ..... @ldst sign=1 ext=0 sz=2
488LDR             00 111 0 00 11 1 ..... ... . 10 ..... ..... @ldst sign=1 ext=1 sz=0
489LDR             01 111 0 00 11 1 ..... ... . 10 ..... ..... @ldst sign=1 ext=1 sz=1
490
491# PRFM
492NOP             11 111 0 00 10 1 ----- -1- - 10 ----- -----
493
494STR_v           sz:2 111 1 00 00 1 ..... ... . 10 ..... ..... @ldst sign=0 ext=0
495STR_v           00 111 1 00 10 1 ..... ... . 10 ..... ..... @ldst sign=0 ext=0 sz=4
496LDR_v           sz:2 111 1 00 01 1 ..... ... . 10 ..... ..... @ldst sign=0 ext=0
497LDR_v           00 111 1 00 11 1 ..... ... . 10 ..... ..... @ldst sign=0 ext=0 sz=4
498
499# Atomic memory operations
500&atomic         rs rn rt a r sz
501@atomic         sz:2 ... . .. a:1 r:1 . rs:5 . ... .. rn:5 rt:5 &atomic
502LDADD           .. 111 0 00 . . 1 ..... 0000 00 ..... ..... @atomic
503LDCLR           .. 111 0 00 . . 1 ..... 0001 00 ..... ..... @atomic
504LDEOR           .. 111 0 00 . . 1 ..... 0010 00 ..... ..... @atomic
505LDSET           .. 111 0 00 . . 1 ..... 0011 00 ..... ..... @atomic
506LDSMAX          .. 111 0 00 . . 1 ..... 0100 00 ..... ..... @atomic
507LDSMIN          .. 111 0 00 . . 1 ..... 0101 00 ..... ..... @atomic
508LDUMAX          .. 111 0 00 . . 1 ..... 0110 00 ..... ..... @atomic
509LDUMIN          .. 111 0 00 . . 1 ..... 0111 00 ..... ..... @atomic
510SWP             .. 111 0 00 . . 1 ..... 1000 00 ..... ..... @atomic
511
512LDAPR           sz:2 111 0 00 1 0 1 11111 1100 00 rn:5 rt:5
513
514# Load/store register (pointer authentication)
515
516# LDRA immediate is 10 bits signed and scaled, but the bits aren't all contiguous
517%ldra_imm       22:s1 12:9 !function=times_8
518
519LDRA            11 111 0 00 m:1 . 1 ......... w:1 1 rn:5 rt:5 imm=%ldra_imm
520
521&ldapr_stlr_i   rn rt imm sz sign ext
522@ldapr_stlr_i   .. ...... .. . imm:9 .. rn:5 rt:5 &ldapr_stlr_i
523STLR_i          sz:2 011001 00 0 ......... 00 ..... ..... @ldapr_stlr_i sign=0 ext=0
524LDAPR_i         sz:2 011001 01 0 ......... 00 ..... ..... @ldapr_stlr_i sign=0 ext=0
525LDAPR_i         00 011001 10 0 ......... 00 ..... ..... @ldapr_stlr_i sign=1 ext=0 sz=0
526LDAPR_i         01 011001 10 0 ......... 00 ..... ..... @ldapr_stlr_i sign=1 ext=0 sz=1
527LDAPR_i         10 011001 10 0 ......... 00 ..... ..... @ldapr_stlr_i sign=1 ext=0 sz=2
528LDAPR_i         00 011001 11 0 ......... 00 ..... ..... @ldapr_stlr_i sign=1 ext=1 sz=0
529LDAPR_i         01 011001 11 0 ......... 00 ..... ..... @ldapr_stlr_i sign=1 ext=1 sz=1
530
531# Load/store multiple structures
532# The 4-bit opcode in [15:12] encodes repeat count and structure elements
533&ldst_mult      rm rn rt sz q p rpt selem
534@ldst_mult      . q:1 ...... p:1 . . rm:5 .... sz:2 rn:5 rt:5 &ldst_mult
535ST_mult         0 . 001100 . 0 0 ..... 0000 .. ..... ..... @ldst_mult rpt=1 selem=4
536ST_mult         0 . 001100 . 0 0 ..... 0010 .. ..... ..... @ldst_mult rpt=4 selem=1
537ST_mult         0 . 001100 . 0 0 ..... 0100 .. ..... ..... @ldst_mult rpt=1 selem=3
538ST_mult         0 . 001100 . 0 0 ..... 0110 .. ..... ..... @ldst_mult rpt=3 selem=1
539ST_mult         0 . 001100 . 0 0 ..... 0111 .. ..... ..... @ldst_mult rpt=1 selem=1
540ST_mult         0 . 001100 . 0 0 ..... 1000 .. ..... ..... @ldst_mult rpt=1 selem=2
541ST_mult         0 . 001100 . 0 0 ..... 1010 .. ..... ..... @ldst_mult rpt=2 selem=1
542
543LD_mult         0 . 001100 . 1 0 ..... 0000 .. ..... ..... @ldst_mult rpt=1 selem=4
544LD_mult         0 . 001100 . 1 0 ..... 0010 .. ..... ..... @ldst_mult rpt=4 selem=1
545LD_mult         0 . 001100 . 1 0 ..... 0100 .. ..... ..... @ldst_mult rpt=1 selem=3
546LD_mult         0 . 001100 . 1 0 ..... 0110 .. ..... ..... @ldst_mult rpt=3 selem=1
547LD_mult         0 . 001100 . 1 0 ..... 0111 .. ..... ..... @ldst_mult rpt=1 selem=1
548LD_mult         0 . 001100 . 1 0 ..... 1000 .. ..... ..... @ldst_mult rpt=1 selem=2
549LD_mult         0 . 001100 . 1 0 ..... 1010 .. ..... ..... @ldst_mult rpt=2 selem=1
550
551# Load/store single structure
552&ldst_single    rm rn rt p selem index scale
553
554%ldst_single_selem 13:1 21:1 !function=plus_1
555
556%ldst_single_index_b  30:1 10:3
557%ldst_single_index_h  30:1 11:2
558%ldst_single_index_s  30:1 12:1
559
560@ldst_single_b     .. ...... p:1 .. rm:5 ...... rn:5 rt:5 \
561                   &ldst_single scale=0 selem=%ldst_single_selem \
562                   index=%ldst_single_index_b
563@ldst_single_h     .. ...... p:1 .. rm:5 ...... rn:5 rt:5 \
564                   &ldst_single scale=1 selem=%ldst_single_selem \
565                   index=%ldst_single_index_h
566@ldst_single_s     .. ...... p:1 .. rm:5 ...... rn:5 rt:5 \
567                   &ldst_single scale=2 selem=%ldst_single_selem \
568                   index=%ldst_single_index_s
569@ldst_single_d     . index:1 ...... p:1 .. rm:5 ...... rn:5 rt:5 \
570                   &ldst_single scale=3 selem=%ldst_single_selem
571
572ST_single          0 . 001101 . 0 . ..... 00 . ... ..... .....  @ldst_single_b
573ST_single          0 . 001101 . 0 . ..... 01 . ..0 ..... .....  @ldst_single_h
574ST_single          0 . 001101 . 0 . ..... 10 . .00 ..... .....  @ldst_single_s
575ST_single          0 . 001101 . 0 . ..... 10 . 001 ..... .....  @ldst_single_d
576
577LD_single          0 . 001101 . 1 . ..... 00 . ... ..... .....  @ldst_single_b
578LD_single          0 . 001101 . 1 . ..... 01 . ..0 ..... .....  @ldst_single_h
579LD_single          0 . 001101 . 1 . ..... 10 . .00 ..... .....  @ldst_single_s
580LD_single          0 . 001101 . 1 . ..... 10 . 001 ..... .....  @ldst_single_d
581
582# Replicating load case
583LD_single_repl  0 q:1 001101 p:1 1 . rm:5 11 . 0 scale:2 rn:5 rt:5 selem=%ldst_single_selem
584
585%tag_offset     12:s9 !function=scale_by_log2_tag_granule
586&ldst_tag       rn rt imm p w
587@ldst_tag       ........ .. . ......... .. rn:5 rt:5 &ldst_tag imm=%tag_offset
588@ldst_tag_mult  ........ .. . 000000000 .. rn:5 rt:5 &ldst_tag imm=0
589
590STZGM           11011001 00 1 ......... 00 ..... ..... @ldst_tag_mult p=0 w=0
591STG             11011001 00 1 ......... 01 ..... ..... @ldst_tag p=1 w=1
592STG             11011001 00 1 ......... 10 ..... ..... @ldst_tag p=0 w=0
593STG             11011001 00 1 ......... 11 ..... ..... @ldst_tag p=0 w=1
594
595LDG             11011001 01 1 ......... 00 ..... ..... @ldst_tag p=0 w=0
596STZG            11011001 01 1 ......... 01 ..... ..... @ldst_tag p=1 w=1
597STZG            11011001 01 1 ......... 10 ..... ..... @ldst_tag p=0 w=0
598STZG            11011001 01 1 ......... 11 ..... ..... @ldst_tag p=0 w=1
599
600STGM            11011001 10 1 ......... 00 ..... ..... @ldst_tag_mult p=0 w=0
601ST2G            11011001 10 1 ......... 01 ..... ..... @ldst_tag p=1 w=1
602ST2G            11011001 10 1 ......... 10 ..... ..... @ldst_tag p=0 w=0
603ST2G            11011001 10 1 ......... 11 ..... ..... @ldst_tag p=0 w=1
604
605LDGM            11011001 11 1 ......... 00 ..... ..... @ldst_tag_mult p=0 w=0
606STZ2G           11011001 11 1 ......... 01 ..... ..... @ldst_tag p=1 w=1
607STZ2G           11011001 11 1 ......... 10 ..... ..... @ldst_tag p=0 w=0
608STZ2G           11011001 11 1 ......... 11 ..... ..... @ldst_tag p=0 w=1
609
610# Memory operations (memset, memcpy, memmove)
611# Each of these comes in a set of three, eg SETP (prologue), SETM (main),
612# SETE (epilogue), and each of those has different flavours to
613# indicate whether memory accesses should be unpriv or non-temporal.
614# We don't distinguish temporal and non-temporal accesses, but we
615# do need to report it in syndrome register values.
616
617# Memset
618&set rs rn rd unpriv nontemp
619# op2 bit 1 is nontemporal bit
620@set         .. ......... rs:5 .. nontemp:1 unpriv:1 .. rn:5 rd:5 &set
621
622SETP            00 011001110 ..... 00 . . 01 ..... ..... @set
623SETM            00 011001110 ..... 01 . . 01 ..... ..... @set
624SETE            00 011001110 ..... 10 . . 01 ..... ..... @set
625
626# Like SET, but also setting MTE tags
627SETGP           00 011101110 ..... 00 . . 01 ..... ..... @set
628SETGM           00 011101110 ..... 01 . . 01 ..... ..... @set
629SETGE           00 011101110 ..... 10 . . 01 ..... ..... @set
630
631# Memmove/Memcopy: the CPY insns allow overlapping src/dest and
632# copy in the correct direction; the CPYF insns always copy forwards.
633#
634# options has the nontemporal and unpriv bits for src and dest
635&cpy rs rn rd options
636@cpy            .. ... . ..... rs:5 options:4 .. rn:5 rd:5 &cpy
637
638CPYFP           00 011 0 01000 ..... .... 01 ..... ..... @cpy
639CPYFM           00 011 0 01010 ..... .... 01 ..... ..... @cpy
640CPYFE           00 011 0 01100 ..... .... 01 ..... ..... @cpy
641CPYP            00 011 1 01000 ..... .... 01 ..... ..... @cpy
642CPYM            00 011 1 01010 ..... .... 01 ..... ..... @cpy
643CPYE            00 011 1 01100 ..... .... 01 ..... ..... @cpy
644
645### Cryptographic AES
646
647AESE            01001110 00 10100 00100 10 ..... .....  @r2r_q1e0
648AESD            01001110 00 10100 00101 10 ..... .....  @r2r_q1e0
649AESMC           01001110 00 10100 00110 10 ..... .....  @rr_q1e0
650AESIMC          01001110 00 10100 00111 10 ..... .....  @rr_q1e0
651
652### Cryptographic three-register SHA
653
654SHA1C           0101 1110 000 ..... 000000 ..... .....  @rrr_q1e0
655SHA1P           0101 1110 000 ..... 000100 ..... .....  @rrr_q1e0
656SHA1M           0101 1110 000 ..... 001000 ..... .....  @rrr_q1e0
657SHA1SU0         0101 1110 000 ..... 001100 ..... .....  @rrr_q1e0
658SHA256H         0101 1110 000 ..... 010000 ..... .....  @rrr_q1e0
659SHA256H2        0101 1110 000 ..... 010100 ..... .....  @rrr_q1e0
660SHA256SU1       0101 1110 000 ..... 011000 ..... .....  @rrr_q1e0
661
662### Cryptographic two-register SHA
663
664SHA1H           0101 1110 0010 1000 0000 10 ..... ..... @rr_q1e0
665SHA1SU1         0101 1110 0010 1000 0001 10 ..... ..... @rr_q1e0
666SHA256SU0       0101 1110 0010 1000 0010 10 ..... ..... @rr_q1e0
667
668### Cryptographic three-register SHA512
669
670SHA512H         1100 1110 011 ..... 100000 ..... .....  @rrr_q1e0
671SHA512H2        1100 1110 011 ..... 100001 ..... .....  @rrr_q1e0
672SHA512SU1       1100 1110 011 ..... 100010 ..... .....  @rrr_q1e0
673RAX1            1100 1110 011 ..... 100011 ..... .....  @rrr_q1e3
674SM3PARTW1       1100 1110 011 ..... 110000 ..... .....  @rrr_q1e0
675SM3PARTW2       1100 1110 011 ..... 110001 ..... .....  @rrr_q1e0
676SM4EKEY         1100 1110 011 ..... 110010 ..... .....  @rrr_q1e0
677
678### Cryptographic two-register SHA512
679
680SHA512SU0       1100 1110 110 00000 100000 ..... .....  @rr_q1e0
681SM4E            1100 1110 110 00000 100001 ..... .....  @r2r_q1e0
682
683### Cryptographic four-register
684
685EOR3            1100 1110 000 ..... 0 ..... ..... ..... @rrrr_q1e3
686BCAX            1100 1110 001 ..... 0 ..... ..... ..... @rrrr_q1e3
687SM3SS1          1100 1110 010 ..... 0 ..... ..... ..... @rrrr_q1e3
688
689### Cryptographic three-register, imm2
690
691&crypto3i       rd rn rm imm
692@crypto3i       ........ ... rm:5 .. imm:2 .. rn:5 rd:5 &crypto3i
693
694SM3TT1A         11001110 010 ..... 10 .. 00 ..... ..... @crypto3i
695SM3TT1B         11001110 010 ..... 10 .. 01 ..... ..... @crypto3i
696SM3TT2A         11001110 010 ..... 10 .. 10 ..... ..... @crypto3i
697SM3TT2B         11001110 010 ..... 10 .. 11 ..... ..... @crypto3i
698
699### Cryptographic XAR
700
701XAR             1100 1110 100 rm:5 imm:6 rn:5 rd:5
702
703### Advanced SIMD scalar copy
704
705DUP_element_s   0101 1110 000 imm:5 0 0000 1 rn:5 rd:5
706
707### Advanced SIMD copy
708
709DUP_element_v   0 q:1 00 1110 000 imm:5 0 0000 1 rn:5 rd:5
710DUP_general     0 q:1 00 1110 000 imm:5 0 0001 1 rn:5 rd:5
711INS_general     0 1   00 1110 000 imm:5 0 0011 1 rn:5 rd:5
712SMOV            0 q:1 00 1110 000 imm:5 0 0101 1 rn:5 rd:5
713UMOV            0 q:1 00 1110 000 imm:5 0 0111 1 rn:5 rd:5
714INS_element     0 1   10 1110 000 di:5  0 si:4 1 rn:5 rd:5
715
716### Advanced SIMD scalar three same
717
718FADD_s          0001 1110 ..1 ..... 0010 10 ..... ..... @rrr_hsd
719FSUB_s          0001 1110 ..1 ..... 0011 10 ..... ..... @rrr_hsd
720FDIV_s          0001 1110 ..1 ..... 0001 10 ..... ..... @rrr_hsd
721FMUL_s          0001 1110 ..1 ..... 0000 10 ..... ..... @rrr_hsd
722FNMUL_s         0001 1110 ..1 ..... 1000 10 ..... ..... @rrr_hsd
723
724FMAX_s          0001 1110 ..1 ..... 0100 10 ..... ..... @rrr_hsd
725FMIN_s          0001 1110 ..1 ..... 0101 10 ..... ..... @rrr_hsd
726FMAXNM_s        0001 1110 ..1 ..... 0110 10 ..... ..... @rrr_hsd
727FMINNM_s        0001 1110 ..1 ..... 0111 10 ..... ..... @rrr_hsd
728
729FMULX_s         0101 1110 010 ..... 00011 1 ..... ..... @rrr_h
730FMULX_s         0101 1110 0.1 ..... 11011 1 ..... ..... @rrr_sd
731
732FCMEQ_s         0101 1110 010 ..... 00100 1 ..... ..... @rrr_h
733FCMEQ_s         0101 1110 0.1 ..... 11100 1 ..... ..... @rrr_sd
734
735FCMGE_s         0111 1110 010 ..... 00100 1 ..... ..... @rrr_h
736FCMGE_s         0111 1110 0.1 ..... 11100 1 ..... ..... @rrr_sd
737
738FCMGT_s         0111 1110 110 ..... 00100 1 ..... ..... @rrr_h
739FCMGT_s         0111 1110 1.1 ..... 11100 1 ..... ..... @rrr_sd
740
741FACGE_s         0111 1110 010 ..... 00101 1 ..... ..... @rrr_h
742FACGE_s         0111 1110 0.1 ..... 11101 1 ..... ..... @rrr_sd
743
744FACGT_s         0111 1110 110 ..... 00101 1 ..... ..... @rrr_h
745FACGT_s         0111 1110 1.1 ..... 11101 1 ..... ..... @rrr_sd
746
747FABD_s          0111 1110 110 ..... 00010 1 ..... ..... @rrr_h
748FABD_s          0111 1110 1.1 ..... 11010 1 ..... ..... @rrr_sd
749
750FRECPS_s        0101 1110 010 ..... 00111 1 ..... ..... @rrr_h
751FRECPS_s        0101 1110 0.1 ..... 11111 1 ..... ..... @rrr_sd
752
753FRSQRTS_s       0101 1110 110 ..... 00111 1 ..... ..... @rrr_h
754FRSQRTS_s       0101 1110 1.1 ..... 11111 1 ..... ..... @rrr_sd
755
756SQADD_s         0101 1110 ..1 ..... 00001 1 ..... ..... @rrr_e
757UQADD_s         0111 1110 ..1 ..... 00001 1 ..... ..... @rrr_e
758SQSUB_s         0101 1110 ..1 ..... 00101 1 ..... ..... @rrr_e
759UQSUB_s         0111 1110 ..1 ..... 00101 1 ..... ..... @rrr_e
760
761SUQADD_s        0101 1110 ..1 00000 00111 0 ..... ..... @r2r_e
762USQADD_s        0111 1110 ..1 00000 00111 0 ..... ..... @r2r_e
763
764SSHL_s          0101 1110 111 ..... 01000 1 ..... ..... @rrr_d
765USHL_s          0111 1110 111 ..... 01000 1 ..... ..... @rrr_d
766SRSHL_s         0101 1110 111 ..... 01010 1 ..... ..... @rrr_d
767URSHL_s         0111 1110 111 ..... 01010 1 ..... ..... @rrr_d
768SQSHL_s         0101 1110 ..1 ..... 01001 1 ..... ..... @rrr_e
769UQSHL_s         0111 1110 ..1 ..... 01001 1 ..... ..... @rrr_e
770SQRSHL_s        0101 1110 ..1 ..... 01011 1 ..... ..... @rrr_e
771UQRSHL_s        0111 1110 ..1 ..... 01011 1 ..... ..... @rrr_e
772
773ADD_s           0101 1110 111 ..... 10000 1 ..... ..... @rrr_d
774SUB_s           0111 1110 111 ..... 10000 1 ..... ..... @rrr_d
775CMGT_s          0101 1110 111 ..... 00110 1 ..... ..... @rrr_d
776CMHI_s          0111 1110 111 ..... 00110 1 ..... ..... @rrr_d
777CMGE_s          0101 1110 111 ..... 00111 1 ..... ..... @rrr_d
778CMHS_s          0111 1110 111 ..... 00111 1 ..... ..... @rrr_d
779CMTST_s         0101 1110 111 ..... 10001 1 ..... ..... @rrr_d
780CMEQ_s          0111 1110 111 ..... 10001 1 ..... ..... @rrr_d
781
782SQDMULH_s       0101 1110 ..1 ..... 10110 1 ..... ..... @rrr_e
783SQRDMULH_s      0111 1110 ..1 ..... 10110 1 ..... ..... @rrr_e
784SQRDMLAH_s      0111 1110 ..0 ..... 10000 1 ..... ..... @rrr_e
785SQRDMLSH_s      0111 1110 ..0 ..... 10001 1 ..... ..... @rrr_e
786
787### Advanced SIMD scalar pairwise
788
789FADDP_s         0101 1110 0011 0000 1101 10 ..... ..... @rr_h
790FADDP_s         0111 1110 0.11 0000 1101 10 ..... ..... @rr_sd
791
792FMAXP_s         0101 1110 0011 0000 1111 10 ..... ..... @rr_h
793FMAXP_s         0111 1110 0.11 0000 1111 10 ..... ..... @rr_sd
794
795FMINP_s         0101 1110 1011 0000 1111 10 ..... ..... @rr_h
796FMINP_s         0111 1110 1.11 0000 1111 10 ..... ..... @rr_sd
797
798FMAXNMP_s       0101 1110 0011 0000 1100 10 ..... ..... @rr_h
799FMAXNMP_s       0111 1110 0.11 0000 1100 10 ..... ..... @rr_sd
800
801FMINNMP_s       0101 1110 1011 0000 1100 10 ..... ..... @rr_h
802FMINNMP_s       0111 1110 1.11 0000 1100 10 ..... ..... @rr_sd
803
804ADDP_s          0101 1110 1111 0001 1011 10 ..... ..... @rr_d
805
806### Advanced SIMD three same
807
808FADD_v          0.00 1110 010 ..... 00010 1 ..... ..... @qrrr_h
809FADD_v          0.00 1110 0.1 ..... 11010 1 ..... ..... @qrrr_sd
810
811FSUB_v          0.00 1110 110 ..... 00010 1 ..... ..... @qrrr_h
812FSUB_v          0.00 1110 1.1 ..... 11010 1 ..... ..... @qrrr_sd
813
814FDIV_v          0.10 1110 010 ..... 00111 1 ..... ..... @qrrr_h
815FDIV_v          0.10 1110 0.1 ..... 11111 1 ..... ..... @qrrr_sd
816
817FMUL_v          0.10 1110 010 ..... 00011 1 ..... ..... @qrrr_h
818FMUL_v          0.10 1110 0.1 ..... 11011 1 ..... ..... @qrrr_sd
819
820FMAX_v          0.00 1110 010 ..... 00110 1 ..... ..... @qrrr_h
821FMAX_v          0.00 1110 0.1 ..... 11110 1 ..... ..... @qrrr_sd
822
823FMIN_v          0.00 1110 110 ..... 00110 1 ..... ..... @qrrr_h
824FMIN_v          0.00 1110 1.1 ..... 11110 1 ..... ..... @qrrr_sd
825
826FMAXNM_v        0.00 1110 010 ..... 00000 1 ..... ..... @qrrr_h
827FMAXNM_v        0.00 1110 0.1 ..... 11000 1 ..... ..... @qrrr_sd
828
829FMINNM_v        0.00 1110 110 ..... 00000 1 ..... ..... @qrrr_h
830FMINNM_v        0.00 1110 1.1 ..... 11000 1 ..... ..... @qrrr_sd
831
832FMULX_v         0.00 1110 010 ..... 00011 1 ..... ..... @qrrr_h
833FMULX_v         0.00 1110 0.1 ..... 11011 1 ..... ..... @qrrr_sd
834
835FMLA_v          0.00 1110 010 ..... 00001 1 ..... ..... @qrrr_h
836FMLA_v          0.00 1110 0.1 ..... 11001 1 ..... ..... @qrrr_sd
837
838FMLS_v          0.00 1110 110 ..... 00001 1 ..... ..... @qrrr_h
839FMLS_v          0.00 1110 1.1 ..... 11001 1 ..... ..... @qrrr_sd
840
841FMLAL_v         0.00 1110 001 ..... 11101 1 ..... ..... @qrrr_h
842FMLSL_v         0.00 1110 101 ..... 11101 1 ..... ..... @qrrr_h
843FMLAL2_v        0.10 1110 001 ..... 11001 1 ..... ..... @qrrr_h
844FMLSL2_v        0.10 1110 101 ..... 11001 1 ..... ..... @qrrr_h
845
846FCMEQ_v         0.00 1110 010 ..... 00100 1 ..... ..... @qrrr_h
847FCMEQ_v         0.00 1110 0.1 ..... 11100 1 ..... ..... @qrrr_sd
848
849FCMGE_v         0.10 1110 010 ..... 00100 1 ..... ..... @qrrr_h
850FCMGE_v         0.10 1110 0.1 ..... 11100 1 ..... ..... @qrrr_sd
851
852FCMGT_v         0.10 1110 110 ..... 00100 1 ..... ..... @qrrr_h
853FCMGT_v         0.10 1110 1.1 ..... 11100 1 ..... ..... @qrrr_sd
854
855FACGE_v         0.10 1110 010 ..... 00101 1 ..... ..... @qrrr_h
856FACGE_v         0.10 1110 0.1 ..... 11101 1 ..... ..... @qrrr_sd
857
858FACGT_v         0.10 1110 110 ..... 00101 1 ..... ..... @qrrr_h
859FACGT_v         0.10 1110 1.1 ..... 11101 1 ..... ..... @qrrr_sd
860
861FABD_v          0.10 1110 110 ..... 00010 1 ..... ..... @qrrr_h
862FABD_v          0.10 1110 1.1 ..... 11010 1 ..... ..... @qrrr_sd
863
864FRECPS_v        0.00 1110 010 ..... 00111 1 ..... ..... @qrrr_h
865FRECPS_v        0.00 1110 0.1 ..... 11111 1 ..... ..... @qrrr_sd
866
867FRSQRTS_v       0.00 1110 110 ..... 00111 1 ..... ..... @qrrr_h
868FRSQRTS_v       0.00 1110 1.1 ..... 11111 1 ..... ..... @qrrr_sd
869
870FADDP_v         0.10 1110 010 ..... 00010 1 ..... ..... @qrrr_h
871FADDP_v         0.10 1110 0.1 ..... 11010 1 ..... ..... @qrrr_sd
872
873FMAXP_v         0.10 1110 010 ..... 00110 1 ..... ..... @qrrr_h
874FMAXP_v         0.10 1110 0.1 ..... 11110 1 ..... ..... @qrrr_sd
875
876FMINP_v         0.10 1110 110 ..... 00110 1 ..... ..... @qrrr_h
877FMINP_v         0.10 1110 1.1 ..... 11110 1 ..... ..... @qrrr_sd
878
879FMAXNMP_v       0.10 1110 010 ..... 00000 1 ..... ..... @qrrr_h
880FMAXNMP_v       0.10 1110 0.1 ..... 11000 1 ..... ..... @qrrr_sd
881
882FMINNMP_v       0.10 1110 110 ..... 00000 1 ..... ..... @qrrr_h
883FMINNMP_v       0.10 1110 1.1 ..... 11000 1 ..... ..... @qrrr_sd
884
885ADDP_v          0.00 1110 ..1 ..... 10111 1 ..... ..... @qrrr_e
886SMAXP_v         0.00 1110 ..1 ..... 10100 1 ..... ..... @qrrr_e
887SMINP_v         0.00 1110 ..1 ..... 10101 1 ..... ..... @qrrr_e
888UMAXP_v         0.10 1110 ..1 ..... 10100 1 ..... ..... @qrrr_e
889UMINP_v         0.10 1110 ..1 ..... 10101 1 ..... ..... @qrrr_e
890
891AND_v           0.00 1110 001 ..... 00011 1 ..... ..... @qrrr_b
892BIC_v           0.00 1110 011 ..... 00011 1 ..... ..... @qrrr_b
893ORR_v           0.00 1110 101 ..... 00011 1 ..... ..... @qrrr_b
894ORN_v           0.00 1110 111 ..... 00011 1 ..... ..... @qrrr_b
895EOR_v           0.10 1110 001 ..... 00011 1 ..... ..... @qrrr_b
896BSL_v           0.10 1110 011 ..... 00011 1 ..... ..... @qrrr_b
897BIT_v           0.10 1110 101 ..... 00011 1 ..... ..... @qrrr_b
898BIF_v           0.10 1110 111 ..... 00011 1 ..... ..... @qrrr_b
899
900SQADD_v         0.00 1110 ..1 ..... 00001 1 ..... ..... @qrrr_e
901UQADD_v         0.10 1110 ..1 ..... 00001 1 ..... ..... @qrrr_e
902SQSUB_v         0.00 1110 ..1 ..... 00101 1 ..... ..... @qrrr_e
903UQSUB_v         0.10 1110 ..1 ..... 00101 1 ..... ..... @qrrr_e
904
905SUQADD_v        0.00 1110 ..1 00000 00111 0 ..... ..... @qr2r_e
906USQADD_v        0.10 1110 ..1 00000 00111 0 ..... ..... @qr2r_e
907
908SSHL_v          0.00 1110 ..1 ..... 01000 1 ..... ..... @qrrr_e
909USHL_v          0.10 1110 ..1 ..... 01000 1 ..... ..... @qrrr_e
910SRSHL_v         0.00 1110 ..1 ..... 01010 1 ..... ..... @qrrr_e
911URSHL_v         0.10 1110 ..1 ..... 01010 1 ..... ..... @qrrr_e
912SQSHL_v         0.00 1110 ..1 ..... 01001 1 ..... ..... @qrrr_e
913UQSHL_v         0.10 1110 ..1 ..... 01001 1 ..... ..... @qrrr_e
914SQRSHL_v        0.00 1110 ..1 ..... 01011 1 ..... ..... @qrrr_e
915UQRSHL_v        0.10 1110 ..1 ..... 01011 1 ..... ..... @qrrr_e
916
917ADD_v           0.00 1110 ..1 ..... 10000 1 ..... ..... @qrrr_e
918SUB_v           0.10 1110 ..1 ..... 10000 1 ..... ..... @qrrr_e
919CMGT_v          0.00 1110 ..1 ..... 00110 1 ..... ..... @qrrr_e
920CMHI_v          0.10 1110 ..1 ..... 00110 1 ..... ..... @qrrr_e
921CMGE_v          0.00 1110 ..1 ..... 00111 1 ..... ..... @qrrr_e
922CMHS_v          0.10 1110 ..1 ..... 00111 1 ..... ..... @qrrr_e
923CMTST_v         0.00 1110 ..1 ..... 10001 1 ..... ..... @qrrr_e
924CMEQ_v          0.10 1110 ..1 ..... 10001 1 ..... ..... @qrrr_e
925SHADD_v         0.00 1110 ..1 ..... 00000 1 ..... ..... @qrrr_e
926UHADD_v         0.10 1110 ..1 ..... 00000 1 ..... ..... @qrrr_e
927SHSUB_v         0.00 1110 ..1 ..... 00100 1 ..... ..... @qrrr_e
928UHSUB_v         0.10 1110 ..1 ..... 00100 1 ..... ..... @qrrr_e
929SRHADD_v        0.00 1110 ..1 ..... 00010 1 ..... ..... @qrrr_e
930URHADD_v        0.10 1110 ..1 ..... 00010 1 ..... ..... @qrrr_e
931SMAX_v          0.00 1110 ..1 ..... 01100 1 ..... ..... @qrrr_e
932UMAX_v          0.10 1110 ..1 ..... 01100 1 ..... ..... @qrrr_e
933SMIN_v          0.00 1110 ..1 ..... 01101 1 ..... ..... @qrrr_e
934UMIN_v          0.10 1110 ..1 ..... 01101 1 ..... ..... @qrrr_e
935SABD_v          0.00 1110 ..1 ..... 01110 1 ..... ..... @qrrr_e
936UABD_v          0.10 1110 ..1 ..... 01110 1 ..... ..... @qrrr_e
937SABA_v          0.00 1110 ..1 ..... 01111 1 ..... ..... @qrrr_e
938UABA_v          0.10 1110 ..1 ..... 01111 1 ..... ..... @qrrr_e
939MUL_v           0.00 1110 ..1 ..... 10011 1 ..... ..... @qrrr_e
940PMUL_v          0.10 1110 001 ..... 10011 1 ..... ..... @qrrr_b
941MLA_v           0.00 1110 ..1 ..... 10010 1 ..... ..... @qrrr_e
942MLS_v           0.10 1110 ..1 ..... 10010 1 ..... ..... @qrrr_e
943
944SQDMULH_v       0.00 1110 ..1 ..... 10110 1 ..... ..... @qrrr_e
945SQRDMULH_v      0.10 1110 ..1 ..... 10110 1 ..... ..... @qrrr_e
946SQRDMLAH_v      0.10 1110 ..0 ..... 10000 1 ..... ..... @qrrr_e
947SQRDMLSH_v      0.10 1110 ..0 ..... 10001 1 ..... ..... @qrrr_e
948
949### Advanced SIMD scalar x indexed element
950
951FMUL_si         0101 1111 00 .. .... 1001 . 0 ..... .....   @rrx_h
952FMUL_si         0101 1111 10 . ..... 1001 . 0 ..... .....   @rrx_s
953FMUL_si         0101 1111 11 0 ..... 1001 . 0 ..... .....   @rrx_d
954
955FMLA_si         0101 1111 00 .. .... 0001 . 0 ..... .....   @rrx_h
956FMLA_si         0101 1111 10 .. .... 0001 . 0 ..... .....   @rrx_s
957FMLA_si         0101 1111 11 0. .... 0001 . 0 ..... .....   @rrx_d
958
959FMLS_si         0101 1111 00 .. .... 0101 . 0 ..... .....   @rrx_h
960FMLS_si         0101 1111 10 .. .... 0101 . 0 ..... .....   @rrx_s
961FMLS_si         0101 1111 11 0. .... 0101 . 0 ..... .....   @rrx_d
962
963FMULX_si        0111 1111 00 .. .... 1001 . 0 ..... .....   @rrx_h
964FMULX_si        0111 1111 10 . ..... 1001 . 0 ..... .....   @rrx_s
965FMULX_si        0111 1111 11 0 ..... 1001 . 0 ..... .....   @rrx_d
966
967SQDMULH_si      0101 1111 01 .. .... 1100 . 0 ..... .....   @rrx_h
968SQDMULH_si      0101 1111 10 .. .... 1100 . 0 ..... .....   @rrx_s
969
970SQRDMULH_si     0101 1111 01 .. .... 1101 . 0 ..... .....   @rrx_h
971SQRDMULH_si     0101 1111 10 . ..... 1101 . 0 ..... .....   @rrx_s
972
973SQRDMLAH_si     0111 1111 01 .. .... 1101 . 0 ..... .....   @rrx_h
974SQRDMLAH_si     0111 1111 10 .. .... 1101 . 0 ..... .....   @rrx_s
975
976SQRDMLSH_si     0111 1111 01 .. .... 1111 . 0 ..... .....   @rrx_h
977SQRDMLSH_si     0111 1111 10 .. .... 1111 . 0 ..... .....   @rrx_s
978
979### Advanced SIMD vector x indexed element
980
981FMUL_vi         0.00 1111 00 .. .... 1001 . 0 ..... .....   @qrrx_h
982FMUL_vi         0.00 1111 10 . ..... 1001 . 0 ..... .....   @qrrx_s
983FMUL_vi         0.00 1111 11 0 ..... 1001 . 0 ..... .....   @qrrx_d
984
985FMLA_vi         0.00 1111 00 .. .... 0001 . 0 ..... .....   @qrrx_h
986FMLA_vi         0.00 1111 10 . ..... 0001 . 0 ..... .....   @qrrx_s
987FMLA_vi         0.00 1111 11 0 ..... 0001 . 0 ..... .....   @qrrx_d
988
989FMLS_vi         0.00 1111 00 .. .... 0101 . 0 ..... .....   @qrrx_h
990FMLS_vi         0.00 1111 10 . ..... 0101 . 0 ..... .....   @qrrx_s
991FMLS_vi         0.00 1111 11 0 ..... 0101 . 0 ..... .....   @qrrx_d
992
993FMULX_vi        0.10 1111 00 .. .... 1001 . 0 ..... .....   @qrrx_h
994FMULX_vi        0.10 1111 10 . ..... 1001 . 0 ..... .....   @qrrx_s
995FMULX_vi        0.10 1111 11 0 ..... 1001 . 0 ..... .....   @qrrx_d
996
997FMLAL_vi        0.00 1111 10 .. .... 0000 . 0 ..... .....   @qrrx_h
998FMLSL_vi        0.00 1111 10 .. .... 0100 . 0 ..... .....   @qrrx_h
999FMLAL2_vi       0.10 1111 10 .. .... 1000 . 0 ..... .....   @qrrx_h
1000FMLSL2_vi       0.10 1111 10 .. .... 1100 . 0 ..... .....   @qrrx_h
1001
1002MUL_vi          0.00 1111 01 .. .... 1000 . 0 ..... .....   @qrrx_h
1003MUL_vi          0.00 1111 10 . ..... 1000 . 0 ..... .....   @qrrx_s
1004
1005MLA_vi          0.10 1111 01 .. .... 0000 . 0 ..... .....   @qrrx_h
1006MLA_vi          0.10 1111 10 . ..... 0000 . 0 ..... .....   @qrrx_s
1007
1008MLS_vi          0.10 1111 01 .. .... 0100 . 0 ..... .....   @qrrx_h
1009MLS_vi          0.10 1111 10 . ..... 0100 . 0 ..... .....   @qrrx_s
1010
1011SQDMULH_vi      0.00 1111 01 .. .... 1100 . 0 ..... .....   @qrrx_h
1012SQDMULH_vi      0.00 1111 10 . ..... 1100 . 0 ..... .....   @qrrx_s
1013
1014SQRDMULH_vi     0.00 1111 01 .. .... 1101 . 0 ..... .....   @qrrx_h
1015SQRDMULH_vi     0.00 1111 10 . ..... 1101 . 0 ..... .....   @qrrx_s
1016
1017SQRDMLAH_vi     0.10 1111 01 .. .... 1101 . 0 ..... .....   @qrrx_h
1018SQRDMLAH_vi     0.10 1111 10 .. .... 1101 . 0 ..... .....   @qrrx_s
1019
1020SQRDMLSH_vi     0.10 1111 01 .. .... 1111 . 0 ..... .....   @qrrx_h
1021SQRDMLSH_vi     0.10 1111 10 .. .... 1111 . 0 ..... .....   @qrrx_s
1022
1023# Floating-point conditional select
1024
1025FCSEL           0001 1110 .. 1 rm:5 cond:4 11 rn:5 rd:5     esz=%esz_hsd
1026
1027# Floating-point data-processing (3 source)
1028
1029@rrrr_hsd       .... .... .. . rm:5  . ra:5  rn:5  rd:5     &rrrr_e esz=%esz_hsd
1030
1031FMADD           0001 1111 .. 0 ..... 0 ..... ..... .....    @rrrr_hsd
1032FMSUB           0001 1111 .. 0 ..... 1 ..... ..... .....    @rrrr_hsd
1033FNMADD          0001 1111 .. 1 ..... 0 ..... ..... .....    @rrrr_hsd
1034FNMSUB          0001 1111 .. 1 ..... 1 ..... ..... .....    @rrrr_hsd
1035