| 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_hs 22:1 !function=plus_1 |
| 25 | %esz_hsd 22:2 !function=xor_2 |
| 26 | %hl 11:1 21:1 |
| 27 | %hlm 11:1 20:2 |
| 28 | %hlm4 11:1 19:3 |
| 29 | |
| 30 | &r rn |
| 31 | &rrr rd rn rm |
| 32 | &ri rd imm |
| 33 | &rr rd rn |
| 34 | &rr_sf rd rn sf |
| 35 | &rri_sf rd rn imm sf |
| 36 | &rrr_sf rd rn rm sf |
| 37 | &i imm |
| 38 | &rr_e rd rn esz |
| 39 | &rri_e rd rn imm esz |
| 40 | &rrr_e rd rn rm esz |
| 41 | &rrx_e rd rn rm idx esz |
| 42 | &rxx rd rn rm idxn idxm |
| 43 | &rrrr_e rd rn rm ra esz |
| 44 | &qrr_e q rd rn esz |
| 45 | &qrri_e q rd rn imm esz |
| 46 | &qrrr_e q rd rn rm esz |
| 47 | &qrrx_e q rd rn rm idx esz |
| 48 | &qrrrr_e q rd rn rm ra esz |
| 49 | |
| 50 | @rr_h ........ ... ..... ...... rn:5 rd:5 &rr_e esz=1 |
| 51 | @rr_s ........ ... ..... ...... rn:5 rd:5 &rr_e esz=2 |
| 52 | @rr_d ........ ... ..... ...... rn:5 rd:5 &rr_e esz=3 |
| 53 | @rr_e ........ esz:2 . ..... ...... rn:5 rd:5 &rr_e |
| 54 | @rr_sd ........ ... ..... ...... rn:5 rd:5 &rr_e esz=%esz_sd |
| 55 | @rr_hsd ........ ... ..... ...... rn:5 rd:5 &rr_e esz=%esz_hsd |
| 56 | |
| 57 | @rrr_b ........ ... rm:5 ...... rn:5 rd:5 &rrr_e esz=0 |
| 58 | @rrr_h ........ ... rm:5 ...... rn:5 rd:5 &rrr_e esz=1 |
| 59 | @rrr_s ........ ... rm:5 ...... rn:5 rd:5 &rrr_e esz=2 |
| 60 | @rrr_d ........ ... rm:5 ...... rn:5 rd:5 &rrr_e esz=3 |
| 61 | @rrr_sd ........ ... rm:5 ...... rn:5 rd:5 &rrr_e esz=%esz_sd |
| 62 | @rrr_hsd ........ ... rm:5 ...... rn:5 rd:5 &rrr_e esz=%esz_hsd |
| 63 | @rrr_e ........ esz:2 . rm:5 ...... rn:5 rd:5 &rrr_e |
| 64 | @r2r_e ........ esz:2 . ..... ...... rm:5 rd:5 &rrr_e rn=%rd |
| 65 | |
| 66 | @rrx_h ........ .. .. rm:4 .... . . rn:5 rd:5 &rrx_e esz=1 idx=%hlm |
| 67 | @rrx_s ........ .. . rm:5 .... . . rn:5 rd:5 &rrx_e esz=2 idx=%hl |
| 68 | @rrx_d ........ .. . rm:5 .... idx:1 . rn:5 rd:5 &rrx_e esz=3 |
| 69 | |
| 70 | @rr_q1e0 ........ ........ ...... rn:5 rd:5 &qrr_e q=1 esz=0 |
| 71 | @rr_q1e2 ........ ........ ...... rn:5 rd:5 &qrr_e q=1 esz=2 |
| 72 | @r2r_q1e0 ........ ........ ...... rm:5 rd:5 &qrrr_e rn=%rd q=1 esz=0 |
| 73 | @rrr_q1e0 ........ ... rm:5 ...... rn:5 rd:5 &qrrr_e q=1 esz=0 |
| 74 | @rrr_q1e3 ........ ... rm:5 ...... rn:5 rd:5 &qrrr_e q=1 esz=3 |
| 75 | @rrrr_q1e3 ........ ... rm:5 . ra:5 rn:5 rd:5 &qrrrr_e q=1 esz=3 |
| 76 | |
| 77 | @qrr_b . q:1 ...... .. ...... ...... rn:5 rd:5 &qrr_e esz=0 |
| 78 | @qrr_h . q:1 ...... .. ...... ...... rn:5 rd:5 &qrr_e esz=1 |
| 79 | @qrr_s . q:1 ...... .. ...... ...... rn:5 rd:5 &qrr_e esz=2 |
| 80 | @qrr_bh . q:1 ...... . esz:1 ...... ...... rn:5 rd:5 &qrr_e |
| 81 | @qrr_hs . q:1 ...... .. ...... ...... rn:5 rd:5 &qrr_e esz=%esz_hs |
| 82 | @qrr_sd . q:1 ...... .. ...... ...... rn:5 rd:5 &qrr_e esz=%esz_sd |
| 83 | @qrr_e . q:1 ...... esz:2 ...... ...... rn:5 rd:5 &qrr_e |
| 84 | |
| 85 | @qrrr_b . q:1 ...... ... rm:5 ...... rn:5 rd:5 &qrrr_e esz=0 |
| 86 | @qrrr_h . q:1 ...... ... rm:5 ...... rn:5 rd:5 &qrrr_e esz=1 |
| 87 | @qrrr_s . q:1 ...... ... rm:5 ...... rn:5 rd:5 &qrrr_e esz=2 |
| 88 | @qrrr_sd . q:1 ...... ... rm:5 ...... rn:5 rd:5 &qrrr_e esz=%esz_sd |
| 89 | @qrrr_e . q:1 ...... esz:2 . rm:5 ...... rn:5 rd:5 &qrrr_e |
| 90 | @qr2r_e . q:1 ...... esz:2 . ..... ...... rm:5 rd:5 &qrrr_e rn=%rd |
| 91 | |
| 92 | @qrrx_h . q:1 .. .... .. .. rm:4 .... . . rn:5 rd:5 \ |
| 93 | &qrrx_e esz=1 idx=%hlm |
| 94 | @qrrx_s . q:1 .. .... .. . rm:5 .... . . rn:5 rd:5 \ |
| 95 | &qrrx_e esz=2 idx=%hl |
| 96 | @qrrx_d . q:1 .. .... .. . rm:5 .... idx:1 . rn:5 rd:5 \ |
| 97 | &qrrx_e esz=3 |
| 98 | |
| 99 | ### Data Processing - Immediate |
| 100 | |
| 101 | # PC-rel addressing |
| 102 | |
| 103 | %imm_pcrel 5:s19 29:2 |
| 104 | @pcrel . .. ..... ................... rd:5 &ri imm=%imm_pcrel |
| 105 | |
| 106 | ADR 0 .. 10000 ................... ..... @pcrel |
| 107 | ADRP 1 .. 10000 ................... ..... @pcrel |
| 108 | |
| 109 | # Add/subtract (immediate) |
| 110 | |
| 111 | %imm12_sh12 10:12 !function=shl_12 |
| 112 | @addsub_imm sf:1 .. ...... . imm:12 rn:5 rd:5 |
| 113 | @addsub_imm12 sf:1 .. ...... . ............ rn:5 rd:5 imm=%imm12_sh12 |
| 114 | |
| 115 | ADD_i . 00 100010 0 ............ ..... ..... @addsub_imm |
| 116 | ADD_i . 00 100010 1 ............ ..... ..... @addsub_imm12 |
| 117 | ADDS_i . 01 100010 0 ............ ..... ..... @addsub_imm |
| 118 | ADDS_i . 01 100010 1 ............ ..... ..... @addsub_imm12 |
| 119 | |
| 120 | SUB_i . 10 100010 0 ............ ..... ..... @addsub_imm |
| 121 | SUB_i . 10 100010 1 ............ ..... ..... @addsub_imm12 |
| 122 | SUBS_i . 11 100010 0 ............ ..... ..... @addsub_imm |
| 123 | SUBS_i . 11 100010 1 ............ ..... ..... @addsub_imm12 |
| 124 | |
| 125 | # Add/subtract (immediate with tags) |
| 126 | |
| 127 | &rri_tag rd rn uimm6 uimm4 |
| 128 | @addsub_imm_tag . .. ...... . uimm6:6 .. uimm4:4 rn:5 rd:5 &rri_tag |
| 129 | |
| 130 | ADDG_i 1 00 100011 0 ...... 00 .... ..... ..... @addsub_imm_tag |
| 131 | SUBG_i 1 10 100011 0 ...... 00 .... ..... ..... @addsub_imm_tag |
| 132 | |
| 133 | # Logical (immediate) |
| 134 | |
| 135 | &rri_log rd rn sf dbm |
| 136 | @logic_imm_64 1 .. ...... dbm:13 rn:5 rd:5 &rri_log sf=1 |
| 137 | @logic_imm_32 0 .. ...... 0 dbm:12 rn:5 rd:5 &rri_log sf=0 |
| 138 | |
| 139 | AND_i . 00 100100 . ...... ...... ..... ..... @logic_imm_64 |
| 140 | AND_i . 00 100100 . ...... ...... ..... ..... @logic_imm_32 |
| 141 | ORR_i . 01 100100 . ...... ...... ..... ..... @logic_imm_64 |
| 142 | ORR_i . 01 100100 . ...... ...... ..... ..... @logic_imm_32 |
| 143 | EOR_i . 10 100100 . ...... ...... ..... ..... @logic_imm_64 |
| 144 | EOR_i . 10 100100 . ...... ...... ..... ..... @logic_imm_32 |
| 145 | ANDS_i . 11 100100 . ...... ...... ..... ..... @logic_imm_64 |
| 146 | ANDS_i . 11 100100 . ...... ...... ..... ..... @logic_imm_32 |
| 147 | |
| 148 | # Move wide (immediate) |
| 149 | |
| 150 | &movw rd sf imm hw |
| 151 | @movw_64 1 .. ...... hw:2 imm:16 rd:5 &movw sf=1 |
| 152 | @movw_32 0 .. ...... 0 hw:1 imm:16 rd:5 &movw sf=0 |
| 153 | |
| 154 | MOVN . 00 100101 .. ................ ..... @movw_64 |
| 155 | MOVN . 00 100101 .. ................ ..... @movw_32 |
| 156 | MOVZ . 10 100101 .. ................ ..... @movw_64 |
| 157 | MOVZ . 10 100101 .. ................ ..... @movw_32 |
| 158 | MOVK . 11 100101 .. ................ ..... @movw_64 |
| 159 | MOVK . 11 100101 .. ................ ..... @movw_32 |
| 160 | |
| 161 | # Min/Max (immediate) |
| 162 | |
| 163 | @minmaxi_s sf:1 .. ........... imm:s8 rn:5 rd:5 &rri_sf |
| 164 | @minmaxi_u sf:1 .. ........... imm:8 rn:5 rd:5 &rri_sf |
| 165 | |
| 166 | SMAX_i . 00 1000111 0000 ........ ..... ..... @minmaxi_s |
| 167 | SMIN_i . 00 1000111 0010 ........ ..... ..... @minmaxi_s |
| 168 | UMAX_i . 00 1000111 0001 ........ ..... ..... @minmaxi_u |
| 169 | UMIN_i . 00 1000111 0011 ........ ..... ..... @minmaxi_u |
| 170 | |
| 171 | # Bitfield |
| 172 | |
| 173 | &bitfield rd rn sf immr imms |
| 174 | @bitfield_64 1 .. ...... 1 immr:6 imms:6 rn:5 rd:5 &bitfield sf=1 |
| 175 | @bitfield_32 0 .. ...... 0 0 immr:5 0 imms:5 rn:5 rd:5 &bitfield sf=0 |
| 176 | |
| 177 | SBFM . 00 100110 . ...... ...... ..... ..... @bitfield_64 |
| 178 | SBFM . 00 100110 . ...... ...... ..... ..... @bitfield_32 |
| 179 | BFM . 01 100110 . ...... ...... ..... ..... @bitfield_64 |
| 180 | BFM . 01 100110 . ...... ...... ..... ..... @bitfield_32 |
| 181 | UBFM . 10 100110 . ...... ...... ..... ..... @bitfield_64 |
| 182 | UBFM . 10 100110 . ...... ...... ..... ..... @bitfield_32 |
| 183 | |
| 184 | # Extract |
| 185 | |
| 186 | &extract rd rn rm imm sf |
| 187 | |
| 188 | EXTR 1 00 100111 1 0 rm:5 imm:6 rn:5 rd:5 &extract sf=1 |
| 189 | EXTR 0 00 100111 0 0 rm:5 0 imm:5 rn:5 rd:5 &extract sf=0 |
| 190 | |
| 191 | ### Branches |
| 192 | |
| 193 | %imm26 0:s26 !function=times_4 |
| 194 | @branch . ..... .......................... &i imm=%imm26 |
| 195 | |
| 196 | B 0 00101 .......................... @branch |
| 197 | BL 1 00101 .......................... @branch |
| 198 | |
| 199 | %imm19 5:s19 !function=times_4 |
| 200 | &cbz rt imm sf nz |
| 201 | |
| 202 | CBZ sf:1 011010 nz:1 ................... rt:5 &cbz imm=%imm19 |
| 203 | |
| 204 | %imm14 5:s14 !function=times_4 |
| 205 | %imm31_19 31:1 19:5 |
| 206 | &tbz rt imm nz bitpos |
| 207 | |
| 208 | TBZ . 011011 nz:1 ..... .............. rt:5 &tbz imm=%imm14 bitpos=%imm31_19 |
| 209 | |
| 210 | # B.cond and BC.cond |
| 211 | B_cond 0101010 0 ................... c:1 cond:4 imm=%imm19 |
| 212 | |
| 213 | # CB, CBB, CBH |
| 214 | %imm9 5:s9 !function=times_4 |
| 215 | &cb cc rt rm imm esz |
| 216 | @cb . ....... cc:3 rm:5 .. ......... rt:5 &cb imm=%imm9 |
| 217 | CB_cond 0 1110100 ... ..... 00 ......... ..... @cb esz=2 |
| 218 | CB_cond 1 1110100 ... ..... 00 ......... ..... @cb esz=3 |
| 219 | CB_cond 0 1110100 ... ..... 10 ......... ..... @cb esz=0 # CBB |
| 220 | CB_cond 0 1110100 ... ..... 11 ......... ..... @cb esz=1 # CBH |
| 221 | |
| 222 | CB_cond_imm sf:1 1110101 cc:3 imm6:6 0 ......... rt:5 %imm9 |
| 223 | |
| 224 | BR 1101011 0000 11111 000000 rn:5 00000 &r |
| 225 | BLR 1101011 0001 11111 000000 rn:5 00000 &r |
| 226 | RET 1101011 0010 11111 000000 rn:5 00000 &r |
| 227 | |
| 228 | &braz rn m |
| 229 | BRAZ 1101011 0000 11111 00001 m:1 rn:5 11111 &braz # BRAAZ, BRABZ |
| 230 | BLRAZ 1101011 0001 11111 00001 m:1 rn:5 11111 &braz # BLRAAZ, BLRABZ |
| 231 | |
| 232 | &reta m |
| 233 | RETA 1101011 0010 11111 00001 m:1 11111 11111 &reta # RETAA, RETAB |
| 234 | |
| 235 | &bra rn rm m |
| 236 | BRA 1101011 1000 11111 00001 m:1 rn:5 rm:5 &bra # BRAA, BRAB |
| 237 | BLRA 1101011 1001 11111 00001 m:1 rn:5 rm:5 &bra # BLRAA, BLRAB |
| 238 | |
| 239 | ERET 1101011 0100 11111 000000 11111 00000 |
| 240 | ERETA 1101011 0100 11111 00001 m:1 11111 11111 &reta # ERETAA, ERETAB |
| 241 | |
| 242 | # We don't need to decode DRPS because it always UNDEFs except when |
| 243 | # the processor is in halting debug state (which we don't implement). |
| 244 | # The pattern is listed here as documentation. |
| 245 | # DRPS 1101011 0101 11111 000000 11111 00000 |
| 246 | |
| 247 | # Hint instruction group |
| 248 | { |
| 249 | [ |
| 250 | YIELD 1101 0101 0000 0011 0010 0000 001 11111 |
| 251 | WFE 1101 0101 0000 0011 0010 0000 010 11111 |
| 252 | WFI 1101 0101 0000 0011 0010 0000 011 11111 |
| 253 | SEV 1101 0101 0000 0011 0010 0000 100 11111 |
| 254 | SEVL 1101 0101 0000 0011 0010 0000 101 11111 |
| 255 | # Our DGL is a NOP because we don't merge memory accesses anyway. |
| 256 | # DGL 1101 0101 0000 0011 0010 0000 110 11111 |
| 257 | XPACLRI 1101 0101 0000 0011 0010 0000 111 11111 |
| 258 | PACIA1716 1101 0101 0000 0011 0010 0001 000 11111 |
| 259 | PACIB1716 1101 0101 0000 0011 0010 0001 010 11111 |
| 260 | AUTIA1716 1101 0101 0000 0011 0010 0001 100 11111 |
| 261 | AUTIB1716 1101 0101 0000 0011 0010 0001 110 11111 |
| 262 | ESB 1101 0101 0000 0011 0010 0010 000 11111 |
| 263 | GCSB 1101 0101 0000 0011 0010 0010 011 11111 |
| 264 | PACIAZ 1101 0101 0000 0011 0010 0011 000 11111 |
| 265 | PACIASP 1101 0101 0000 0011 0010 0011 001 11111 |
| 266 | PACIBZ 1101 0101 0000 0011 0010 0011 010 11111 |
| 267 | PACIBSP 1101 0101 0000 0011 0010 0011 011 11111 |
| 268 | AUTIAZ 1101 0101 0000 0011 0010 0011 100 11111 |
| 269 | AUTIASP 1101 0101 0000 0011 0010 0011 101 11111 |
| 270 | AUTIBZ 1101 0101 0000 0011 0010 0011 110 11111 |
| 271 | AUTIBSP 1101 0101 0000 0011 0010 0011 111 11111 |
| 272 | CHKFEAT 1101 0101 0000 0011 0010 0101 000 11111 |
| 273 | ] |
| 274 | # The canonical NOP has CRm == op2 == 0, but all of the space |
| 275 | # that isn't specifically allocated to an instruction must NOP |
| 276 | NOP 1101 0101 0000 0011 0010 ---- --- 11111 |
| 277 | } |
| 278 | |
| 279 | # System instructions with register argument |
| 280 | WFET 1101 0101 0000 0011 0001 0000 000 rd:5 |
| 281 | WFIT 1101 0101 0000 0011 0001 0000 001 rd:5 |
| 282 | |
| 283 | # Barriers |
| 284 | |
| 285 | CLREX 1101 0101 0000 0011 0011 ---- 010 11111 |
| 286 | DSB_DMB 1101 0101 0000 0011 0011 domain:2 types:2 10- 11111 |
| 287 | # For the DSB nXS variant, types always equals MBReqTypes_All and we ignore the |
| 288 | # domain bits. |
| 289 | DSB_nXS 1101 0101 0000 0011 0011 -- 10 001 11111 |
| 290 | ISB 1101 0101 0000 0011 0011 ---- 110 11111 |
| 291 | SB 1101 0101 0000 0011 0011 0000 111 11111 |
| 292 | |
| 293 | # PSTATE |
| 294 | |
| 295 | CFINV 1101 0101 0000 0 000 0100 0000 000 11111 |
| 296 | XAFLAG 1101 0101 0000 0 000 0100 0000 001 11111 |
| 297 | AXFLAG 1101 0101 0000 0 000 0100 0000 010 11111 |
| 298 | |
| 299 | # These are architecturally all "MSR (immediate)"; we decode the destination |
| 300 | # register too because there is no commonality in our implementation. |
| 301 | @msr_i .... .... .... . ... .... imm:4 ... ..... |
| 302 | MSR_i_UAO 1101 0101 0000 0 000 0100 .... 011 11111 @msr_i |
| 303 | MSR_i_PAN 1101 0101 0000 0 000 0100 .... 100 11111 @msr_i |
| 304 | MSR_i_SPSEL 1101 0101 0000 0 000 0100 .... 101 11111 @msr_i |
| 305 | MSR_i_SBSS 1101 0101 0000 0 011 0100 .... 001 11111 @msr_i |
| 306 | MSR_i_DIT 1101 0101 0000 0 011 0100 .... 010 11111 @msr_i |
| 307 | MSR_i_TCO 1101 0101 0000 0 011 0100 .... 100 11111 @msr_i |
| 308 | MSR_i_DAIFSET 1101 0101 0000 0 011 0100 .... 110 11111 @msr_i |
| 309 | MSR_i_DAIFCLEAR 1101 0101 0000 0 011 0100 .... 111 11111 @msr_i |
| 310 | MSR_i_ALLINT 1101 0101 0000 0 001 0100 000 imm:1 000 11111 |
| 311 | MSR_i_SVCR 1101 0101 0000 0 011 0100 0 mask:2 imm:1 011 11111 |
| 312 | |
| 313 | # MRS, MSR (register), SYS, SYSL. These are all essentially the |
| 314 | # same instruction as far as QEMU is concerned. |
| 315 | # NB: op0 is bits [20:19], but op0=0b00 is other insns, so we have |
| 316 | # to hand-decode it. |
| 317 | SYS 1101 0101 00 l:1 01 op1:3 crn:4 crm:4 op2:3 rt:5 op0=1 |
| 318 | SYS 1101 0101 00 l:1 10 op1:3 crn:4 crm:4 op2:3 rt:5 op0=2 |
| 319 | SYS 1101 0101 00 l:1 11 op1:3 crn:4 crm:4 op2:3 rt:5 op0=3 |
| 320 | |
| 321 | # Exception generation |
| 322 | |
| 323 | @i16 .... .... ... imm:16 ... .. &i |
| 324 | SVC 1101 0100 000 ................ 000 01 @i16 |
| 325 | HVC 1101 0100 000 ................ 000 10 @i16 |
| 326 | SMC 1101 0100 000 ................ 000 11 @i16 |
| 327 | BRK 1101 0100 001 ................ 000 00 @i16 |
| 328 | HLT 1101 0100 010 ................ 000 00 @i16 |
| 329 | # These insns always UNDEF unless in halting debug state, which |
| 330 | # we don't implement. So we don't need to decode them. The patterns |
| 331 | # are listed here as documentation. |
| 332 | # DCPS1 1101 0100 101 ................ 000 01 @i16 |
| 333 | # DCPS2 1101 0100 101 ................ 000 10 @i16 |
| 334 | # DCPS3 1101 0100 101 ................ 000 11 @i16 |
| 335 | |
| 336 | ### Loads and stores |
| 337 | |
| 338 | &stxr rn rt rt2 rs sz lasr |
| 339 | &stlr rn rt sz lasr |
| 340 | @stxr sz:2 ...... ... rs:5 lasr:1 rt2:5 rn:5 rt:5 &stxr |
| 341 | @stlr sz:2 ...... ... ..... lasr:1 ..... rn:5 rt:5 &stlr |
| 342 | %imm1_30_p2 30:1 !function=plus_2 |
| 343 | @stxp .. ...... ... rs:5 lasr:1 rt2:5 rn:5 rt:5 &stxr sz=%imm1_30_p2 |
| 344 | STXR .. 001000 000 ..... . ..... ..... ..... @stxr # inc STLXR |
| 345 | LDXR .. 001000 010 ..... . ..... ..... ..... @stxr # inc LDAXR |
| 346 | STLR .. 001000 100 11111 . 11111 ..... ..... @stlr # inc STLLR |
| 347 | LDAR .. 001000 110 11111 . 11111 ..... ..... @stlr # inc LDLAR |
| 348 | |
| 349 | STXP 1 . 001000 001 ..... . ..... ..... ..... @stxp # inc STLXP |
| 350 | LDXP 1 . 001000 011 ..... . ..... ..... ..... @stxp # inc LDAXP |
| 351 | |
| 352 | # CASP, CASPA, CASPAL, CASPL (we don't decode the bits that determine |
| 353 | # acquire/release semantics because QEMU's cmpxchg always has those) |
| 354 | CASP 0 . 001000 0 - 1 rs:5 - 11111 rn:5 rt:5 sz=%imm1_30_p2 |
| 355 | # CAS, CASA, CASAL, CASL |
| 356 | CAS sz:2 001000 1 - 1 rs:5 - 11111 rn:5 rt:5 |
| 357 | |
| 358 | &ldlit rt imm sz sign |
| 359 | @ldlit .. ... . .. ................... rt:5 &ldlit imm=%imm19 |
| 360 | |
| 361 | LD_lit 00 011 0 00 ................... ..... @ldlit sz=2 sign=0 |
| 362 | LD_lit 01 011 0 00 ................... ..... @ldlit sz=3 sign=0 |
| 363 | LD_lit 10 011 0 00 ................... ..... @ldlit sz=2 sign=1 |
| 364 | LD_lit_v 00 011 1 00 ................... ..... @ldlit sz=2 sign=0 |
| 365 | LD_lit_v 01 011 1 00 ................... ..... @ldlit sz=3 sign=0 |
| 366 | LD_lit_v 10 011 1 00 ................... ..... @ldlit sz=4 sign=0 |
| 367 | |
| 368 | # PRFM |
| 369 | NOP 11 011 0 00 ------------------- ----- |
| 370 | |
| 371 | &ldstpair rt2 rt rn imm sz sign w p |
| 372 | @ldstpair .. ... . ... . imm:s7 rt2:5 rn:5 rt:5 &ldstpair |
| 373 | |
| 374 | # STNP, LDNP: Signed offset, non-temporal hint. We don't emulate caches |
| 375 | # so we ignore hints about data access patterns, and handle these like |
| 376 | # plain signed offset. |
| 377 | STP 00 101 0 000 0 ....... ..... ..... ..... @ldstpair sz=2 sign=0 p=0 w=0 |
| 378 | LDP 00 101 0 000 1 ....... ..... ..... ..... @ldstpair sz=2 sign=0 p=0 w=0 |
| 379 | STP 10 101 0 000 0 ....... ..... ..... ..... @ldstpair sz=3 sign=0 p=0 w=0 |
| 380 | LDP 10 101 0 000 1 ....... ..... ..... ..... @ldstpair sz=3 sign=0 p=0 w=0 |
| 381 | STP_v 00 101 1 000 0 ....... ..... ..... ..... @ldstpair sz=2 sign=0 p=0 w=0 |
| 382 | LDP_v 00 101 1 000 1 ....... ..... ..... ..... @ldstpair sz=2 sign=0 p=0 w=0 |
| 383 | STP_v 01 101 1 000 0 ....... ..... ..... ..... @ldstpair sz=3 sign=0 p=0 w=0 |
| 384 | LDP_v 01 101 1 000 1 ....... ..... ..... ..... @ldstpair sz=3 sign=0 p=0 w=0 |
| 385 | STP_v 10 101 1 000 0 ....... ..... ..... ..... @ldstpair sz=4 sign=0 p=0 w=0 |
| 386 | LDP_v 10 101 1 000 1 ....... ..... ..... ..... @ldstpair sz=4 sign=0 p=0 w=0 |
| 387 | |
| 388 | # STP and LDP: post-indexed |
| 389 | STP 00 101 0 001 0 ....... ..... ..... ..... @ldstpair sz=2 sign=0 p=1 w=1 |
| 390 | LDP 00 101 0 001 1 ....... ..... ..... ..... @ldstpair sz=2 sign=0 p=1 w=1 |
| 391 | LDP 01 101 0 001 1 ....... ..... ..... ..... @ldstpair sz=2 sign=1 p=1 w=1 |
| 392 | STP 10 101 0 001 0 ....... ..... ..... ..... @ldstpair sz=3 sign=0 p=1 w=1 |
| 393 | LDP 10 101 0 001 1 ....... ..... ..... ..... @ldstpair sz=3 sign=0 p=1 w=1 |
| 394 | STP_v 00 101 1 001 0 ....... ..... ..... ..... @ldstpair sz=2 sign=0 p=1 w=1 |
| 395 | LDP_v 00 101 1 001 1 ....... ..... ..... ..... @ldstpair sz=2 sign=0 p=1 w=1 |
| 396 | STP_v 01 101 1 001 0 ....... ..... ..... ..... @ldstpair sz=3 sign=0 p=1 w=1 |
| 397 | LDP_v 01 101 1 001 1 ....... ..... ..... ..... @ldstpair sz=3 sign=0 p=1 w=1 |
| 398 | STP_v 10 101 1 001 0 ....... ..... ..... ..... @ldstpair sz=4 sign=0 p=1 w=1 |
| 399 | LDP_v 10 101 1 001 1 ....... ..... ..... ..... @ldstpair sz=4 sign=0 p=1 w=1 |
| 400 | |
| 401 | # STP and LDP: offset |
| 402 | STP 00 101 0 010 0 ....... ..... ..... ..... @ldstpair sz=2 sign=0 p=0 w=0 |
| 403 | LDP 00 101 0 010 1 ....... ..... ..... ..... @ldstpair sz=2 sign=0 p=0 w=0 |
| 404 | LDP 01 101 0 010 1 ....... ..... ..... ..... @ldstpair sz=2 sign=1 p=0 w=0 |
| 405 | STP 10 101 0 010 0 ....... ..... ..... ..... @ldstpair sz=3 sign=0 p=0 w=0 |
| 406 | LDP 10 101 0 010 1 ....... ..... ..... ..... @ldstpair sz=3 sign=0 p=0 w=0 |
| 407 | STP_v 00 101 1 010 0 ....... ..... ..... ..... @ldstpair sz=2 sign=0 p=0 w=0 |
| 408 | LDP_v 00 101 1 010 1 ....... ..... ..... ..... @ldstpair sz=2 sign=0 p=0 w=0 |
| 409 | STP_v 01 101 1 010 0 ....... ..... ..... ..... @ldstpair sz=3 sign=0 p=0 w=0 |
| 410 | LDP_v 01 101 1 010 1 ....... ..... ..... ..... @ldstpair sz=3 sign=0 p=0 w=0 |
| 411 | STP_v 10 101 1 010 0 ....... ..... ..... ..... @ldstpair sz=4 sign=0 p=0 w=0 |
| 412 | LDP_v 10 101 1 010 1 ....... ..... ..... ..... @ldstpair sz=4 sign=0 p=0 w=0 |
| 413 | |
| 414 | # STP and LDP: pre-indexed |
| 415 | STP 00 101 0 011 0 ....... ..... ..... ..... @ldstpair sz=2 sign=0 p=0 w=1 |
| 416 | LDP 00 101 0 011 1 ....... ..... ..... ..... @ldstpair sz=2 sign=0 p=0 w=1 |
| 417 | LDP 01 101 0 011 1 ....... ..... ..... ..... @ldstpair sz=2 sign=1 p=0 w=1 |
| 418 | STP 10 101 0 011 0 ....... ..... ..... ..... @ldstpair sz=3 sign=0 p=0 w=1 |
| 419 | LDP 10 101 0 011 1 ....... ..... ..... ..... @ldstpair sz=3 sign=0 p=0 w=1 |
| 420 | STP_v 00 101 1 011 0 ....... ..... ..... ..... @ldstpair sz=2 sign=0 p=0 w=1 |
| 421 | LDP_v 00 101 1 011 1 ....... ..... ..... ..... @ldstpair sz=2 sign=0 p=0 w=1 |
| 422 | STP_v 01 101 1 011 0 ....... ..... ..... ..... @ldstpair sz=3 sign=0 p=0 w=1 |
| 423 | LDP_v 01 101 1 011 1 ....... ..... ..... ..... @ldstpair sz=3 sign=0 p=0 w=1 |
| 424 | STP_v 10 101 1 011 0 ....... ..... ..... ..... @ldstpair sz=4 sign=0 p=0 w=1 |
| 425 | LDP_v 10 101 1 011 1 ....... ..... ..... ..... @ldstpair sz=4 sign=0 p=0 w=1 |
| 426 | |
| 427 | # STGP: store tag and pair |
| 428 | STGP 01 101 0 001 0 ....... ..... ..... ..... @ldstpair sz=3 sign=0 p=1 w=1 |
| 429 | STGP 01 101 0 010 0 ....... ..... ..... ..... @ldstpair sz=3 sign=0 p=0 w=0 |
| 430 | STGP 01 101 0 011 0 ....... ..... ..... ..... @ldstpair sz=3 sign=0 p=0 w=1 |
| 431 | |
| 432 | # Load/store register (unscaled immediate) |
| 433 | &ldst_imm rt rn imm sz sign w p unpriv ext |
| 434 | @ldst_imm .. ... . .. .. . imm:s9 .. rn:5 rt:5 &ldst_imm unpriv=0 p=0 w=0 |
| 435 | @ldst_imm_pre .. ... . .. .. . imm:s9 .. rn:5 rt:5 &ldst_imm unpriv=0 p=0 w=1 |
| 436 | @ldst_imm_post .. ... . .. .. . imm:s9 .. rn:5 rt:5 &ldst_imm unpriv=0 p=1 w=1 |
| 437 | @ldst_imm_user .. ... . .. .. . imm:s9 .. rn:5 rt:5 &ldst_imm unpriv=1 p=0 w=0 |
| 438 | |
| 439 | STR_i sz:2 111 0 00 00 0 ......... 00 ..... ..... @ldst_imm sign=0 ext=0 |
| 440 | LDR_i 00 111 0 00 01 0 ......... 00 ..... ..... @ldst_imm sign=0 ext=1 sz=0 |
| 441 | LDR_i 01 111 0 00 01 0 ......... 00 ..... ..... @ldst_imm sign=0 ext=1 sz=1 |
| 442 | LDR_i 10 111 0 00 01 0 ......... 00 ..... ..... @ldst_imm sign=0 ext=1 sz=2 |
| 443 | LDR_i 11 111 0 00 01 0 ......... 00 ..... ..... @ldst_imm sign=0 ext=0 sz=3 |
| 444 | LDR_i 00 111 0 00 10 0 ......... 00 ..... ..... @ldst_imm sign=1 ext=0 sz=0 |
| 445 | LDR_i 01 111 0 00 10 0 ......... 00 ..... ..... @ldst_imm sign=1 ext=0 sz=1 |
| 446 | LDR_i 10 111 0 00 10 0 ......... 00 ..... ..... @ldst_imm sign=1 ext=0 sz=2 |
| 447 | LDR_i 00 111 0 00 11 0 ......... 00 ..... ..... @ldst_imm sign=1 ext=1 sz=0 |
| 448 | LDR_i 01 111 0 00 11 0 ......... 00 ..... ..... @ldst_imm sign=1 ext=1 sz=1 |
| 449 | |
| 450 | STR_i sz:2 111 0 00 00 0 ......... 01 ..... ..... @ldst_imm_post sign=0 ext=0 |
| 451 | LDR_i 00 111 0 00 01 0 ......... 01 ..... ..... @ldst_imm_post sign=0 ext=1 sz=0 |
| 452 | LDR_i 01 111 0 00 01 0 ......... 01 ..... ..... @ldst_imm_post sign=0 ext=1 sz=1 |
| 453 | LDR_i 10 111 0 00 01 0 ......... 01 ..... ..... @ldst_imm_post sign=0 ext=1 sz=2 |
| 454 | LDR_i 11 111 0 00 01 0 ......... 01 ..... ..... @ldst_imm_post sign=0 ext=0 sz=3 |
| 455 | LDR_i 00 111 0 00 10 0 ......... 01 ..... ..... @ldst_imm_post sign=1 ext=0 sz=0 |
| 456 | LDR_i 01 111 0 00 10 0 ......... 01 ..... ..... @ldst_imm_post sign=1 ext=0 sz=1 |
| 457 | LDR_i 10 111 0 00 10 0 ......... 01 ..... ..... @ldst_imm_post sign=1 ext=0 sz=2 |
| 458 | LDR_i 00 111 0 00 11 0 ......... 01 ..... ..... @ldst_imm_post sign=1 ext=1 sz=0 |
| 459 | LDR_i 01 111 0 00 11 0 ......... 01 ..... ..... @ldst_imm_post sign=1 ext=1 sz=1 |
| 460 | |
| 461 | STR_i sz:2 111 0 00 00 0 ......... 10 ..... ..... @ldst_imm_user sign=0 ext=0 |
| 462 | LDR_i 00 111 0 00 01 0 ......... 10 ..... ..... @ldst_imm_user sign=0 ext=1 sz=0 |
| 463 | LDR_i 01 111 0 00 01 0 ......... 10 ..... ..... @ldst_imm_user sign=0 ext=1 sz=1 |
| 464 | LDR_i 10 111 0 00 01 0 ......... 10 ..... ..... @ldst_imm_user sign=0 ext=1 sz=2 |
| 465 | LDR_i 11 111 0 00 01 0 ......... 10 ..... ..... @ldst_imm_user sign=0 ext=0 sz=3 |
| 466 | LDR_i 00 111 0 00 10 0 ......... 10 ..... ..... @ldst_imm_user sign=1 ext=0 sz=0 |
| 467 | LDR_i 01 111 0 00 10 0 ......... 10 ..... ..... @ldst_imm_user sign=1 ext=0 sz=1 |
| 468 | LDR_i 10 111 0 00 10 0 ......... 10 ..... ..... @ldst_imm_user sign=1 ext=0 sz=2 |
| 469 | LDR_i 00 111 0 00 11 0 ......... 10 ..... ..... @ldst_imm_user sign=1 ext=1 sz=0 |
| 470 | LDR_i 01 111 0 00 11 0 ......... 10 ..... ..... @ldst_imm_user sign=1 ext=1 sz=1 |
| 471 | |
| 472 | STR_i sz:2 111 0 00 00 0 ......... 11 ..... ..... @ldst_imm_pre sign=0 ext=0 |
| 473 | LDR_i 00 111 0 00 01 0 ......... 11 ..... ..... @ldst_imm_pre sign=0 ext=1 sz=0 |
| 474 | LDR_i 01 111 0 00 01 0 ......... 11 ..... ..... @ldst_imm_pre sign=0 ext=1 sz=1 |
| 475 | LDR_i 10 111 0 00 01 0 ......... 11 ..... ..... @ldst_imm_pre sign=0 ext=1 sz=2 |
| 476 | LDR_i 11 111 0 00 01 0 ......... 11 ..... ..... @ldst_imm_pre sign=0 ext=0 sz=3 |
| 477 | LDR_i 00 111 0 00 10 0 ......... 11 ..... ..... @ldst_imm_pre sign=1 ext=0 sz=0 |
| 478 | LDR_i 01 111 0 00 10 0 ......... 11 ..... ..... @ldst_imm_pre sign=1 ext=0 sz=1 |
| 479 | LDR_i 10 111 0 00 10 0 ......... 11 ..... ..... @ldst_imm_pre sign=1 ext=0 sz=2 |
| 480 | LDR_i 00 111 0 00 11 0 ......... 11 ..... ..... @ldst_imm_pre sign=1 ext=1 sz=0 |
| 481 | LDR_i 01 111 0 00 11 0 ......... 11 ..... ..... @ldst_imm_pre sign=1 ext=1 sz=1 |
| 482 | |
| 483 | # PRFM : prefetch memory: a no-op for QEMU |
| 484 | NOP 11 111 0 00 10 0 --------- 00 ----- ----- |
| 485 | |
| 486 | STR_v_i sz:2 111 1 00 00 0 ......... 00 ..... ..... @ldst_imm sign=0 ext=0 |
| 487 | STR_v_i 00 111 1 00 10 0 ......... 00 ..... ..... @ldst_imm sign=0 ext=0 sz=4 |
| 488 | LDR_v_i sz:2 111 1 00 01 0 ......... 00 ..... ..... @ldst_imm sign=0 ext=0 |
| 489 | LDR_v_i 00 111 1 00 11 0 ......... 00 ..... ..... @ldst_imm sign=0 ext=0 sz=4 |
| 490 | |
| 491 | STR_v_i sz:2 111 1 00 00 0 ......... 01 ..... ..... @ldst_imm_post sign=0 ext=0 |
| 492 | STR_v_i 00 111 1 00 10 0 ......... 01 ..... ..... @ldst_imm_post sign=0 ext=0 sz=4 |
| 493 | LDR_v_i sz:2 111 1 00 01 0 ......... 01 ..... ..... @ldst_imm_post sign=0 ext=0 |
| 494 | LDR_v_i 00 111 1 00 11 0 ......... 01 ..... ..... @ldst_imm_post sign=0 ext=0 sz=4 |
| 495 | |
| 496 | STR_v_i sz:2 111 1 00 00 0 ......... 11 ..... ..... @ldst_imm_pre sign=0 ext=0 |
| 497 | STR_v_i 00 111 1 00 10 0 ......... 11 ..... ..... @ldst_imm_pre sign=0 ext=0 sz=4 |
| 498 | LDR_v_i sz:2 111 1 00 01 0 ......... 11 ..... ..... @ldst_imm_pre sign=0 ext=0 |
| 499 | LDR_v_i 00 111 1 00 11 0 ......... 11 ..... ..... @ldst_imm_pre sign=0 ext=0 sz=4 |
| 500 | |
| 501 | # Load/store with an unsigned 12 bit immediate, which is scaled by the |
| 502 | # element size. The function gets the sz:imm and returns the scaled immediate. |
| 503 | %uimm_scaled 10:12 sz:3 !function=uimm_scaled |
| 504 | |
| 505 | @ldst_uimm .. ... . .. .. ............ rn:5 rt:5 &ldst_imm unpriv=0 p=0 w=0 imm=%uimm_scaled |
| 506 | |
| 507 | STR_i sz:2 111 0 01 00 ............ ..... ..... @ldst_uimm sign=0 ext=0 |
| 508 | LDR_i 00 111 0 01 01 ............ ..... ..... @ldst_uimm sign=0 ext=1 sz=0 |
| 509 | LDR_i 01 111 0 01 01 ............ ..... ..... @ldst_uimm sign=0 ext=1 sz=1 |
| 510 | LDR_i 10 111 0 01 01 ............ ..... ..... @ldst_uimm sign=0 ext=1 sz=2 |
| 511 | LDR_i 11 111 0 01 01 ............ ..... ..... @ldst_uimm sign=0 ext=0 sz=3 |
| 512 | LDR_i 00 111 0 01 10 ............ ..... ..... @ldst_uimm sign=1 ext=0 sz=0 |
| 513 | LDR_i 01 111 0 01 10 ............ ..... ..... @ldst_uimm sign=1 ext=0 sz=1 |
| 514 | LDR_i 10 111 0 01 10 ............ ..... ..... @ldst_uimm sign=1 ext=0 sz=2 |
| 515 | LDR_i 00 111 0 01 11 ............ ..... ..... @ldst_uimm sign=1 ext=1 sz=0 |
| 516 | LDR_i 01 111 0 01 11 ............ ..... ..... @ldst_uimm sign=1 ext=1 sz=1 |
| 517 | |
| 518 | # PRFM |
| 519 | NOP 11 111 0 01 10 ------------ ----- ----- |
| 520 | |
| 521 | STR_v_i sz:2 111 1 01 00 ............ ..... ..... @ldst_uimm sign=0 ext=0 |
| 522 | STR_v_i 00 111 1 01 10 ............ ..... ..... @ldst_uimm sign=0 ext=0 sz=4 |
| 523 | LDR_v_i sz:2 111 1 01 01 ............ ..... ..... @ldst_uimm sign=0 ext=0 |
| 524 | LDR_v_i 00 111 1 01 11 ............ ..... ..... @ldst_uimm sign=0 ext=0 sz=4 |
| 525 | |
| 526 | # Load/store with register offset |
| 527 | &ldst rm rn rt sign ext sz opt s |
| 528 | @ldst .. ... . .. .. . rm:5 opt:3 s:1 .. rn:5 rt:5 &ldst |
| 529 | STR sz:2 111 0 00 00 1 ..... ... . 10 ..... ..... @ldst sign=0 ext=0 |
| 530 | LDR 00 111 0 00 01 1 ..... ... . 10 ..... ..... @ldst sign=0 ext=1 sz=0 |
| 531 | LDR 01 111 0 00 01 1 ..... ... . 10 ..... ..... @ldst sign=0 ext=1 sz=1 |
| 532 | LDR 10 111 0 00 01 1 ..... ... . 10 ..... ..... @ldst sign=0 ext=1 sz=2 |
| 533 | LDR 11 111 0 00 01 1 ..... ... . 10 ..... ..... @ldst sign=0 ext=0 sz=3 |
| 534 | LDR 00 111 0 00 10 1 ..... ... . 10 ..... ..... @ldst sign=1 ext=0 sz=0 |
| 535 | LDR 01 111 0 00 10 1 ..... ... . 10 ..... ..... @ldst sign=1 ext=0 sz=1 |
| 536 | LDR 10 111 0 00 10 1 ..... ... . 10 ..... ..... @ldst sign=1 ext=0 sz=2 |
| 537 | LDR 00 111 0 00 11 1 ..... ... . 10 ..... ..... @ldst sign=1 ext=1 sz=0 |
| 538 | LDR 01 111 0 00 11 1 ..... ... . 10 ..... ..... @ldst sign=1 ext=1 sz=1 |
| 539 | |
| 540 | # PRFM |
| 541 | NOP 11 111 0 00 10 1 ----- -1- - 10 ----- ----- |
| 542 | |
| 543 | STR_v sz:2 111 1 00 00 1 ..... ... . 10 ..... ..... @ldst sign=0 ext=0 |
| 544 | STR_v 00 111 1 00 10 1 ..... ... . 10 ..... ..... @ldst sign=0 ext=0 sz=4 |
| 545 | LDR_v sz:2 111 1 00 01 1 ..... ... . 10 ..... ..... @ldst sign=0 ext=0 |
| 546 | LDR_v 00 111 1 00 11 1 ..... ... . 10 ..... ..... @ldst sign=0 ext=0 sz=4 |
| 547 | |
| 548 | # Atomic memory operations |
| 549 | &atomic rs rn rt a r sz |
| 550 | @atomic sz:2 ... . .. a:1 r:1 . rs:5 . ... .. rn:5 rt:5 &atomic |
| 551 | LDADD .. 111 0 00 . . 1 ..... 0000 00 ..... ..... @atomic |
| 552 | LDCLR .. 111 0 00 . . 1 ..... 0001 00 ..... ..... @atomic |
| 553 | LDEOR .. 111 0 00 . . 1 ..... 0010 00 ..... ..... @atomic |
| 554 | LDSET .. 111 0 00 . . 1 ..... 0011 00 ..... ..... @atomic |
| 555 | LDSMAX .. 111 0 00 . . 1 ..... 0100 00 ..... ..... @atomic |
| 556 | LDSMIN .. 111 0 00 . . 1 ..... 0101 00 ..... ..... @atomic |
| 557 | LDUMAX .. 111 0 00 . . 1 ..... 0110 00 ..... ..... @atomic |
| 558 | LDUMIN .. 111 0 00 . . 1 ..... 0111 00 ..... ..... @atomic |
| 559 | SWP .. 111 0 00 . . 1 ..... 1000 00 ..... ..... @atomic |
| 560 | |
| 561 | LDAPR sz:2 111 0 00 1 0 1 11111 1100 00 rn:5 rt:5 |
| 562 | |
| 563 | # Atomic 128-bit memory operations |
| 564 | &atomic128 rn rt rt2 a r |
| 565 | @atomic128 ........ a:1 r:1 . rt2:5 ...... rn:5 rt:5 &atomic128 |
| 566 | LDCLRP 00011001 . . 1 ..... 000100 ..... ..... @atomic128 |
| 567 | LDSETP 00011001 . . 1 ..... 001100 ..... ..... @atomic128 |
| 568 | SWPP 00011001 . . 1 ..... 100000 ..... ..... @atomic128 |
| 569 | |
| 570 | # Load/store register (pointer authentication) |
| 571 | |
| 572 | # LDRA immediate is 10 bits signed and scaled, but the bits aren't all contiguous |
| 573 | %ldra_imm 22:s1 12:9 !function=times_8 |
| 574 | |
| 575 | LDRA 11 111 0 00 m:1 . 1 ......... w:1 1 rn:5 rt:5 imm=%ldra_imm |
| 576 | |
| 577 | &ldapr_stlr_i rn rt imm sz sign ext |
| 578 | @ldapr_stlr_i .. ...... .. . imm:s9 .. rn:5 rt:5 &ldapr_stlr_i |
| 579 | STLR_i sz:2 011001 00 0 ......... 00 ..... ..... @ldapr_stlr_i sign=0 ext=0 |
| 580 | LDAPR_i sz:2 011001 01 0 ......... 00 ..... ..... @ldapr_stlr_i sign=0 ext=0 |
| 581 | LDAPR_i 00 011001 10 0 ......... 00 ..... ..... @ldapr_stlr_i sign=1 ext=0 sz=0 |
| 582 | LDAPR_i 01 011001 10 0 ......... 00 ..... ..... @ldapr_stlr_i sign=1 ext=0 sz=1 |
| 583 | LDAPR_i 10 011001 10 0 ......... 00 ..... ..... @ldapr_stlr_i sign=1 ext=0 sz=2 |
| 584 | LDAPR_i 00 011001 11 0 ......... 00 ..... ..... @ldapr_stlr_i sign=1 ext=1 sz=0 |
| 585 | LDAPR_i 01 011001 11 0 ......... 00 ..... ..... @ldapr_stlr_i sign=1 ext=1 sz=1 |
| 586 | |
| 587 | # GCSSTR, GCSSTTR |
| 588 | GCSSTR 11011001 000 11111 000 unpriv:1 11 rn:5 rt:5 |
| 589 | |
| 590 | # Load/store multiple structures |
| 591 | # The 4-bit opcode in [15:12] encodes repeat count and structure elements |
| 592 | &ldst_mult rm rn rt sz q p rpt selem |
| 593 | @ldst_mult . q:1 ...... p:1 . . rm:5 .... sz:2 rn:5 rt:5 &ldst_mult |
| 594 | ST_mult 0 . 001100 . 0 0 ..... 0000 .. ..... ..... @ldst_mult rpt=1 selem=4 |
| 595 | ST_mult 0 . 001100 . 0 0 ..... 0010 .. ..... ..... @ldst_mult rpt=4 selem=1 |
| 596 | ST_mult 0 . 001100 . 0 0 ..... 0100 .. ..... ..... @ldst_mult rpt=1 selem=3 |
| 597 | ST_mult 0 . 001100 . 0 0 ..... 0110 .. ..... ..... @ldst_mult rpt=3 selem=1 |
| 598 | ST_mult 0 . 001100 . 0 0 ..... 0111 .. ..... ..... @ldst_mult rpt=1 selem=1 |
| 599 | ST_mult 0 . 001100 . 0 0 ..... 1000 .. ..... ..... @ldst_mult rpt=1 selem=2 |
| 600 | ST_mult 0 . 001100 . 0 0 ..... 1010 .. ..... ..... @ldst_mult rpt=2 selem=1 |
| 601 | |
| 602 | LD_mult 0 . 001100 . 1 0 ..... 0000 .. ..... ..... @ldst_mult rpt=1 selem=4 |
| 603 | LD_mult 0 . 001100 . 1 0 ..... 0010 .. ..... ..... @ldst_mult rpt=4 selem=1 |
| 604 | LD_mult 0 . 001100 . 1 0 ..... 0100 .. ..... ..... @ldst_mult rpt=1 selem=3 |
| 605 | LD_mult 0 . 001100 . 1 0 ..... 0110 .. ..... ..... @ldst_mult rpt=3 selem=1 |
| 606 | LD_mult 0 . 001100 . 1 0 ..... 0111 .. ..... ..... @ldst_mult rpt=1 selem=1 |
| 607 | LD_mult 0 . 001100 . 1 0 ..... 1000 .. ..... ..... @ldst_mult rpt=1 selem=2 |
| 608 | LD_mult 0 . 001100 . 1 0 ..... 1010 .. ..... ..... @ldst_mult rpt=2 selem=1 |
| 609 | |
| 610 | # Load/store single structure |
| 611 | &ldst_single rm rn rt p selem index scale |
| 612 | |
| 613 | %ldst_single_selem 13:1 21:1 !function=plus_1 |
| 614 | |
| 615 | %ldst_single_index_b 30:1 10:3 |
| 616 | %ldst_single_index_h 30:1 11:2 |
| 617 | %ldst_single_index_s 30:1 12:1 |
| 618 | |
| 619 | @ldst_single_b .. ...... p:1 .. rm:5 ...... rn:5 rt:5 \ |
| 620 | &ldst_single scale=0 selem=%ldst_single_selem \ |
| 621 | index=%ldst_single_index_b |
| 622 | @ldst_single_h .. ...... p:1 .. rm:5 ...... rn:5 rt:5 \ |
| 623 | &ldst_single scale=1 selem=%ldst_single_selem \ |
| 624 | index=%ldst_single_index_h |
| 625 | @ldst_single_s .. ...... p:1 .. rm:5 ...... rn:5 rt:5 \ |
| 626 | &ldst_single scale=2 selem=%ldst_single_selem \ |
| 627 | index=%ldst_single_index_s |
| 628 | @ldst_single_d . index:1 ...... p:1 .. rm:5 ...... rn:5 rt:5 \ |
| 629 | &ldst_single scale=3 selem=%ldst_single_selem |
| 630 | |
| 631 | ST_single 0 . 001101 . 0 . ..... 00 . ... ..... ..... @ldst_single_b |
| 632 | ST_single 0 . 001101 . 0 . ..... 01 . ..0 ..... ..... @ldst_single_h |
| 633 | ST_single 0 . 001101 . 0 . ..... 10 . .00 ..... ..... @ldst_single_s |
| 634 | ST_single 0 . 001101 . 0 . ..... 10 . 001 ..... ..... @ldst_single_d |
| 635 | |
| 636 | LD_single 0 . 001101 . 1 . ..... 00 . ... ..... ..... @ldst_single_b |
| 637 | LD_single 0 . 001101 . 1 . ..... 01 . ..0 ..... ..... @ldst_single_h |
| 638 | LD_single 0 . 001101 . 1 . ..... 10 . .00 ..... ..... @ldst_single_s |
| 639 | LD_single 0 . 001101 . 1 . ..... 10 . 001 ..... ..... @ldst_single_d |
| 640 | |
| 641 | # Replicating load case |
| 642 | LD_single_repl 0 q:1 001101 p:1 1 . rm:5 11 . 0 scale:2 rn:5 rt:5 selem=%ldst_single_selem |
| 643 | |
| 644 | %tag_offset 12:s9 !function=scale_by_log2_tag_granule |
| 645 | &ldst_tag rn rt imm p w |
| 646 | @ldst_tag ........ .. . ......... .. rn:5 rt:5 &ldst_tag imm=%tag_offset |
| 647 | @ldst_tag_mult ........ .. . 000000000 .. rn:5 rt:5 &ldst_tag imm=0 |
| 648 | |
| 649 | STZGM 11011001 00 1 ......... 00 ..... ..... @ldst_tag_mult p=0 w=0 |
| 650 | STG 11011001 00 1 ......... 01 ..... ..... @ldst_tag p=1 w=1 |
| 651 | STG 11011001 00 1 ......... 10 ..... ..... @ldst_tag p=0 w=0 |
| 652 | STG 11011001 00 1 ......... 11 ..... ..... @ldst_tag p=0 w=1 |
| 653 | |
| 654 | LDG 11011001 01 1 ......... 00 ..... ..... @ldst_tag p=0 w=0 |
| 655 | STZG 11011001 01 1 ......... 01 ..... ..... @ldst_tag p=1 w=1 |
| 656 | STZG 11011001 01 1 ......... 10 ..... ..... @ldst_tag p=0 w=0 |
| 657 | STZG 11011001 01 1 ......... 11 ..... ..... @ldst_tag p=0 w=1 |
| 658 | |
| 659 | STGM 11011001 10 1 ......... 00 ..... ..... @ldst_tag_mult p=0 w=0 |
| 660 | ST2G 11011001 10 1 ......... 01 ..... ..... @ldst_tag p=1 w=1 |
| 661 | ST2G 11011001 10 1 ......... 10 ..... ..... @ldst_tag p=0 w=0 |
| 662 | ST2G 11011001 10 1 ......... 11 ..... ..... @ldst_tag p=0 w=1 |
| 663 | |
| 664 | LDGM 11011001 11 1 ......... 00 ..... ..... @ldst_tag_mult p=0 w=0 |
| 665 | STZ2G 11011001 11 1 ......... 01 ..... ..... @ldst_tag p=1 w=1 |
| 666 | STZ2G 11011001 11 1 ......... 10 ..... ..... @ldst_tag p=0 w=0 |
| 667 | STZ2G 11011001 11 1 ......... 11 ..... ..... @ldst_tag p=0 w=1 |
| 668 | |
| 669 | # Memory operations (memset, memcpy, memmove) |
| 670 | # Each of these comes in a set of three, eg SETP (prologue), SETM (main), |
| 671 | # SETE (epilogue), and each of those has different flavours to |
| 672 | # indicate whether memory accesses should be unpriv or non-temporal. |
| 673 | # We don't distinguish temporal and non-temporal accesses, but we |
| 674 | # do need to report it in syndrome register values. |
| 675 | |
| 676 | # Memset |
| 677 | &set rs rn rd unpriv nontemp |
| 678 | # op2 bit 1 is nontemporal bit |
| 679 | @set .. ......... rs:5 .. nontemp:1 unpriv:1 .. rn:5 rd:5 &set |
| 680 | |
| 681 | SETP 00 011001110 ..... 00 . . 01 ..... ..... @set |
| 682 | SETM 00 011001110 ..... 01 . . 01 ..... ..... @set |
| 683 | SETE 00 011001110 ..... 10 . . 01 ..... ..... @set |
| 684 | |
| 685 | # Like SET, but also setting MTE tags |
| 686 | SETGP 00 011101110 ..... 00 . . 01 ..... ..... @set |
| 687 | SETGM 00 011101110 ..... 01 . . 01 ..... ..... @set |
| 688 | SETGE 00 011101110 ..... 10 . . 01 ..... ..... @set |
| 689 | |
| 690 | # Memmove/Memcopy: the CPY insns allow overlapping src/dest and |
| 691 | # copy in the correct direction; the CPYF insns always copy forwards. |
| 692 | # |
| 693 | # options has the nontemporal and unpriv bits for src and dest |
| 694 | &cpy rs rn rd options |
| 695 | @cpy .. ... . ..... rs:5 options:4 .. rn:5 rd:5 &cpy |
| 696 | |
| 697 | CPYFP 00 011 0 01000 ..... .... 01 ..... ..... @cpy |
| 698 | CPYFM 00 011 0 01010 ..... .... 01 ..... ..... @cpy |
| 699 | CPYFE 00 011 0 01100 ..... .... 01 ..... ..... @cpy |
| 700 | CPYP 00 011 1 01000 ..... .... 01 ..... ..... @cpy |
| 701 | CPYM 00 011 1 01010 ..... .... 01 ..... ..... @cpy |
| 702 | CPYE 00 011 1 01100 ..... .... 01 ..... ..... @cpy |
| 703 | |
| 704 | ### Data Processing (register) |
| 705 | |
| 706 | # Data Processing (2-source) |
| 707 | |
| 708 | @rrr . .......... rm:5 ...... rn:5 rd:5 &rrr |
| 709 | @rrr_sf sf:1 .......... rm:5 ...... rn:5 rd:5 &rrr_sf |
| 710 | |
| 711 | UDIV . 00 11010110 ..... 00001 0 ..... ..... @rrr_sf |
| 712 | SDIV . 00 11010110 ..... 00001 1 ..... ..... @rrr_sf |
| 713 | LSLV . 00 11010110 ..... 00100 0 ..... ..... @rrr_sf |
| 714 | LSRV . 00 11010110 ..... 00100 1 ..... ..... @rrr_sf |
| 715 | ASRV . 00 11010110 ..... 00101 0 ..... ..... @rrr_sf |
| 716 | RORV . 00 11010110 ..... 00101 1 ..... ..... @rrr_sf |
| 717 | |
| 718 | CRC32 0 00 11010110 ..... 0100 00 ..... ..... @rrr_b |
| 719 | CRC32 0 00 11010110 ..... 0100 01 ..... ..... @rrr_h |
| 720 | CRC32 0 00 11010110 ..... 0100 10 ..... ..... @rrr_s |
| 721 | CRC32 1 00 11010110 ..... 0100 11 ..... ..... @rrr_d |
| 722 | |
| 723 | CRC32C 0 00 11010110 ..... 0101 00 ..... ..... @rrr_b |
| 724 | CRC32C 0 00 11010110 ..... 0101 01 ..... ..... @rrr_h |
| 725 | CRC32C 0 00 11010110 ..... 0101 10 ..... ..... @rrr_s |
| 726 | CRC32C 1 00 11010110 ..... 0101 11 ..... ..... @rrr_d |
| 727 | |
| 728 | SUBP 1 00 11010110 ..... 000000 ..... ..... @rrr |
| 729 | SUBPS 1 01 11010110 ..... 000000 ..... ..... @rrr |
| 730 | IRG 1 00 11010110 ..... 000100 ..... ..... @rrr |
| 731 | GMI 1 00 11010110 ..... 000101 ..... ..... @rrr |
| 732 | |
| 733 | PACGA 1 00 11010110 ..... 001100 ..... ..... @rrr |
| 734 | |
| 735 | SMAX . 00 11010110 ..... 011000 ..... ..... @rrr_sf |
| 736 | SMIN . 00 11010110 ..... 011010 ..... ..... @rrr_sf |
| 737 | UMAX . 00 11010110 ..... 011001 ..... ..... @rrr_sf |
| 738 | UMIN . 00 11010110 ..... 011011 ..... ..... @rrr_sf |
| 739 | |
| 740 | # Data Processing (1-source) |
| 741 | |
| 742 | @rr . .......... ..... ...... rn:5 rd:5 &rr |
| 743 | @rr_sf sf:1 .......... ..... ...... rn:5 rd:5 &rr_sf |
| 744 | |
| 745 | RBIT . 10 11010110 00000 000000 ..... ..... @rr_sf |
| 746 | REV16 . 10 11010110 00000 000001 ..... ..... @rr_sf |
| 747 | REV32 . 10 11010110 00000 000010 ..... ..... @rr_sf |
| 748 | REV64 1 10 11010110 00000 000011 ..... ..... @rr |
| 749 | |
| 750 | CLZ . 10 11010110 00000 000100 ..... ..... @rr_sf |
| 751 | CLS . 10 11010110 00000 000101 ..... ..... @rr_sf |
| 752 | |
| 753 | CTZ . 10 11010110 00000 000110 ..... ..... @rr_sf |
| 754 | CNT . 10 11010110 00000 000111 ..... ..... @rr_sf |
| 755 | ABS . 10 11010110 00000 001000 ..... ..... @rr_sf |
| 756 | |
| 757 | &pacaut rd rn z |
| 758 | @pacaut . .. ........ ..... .. z:1 ... rn:5 rd:5 &pacaut |
| 759 | |
| 760 | PACIA 1 10 11010110 00001 00.000 ..... ..... @pacaut |
| 761 | PACIB 1 10 11010110 00001 00.001 ..... ..... @pacaut |
| 762 | PACDA 1 10 11010110 00001 00.010 ..... ..... @pacaut |
| 763 | PACDB 1 10 11010110 00001 00.011 ..... ..... @pacaut |
| 764 | |
| 765 | AUTIA 1 10 11010110 00001 00.100 ..... ..... @pacaut |
| 766 | AUTIB 1 10 11010110 00001 00.101 ..... ..... @pacaut |
| 767 | AUTDA 1 10 11010110 00001 00.110 ..... ..... @pacaut |
| 768 | AUTDB 1 10 11010110 00001 00.111 ..... ..... @pacaut |
| 769 | |
| 770 | XPACI 1 10 11010110 00001 010000 11111 rd:5 |
| 771 | XPACD 1 10 11010110 00001 010001 11111 rd:5 |
| 772 | |
| 773 | # Logical (shifted reg) |
| 774 | |
| 775 | &logic_shift rd rn rm sf sa st n |
| 776 | @logic_shift sf:1 .. ..... st:2 n:1 rm:5 sa:6 rn:5 rd:5 &logic_shift |
| 777 | |
| 778 | AND_r . 00 01010 .. . ..... ...... ..... ..... @logic_shift |
| 779 | ORR_r . 01 01010 .. . ..... ...... ..... ..... @logic_shift |
| 780 | EOR_r . 10 01010 .. . ..... ...... ..... ..... @logic_shift |
| 781 | ANDS_r . 11 01010 .. . ..... ...... ..... ..... @logic_shift |
| 782 | |
| 783 | # Add/subtract (shifted reg) |
| 784 | |
| 785 | &addsub_shift rd rn rm sf sa st |
| 786 | @addsub_shift sf:1 .. ..... st:2 . rm:5 sa:6 rn:5 rd:5 &addsub_shift |
| 787 | |
| 788 | ADD_r . 00 01011 .. 0 ..... ...... ..... ..... @addsub_shift |
| 789 | SUB_r . 10 01011 .. 0 ..... ...... ..... ..... @addsub_shift |
| 790 | ADDS_r . 01 01011 .. 0 ..... ...... ..... ..... @addsub_shift |
| 791 | SUBS_r . 11 01011 .. 0 ..... ...... ..... ..... @addsub_shift |
| 792 | |
| 793 | # Add/subtract (extended reg) |
| 794 | |
| 795 | &addsub_ext rd rn rm sf sa st |
| 796 | @addsub_ext sf:1 .. ........ rm:5 st:3 sa:3 rn:5 rd:5 &addsub_ext |
| 797 | |
| 798 | ADD_ext . 00 01011001 ..... ... ... ..... ..... @addsub_ext |
| 799 | SUB_ext . 10 01011001 ..... ... ... ..... ..... @addsub_ext |
| 800 | ADDS_ext . 01 01011001 ..... ... ... ..... ..... @addsub_ext |
| 801 | SUBS_ext . 11 01011001 ..... ... ... ..... ..... @addsub_ext |
| 802 | |
| 803 | # Add/subtract (carry) |
| 804 | |
| 805 | ADC . 00 11010000 ..... 000000 ..... ..... @rrr_sf |
| 806 | ADCS . 01 11010000 ..... 000000 ..... ..... @rrr_sf |
| 807 | SBC . 10 11010000 ..... 000000 ..... ..... @rrr_sf |
| 808 | SBCS . 11 11010000 ..... 000000 ..... ..... @rrr_sf |
| 809 | |
| 810 | # Rotate right into flags |
| 811 | |
| 812 | RMIF 1 01 11010000 imm:6 00001 rn:5 0 mask:4 |
| 813 | |
| 814 | # Evaluate into flags |
| 815 | |
| 816 | SETF8 0 01 11010000 00000 000010 rn:5 01101 |
| 817 | SETF16 0 01 11010000 00000 010010 rn:5 01101 |
| 818 | |
| 819 | # Conditional compare |
| 820 | |
| 821 | CCMP sf:1 op:1 1 11010010 y:5 cond:4 imm:1 0 rn:5 0 nzcv:4 |
| 822 | |
| 823 | # Conditional select |
| 824 | |
| 825 | CSEL sf:1 else_inv:1 011010100 rm:5 cond:4 0 else_inc:1 rn:5 rd:5 |
| 826 | |
| 827 | # Data Processing (3-source) |
| 828 | |
| 829 | &rrrr rd rn rm ra |
| 830 | @rrrr . .. ........ rm:5 . ra:5 rn:5 rd:5 &rrrr |
| 831 | |
| 832 | MADD_w 0 00 11011000 ..... 0 ..... ..... ..... @rrrr |
| 833 | MSUB_w 0 00 11011000 ..... 1 ..... ..... ..... @rrrr |
| 834 | MADD_x 1 00 11011000 ..... 0 ..... ..... ..... @rrrr |
| 835 | MSUB_x 1 00 11011000 ..... 1 ..... ..... ..... @rrrr |
| 836 | |
| 837 | SMADDL 1 00 11011001 ..... 0 ..... ..... ..... @rrrr |
| 838 | SMSUBL 1 00 11011001 ..... 1 ..... ..... ..... @rrrr |
| 839 | UMADDL 1 00 11011101 ..... 0 ..... ..... ..... @rrrr |
| 840 | UMSUBL 1 00 11011101 ..... 1 ..... ..... ..... @rrrr |
| 841 | |
| 842 | SMULH 1 00 11011010 ..... 0 11111 ..... ..... @rrr |
| 843 | UMULH 1 00 11011110 ..... 0 11111 ..... ..... @rrr |
| 844 | |
| 845 | ### Cryptographic AES |
| 846 | |
| 847 | AESE 01001110 00 10100 00100 10 ..... ..... @r2r_q1e0 |
| 848 | AESD 01001110 00 10100 00101 10 ..... ..... @r2r_q1e0 |
| 849 | AESMC 01001110 00 10100 00110 10 ..... ..... @rr_q1e0 |
| 850 | AESIMC 01001110 00 10100 00111 10 ..... ..... @rr_q1e0 |
| 851 | |
| 852 | ### Cryptographic three-register SHA |
| 853 | |
| 854 | SHA1C 0101 1110 000 ..... 000000 ..... ..... @rrr_q1e0 |
| 855 | SHA1P 0101 1110 000 ..... 000100 ..... ..... @rrr_q1e0 |
| 856 | SHA1M 0101 1110 000 ..... 001000 ..... ..... @rrr_q1e0 |
| 857 | SHA1SU0 0101 1110 000 ..... 001100 ..... ..... @rrr_q1e0 |
| 858 | SHA256H 0101 1110 000 ..... 010000 ..... ..... @rrr_q1e0 |
| 859 | SHA256H2 0101 1110 000 ..... 010100 ..... ..... @rrr_q1e0 |
| 860 | SHA256SU1 0101 1110 000 ..... 011000 ..... ..... @rrr_q1e0 |
| 861 | |
| 862 | ### Cryptographic two-register SHA |
| 863 | |
| 864 | SHA1H 0101 1110 0010 1000 0000 10 ..... ..... @rr_q1e0 |
| 865 | SHA1SU1 0101 1110 0010 1000 0001 10 ..... ..... @rr_q1e0 |
| 866 | SHA256SU0 0101 1110 0010 1000 0010 10 ..... ..... @rr_q1e0 |
| 867 | |
| 868 | ### Cryptographic three-register SHA512 |
| 869 | |
| 870 | SHA512H 1100 1110 011 ..... 100000 ..... ..... @rrr_q1e0 |
| 871 | SHA512H2 1100 1110 011 ..... 100001 ..... ..... @rrr_q1e0 |
| 872 | SHA512SU1 1100 1110 011 ..... 100010 ..... ..... @rrr_q1e0 |
| 873 | RAX1 1100 1110 011 ..... 100011 ..... ..... @rrr_q1e3 |
| 874 | SM3PARTW1 1100 1110 011 ..... 110000 ..... ..... @rrr_q1e0 |
| 875 | SM3PARTW2 1100 1110 011 ..... 110001 ..... ..... @rrr_q1e0 |
| 876 | SM4EKEY 1100 1110 011 ..... 110010 ..... ..... @rrr_q1e0 |
| 877 | |
| 878 | ### Cryptographic two-register SHA512 |
| 879 | |
| 880 | SHA512SU0 1100 1110 110 00000 100000 ..... ..... @rr_q1e0 |
| 881 | SM4E 1100 1110 110 00000 100001 ..... ..... @r2r_q1e0 |
| 882 | |
| 883 | ### Cryptographic four-register |
| 884 | |
| 885 | EOR3 1100 1110 000 ..... 0 ..... ..... ..... @rrrr_q1e3 |
| 886 | BCAX 1100 1110 001 ..... 0 ..... ..... ..... @rrrr_q1e3 |
| 887 | SM3SS1 1100 1110 010 ..... 0 ..... ..... ..... @rrrr_q1e3 |
| 888 | |
| 889 | ### Cryptographic three-register, imm2 |
| 890 | |
| 891 | &crypto3i rd rn rm imm |
| 892 | @crypto3i ........ ... rm:5 .. imm:2 .. rn:5 rd:5 &crypto3i |
| 893 | |
| 894 | SM3TT1A 11001110 010 ..... 10 .. 00 ..... ..... @crypto3i |
| 895 | SM3TT1B 11001110 010 ..... 10 .. 01 ..... ..... @crypto3i |
| 896 | SM3TT2A 11001110 010 ..... 10 .. 10 ..... ..... @crypto3i |
| 897 | SM3TT2B 11001110 010 ..... 10 .. 11 ..... ..... @crypto3i |
| 898 | |
| 899 | ### Cryptographic XAR |
| 900 | |
| 901 | XAR 1100 1110 100 rm:5 imm:6 rn:5 rd:5 |
| 902 | |
| 903 | ### Advanced SIMD scalar copy |
| 904 | |
| 905 | DUP_element_s 0101 1110 000 imm:5 0 0000 1 rn:5 rd:5 |
| 906 | |
| 907 | ### Advanced SIMD copy |
| 908 | |
| 909 | DUP_element_v 0 q:1 00 1110 000 imm:5 0 0000 1 rn:5 rd:5 |
| 910 | DUP_general 0 q:1 00 1110 000 imm:5 0 0001 1 rn:5 rd:5 |
| 911 | INS_general 0 1 00 1110 000 imm:5 0 0011 1 rn:5 rd:5 |
| 912 | SMOV 0 q:1 00 1110 000 imm:5 0 0101 1 rn:5 rd:5 |
| 913 | UMOV 0 q:1 00 1110 000 imm:5 0 0111 1 rn:5 rd:5 |
| 914 | INS_element 0 1 10 1110 000 di:5 0 si:4 1 rn:5 rd:5 |
| 915 | |
| 916 | ### Advanced SIMD scalar three same |
| 917 | |
| 918 | FADD_s 0001 1110 ..1 ..... 0010 10 ..... ..... @rrr_hsd |
| 919 | FSUB_s 0001 1110 ..1 ..... 0011 10 ..... ..... @rrr_hsd |
| 920 | FDIV_s 0001 1110 ..1 ..... 0001 10 ..... ..... @rrr_hsd |
| 921 | FMUL_s 0001 1110 ..1 ..... 0000 10 ..... ..... @rrr_hsd |
| 922 | FNMUL_s 0001 1110 ..1 ..... 1000 10 ..... ..... @rrr_hsd |
| 923 | |
| 924 | FMAX_s 0001 1110 ..1 ..... 0100 10 ..... ..... @rrr_hsd |
| 925 | FMIN_s 0001 1110 ..1 ..... 0101 10 ..... ..... @rrr_hsd |
| 926 | FMAXNM_s 0001 1110 ..1 ..... 0110 10 ..... ..... @rrr_hsd |
| 927 | FMINNM_s 0001 1110 ..1 ..... 0111 10 ..... ..... @rrr_hsd |
| 928 | |
| 929 | FMULX_s 0101 1110 010 ..... 00011 1 ..... ..... @rrr_h |
| 930 | FMULX_s 0101 1110 0.1 ..... 11011 1 ..... ..... @rrr_sd |
| 931 | |
| 932 | FCMEQ_s 0101 1110 010 ..... 00100 1 ..... ..... @rrr_h |
| 933 | FCMEQ_s 0101 1110 0.1 ..... 11100 1 ..... ..... @rrr_sd |
| 934 | |
| 935 | FCMGE_s 0111 1110 010 ..... 00100 1 ..... ..... @rrr_h |
| 936 | FCMGE_s 0111 1110 0.1 ..... 11100 1 ..... ..... @rrr_sd |
| 937 | |
| 938 | FCMGT_s 0111 1110 110 ..... 00100 1 ..... ..... @rrr_h |
| 939 | FCMGT_s 0111 1110 1.1 ..... 11100 1 ..... ..... @rrr_sd |
| 940 | |
| 941 | FACGE_s 0111 1110 010 ..... 00101 1 ..... ..... @rrr_h |
| 942 | FACGE_s 0111 1110 0.1 ..... 11101 1 ..... ..... @rrr_sd |
| 943 | |
| 944 | FACGT_s 0111 1110 110 ..... 00101 1 ..... ..... @rrr_h |
| 945 | FACGT_s 0111 1110 1.1 ..... 11101 1 ..... ..... @rrr_sd |
| 946 | |
| 947 | FABD_s 0111 1110 110 ..... 00010 1 ..... ..... @rrr_h |
| 948 | FABD_s 0111 1110 1.1 ..... 11010 1 ..... ..... @rrr_sd |
| 949 | |
| 950 | FRECPS_s 0101 1110 010 ..... 00111 1 ..... ..... @rrr_h |
| 951 | FRECPS_s 0101 1110 0.1 ..... 11111 1 ..... ..... @rrr_sd |
| 952 | |
| 953 | FRSQRTS_s 0101 1110 110 ..... 00111 1 ..... ..... @rrr_h |
| 954 | FRSQRTS_s 0101 1110 1.1 ..... 11111 1 ..... ..... @rrr_sd |
| 955 | |
| 956 | SQADD_s 0101 1110 ..1 ..... 00001 1 ..... ..... @rrr_e |
| 957 | UQADD_s 0111 1110 ..1 ..... 00001 1 ..... ..... @rrr_e |
| 958 | SQSUB_s 0101 1110 ..1 ..... 00101 1 ..... ..... @rrr_e |
| 959 | UQSUB_s 0111 1110 ..1 ..... 00101 1 ..... ..... @rrr_e |
| 960 | |
| 961 | SUQADD_s 0101 1110 ..1 00000 00111 0 ..... ..... @r2r_e |
| 962 | USQADD_s 0111 1110 ..1 00000 00111 0 ..... ..... @r2r_e |
| 963 | |
| 964 | SSHL_s 0101 1110 111 ..... 01000 1 ..... ..... @rrr_d |
| 965 | USHL_s 0111 1110 111 ..... 01000 1 ..... ..... @rrr_d |
| 966 | SRSHL_s 0101 1110 111 ..... 01010 1 ..... ..... @rrr_d |
| 967 | URSHL_s 0111 1110 111 ..... 01010 1 ..... ..... @rrr_d |
| 968 | SQSHL_s 0101 1110 ..1 ..... 01001 1 ..... ..... @rrr_e |
| 969 | UQSHL_s 0111 1110 ..1 ..... 01001 1 ..... ..... @rrr_e |
| 970 | SQRSHL_s 0101 1110 ..1 ..... 01011 1 ..... ..... @rrr_e |
| 971 | UQRSHL_s 0111 1110 ..1 ..... 01011 1 ..... ..... @rrr_e |
| 972 | |
| 973 | ADD_s 0101 1110 111 ..... 10000 1 ..... ..... @rrr_d |
| 974 | SUB_s 0111 1110 111 ..... 10000 1 ..... ..... @rrr_d |
| 975 | CMGT_s 0101 1110 111 ..... 00110 1 ..... ..... @rrr_d |
| 976 | CMHI_s 0111 1110 111 ..... 00110 1 ..... ..... @rrr_d |
| 977 | CMGE_s 0101 1110 111 ..... 00111 1 ..... ..... @rrr_d |
| 978 | CMHS_s 0111 1110 111 ..... 00111 1 ..... ..... @rrr_d |
| 979 | CMTST_s 0101 1110 111 ..... 10001 1 ..... ..... @rrr_d |
| 980 | CMEQ_s 0111 1110 111 ..... 10001 1 ..... ..... @rrr_d |
| 981 | |
| 982 | SQDMULH_s 0101 1110 ..1 ..... 10110 1 ..... ..... @rrr_e |
| 983 | SQRDMULH_s 0111 1110 ..1 ..... 10110 1 ..... ..... @rrr_e |
| 984 | SQRDMLAH_s 0111 1110 ..0 ..... 10000 1 ..... ..... @rrr_e |
| 985 | SQRDMLSH_s 0111 1110 ..0 ..... 10001 1 ..... ..... @rrr_e |
| 986 | |
| 987 | # Decode scalar x scalar as scalar x indexed, with index 0. |
| 988 | SQDMULL_si 0101 1110 011 rm:5 11010 0 rn:5 rd:5 &rrx_e idx=0 esz=1 |
| 989 | SQDMULL_si 0101 1110 101 rm:5 11010 0 rn:5 rd:5 &rrx_e idx=0 esz=2 |
| 990 | SQDMLAL_si 0101 1110 011 rm:5 10010 0 rn:5 rd:5 &rrx_e idx=0 esz=1 |
| 991 | SQDMLAL_si 0101 1110 101 rm:5 10010 0 rn:5 rd:5 &rrx_e idx=0 esz=2 |
| 992 | SQDMLSL_si 0101 1110 011 rm:5 10110 0 rn:5 rd:5 &rrx_e idx=0 esz=1 |
| 993 | SQDMLSL_si 0101 1110 101 rm:5 10110 0 rn:5 rd:5 &rrx_e idx=0 esz=2 |
| 994 | |
| 995 | ### Advanced SIMD scalar pairwise |
| 996 | |
| 997 | FADDP_s 0101 1110 0011 0000 1101 10 ..... ..... @rr_h |
| 998 | FADDP_s 0111 1110 0.11 0000 1101 10 ..... ..... @rr_sd |
| 999 | |
| 1000 | FMAXP_s 0101 1110 0011 0000 1111 10 ..... ..... @rr_h |
| 1001 | FMAXP_s 0111 1110 0.11 0000 1111 10 ..... ..... @rr_sd |
| 1002 | |
| 1003 | FMINP_s 0101 1110 1011 0000 1111 10 ..... ..... @rr_h |
| 1004 | FMINP_s 0111 1110 1.11 0000 1111 10 ..... ..... @rr_sd |
| 1005 | |
| 1006 | FMAXNMP_s 0101 1110 0011 0000 1100 10 ..... ..... @rr_h |
| 1007 | FMAXNMP_s 0111 1110 0.11 0000 1100 10 ..... ..... @rr_sd |
| 1008 | |
| 1009 | FMINNMP_s 0101 1110 1011 0000 1100 10 ..... ..... @rr_h |
| 1010 | FMINNMP_s 0111 1110 1.11 0000 1100 10 ..... ..... @rr_sd |
| 1011 | |
| 1012 | ADDP_s 0101 1110 1111 0001 1011 10 ..... ..... @rr_d |
| 1013 | |
| 1014 | ### Advanced SIMD three same |
| 1015 | |
| 1016 | FADD_v 0.00 1110 010 ..... 00010 1 ..... ..... @qrrr_h |
| 1017 | FADD_v 0.00 1110 0.1 ..... 11010 1 ..... ..... @qrrr_sd |
| 1018 | |
| 1019 | FSUB_v 0.00 1110 110 ..... 00010 1 ..... ..... @qrrr_h |
| 1020 | FSUB_v 0.00 1110 1.1 ..... 11010 1 ..... ..... @qrrr_sd |
| 1021 | |
| 1022 | FDIV_v 0.10 1110 010 ..... 00111 1 ..... ..... @qrrr_h |
| 1023 | FDIV_v 0.10 1110 0.1 ..... 11111 1 ..... ..... @qrrr_sd |
| 1024 | |
| 1025 | FMUL_v 0.10 1110 010 ..... 00011 1 ..... ..... @qrrr_h |
| 1026 | FMUL_v 0.10 1110 0.1 ..... 11011 1 ..... ..... @qrrr_sd |
| 1027 | |
| 1028 | FMAX_v 0.00 1110 010 ..... 00110 1 ..... ..... @qrrr_h |
| 1029 | FMAX_v 0.00 1110 0.1 ..... 11110 1 ..... ..... @qrrr_sd |
| 1030 | |
| 1031 | FMIN_v 0.00 1110 110 ..... 00110 1 ..... ..... @qrrr_h |
| 1032 | FMIN_v 0.00 1110 1.1 ..... 11110 1 ..... ..... @qrrr_sd |
| 1033 | |
| 1034 | FMAXNM_v 0.00 1110 010 ..... 00000 1 ..... ..... @qrrr_h |
| 1035 | FMAXNM_v 0.00 1110 0.1 ..... 11000 1 ..... ..... @qrrr_sd |
| 1036 | |
| 1037 | FMINNM_v 0.00 1110 110 ..... 00000 1 ..... ..... @qrrr_h |
| 1038 | FMINNM_v 0.00 1110 1.1 ..... 11000 1 ..... ..... @qrrr_sd |
| 1039 | |
| 1040 | FMULX_v 0.00 1110 010 ..... 00011 1 ..... ..... @qrrr_h |
| 1041 | FMULX_v 0.00 1110 0.1 ..... 11011 1 ..... ..... @qrrr_sd |
| 1042 | |
| 1043 | FMLA_v 0.00 1110 010 ..... 00001 1 ..... ..... @qrrr_h |
| 1044 | FMLA_v 0.00 1110 0.1 ..... 11001 1 ..... ..... @qrrr_sd |
| 1045 | |
| 1046 | FMLS_v 0.00 1110 110 ..... 00001 1 ..... ..... @qrrr_h |
| 1047 | FMLS_v 0.00 1110 1.1 ..... 11001 1 ..... ..... @qrrr_sd |
| 1048 | |
| 1049 | FMLAL_v 0.00 1110 001 ..... 11101 1 ..... ..... @qrrr_h |
| 1050 | FMLSL_v 0.00 1110 101 ..... 11101 1 ..... ..... @qrrr_h |
| 1051 | FMLAL2_v 0.10 1110 001 ..... 11001 1 ..... ..... @qrrr_h |
| 1052 | FMLSL2_v 0.10 1110 101 ..... 11001 1 ..... ..... @qrrr_h |
| 1053 | |
| 1054 | FCMEQ_v 0.00 1110 010 ..... 00100 1 ..... ..... @qrrr_h |
| 1055 | FCMEQ_v 0.00 1110 0.1 ..... 11100 1 ..... ..... @qrrr_sd |
| 1056 | |
| 1057 | FCMGE_v 0.10 1110 010 ..... 00100 1 ..... ..... @qrrr_h |
| 1058 | FCMGE_v 0.10 1110 0.1 ..... 11100 1 ..... ..... @qrrr_sd |
| 1059 | |
| 1060 | FCMGT_v 0.10 1110 110 ..... 00100 1 ..... ..... @qrrr_h |
| 1061 | FCMGT_v 0.10 1110 1.1 ..... 11100 1 ..... ..... @qrrr_sd |
| 1062 | |
| 1063 | FACGE_v 0.10 1110 010 ..... 00101 1 ..... ..... @qrrr_h |
| 1064 | FACGE_v 0.10 1110 0.1 ..... 11101 1 ..... ..... @qrrr_sd |
| 1065 | |
| 1066 | FACGT_v 0.10 1110 110 ..... 00101 1 ..... ..... @qrrr_h |
| 1067 | FACGT_v 0.10 1110 1.1 ..... 11101 1 ..... ..... @qrrr_sd |
| 1068 | |
| 1069 | FABD_v 0.10 1110 110 ..... 00010 1 ..... ..... @qrrr_h |
| 1070 | FABD_v 0.10 1110 1.1 ..... 11010 1 ..... ..... @qrrr_sd |
| 1071 | |
| 1072 | FRECPS_v 0.00 1110 010 ..... 00111 1 ..... ..... @qrrr_h |
| 1073 | FRECPS_v 0.00 1110 0.1 ..... 11111 1 ..... ..... @qrrr_sd |
| 1074 | |
| 1075 | FRSQRTS_v 0.00 1110 110 ..... 00111 1 ..... ..... @qrrr_h |
| 1076 | FRSQRTS_v 0.00 1110 1.1 ..... 11111 1 ..... ..... @qrrr_sd |
| 1077 | |
| 1078 | FADDP_v 0.10 1110 010 ..... 00010 1 ..... ..... @qrrr_h |
| 1079 | FADDP_v 0.10 1110 0.1 ..... 11010 1 ..... ..... @qrrr_sd |
| 1080 | |
| 1081 | FMAXP_v 0.10 1110 010 ..... 00110 1 ..... ..... @qrrr_h |
| 1082 | FMAXP_v 0.10 1110 0.1 ..... 11110 1 ..... ..... @qrrr_sd |
| 1083 | |
| 1084 | FMINP_v 0.10 1110 110 ..... 00110 1 ..... ..... @qrrr_h |
| 1085 | FMINP_v 0.10 1110 1.1 ..... 11110 1 ..... ..... @qrrr_sd |
| 1086 | |
| 1087 | FMAXNMP_v 0.10 1110 010 ..... 00000 1 ..... ..... @qrrr_h |
| 1088 | FMAXNMP_v 0.10 1110 0.1 ..... 11000 1 ..... ..... @qrrr_sd |
| 1089 | |
| 1090 | FMINNMP_v 0.10 1110 110 ..... 00000 1 ..... ..... @qrrr_h |
| 1091 | FMINNMP_v 0.10 1110 1.1 ..... 11000 1 ..... ..... @qrrr_sd |
| 1092 | |
| 1093 | ADDP_v 0.00 1110 ..1 ..... 10111 1 ..... ..... @qrrr_e |
| 1094 | SMAXP_v 0.00 1110 ..1 ..... 10100 1 ..... ..... @qrrr_e |
| 1095 | SMINP_v 0.00 1110 ..1 ..... 10101 1 ..... ..... @qrrr_e |
| 1096 | UMAXP_v 0.10 1110 ..1 ..... 10100 1 ..... ..... @qrrr_e |
| 1097 | UMINP_v 0.10 1110 ..1 ..... 10101 1 ..... ..... @qrrr_e |
| 1098 | |
| 1099 | AND_v 0.00 1110 001 ..... 00011 1 ..... ..... @qrrr_b |
| 1100 | BIC_v 0.00 1110 011 ..... 00011 1 ..... ..... @qrrr_b |
| 1101 | ORR_v 0.00 1110 101 ..... 00011 1 ..... ..... @qrrr_b |
| 1102 | ORN_v 0.00 1110 111 ..... 00011 1 ..... ..... @qrrr_b |
| 1103 | EOR_v 0.10 1110 001 ..... 00011 1 ..... ..... @qrrr_b |
| 1104 | BSL_v 0.10 1110 011 ..... 00011 1 ..... ..... @qrrr_b |
| 1105 | BIT_v 0.10 1110 101 ..... 00011 1 ..... ..... @qrrr_b |
| 1106 | BIF_v 0.10 1110 111 ..... 00011 1 ..... ..... @qrrr_b |
| 1107 | |
| 1108 | SQADD_v 0.00 1110 ..1 ..... 00001 1 ..... ..... @qrrr_e |
| 1109 | UQADD_v 0.10 1110 ..1 ..... 00001 1 ..... ..... @qrrr_e |
| 1110 | SQSUB_v 0.00 1110 ..1 ..... 00101 1 ..... ..... @qrrr_e |
| 1111 | UQSUB_v 0.10 1110 ..1 ..... 00101 1 ..... ..... @qrrr_e |
| 1112 | |
| 1113 | SUQADD_v 0.00 1110 ..1 00000 00111 0 ..... ..... @qr2r_e |
| 1114 | USQADD_v 0.10 1110 ..1 00000 00111 0 ..... ..... @qr2r_e |
| 1115 | |
| 1116 | SSHL_v 0.00 1110 ..1 ..... 01000 1 ..... ..... @qrrr_e |
| 1117 | USHL_v 0.10 1110 ..1 ..... 01000 1 ..... ..... @qrrr_e |
| 1118 | SRSHL_v 0.00 1110 ..1 ..... 01010 1 ..... ..... @qrrr_e |
| 1119 | URSHL_v 0.10 1110 ..1 ..... 01010 1 ..... ..... @qrrr_e |
| 1120 | SQSHL_v 0.00 1110 ..1 ..... 01001 1 ..... ..... @qrrr_e |
| 1121 | UQSHL_v 0.10 1110 ..1 ..... 01001 1 ..... ..... @qrrr_e |
| 1122 | SQRSHL_v 0.00 1110 ..1 ..... 01011 1 ..... ..... @qrrr_e |
| 1123 | UQRSHL_v 0.10 1110 ..1 ..... 01011 1 ..... ..... @qrrr_e |
| 1124 | |
| 1125 | ADD_v 0.00 1110 ..1 ..... 10000 1 ..... ..... @qrrr_e |
| 1126 | SUB_v 0.10 1110 ..1 ..... 10000 1 ..... ..... @qrrr_e |
| 1127 | CMGT_v 0.00 1110 ..1 ..... 00110 1 ..... ..... @qrrr_e |
| 1128 | CMHI_v 0.10 1110 ..1 ..... 00110 1 ..... ..... @qrrr_e |
| 1129 | CMGE_v 0.00 1110 ..1 ..... 00111 1 ..... ..... @qrrr_e |
| 1130 | CMHS_v 0.10 1110 ..1 ..... 00111 1 ..... ..... @qrrr_e |
| 1131 | CMTST_v 0.00 1110 ..1 ..... 10001 1 ..... ..... @qrrr_e |
| 1132 | CMEQ_v 0.10 1110 ..1 ..... 10001 1 ..... ..... @qrrr_e |
| 1133 | SHADD_v 0.00 1110 ..1 ..... 00000 1 ..... ..... @qrrr_e |
| 1134 | UHADD_v 0.10 1110 ..1 ..... 00000 1 ..... ..... @qrrr_e |
| 1135 | SHSUB_v 0.00 1110 ..1 ..... 00100 1 ..... ..... @qrrr_e |
| 1136 | UHSUB_v 0.10 1110 ..1 ..... 00100 1 ..... ..... @qrrr_e |
| 1137 | SRHADD_v 0.00 1110 ..1 ..... 00010 1 ..... ..... @qrrr_e |
| 1138 | URHADD_v 0.10 1110 ..1 ..... 00010 1 ..... ..... @qrrr_e |
| 1139 | SMAX_v 0.00 1110 ..1 ..... 01100 1 ..... ..... @qrrr_e |
| 1140 | UMAX_v 0.10 1110 ..1 ..... 01100 1 ..... ..... @qrrr_e |
| 1141 | SMIN_v 0.00 1110 ..1 ..... 01101 1 ..... ..... @qrrr_e |
| 1142 | UMIN_v 0.10 1110 ..1 ..... 01101 1 ..... ..... @qrrr_e |
| 1143 | SABD_v 0.00 1110 ..1 ..... 01110 1 ..... ..... @qrrr_e |
| 1144 | UABD_v 0.10 1110 ..1 ..... 01110 1 ..... ..... @qrrr_e |
| 1145 | SABA_v 0.00 1110 ..1 ..... 01111 1 ..... ..... @qrrr_e |
| 1146 | UABA_v 0.10 1110 ..1 ..... 01111 1 ..... ..... @qrrr_e |
| 1147 | MUL_v 0.00 1110 ..1 ..... 10011 1 ..... ..... @qrrr_e |
| 1148 | PMUL_v 0.10 1110 001 ..... 10011 1 ..... ..... @qrrr_b |
| 1149 | MLA_v 0.00 1110 ..1 ..... 10010 1 ..... ..... @qrrr_e |
| 1150 | MLS_v 0.10 1110 ..1 ..... 10010 1 ..... ..... @qrrr_e |
| 1151 | |
| 1152 | SQDMULH_v 0.00 1110 ..1 ..... 10110 1 ..... ..... @qrrr_e |
| 1153 | SQRDMULH_v 0.10 1110 ..1 ..... 10110 1 ..... ..... @qrrr_e |
| 1154 | SQRDMLAH_v 0.10 1110 ..0 ..... 10000 1 ..... ..... @qrrr_e |
| 1155 | SQRDMLSH_v 0.10 1110 ..0 ..... 10001 1 ..... ..... @qrrr_e |
| 1156 | |
| 1157 | SDOT_v 0.00 1110 100 ..... 10010 1 ..... ..... @qrrr_s |
| 1158 | UDOT_v 0.10 1110 100 ..... 10010 1 ..... ..... @qrrr_s |
| 1159 | USDOT_v 0.00 1110 100 ..... 10011 1 ..... ..... @qrrr_s |
| 1160 | BFDOT_v 0.10 1110 010 ..... 11111 1 ..... ..... @qrrr_s |
| 1161 | BFMLAL_v 0.10 1110 110 ..... 11111 1 ..... ..... @qrrr_h |
| 1162 | BFMMLA 0110 1110 010 ..... 11101 1 ..... ..... @rrr_q1e0 |
| 1163 | SMMLA 0100 1110 100 ..... 10100 1 ..... ..... @rrr_q1e0 |
| 1164 | UMMLA 0110 1110 100 ..... 10100 1 ..... ..... @rrr_q1e0 |
| 1165 | USMMLA 0100 1110 100 ..... 10101 1 ..... ..... @rrr_q1e0 |
| 1166 | |
| 1167 | FCADD_90 0.10 1110 ..0 ..... 11100 1 ..... ..... @qrrr_e |
| 1168 | FCADD_270 0.10 1110 ..0 ..... 11110 1 ..... ..... @qrrr_e |
| 1169 | |
| 1170 | FCMLA_v 0 q:1 10 1110 esz:2 0 rm:5 110 rot:2 1 rn:5 rd:5 |
| 1171 | |
| 1172 | SMULL_v 0.00 1110 ..1 ..... 11000 0 ..... ..... @qrrr_e |
| 1173 | UMULL_v 0.10 1110 ..1 ..... 11000 0 ..... ..... @qrrr_e |
| 1174 | SMLAL_v 0.00 1110 ..1 ..... 10000 0 ..... ..... @qrrr_e |
| 1175 | UMLAL_v 0.10 1110 ..1 ..... 10000 0 ..... ..... @qrrr_e |
| 1176 | SMLSL_v 0.00 1110 ..1 ..... 10100 0 ..... ..... @qrrr_e |
| 1177 | UMLSL_v 0.10 1110 ..1 ..... 10100 0 ..... ..... @qrrr_e |
| 1178 | |
| 1179 | SADDL_v 0.00 1110 ..1 ..... 00000 0 ..... ..... @qrrr_e |
| 1180 | UADDL_v 0.10 1110 ..1 ..... 00000 0 ..... ..... @qrrr_e |
| 1181 | SSUBL_v 0.00 1110 ..1 ..... 00100 0 ..... ..... @qrrr_e |
| 1182 | USUBL_v 0.10 1110 ..1 ..... 00100 0 ..... ..... @qrrr_e |
| 1183 | SABAL_v 0.00 1110 ..1 ..... 01010 0 ..... ..... @qrrr_e |
| 1184 | UABAL_v 0.10 1110 ..1 ..... 01010 0 ..... ..... @qrrr_e |
| 1185 | SABDL_v 0.00 1110 ..1 ..... 01110 0 ..... ..... @qrrr_e |
| 1186 | UABDL_v 0.10 1110 ..1 ..... 01110 0 ..... ..... @qrrr_e |
| 1187 | |
| 1188 | SQDMULL_v 0.00 1110 011 ..... 11010 0 ..... ..... @qrrr_h |
| 1189 | SQDMULL_v 0.00 1110 101 ..... 11010 0 ..... ..... @qrrr_s |
| 1190 | SQDMLAL_v 0.00 1110 011 ..... 10010 0 ..... ..... @qrrr_h |
| 1191 | SQDMLAL_v 0.00 1110 101 ..... 10010 0 ..... ..... @qrrr_s |
| 1192 | SQDMLSL_v 0.00 1110 011 ..... 10110 0 ..... ..... @qrrr_h |
| 1193 | SQDMLSL_v 0.00 1110 101 ..... 10110 0 ..... ..... @qrrr_s |
| 1194 | |
| 1195 | SADDW 0.00 1110 ..1 ..... 00010 0 ..... ..... @qrrr_e |
| 1196 | UADDW 0.10 1110 ..1 ..... 00010 0 ..... ..... @qrrr_e |
| 1197 | SSUBW 0.00 1110 ..1 ..... 00110 0 ..... ..... @qrrr_e |
| 1198 | USUBW 0.10 1110 ..1 ..... 00110 0 ..... ..... @qrrr_e |
| 1199 | |
| 1200 | ADDHN 0.00 1110 ..1 ..... 01000 0 ..... ..... @qrrr_e |
| 1201 | RADDHN 0.10 1110 ..1 ..... 01000 0 ..... ..... @qrrr_e |
| 1202 | SUBHN 0.00 1110 ..1 ..... 01100 0 ..... ..... @qrrr_e |
| 1203 | RSUBHN 0.10 1110 ..1 ..... 01100 0 ..... ..... @qrrr_e |
| 1204 | |
| 1205 | PMULL_p8 0.00 1110 001 ..... 11100 0 ..... ..... @qrrr_b |
| 1206 | PMULL_p64 0.00 1110 111 ..... 11100 0 ..... ..... @qrrr_b |
| 1207 | |
| 1208 | FAMAX 0.00 1110 110 ..... 00011 1 ..... ..... @qrrr_h |
| 1209 | FAMAX 0.00 1110 1.1 ..... 11011 1 ..... ..... @qrrr_sd |
| 1210 | FAMIN 0.10 1110 110 ..... 00011 1 ..... ..... @qrrr_h |
| 1211 | FAMIN 0.10 1110 1.1 ..... 11011 1 ..... ..... @qrrr_sd |
| 1212 | |
| 1213 | FSCALE 0.10 1110 110 ..... 00111 1 ..... ..... @qrrr_h |
| 1214 | FSCALE 0.10 1110 1.1 ..... 11111 1 ..... ..... @qrrr_sd |
| 1215 | |
| 1216 | FCVTN_bh 0.00 1110 010 ..... 11110 1 ..... ..... @qrrr_h |
| 1217 | FCVTN_bs 0.00 1110 000 ..... 11110 1 ..... ..... @qrrr_h |
| 1218 | |
| 1219 | FMLAL_hb_v 0 idxn:1 00 1110 110 rm:5 11111 1 rn:5 rd:5 \ |
| 1220 | &rxx idxm=0 |
| 1221 | |
| 1222 | %fmlall_idxn 30:1 22:1 |
| 1223 | FMLALL_sb_v 0.00 1110 0.0 rm:5 110001 rn:5 rd:5 \ |
| 1224 | &rxx idxm=0 idxn=%fmlall_idxn |
| 1225 | |
| 1226 | FDOT_sb_v 0.00 1110 000 ..... 11111 1 ..... ..... @qrrr_s |
| 1227 | FDOT_hb_v 0.00 1110 010 ..... 11111 1 ..... ..... @qrrr_h |
| 1228 | |
| 1229 | FMMLA_sb 0110 1110 100 ..... 11101 1 ..... ..... @rrr_q1e0 |
| 1230 | FMMLA_hb 0110 1110 000 ..... 11101 1 ..... ..... @rrr_q1e0 |
| 1231 | |
| 1232 | ### Advanced SIMD scalar x indexed element |
| 1233 | |
| 1234 | FMUL_si 0101 1111 00 .. .... 1001 . 0 ..... ..... @rrx_h |
| 1235 | FMUL_si 0101 1111 10 . ..... 1001 . 0 ..... ..... @rrx_s |
| 1236 | FMUL_si 0101 1111 11 0 ..... 1001 . 0 ..... ..... @rrx_d |
| 1237 | |
| 1238 | FMLA_si 0101 1111 00 .. .... 0001 . 0 ..... ..... @rrx_h |
| 1239 | FMLA_si 0101 1111 10 .. .... 0001 . 0 ..... ..... @rrx_s |
| 1240 | FMLA_si 0101 1111 11 0. .... 0001 . 0 ..... ..... @rrx_d |
| 1241 | |
| 1242 | FMLS_si 0101 1111 00 .. .... 0101 . 0 ..... ..... @rrx_h |
| 1243 | FMLS_si 0101 1111 10 .. .... 0101 . 0 ..... ..... @rrx_s |
| 1244 | FMLS_si 0101 1111 11 0. .... 0101 . 0 ..... ..... @rrx_d |
| 1245 | |
| 1246 | FMULX_si 0111 1111 00 .. .... 1001 . 0 ..... ..... @rrx_h |
| 1247 | FMULX_si 0111 1111 10 . ..... 1001 . 0 ..... ..... @rrx_s |
| 1248 | FMULX_si 0111 1111 11 0 ..... 1001 . 0 ..... ..... @rrx_d |
| 1249 | |
| 1250 | SQDMULH_si 0101 1111 01 .. .... 1100 . 0 ..... ..... @rrx_h |
| 1251 | SQDMULH_si 0101 1111 10 .. .... 1100 . 0 ..... ..... @rrx_s |
| 1252 | |
| 1253 | SQRDMULH_si 0101 1111 01 .. .... 1101 . 0 ..... ..... @rrx_h |
| 1254 | SQRDMULH_si 0101 1111 10 . ..... 1101 . 0 ..... ..... @rrx_s |
| 1255 | |
| 1256 | SQRDMLAH_si 0111 1111 01 .. .... 1101 . 0 ..... ..... @rrx_h |
| 1257 | SQRDMLAH_si 0111 1111 10 .. .... 1101 . 0 ..... ..... @rrx_s |
| 1258 | |
| 1259 | SQRDMLSH_si 0111 1111 01 .. .... 1111 . 0 ..... ..... @rrx_h |
| 1260 | SQRDMLSH_si 0111 1111 10 .. .... 1111 . 0 ..... ..... @rrx_s |
| 1261 | |
| 1262 | SQDMULL_si 0101 1111 01 .. .... 1011 . 0 ..... ..... @rrx_h |
| 1263 | SQDMULL_si 0101 1111 10 . ..... 1011 . 0 ..... ..... @rrx_s |
| 1264 | |
| 1265 | SQDMLAL_si 0101 1111 01 .. .... 0011 . 0 ..... ..... @rrx_h |
| 1266 | SQDMLAL_si 0101 1111 10 . ..... 0011 . 0 ..... ..... @rrx_s |
| 1267 | |
| 1268 | SQDMLSL_si 0101 1111 01 .. .... 0111 . 0 ..... ..... @rrx_h |
| 1269 | SQDMLSL_si 0101 1111 10 . ..... 0111 . 0 ..... ..... @rrx_s |
| 1270 | |
| 1271 | ### Advanced SIMD vector x indexed element |
| 1272 | |
| 1273 | FMUL_vi 0.00 1111 00 .. .... 1001 . 0 ..... ..... @qrrx_h |
| 1274 | FMUL_vi 0.00 1111 10 . ..... 1001 . 0 ..... ..... @qrrx_s |
| 1275 | FMUL_vi 0.00 1111 11 0 ..... 1001 . 0 ..... ..... @qrrx_d |
| 1276 | |
| 1277 | FMLA_vi 0.00 1111 00 .. .... 0001 . 0 ..... ..... @qrrx_h |
| 1278 | FMLA_vi 0.00 1111 10 . ..... 0001 . 0 ..... ..... @qrrx_s |
| 1279 | FMLA_vi 0.00 1111 11 0 ..... 0001 . 0 ..... ..... @qrrx_d |
| 1280 | |
| 1281 | FMLS_vi 0.00 1111 00 .. .... 0101 . 0 ..... ..... @qrrx_h |
| 1282 | FMLS_vi 0.00 1111 10 . ..... 0101 . 0 ..... ..... @qrrx_s |
| 1283 | FMLS_vi 0.00 1111 11 0 ..... 0101 . 0 ..... ..... @qrrx_d |
| 1284 | |
| 1285 | FMULX_vi 0.10 1111 00 .. .... 1001 . 0 ..... ..... @qrrx_h |
| 1286 | FMULX_vi 0.10 1111 10 . ..... 1001 . 0 ..... ..... @qrrx_s |
| 1287 | FMULX_vi 0.10 1111 11 0 ..... 1001 . 0 ..... ..... @qrrx_d |
| 1288 | |
| 1289 | FMLAL_vi 0.00 1111 10 .. .... 0000 . 0 ..... ..... @qrrx_h |
| 1290 | FMLSL_vi 0.00 1111 10 .. .... 0100 . 0 ..... ..... @qrrx_h |
| 1291 | FMLAL2_vi 0.10 1111 10 .. .... 1000 . 0 ..... ..... @qrrx_h |
| 1292 | FMLSL2_vi 0.10 1111 10 .. .... 1100 . 0 ..... ..... @qrrx_h |
| 1293 | |
| 1294 | MUL_vi 0.00 1111 01 .. .... 1000 . 0 ..... ..... @qrrx_h |
| 1295 | MUL_vi 0.00 1111 10 . ..... 1000 . 0 ..... ..... @qrrx_s |
| 1296 | |
| 1297 | MLA_vi 0.10 1111 01 .. .... 0000 . 0 ..... ..... @qrrx_h |
| 1298 | MLA_vi 0.10 1111 10 . ..... 0000 . 0 ..... ..... @qrrx_s |
| 1299 | |
| 1300 | MLS_vi 0.10 1111 01 .. .... 0100 . 0 ..... ..... @qrrx_h |
| 1301 | MLS_vi 0.10 1111 10 . ..... 0100 . 0 ..... ..... @qrrx_s |
| 1302 | |
| 1303 | SQDMULH_vi 0.00 1111 01 .. .... 1100 . 0 ..... ..... @qrrx_h |
| 1304 | SQDMULH_vi 0.00 1111 10 . ..... 1100 . 0 ..... ..... @qrrx_s |
| 1305 | |
| 1306 | SQRDMULH_vi 0.00 1111 01 .. .... 1101 . 0 ..... ..... @qrrx_h |
| 1307 | SQRDMULH_vi 0.00 1111 10 . ..... 1101 . 0 ..... ..... @qrrx_s |
| 1308 | |
| 1309 | SQRDMLAH_vi 0.10 1111 01 .. .... 1101 . 0 ..... ..... @qrrx_h |
| 1310 | SQRDMLAH_vi 0.10 1111 10 .. .... 1101 . 0 ..... ..... @qrrx_s |
| 1311 | |
| 1312 | SQRDMLSH_vi 0.10 1111 01 .. .... 1111 . 0 ..... ..... @qrrx_h |
| 1313 | SQRDMLSH_vi 0.10 1111 10 .. .... 1111 . 0 ..... ..... @qrrx_s |
| 1314 | |
| 1315 | SDOT_vi 0.00 1111 10 .. .... 1110 . 0 ..... ..... @qrrx_s |
| 1316 | UDOT_vi 0.10 1111 10 .. .... 1110 . 0 ..... ..... @qrrx_s |
| 1317 | SUDOT_vi 0.00 1111 00 .. .... 1111 . 0 ..... ..... @qrrx_s |
| 1318 | USDOT_vi 0.00 1111 10 .. .... 1111 . 0 ..... ..... @qrrx_s |
| 1319 | BFDOT_vi 0.00 1111 01 .. .... 1111 . 0 ..... ..... @qrrx_s |
| 1320 | BFMLAL_vi 0.00 1111 11 .. .... 1111 . 0 ..... ..... @qrrx_h |
| 1321 | |
| 1322 | FCMLA_vi 0 0 10 1111 01 idx:1 rm:5 0 rot:2 1 0 0 rn:5 rd:5 esz=1 q=0 |
| 1323 | FCMLA_vi 0 1 10 1111 01 . rm:5 0 rot:2 1 . 0 rn:5 rd:5 esz=1 idx=%hl q=1 |
| 1324 | FCMLA_vi 0 1 10 1111 10 0 rm:5 0 rot:2 1 idx:1 0 rn:5 rd:5 esz=2 q=1 |
| 1325 | |
| 1326 | SMULL_vi 0.00 1111 01 .. .... 1010 . 0 ..... ..... @qrrx_h |
| 1327 | SMULL_vi 0.00 1111 10 . ..... 1010 . 0 ..... ..... @qrrx_s |
| 1328 | UMULL_vi 0.10 1111 01 .. .... 1010 . 0 ..... ..... @qrrx_h |
| 1329 | UMULL_vi 0.10 1111 10 . ..... 1010 . 0 ..... ..... @qrrx_s |
| 1330 | |
| 1331 | SMLAL_vi 0.00 1111 01 .. .... 0010 . 0 ..... ..... @qrrx_h |
| 1332 | SMLAL_vi 0.00 1111 10 . ..... 0010 . 0 ..... ..... @qrrx_s |
| 1333 | UMLAL_vi 0.10 1111 01 .. .... 0010 . 0 ..... ..... @qrrx_h |
| 1334 | UMLAL_vi 0.10 1111 10 . ..... 0010 . 0 ..... ..... @qrrx_s |
| 1335 | |
| 1336 | SMLSL_vi 0.00 1111 01 .. .... 0110 . 0 ..... ..... @qrrx_h |
| 1337 | SMLSL_vi 0.00 1111 10 . ..... 0110 . 0 ..... ..... @qrrx_s |
| 1338 | UMLSL_vi 0.10 1111 01 .. .... 0110 . 0 ..... ..... @qrrx_h |
| 1339 | UMLSL_vi 0.10 1111 10 . ..... 0110 . 0 ..... ..... @qrrx_s |
| 1340 | |
| 1341 | SQDMULL_vi 0.00 1111 01 .. .... 1011 . 0 ..... ..... @qrrx_h |
| 1342 | SQDMULL_vi 0.00 1111 10 . ..... 1011 . 0 ..... ..... @qrrx_s |
| 1343 | |
| 1344 | SQDMLAL_vi 0.00 1111 01 .. .... 0011 . 0 ..... ..... @qrrx_h |
| 1345 | SQDMLAL_vi 0.00 1111 10 . ..... 0011 . 0 ..... ..... @qrrx_s |
| 1346 | |
| 1347 | SQDMLSL_vi 0.00 1111 01 .. .... 0111 . 0 ..... ..... @qrrx_h |
| 1348 | SQDMLSL_vi 0.00 1111 10 . ..... 0111 . 0 ..... ..... @qrrx_s |
| 1349 | |
| 1350 | FMLAL_hb_vi 0 idxn:1 00 1111 11 ... rm:3 0000 . 0 rn:5 rd:5 \ |
| 1351 | &rxx idxm=%hlm4 |
| 1352 | |
| 1353 | FMLALL_sb_vi 0 . 10 1111 0 . ... rm:3 1000 . 0 rn:5 rd:5 \ |
| 1354 | &rxx idxm=%hlm4 idxn=%fmlall_idxn |
| 1355 | |
| 1356 | FDOT_sb_vi 0.00 1111 00 . ..... 0000 . 0 ..... ..... @qrrx_s |
| 1357 | FDOT_hb_vi 0.00 1111 01 .. .... 0000 . 0 ..... ..... @qrrx_h |
| 1358 | |
| 1359 | # Floating-point conditional select |
| 1360 | |
| 1361 | FCSEL 0001 1110 .. 1 rm:5 cond:4 11 rn:5 rd:5 esz=%esz_hsd |
| 1362 | |
| 1363 | # Floating-point data-processing (3 source) |
| 1364 | |
| 1365 | @rrrr_hsd .... .... .. . rm:5 . ra:5 rn:5 rd:5 &rrrr_e esz=%esz_hsd |
| 1366 | |
| 1367 | FMADD 0001 1111 .. 0 ..... 0 ..... ..... ..... @rrrr_hsd |
| 1368 | FMSUB 0001 1111 .. 0 ..... 1 ..... ..... ..... @rrrr_hsd |
| 1369 | FNMADD 0001 1111 .. 1 ..... 0 ..... ..... ..... @rrrr_hsd |
| 1370 | FNMSUB 0001 1111 .. 1 ..... 1 ..... ..... ..... @rrrr_hsd |
| 1371 | |
| 1372 | # Advanced SIMD Extract |
| 1373 | |
| 1374 | EXT_d 0010 1110 00 0 rm:5 00 imm:3 0 rn:5 rd:5 |
| 1375 | EXT_q 0110 1110 00 0 rm:5 0 imm:4 0 rn:5 rd:5 |
| 1376 | |
| 1377 | # Advanced SIMD Table Lookup |
| 1378 | |
| 1379 | TBL_TBX 0 q:1 00 1110 000 rm:5 0 len:2 tbx:1 00 rn:5 rd:5 |
| 1380 | |
| 1381 | LUTI2_1b 0100 1110 100 rm:5 0 idx:2 100 rn:5 rd:5 &rrx_e esz=0 |
| 1382 | LUTI2_1h 0100 1110 110 rm:5 0 idx:3 00 rn:5 rd:5 &rrx_e esz=1 |
| 1383 | |
| 1384 | LUTI4_1b 0100 1110 010 rm:5 0 idx:1 1000 rn:5 rd:5 &rrx_e esz=0 |
| 1385 | LUTI4_2h 0100 1110 010 rm:5 0 idx:2 100 rn:5 rd:5 &rrx_e esz=1 |
| 1386 | |
| 1387 | # Advanced SIMD Permute |
| 1388 | |
| 1389 | UZP1 0.00 1110 .. 0 ..... 0 001 10 ..... ..... @qrrr_e |
| 1390 | UZP2 0.00 1110 .. 0 ..... 0 101 10 ..... ..... @qrrr_e |
| 1391 | TRN1 0.00 1110 .. 0 ..... 0 010 10 ..... ..... @qrrr_e |
| 1392 | TRN2 0.00 1110 .. 0 ..... 0 110 10 ..... ..... @qrrr_e |
| 1393 | ZIP1 0.00 1110 .. 0 ..... 0 011 10 ..... ..... @qrrr_e |
| 1394 | ZIP2 0.00 1110 .. 0 ..... 0 111 10 ..... ..... @qrrr_e |
| 1395 | |
| 1396 | # Advanced SIMD Across Lanes |
| 1397 | |
| 1398 | ADDV 0.00 1110 .. 11000 11011 10 ..... ..... @qrr_e |
| 1399 | SADDLV 0.00 1110 .. 11000 00011 10 ..... ..... @qrr_e |
| 1400 | UADDLV 0.10 1110 .. 11000 00011 10 ..... ..... @qrr_e |
| 1401 | SMAXV 0.00 1110 .. 11000 01010 10 ..... ..... @qrr_e |
| 1402 | UMAXV 0.10 1110 .. 11000 01010 10 ..... ..... @qrr_e |
| 1403 | SMINV 0.00 1110 .. 11000 11010 10 ..... ..... @qrr_e |
| 1404 | UMINV 0.10 1110 .. 11000 11010 10 ..... ..... @qrr_e |
| 1405 | |
| 1406 | FMAXNMV_h 0.00 1110 00 11000 01100 10 ..... ..... @qrr_h |
| 1407 | FMAXNMV_s 0110 1110 00 11000 01100 10 ..... ..... @rr_q1e2 |
| 1408 | |
| 1409 | FMINNMV_h 0.00 1110 10 11000 01100 10 ..... ..... @qrr_h |
| 1410 | FMINNMV_s 0110 1110 10 11000 01100 10 ..... ..... @rr_q1e2 |
| 1411 | |
| 1412 | FMAXV_h 0.00 1110 00 11000 01111 10 ..... ..... @qrr_h |
| 1413 | FMAXV_s 0110 1110 00 11000 01111 10 ..... ..... @rr_q1e2 |
| 1414 | |
| 1415 | FMINV_h 0.00 1110 10 11000 01111 10 ..... ..... @qrr_h |
| 1416 | FMINV_s 0110 1110 10 11000 01111 10 ..... ..... @rr_q1e2 |
| 1417 | |
| 1418 | # Conversion between floating-point and fixed-point (general register) |
| 1419 | |
| 1420 | &fcvt rd rn esz sf shift |
| 1421 | %fcvt_shift32 10:5 !function=rsub_32 |
| 1422 | %fcvt_shift64 10:6 !function=rsub_64 |
| 1423 | |
| 1424 | @fcvt32 0 ....... .. ...... 1..... rn:5 rd:5 \ |
| 1425 | &fcvt sf=0 esz=%esz_hsd shift=%fcvt_shift32 |
| 1426 | @fcvt64 1 ....... .. ...... ...... rn:5 rd:5 \ |
| 1427 | &fcvt sf=1 esz=%esz_hsd shift=%fcvt_shift64 |
| 1428 | |
| 1429 | SCVTF_g . 0011110 .. 000010 ...... ..... ..... @fcvt32 |
| 1430 | SCVTF_g . 0011110 .. 000010 ...... ..... ..... @fcvt64 |
| 1431 | UCVTF_g . 0011110 .. 000011 ...... ..... ..... @fcvt32 |
| 1432 | UCVTF_g . 0011110 .. 000011 ...... ..... ..... @fcvt64 |
| 1433 | |
| 1434 | FCVTZS_g . 0011110 .. 011000 ...... ..... ..... @fcvt32 |
| 1435 | FCVTZS_g . 0011110 .. 011000 ...... ..... ..... @fcvt64 |
| 1436 | FCVTZU_g . 0011110 .. 011001 ...... ..... ..... @fcvt32 |
| 1437 | FCVTZU_g . 0011110 .. 011001 ...... ..... ..... @fcvt64 |
| 1438 | |
| 1439 | # Conversion between floating-point and integer (general register) |
| 1440 | |
| 1441 | @icvt sf:1 ....... .. ...... ...... rn:5 rd:5 \ |
| 1442 | &fcvt esz=%esz_hsd shift=0 |
| 1443 | |
| 1444 | SCVTF_g . 0011110 .. 100010 000000 ..... ..... @icvt |
| 1445 | UCVTF_g . 0011110 .. 100011 000000 ..... ..... @icvt |
| 1446 | |
| 1447 | FCVTNS_g . 0011110 .. 100000 000000 ..... ..... @icvt |
| 1448 | FCVTNU_g . 0011110 .. 100001 000000 ..... ..... @icvt |
| 1449 | FCVTPS_g . 0011110 .. 101000 000000 ..... ..... @icvt |
| 1450 | FCVTPU_g . 0011110 .. 101001 000000 ..... ..... @icvt |
| 1451 | FCVTMS_g . 0011110 .. 110000 000000 ..... ..... @icvt |
| 1452 | FCVTMU_g . 0011110 .. 110001 000000 ..... ..... @icvt |
| 1453 | FCVTZS_g . 0011110 .. 111000 000000 ..... ..... @icvt |
| 1454 | FCVTZU_g . 0011110 .. 111001 000000 ..... ..... @icvt |
| 1455 | FCVTAS_g . 0011110 .. 100100 000000 ..... ..... @icvt |
| 1456 | FCVTAU_g . 0011110 .. 100101 000000 ..... ..... @icvt |
| 1457 | |
| 1458 | # Conversion between floating-point and integer (SIMD & FP) |
| 1459 | SCVTF_simd . 0011110 .. 111100 000000 ..... ..... @icvt |
| 1460 | UCVTF_simd . 0011110 .. 111101 000000 ..... ..... @icvt |
| 1461 | |
| 1462 | FCVTAS_g_simd . 0011110 .. 111010 000000 ..... ..... @icvt |
| 1463 | FCVTAU_g_simd . 0011110 .. 111011 000000 ..... ..... @icvt |
| 1464 | FCVTMS_g_simd . 0011110 .. 110100 000000 ..... ..... @icvt |
| 1465 | FCVTMU_g_simd . 0011110 .. 110101 000000 ..... ..... @icvt |
| 1466 | FCVTNS_g_simd . 0011110 .. 101010 000000 ..... ..... @icvt |
| 1467 | FCVTNU_g_simd . 0011110 .. 101011 000000 ..... ..... @icvt |
| 1468 | FCVTPS_g_simd . 0011110 .. 110010 000000 ..... ..... @icvt |
| 1469 | FCVTPU_g_simd . 0011110 .. 110011 000000 ..... ..... @icvt |
| 1470 | FCVTZS_g_simd . 0011110 .. 110110 000000 ..... ..... @icvt |
| 1471 | FCVTZU_g_simd . 0011110 .. 110111 000000 ..... ..... @icvt |
| 1472 | |
| 1473 | FJCVTZS 0 0011110 01 111110 000000 ..... ..... @rr |
| 1474 | |
| 1475 | FMOV_ws 0 0011110 00 100110 000000 ..... ..... @rr |
| 1476 | FMOV_sw 0 0011110 00 100111 000000 ..... ..... @rr |
| 1477 | |
| 1478 | FMOV_xd 1 0011110 01 100110 000000 ..... ..... @rr |
| 1479 | FMOV_dx 1 0011110 01 100111 000000 ..... ..... @rr |
| 1480 | |
| 1481 | # Move to/from upper half of 128-bit |
| 1482 | FMOV_xu 1 0011110 10 101110 000000 ..... ..... @rr |
| 1483 | FMOV_ux 1 0011110 10 101111 000000 ..... ..... @rr |
| 1484 | |
| 1485 | # Half-precision allows both sf=0 and sf=1 with identical results |
| 1486 | FMOV_xh - 0011110 11 100110 000000 ..... ..... @rr |
| 1487 | FMOV_hx - 0011110 11 100111 000000 ..... ..... @rr |
| 1488 | |
| 1489 | # Floating-point data processing (1 source) |
| 1490 | |
| 1491 | FMOV_s 00011110 .. 1 000000 10000 ..... ..... @rr_hsd |
| 1492 | FABS_s 00011110 .. 1 000001 10000 ..... ..... @rr_hsd |
| 1493 | FNEG_s 00011110 .. 1 000010 10000 ..... ..... @rr_hsd |
| 1494 | FSQRT_s 00011110 .. 1 000011 10000 ..... ..... @rr_hsd |
| 1495 | |
| 1496 | FRINTN_s 00011110 .. 1 001000 10000 ..... ..... @rr_hsd |
| 1497 | FRINTP_s 00011110 .. 1 001001 10000 ..... ..... @rr_hsd |
| 1498 | FRINTM_s 00011110 .. 1 001010 10000 ..... ..... @rr_hsd |
| 1499 | FRINTZ_s 00011110 .. 1 001011 10000 ..... ..... @rr_hsd |
| 1500 | FRINTA_s 00011110 .. 1 001100 10000 ..... ..... @rr_hsd |
| 1501 | FRINTX_s 00011110 .. 1 001110 10000 ..... ..... @rr_hsd |
| 1502 | FRINTI_s 00011110 .. 1 001111 10000 ..... ..... @rr_hsd |
| 1503 | |
| 1504 | BFCVT_s 00011110 01 1 000110 10000 ..... ..... @rr_s |
| 1505 | |
| 1506 | FRINT32Z_s 00011110 0. 1 010000 10000 ..... ..... @rr_sd |
| 1507 | FRINT32X_s 00011110 0. 1 010001 10000 ..... ..... @rr_sd |
| 1508 | FRINT64Z_s 00011110 0. 1 010010 10000 ..... ..... @rr_sd |
| 1509 | FRINT64X_s 00011110 0. 1 010011 10000 ..... ..... @rr_sd |
| 1510 | |
| 1511 | FCVT_s_ds 00011110 00 1 000101 10000 ..... ..... @rr |
| 1512 | FCVT_s_hs 00011110 00 1 000111 10000 ..... ..... @rr |
| 1513 | FCVT_s_sd 00011110 01 1 000100 10000 ..... ..... @rr |
| 1514 | FCVT_s_hd 00011110 01 1 000111 10000 ..... ..... @rr |
| 1515 | FCVT_s_sh 00011110 11 1 000100 10000 ..... ..... @rr |
| 1516 | FCVT_s_dh 00011110 11 1 000101 10000 ..... ..... @rr |
| 1517 | |
| 1518 | # Floating-point Immediate |
| 1519 | |
| 1520 | FMOVI_s 0001 1110 .. 1 imm:8 100 00000 rd:5 esz=%esz_hsd |
| 1521 | |
| 1522 | # Floating-point Compare |
| 1523 | |
| 1524 | FCMP 00011110 .. 1 rm:5 001000 rn:5 e:1 z:1 000 esz=%esz_hsd |
| 1525 | |
| 1526 | # Floating-point Conditional Compare |
| 1527 | |
| 1528 | FCCMP 00011110 .. 1 rm:5 cond:4 01 rn:5 e:1 nzcv:4 esz=%esz_hsd |
| 1529 | |
| 1530 | # Advanced SIMD Modified Immediate / Shift by Immediate |
| 1531 | |
| 1532 | %abcdefgh 16:3 5:5 |
| 1533 | |
| 1534 | # Right shifts are encoded as N - shift, where N is the element size in bits. |
| 1535 | %neon_rshift_i6 16:6 !function=rsub_64 |
| 1536 | %neon_rshift_i5 16:5 !function=rsub_32 |
| 1537 | %neon_rshift_i4 16:4 !function=rsub_16 |
| 1538 | %neon_rshift_i3 16:3 !function=rsub_8 |
| 1539 | |
| 1540 | @q_shri_b . q:1 .. ..... 0001 ... ..... . rn:5 rd:5 \ |
| 1541 | &qrri_e esz=0 imm=%neon_rshift_i3 |
| 1542 | @q_shri_h . q:1 .. ..... 001 .... ..... . rn:5 rd:5 \ |
| 1543 | &qrri_e esz=1 imm=%neon_rshift_i4 |
| 1544 | @q_shri_s . q:1 .. ..... 01 ..... ..... . rn:5 rd:5 \ |
| 1545 | &qrri_e esz=2 imm=%neon_rshift_i5 |
| 1546 | @q_shri_d . 1 .. ..... 1 ...... ..... . rn:5 rd:5 \ |
| 1547 | &qrri_e esz=3 imm=%neon_rshift_i6 q=1 |
| 1548 | |
| 1549 | @q_shli_b . q:1 .. ..... 0001 imm:3 ..... . rn:5 rd:5 &qrri_e esz=0 |
| 1550 | @q_shli_h . q:1 .. ..... 001 imm:4 ..... . rn:5 rd:5 &qrri_e esz=1 |
| 1551 | @q_shli_s . q:1 .. ..... 01 imm:5 ..... . rn:5 rd:5 &qrri_e esz=2 |
| 1552 | @q_shli_d . 1 .. ..... 1 imm:6 ..... . rn:5 rd:5 &qrri_e esz=3 q=1 |
| 1553 | |
| 1554 | FMOVI_v_h 0 q:1 00 1111 00000 ... 1111 11 ..... rd:5 %abcdefgh |
| 1555 | |
| 1556 | # MOVI, MVNI, ORR, BIC, FMOV are all intermixed via cmode. |
| 1557 | Vimm 0 q:1 op:1 0 1111 00000 ... cmode:4 01 ..... rd:5 %abcdefgh |
| 1558 | |
| 1559 | SSHR_v 0.00 11110 .... ... 00000 1 ..... ..... @q_shri_b |
| 1560 | SSHR_v 0.00 11110 .... ... 00000 1 ..... ..... @q_shri_h |
| 1561 | SSHR_v 0.00 11110 .... ... 00000 1 ..... ..... @q_shri_s |
| 1562 | SSHR_v 0.00 11110 .... ... 00000 1 ..... ..... @q_shri_d |
| 1563 | |
| 1564 | USHR_v 0.10 11110 .... ... 00000 1 ..... ..... @q_shri_b |
| 1565 | USHR_v 0.10 11110 .... ... 00000 1 ..... ..... @q_shri_h |
| 1566 | USHR_v 0.10 11110 .... ... 00000 1 ..... ..... @q_shri_s |
| 1567 | USHR_v 0.10 11110 .... ... 00000 1 ..... ..... @q_shri_d |
| 1568 | |
| 1569 | SSRA_v 0.00 11110 .... ... 00010 1 ..... ..... @q_shri_b |
| 1570 | SSRA_v 0.00 11110 .... ... 00010 1 ..... ..... @q_shri_h |
| 1571 | SSRA_v 0.00 11110 .... ... 00010 1 ..... ..... @q_shri_s |
| 1572 | SSRA_v 0.00 11110 .... ... 00010 1 ..... ..... @q_shri_d |
| 1573 | |
| 1574 | USRA_v 0.10 11110 .... ... 00010 1 ..... ..... @q_shri_b |
| 1575 | USRA_v 0.10 11110 .... ... 00010 1 ..... ..... @q_shri_h |
| 1576 | USRA_v 0.10 11110 .... ... 00010 1 ..... ..... @q_shri_s |
| 1577 | USRA_v 0.10 11110 .... ... 00010 1 ..... ..... @q_shri_d |
| 1578 | |
| 1579 | SRSHR_v 0.00 11110 .... ... 00100 1 ..... ..... @q_shri_b |
| 1580 | SRSHR_v 0.00 11110 .... ... 00100 1 ..... ..... @q_shri_h |
| 1581 | SRSHR_v 0.00 11110 .... ... 00100 1 ..... ..... @q_shri_s |
| 1582 | SRSHR_v 0.00 11110 .... ... 00100 1 ..... ..... @q_shri_d |
| 1583 | |
| 1584 | URSHR_v 0.10 11110 .... ... 00100 1 ..... ..... @q_shri_b |
| 1585 | URSHR_v 0.10 11110 .... ... 00100 1 ..... ..... @q_shri_h |
| 1586 | URSHR_v 0.10 11110 .... ... 00100 1 ..... ..... @q_shri_s |
| 1587 | URSHR_v 0.10 11110 .... ... 00100 1 ..... ..... @q_shri_d |
| 1588 | |
| 1589 | SRSRA_v 0.00 11110 .... ... 00110 1 ..... ..... @q_shri_b |
| 1590 | SRSRA_v 0.00 11110 .... ... 00110 1 ..... ..... @q_shri_h |
| 1591 | SRSRA_v 0.00 11110 .... ... 00110 1 ..... ..... @q_shri_s |
| 1592 | SRSRA_v 0.00 11110 .... ... 00110 1 ..... ..... @q_shri_d |
| 1593 | |
| 1594 | URSRA_v 0.10 11110 .... ... 00110 1 ..... ..... @q_shri_b |
| 1595 | URSRA_v 0.10 11110 .... ... 00110 1 ..... ..... @q_shri_h |
| 1596 | URSRA_v 0.10 11110 .... ... 00110 1 ..... ..... @q_shri_s |
| 1597 | URSRA_v 0.10 11110 .... ... 00110 1 ..... ..... @q_shri_d |
| 1598 | |
| 1599 | SRI_v 0.10 11110 .... ... 01000 1 ..... ..... @q_shri_b |
| 1600 | SRI_v 0.10 11110 .... ... 01000 1 ..... ..... @q_shri_h |
| 1601 | SRI_v 0.10 11110 .... ... 01000 1 ..... ..... @q_shri_s |
| 1602 | SRI_v 0.10 11110 .... ... 01000 1 ..... ..... @q_shri_d |
| 1603 | |
| 1604 | SHL_v 0.00 11110 .... ... 01010 1 ..... ..... @q_shli_b |
| 1605 | SHL_v 0.00 11110 .... ... 01010 1 ..... ..... @q_shli_h |
| 1606 | SHL_v 0.00 11110 .... ... 01010 1 ..... ..... @q_shli_s |
| 1607 | SHL_v 0.00 11110 .... ... 01010 1 ..... ..... @q_shli_d |
| 1608 | |
| 1609 | SLI_v 0.10 11110 .... ... 01010 1 ..... ..... @q_shli_b |
| 1610 | SLI_v 0.10 11110 .... ... 01010 1 ..... ..... @q_shli_h |
| 1611 | SLI_v 0.10 11110 .... ... 01010 1 ..... ..... @q_shli_s |
| 1612 | SLI_v 0.10 11110 .... ... 01010 1 ..... ..... @q_shli_d |
| 1613 | |
| 1614 | SSHLL_v 0.00 11110 .... ... 10100 1 ..... ..... @q_shli_b |
| 1615 | SSHLL_v 0.00 11110 .... ... 10100 1 ..... ..... @q_shli_h |
| 1616 | SSHLL_v 0.00 11110 .... ... 10100 1 ..... ..... @q_shli_s |
| 1617 | |
| 1618 | USHLL_v 0.10 11110 .... ... 10100 1 ..... ..... @q_shli_b |
| 1619 | USHLL_v 0.10 11110 .... ... 10100 1 ..... ..... @q_shli_h |
| 1620 | USHLL_v 0.10 11110 .... ... 10100 1 ..... ..... @q_shli_s |
| 1621 | |
| 1622 | SHRN_v 0.00 11110 .... ... 10000 1 ..... ..... @q_shri_b |
| 1623 | SHRN_v 0.00 11110 .... ... 10000 1 ..... ..... @q_shri_h |
| 1624 | SHRN_v 0.00 11110 .... ... 10000 1 ..... ..... @q_shri_s |
| 1625 | |
| 1626 | RSHRN_v 0.00 11110 .... ... 10001 1 ..... ..... @q_shri_b |
| 1627 | RSHRN_v 0.00 11110 .... ... 10001 1 ..... ..... @q_shri_h |
| 1628 | RSHRN_v 0.00 11110 .... ... 10001 1 ..... ..... @q_shri_s |
| 1629 | |
| 1630 | SQSHL_vi 0.00 11110 .... ... 01110 1 ..... ..... @q_shli_b |
| 1631 | SQSHL_vi 0.00 11110 .... ... 01110 1 ..... ..... @q_shli_h |
| 1632 | SQSHL_vi 0.00 11110 .... ... 01110 1 ..... ..... @q_shli_s |
| 1633 | SQSHL_vi 0.00 11110 .... ... 01110 1 ..... ..... @q_shli_d |
| 1634 | |
| 1635 | UQSHL_vi 0.10 11110 .... ... 01110 1 ..... ..... @q_shli_b |
| 1636 | UQSHL_vi 0.10 11110 .... ... 01110 1 ..... ..... @q_shli_h |
| 1637 | UQSHL_vi 0.10 11110 .... ... 01110 1 ..... ..... @q_shli_s |
| 1638 | UQSHL_vi 0.10 11110 .... ... 01110 1 ..... ..... @q_shli_d |
| 1639 | |
| 1640 | SQSHLU_vi 0.10 11110 .... ... 01100 1 ..... ..... @q_shli_b |
| 1641 | SQSHLU_vi 0.10 11110 .... ... 01100 1 ..... ..... @q_shli_h |
| 1642 | SQSHLU_vi 0.10 11110 .... ... 01100 1 ..... ..... @q_shli_s |
| 1643 | SQSHLU_vi 0.10 11110 .... ... 01100 1 ..... ..... @q_shli_d |
| 1644 | |
| 1645 | SQSHRN_v 0.00 11110 .... ... 10010 1 ..... ..... @q_shri_b |
| 1646 | SQSHRN_v 0.00 11110 .... ... 10010 1 ..... ..... @q_shri_h |
| 1647 | SQSHRN_v 0.00 11110 .... ... 10010 1 ..... ..... @q_shri_s |
| 1648 | |
| 1649 | UQSHRN_v 0.10 11110 .... ... 10010 1 ..... ..... @q_shri_b |
| 1650 | UQSHRN_v 0.10 11110 .... ... 10010 1 ..... ..... @q_shri_h |
| 1651 | UQSHRN_v 0.10 11110 .... ... 10010 1 ..... ..... @q_shri_s |
| 1652 | |
| 1653 | SQSHRUN_v 0.10 11110 .... ... 10000 1 ..... ..... @q_shri_b |
| 1654 | SQSHRUN_v 0.10 11110 .... ... 10000 1 ..... ..... @q_shri_h |
| 1655 | SQSHRUN_v 0.10 11110 .... ... 10000 1 ..... ..... @q_shri_s |
| 1656 | |
| 1657 | SQRSHRN_v 0.00 11110 .... ... 10011 1 ..... ..... @q_shri_b |
| 1658 | SQRSHRN_v 0.00 11110 .... ... 10011 1 ..... ..... @q_shri_h |
| 1659 | SQRSHRN_v 0.00 11110 .... ... 10011 1 ..... ..... @q_shri_s |
| 1660 | |
| 1661 | UQRSHRN_v 0.10 11110 .... ... 10011 1 ..... ..... @q_shri_b |
| 1662 | UQRSHRN_v 0.10 11110 .... ... 10011 1 ..... ..... @q_shri_h |
| 1663 | UQRSHRN_v 0.10 11110 .... ... 10011 1 ..... ..... @q_shri_s |
| 1664 | |
| 1665 | SQRSHRUN_v 0.10 11110 .... ... 10001 1 ..... ..... @q_shri_b |
| 1666 | SQRSHRUN_v 0.10 11110 .... ... 10001 1 ..... ..... @q_shri_h |
| 1667 | SQRSHRUN_v 0.10 11110 .... ... 10001 1 ..... ..... @q_shri_s |
| 1668 | |
| 1669 | # Advanced SIMD scalar shift by immediate |
| 1670 | |
| 1671 | @shri_b .... ..... 0001 ... ..... . rn:5 rd:5 \ |
| 1672 | &rri_e esz=0 imm=%neon_rshift_i3 |
| 1673 | @shri_h .... ..... 001 .... ..... . rn:5 rd:5 \ |
| 1674 | &rri_e esz=1 imm=%neon_rshift_i4 |
| 1675 | @shri_s .... ..... 01 ..... ..... . rn:5 rd:5 \ |
| 1676 | &rri_e esz=2 imm=%neon_rshift_i5 |
| 1677 | @shri_d .... ..... 1 ...... ..... . rn:5 rd:5 \ |
| 1678 | &rri_e esz=3 imm=%neon_rshift_i6 |
| 1679 | |
| 1680 | @shli_b .... ..... 0001 imm:3 ..... . rn:5 rd:5 &rri_e esz=0 |
| 1681 | @shli_h .... ..... 001 imm:4 ..... . rn:5 rd:5 &rri_e esz=1 |
| 1682 | @shli_s .... ..... 01 imm:5 ..... . rn:5 rd:5 &rri_e esz=2 |
| 1683 | @shli_d .... ..... 1 imm:6 ..... . rn:5 rd:5 &rri_e esz=3 |
| 1684 | |
| 1685 | SSHR_s 0101 11110 .... ... 00000 1 ..... ..... @shri_d |
| 1686 | USHR_s 0111 11110 .... ... 00000 1 ..... ..... @shri_d |
| 1687 | SSRA_s 0101 11110 .... ... 00010 1 ..... ..... @shri_d |
| 1688 | USRA_s 0111 11110 .... ... 00010 1 ..... ..... @shri_d |
| 1689 | SRSHR_s 0101 11110 .... ... 00100 1 ..... ..... @shri_d |
| 1690 | URSHR_s 0111 11110 .... ... 00100 1 ..... ..... @shri_d |
| 1691 | SRSRA_s 0101 11110 .... ... 00110 1 ..... ..... @shri_d |
| 1692 | URSRA_s 0111 11110 .... ... 00110 1 ..... ..... @shri_d |
| 1693 | SRI_s 0111 11110 .... ... 01000 1 ..... ..... @shri_d |
| 1694 | |
| 1695 | SHL_s 0101 11110 .... ... 01010 1 ..... ..... @shli_d |
| 1696 | SLI_s 0111 11110 .... ... 01010 1 ..... ..... @shli_d |
| 1697 | |
| 1698 | SQSHL_si 0101 11110 .... ... 01110 1 ..... ..... @shli_b |
| 1699 | SQSHL_si 0101 11110 .... ... 01110 1 ..... ..... @shli_h |
| 1700 | SQSHL_si 0101 11110 .... ... 01110 1 ..... ..... @shli_s |
| 1701 | SQSHL_si 0101 11110 .... ... 01110 1 ..... ..... @shli_d |
| 1702 | |
| 1703 | UQSHL_si 0111 11110 .... ... 01110 1 ..... ..... @shli_b |
| 1704 | UQSHL_si 0111 11110 .... ... 01110 1 ..... ..... @shli_h |
| 1705 | UQSHL_si 0111 11110 .... ... 01110 1 ..... ..... @shli_s |
| 1706 | UQSHL_si 0111 11110 .... ... 01110 1 ..... ..... @shli_d |
| 1707 | |
| 1708 | SQSHLU_si 0111 11110 .... ... 01100 1 ..... ..... @shli_b |
| 1709 | SQSHLU_si 0111 11110 .... ... 01100 1 ..... ..... @shli_h |
| 1710 | SQSHLU_si 0111 11110 .... ... 01100 1 ..... ..... @shli_s |
| 1711 | SQSHLU_si 0111 11110 .... ... 01100 1 ..... ..... @shli_d |
| 1712 | |
| 1713 | SQSHRN_si 0101 11110 .... ... 10010 1 ..... ..... @shri_b |
| 1714 | SQSHRN_si 0101 11110 .... ... 10010 1 ..... ..... @shri_h |
| 1715 | SQSHRN_si 0101 11110 .... ... 10010 1 ..... ..... @shri_s |
| 1716 | |
| 1717 | UQSHRN_si 0111 11110 .... ... 10010 1 ..... ..... @shri_b |
| 1718 | UQSHRN_si 0111 11110 .... ... 10010 1 ..... ..... @shri_h |
| 1719 | UQSHRN_si 0111 11110 .... ... 10010 1 ..... ..... @shri_s |
| 1720 | |
| 1721 | SQSHRUN_si 0111 11110 .... ... 10000 1 ..... ..... @shri_b |
| 1722 | SQSHRUN_si 0111 11110 .... ... 10000 1 ..... ..... @shri_h |
| 1723 | SQSHRUN_si 0111 11110 .... ... 10000 1 ..... ..... @shri_s |
| 1724 | |
| 1725 | SQRSHRN_si 0101 11110 .... ... 10011 1 ..... ..... @shri_b |
| 1726 | SQRSHRN_si 0101 11110 .... ... 10011 1 ..... ..... @shri_h |
| 1727 | SQRSHRN_si 0101 11110 .... ... 10011 1 ..... ..... @shri_s |
| 1728 | |
| 1729 | UQRSHRN_si 0111 11110 .... ... 10011 1 ..... ..... @shri_b |
| 1730 | UQRSHRN_si 0111 11110 .... ... 10011 1 ..... ..... @shri_h |
| 1731 | UQRSHRN_si 0111 11110 .... ... 10011 1 ..... ..... @shri_s |
| 1732 | |
| 1733 | SQRSHRUN_si 0111 11110 .... ... 10001 1 ..... ..... @shri_b |
| 1734 | SQRSHRUN_si 0111 11110 .... ... 10001 1 ..... ..... @shri_h |
| 1735 | SQRSHRUN_si 0111 11110 .... ... 10001 1 ..... ..... @shri_s |
| 1736 | |
| 1737 | # Advanced SIMD scalar two-register miscellaneous |
| 1738 | |
| 1739 | SQABS_s 0101 1110 ..1 00000 01111 0 ..... ..... @rr_e |
| 1740 | SQNEG_s 0111 1110 ..1 00000 01111 0 ..... ..... @rr_e |
| 1741 | ABS_s 0101 1110 111 00000 10111 0 ..... ..... @rr |
| 1742 | NEG_s 0111 1110 111 00000 10111 0 ..... ..... @rr |
| 1743 | CMGT0_s 0101 1110 111 00000 10001 0 ..... ..... @rr |
| 1744 | CMGE0_s 0111 1110 111 00000 10001 0 ..... ..... @rr |
| 1745 | CMEQ0_s 0101 1110 111 00000 10011 0 ..... ..... @rr |
| 1746 | CMLE0_s 0111 1110 111 00000 10011 0 ..... ..... @rr |
| 1747 | CMLT0_s 0101 1110 111 00000 10101 0 ..... ..... @rr |
| 1748 | |
| 1749 | SQXTUN_s 0111 1110 ..1 00001 00101 0 ..... ..... @rr_e |
| 1750 | SQXTN_s 0101 1110 ..1 00001 01001 0 ..... ..... @rr_e |
| 1751 | UQXTN_s 0111 1110 ..1 00001 01001 0 ..... ..... @rr_e |
| 1752 | |
| 1753 | FCVTXN_s 0111 1110 011 00001 01101 0 ..... ..... @rr_s |
| 1754 | |
| 1755 | FCMGT0_s 0101 1110 111 11000 11001 0 ..... ..... @rr_h |
| 1756 | FCMGT0_s 0101 1110 1.1 00000 11001 0 ..... ..... @rr_sd |
| 1757 | |
| 1758 | FCMGE0_s 0111 1110 111 11000 11001 0 ..... ..... @rr_h |
| 1759 | FCMGE0_s 0111 1110 1.1 00000 11001 0 ..... ..... @rr_sd |
| 1760 | |
| 1761 | FCMEQ0_s 0101 1110 111 11000 11011 0 ..... ..... @rr_h |
| 1762 | FCMEQ0_s 0101 1110 1.1 00000 11011 0 ..... ..... @rr_sd |
| 1763 | |
| 1764 | FCMLE0_s 0111 1110 111 11000 11011 0 ..... ..... @rr_h |
| 1765 | FCMLE0_s 0111 1110 1.1 00000 11011 0 ..... ..... @rr_sd |
| 1766 | |
| 1767 | FCMLT0_s 0101 1110 111 11000 11101 0 ..... ..... @rr_h |
| 1768 | FCMLT0_s 0101 1110 1.1 00000 11101 0 ..... ..... @rr_sd |
| 1769 | |
| 1770 | FRECPE_s 0101 1110 111 11001 11011 0 ..... ..... @rr_h |
| 1771 | FRECPE_s 0101 1110 1.1 00001 11011 0 ..... ..... @rr_sd |
| 1772 | |
| 1773 | FRECPX_s 0101 1110 111 11001 11111 0 ..... ..... @rr_h |
| 1774 | FRECPX_s 0101 1110 1.1 00001 11111 0 ..... ..... @rr_sd |
| 1775 | |
| 1776 | FRSQRTE_s 0111 1110 111 11001 11011 0 ..... ..... @rr_h |
| 1777 | FRSQRTE_s 0111 1110 1.1 00001 11011 0 ..... ..... @rr_sd |
| 1778 | |
| 1779 | @icvt_h . ....... .. ...... ...... rn:5 rd:5 \ |
| 1780 | &fcvt sf=0 esz=1 shift=0 |
| 1781 | @icvt_sd . ....... .. ...... ...... rn:5 rd:5 \ |
| 1782 | &fcvt sf=0 esz=%esz_sd shift=0 |
| 1783 | |
| 1784 | SCVTF_f 0101 1110 011 11001 11011 0 ..... ..... @icvt_h |
| 1785 | SCVTF_f 0101 1110 0.1 00001 11011 0 ..... ..... @icvt_sd |
| 1786 | |
| 1787 | UCVTF_f 0111 1110 011 11001 11011 0 ..... ..... @icvt_h |
| 1788 | UCVTF_f 0111 1110 0.1 00001 11011 0 ..... ..... @icvt_sd |
| 1789 | |
| 1790 | FCVTNS_f 0101 1110 011 11001 10101 0 ..... ..... @icvt_h |
| 1791 | FCVTNS_f 0101 1110 0.1 00001 10101 0 ..... ..... @icvt_sd |
| 1792 | FCVTNU_f 0111 1110 011 11001 10101 0 ..... ..... @icvt_h |
| 1793 | FCVTNU_f 0111 1110 0.1 00001 10101 0 ..... ..... @icvt_sd |
| 1794 | |
| 1795 | FCVTPS_f 0101 1110 111 11001 10101 0 ..... ..... @icvt_h |
| 1796 | FCVTPS_f 0101 1110 1.1 00001 10101 0 ..... ..... @icvt_sd |
| 1797 | FCVTPU_f 0111 1110 111 11001 10101 0 ..... ..... @icvt_h |
| 1798 | FCVTPU_f 0111 1110 1.1 00001 10101 0 ..... ..... @icvt_sd |
| 1799 | |
| 1800 | FCVTMS_f 0101 1110 011 11001 10111 0 ..... ..... @icvt_h |
| 1801 | FCVTMS_f 0101 1110 0.1 00001 10111 0 ..... ..... @icvt_sd |
| 1802 | FCVTMU_f 0111 1110 011 11001 10111 0 ..... ..... @icvt_h |
| 1803 | FCVTMU_f 0111 1110 0.1 00001 10111 0 ..... ..... @icvt_sd |
| 1804 | |
| 1805 | FCVTZS_f 0101 1110 111 11001 10111 0 ..... ..... @icvt_h |
| 1806 | FCVTZS_f 0101 1110 1.1 00001 10111 0 ..... ..... @icvt_sd |
| 1807 | FCVTZU_f 0111 1110 111 11001 10111 0 ..... ..... @icvt_h |
| 1808 | FCVTZU_f 0111 1110 1.1 00001 10111 0 ..... ..... @icvt_sd |
| 1809 | |
| 1810 | FCVTAS_f 0101 1110 011 11001 11001 0 ..... ..... @icvt_h |
| 1811 | FCVTAS_f 0101 1110 0.1 00001 11001 0 ..... ..... @icvt_sd |
| 1812 | FCVTAU_f 0111 1110 011 11001 11001 0 ..... ..... @icvt_h |
| 1813 | FCVTAU_f 0111 1110 0.1 00001 11001 0 ..... ..... @icvt_sd |
| 1814 | |
| 1815 | %fcvt_f_sh_h 16:4 !function=rsub_16 |
| 1816 | %fcvt_f_sh_s 16:5 !function=rsub_32 |
| 1817 | %fcvt_f_sh_d 16:6 !function=rsub_64 |
| 1818 | |
| 1819 | @fcvt_fixed_h .... .... . 001 .... ...... rn:5 rd:5 \ |
| 1820 | &fcvt sf=0 esz=1 shift=%fcvt_f_sh_h |
| 1821 | @fcvt_fixed_s .... .... . 01 ..... ...... rn:5 rd:5 \ |
| 1822 | &fcvt sf=0 esz=2 shift=%fcvt_f_sh_s |
| 1823 | @fcvt_fixed_d .... .... . 1 ...... ...... rn:5 rd:5 \ |
| 1824 | &fcvt sf=0 esz=3 shift=%fcvt_f_sh_d |
| 1825 | |
| 1826 | SCVTF_f 0101 1111 0 ....... 111001 ..... ..... @fcvt_fixed_h |
| 1827 | SCVTF_f 0101 1111 0 ....... 111001 ..... ..... @fcvt_fixed_s |
| 1828 | SCVTF_f 0101 1111 0 ....... 111001 ..... ..... @fcvt_fixed_d |
| 1829 | |
| 1830 | UCVTF_f 0111 1111 0 ....... 111001 ..... ..... @fcvt_fixed_h |
| 1831 | UCVTF_f 0111 1111 0 ....... 111001 ..... ..... @fcvt_fixed_s |
| 1832 | UCVTF_f 0111 1111 0 ....... 111001 ..... ..... @fcvt_fixed_d |
| 1833 | |
| 1834 | FCVTZS_f 0101 1111 0 ....... 111111 ..... ..... @fcvt_fixed_h |
| 1835 | FCVTZS_f 0101 1111 0 ....... 111111 ..... ..... @fcvt_fixed_s |
| 1836 | FCVTZS_f 0101 1111 0 ....... 111111 ..... ..... @fcvt_fixed_d |
| 1837 | |
| 1838 | FCVTZU_f 0111 1111 0 ....... 111111 ..... ..... @fcvt_fixed_h |
| 1839 | FCVTZU_f 0111 1111 0 ....... 111111 ..... ..... @fcvt_fixed_s |
| 1840 | FCVTZU_f 0111 1111 0 ....... 111111 ..... ..... @fcvt_fixed_d |
| 1841 | |
| 1842 | # Advanced SIMD two-register miscellaneous |
| 1843 | |
| 1844 | SQABS_v 0.00 1110 ..1 00000 01111 0 ..... ..... @qrr_e |
| 1845 | SQNEG_v 0.10 1110 ..1 00000 01111 0 ..... ..... @qrr_e |
| 1846 | ABS_v 0.00 1110 ..1 00000 10111 0 ..... ..... @qrr_e |
| 1847 | NEG_v 0.10 1110 ..1 00000 10111 0 ..... ..... @qrr_e |
| 1848 | CLS_v 0.00 1110 ..1 00000 01001 0 ..... ..... @qrr_e |
| 1849 | CLZ_v 0.10 1110 ..1 00000 01001 0 ..... ..... @qrr_e |
| 1850 | CNT_v 0.00 1110 001 00000 01011 0 ..... ..... @qrr_b |
| 1851 | NOT_v 0.10 1110 001 00000 01011 0 ..... ..... @qrr_b |
| 1852 | RBIT_v 0.10 1110 011 00000 01011 0 ..... ..... @qrr_b |
| 1853 | CMGT0_v 0.00 1110 ..1 00000 10001 0 ..... ..... @qrr_e |
| 1854 | CMGE0_v 0.10 1110 ..1 00000 10001 0 ..... ..... @qrr_e |
| 1855 | CMEQ0_v 0.00 1110 ..1 00000 10011 0 ..... ..... @qrr_e |
| 1856 | CMLE0_v 0.10 1110 ..1 00000 10011 0 ..... ..... @qrr_e |
| 1857 | CMLT0_v 0.00 1110 ..1 00000 10101 0 ..... ..... @qrr_e |
| 1858 | |
| 1859 | REV16_v 0.00 1110 001 00000 00011 0 ..... ..... @qrr_b |
| 1860 | REV32_v 0.10 1110 0.1 00000 00001 0 ..... ..... @qrr_bh |
| 1861 | REV64_v 0.00 1110 ..1 00000 00001 0 ..... ..... @qrr_e |
| 1862 | |
| 1863 | SADDLP_v 0.00 1110 ..1 00000 00101 0 ..... ..... @qrr_e |
| 1864 | UADDLP_v 0.10 1110 ..1 00000 00101 0 ..... ..... @qrr_e |
| 1865 | SADALP_v 0.00 1110 ..1 00000 01101 0 ..... ..... @qrr_e |
| 1866 | UADALP_v 0.10 1110 ..1 00000 01101 0 ..... ..... @qrr_e |
| 1867 | |
| 1868 | XTN 0.00 1110 ..1 00001 00101 0 ..... ..... @qrr_e |
| 1869 | SQXTUN_v 0.10 1110 ..1 00001 00101 0 ..... ..... @qrr_e |
| 1870 | SQXTN_v 0.00 1110 ..1 00001 01001 0 ..... ..... @qrr_e |
| 1871 | UQXTN_v 0.10 1110 ..1 00001 01001 0 ..... ..... @qrr_e |
| 1872 | |
| 1873 | FCVTN_v 0.00 1110 0.1 00001 01101 0 ..... ..... @qrr_hs |
| 1874 | FCVTXN_v 0.10 1110 011 00001 01101 0 ..... ..... @qrr_s |
| 1875 | BFCVTN_v 0.00 1110 101 00001 01101 0 ..... ..... @qrr_h |
| 1876 | |
| 1877 | SHLL_v 0.10 1110 ..1 00001 00111 0 ..... ..... @qrr_e |
| 1878 | |
| 1879 | FABS_v 0.00 1110 111 11000 11111 0 ..... ..... @qrr_h |
| 1880 | FABS_v 0.00 1110 1.1 00000 11111 0 ..... ..... @qrr_sd |
| 1881 | |
| 1882 | FNEG_v 0.10 1110 111 11000 11111 0 ..... ..... @qrr_h |
| 1883 | FNEG_v 0.10 1110 1.1 00000 11111 0 ..... ..... @qrr_sd |
| 1884 | |
| 1885 | FSQRT_v 0.10 1110 111 11001 11111 0 ..... ..... @qrr_h |
| 1886 | FSQRT_v 0.10 1110 1.1 00001 11111 0 ..... ..... @qrr_sd |
| 1887 | |
| 1888 | FRINTN_v 0.00 1110 011 11001 10001 0 ..... ..... @qrr_h |
| 1889 | FRINTN_v 0.00 1110 0.1 00001 10001 0 ..... ..... @qrr_sd |
| 1890 | |
| 1891 | FRINTM_v 0.00 1110 011 11001 10011 0 ..... ..... @qrr_h |
| 1892 | FRINTM_v 0.00 1110 0.1 00001 10011 0 ..... ..... @qrr_sd |
| 1893 | |
| 1894 | FRINTP_v 0.00 1110 111 11001 10001 0 ..... ..... @qrr_h |
| 1895 | FRINTP_v 0.00 1110 1.1 00001 10001 0 ..... ..... @qrr_sd |
| 1896 | |
| 1897 | FRINTZ_v 0.00 1110 111 11001 10011 0 ..... ..... @qrr_h |
| 1898 | FRINTZ_v 0.00 1110 1.1 00001 10011 0 ..... ..... @qrr_sd |
| 1899 | |
| 1900 | FRINTA_v 0.10 1110 011 11001 10001 0 ..... ..... @qrr_h |
| 1901 | FRINTA_v 0.10 1110 0.1 00001 10001 0 ..... ..... @qrr_sd |
| 1902 | |
| 1903 | FRINTX_v 0.10 1110 011 11001 10011 0 ..... ..... @qrr_h |
| 1904 | FRINTX_v 0.10 1110 0.1 00001 10011 0 ..... ..... @qrr_sd |
| 1905 | |
| 1906 | FRINTI_v 0.10 1110 111 11001 10011 0 ..... ..... @qrr_h |
| 1907 | FRINTI_v 0.10 1110 1.1 00001 10011 0 ..... ..... @qrr_sd |
| 1908 | |
| 1909 | FRINT32Z_v 0.00 1110 0.1 00001 11101 0 ..... ..... @qrr_sd |
| 1910 | FRINT32X_v 0.10 1110 0.1 00001 11101 0 ..... ..... @qrr_sd |
| 1911 | FRINT64Z_v 0.00 1110 0.1 00001 11111 0 ..... ..... @qrr_sd |
| 1912 | FRINT64X_v 0.10 1110 0.1 00001 11111 0 ..... ..... @qrr_sd |
| 1913 | |
| 1914 | SCVTF_vi 0.00 1110 011 11001 11011 0 ..... ..... @qrr_h |
| 1915 | SCVTF_vi 0.00 1110 0.1 00001 11011 0 ..... ..... @qrr_sd |
| 1916 | |
| 1917 | UCVTF_vi 0.10 1110 011 11001 11011 0 ..... ..... @qrr_h |
| 1918 | UCVTF_vi 0.10 1110 0.1 00001 11011 0 ..... ..... @qrr_sd |
| 1919 | |
| 1920 | FCVTNS_vi 0.00 1110 011 11001 10101 0 ..... ..... @qrr_h |
| 1921 | FCVTNS_vi 0.00 1110 0.1 00001 10101 0 ..... ..... @qrr_sd |
| 1922 | FCVTNU_vi 0.10 1110 011 11001 10101 0 ..... ..... @qrr_h |
| 1923 | FCVTNU_vi 0.10 1110 0.1 00001 10101 0 ..... ..... @qrr_sd |
| 1924 | |
| 1925 | FCVTPS_vi 0.00 1110 111 11001 10101 0 ..... ..... @qrr_h |
| 1926 | FCVTPS_vi 0.00 1110 1.1 00001 10101 0 ..... ..... @qrr_sd |
| 1927 | FCVTPU_vi 0.10 1110 111 11001 10101 0 ..... ..... @qrr_h |
| 1928 | FCVTPU_vi 0.10 1110 1.1 00001 10101 0 ..... ..... @qrr_sd |
| 1929 | |
| 1930 | FCVTMS_vi 0.00 1110 011 11001 10111 0 ..... ..... @qrr_h |
| 1931 | FCVTMS_vi 0.00 1110 0.1 00001 10111 0 ..... ..... @qrr_sd |
| 1932 | FCVTMU_vi 0.10 1110 011 11001 10111 0 ..... ..... @qrr_h |
| 1933 | FCVTMU_vi 0.10 1110 0.1 00001 10111 0 ..... ..... @qrr_sd |
| 1934 | |
| 1935 | FCVTZS_vi 0.00 1110 111 11001 10111 0 ..... ..... @qrr_h |
| 1936 | FCVTZS_vi 0.00 1110 1.1 00001 10111 0 ..... ..... @qrr_sd |
| 1937 | FCVTZU_vi 0.10 1110 111 11001 10111 0 ..... ..... @qrr_h |
| 1938 | FCVTZU_vi 0.10 1110 1.1 00001 10111 0 ..... ..... @qrr_sd |
| 1939 | |
| 1940 | FCVTAS_vi 0.00 1110 011 11001 11001 0 ..... ..... @qrr_h |
| 1941 | FCVTAS_vi 0.00 1110 0.1 00001 11001 0 ..... ..... @qrr_sd |
| 1942 | FCVTAU_vi 0.10 1110 011 11001 11001 0 ..... ..... @qrr_h |
| 1943 | FCVTAU_vi 0.10 1110 0.1 00001 11001 0 ..... ..... @qrr_sd |
| 1944 | |
| 1945 | FCMGT0_v 0.00 1110 111 11000 11001 0 ..... ..... @qrr_h |
| 1946 | FCMGT0_v 0.00 1110 1.1 00000 11001 0 ..... ..... @qrr_sd |
| 1947 | |
| 1948 | FCMGE0_v 0.10 1110 111 11000 11001 0 ..... ..... @qrr_h |
| 1949 | FCMGE0_v 0.10 1110 1.1 00000 11001 0 ..... ..... @qrr_sd |
| 1950 | |
| 1951 | FCMEQ0_v 0.00 1110 111 11000 11011 0 ..... ..... @qrr_h |
| 1952 | FCMEQ0_v 0.00 1110 1.1 00000 11011 0 ..... ..... @qrr_sd |
| 1953 | |
| 1954 | FCMLE0_v 0.10 1110 111 11000 11011 0 ..... ..... @qrr_h |
| 1955 | FCMLE0_v 0.10 1110 1.1 00000 11011 0 ..... ..... @qrr_sd |
| 1956 | |
| 1957 | FCMLT0_v 0.00 1110 111 11000 11101 0 ..... ..... @qrr_h |
| 1958 | FCMLT0_v 0.00 1110 1.1 00000 11101 0 ..... ..... @qrr_sd |
| 1959 | |
| 1960 | FRECPE_v 0.00 1110 111 11001 11011 0 ..... ..... @qrr_h |
| 1961 | FRECPE_v 0.00 1110 1.1 00001 11011 0 ..... ..... @qrr_sd |
| 1962 | |
| 1963 | FRSQRTE_v 0.10 1110 111 11001 11011 0 ..... ..... @qrr_h |
| 1964 | FRSQRTE_v 0.10 1110 1.1 00001 11011 0 ..... ..... @qrr_sd |
| 1965 | |
| 1966 | URECPE_v 0.00 1110 101 00001 11001 0 ..... ..... @qrr_s |
| 1967 | URSQRTE_v 0.10 1110 101 00001 11001 0 ..... ..... @qrr_s |
| 1968 | |
| 1969 | FCVTL_v 0.00 1110 0.1 00001 01111 0 ..... ..... @qrr_sd |
| 1970 | |
| 1971 | F1CVTL 0.10 1110 001 00001 01111 0 ..... ..... @qrr_h |
| 1972 | F2CVTL 0.10 1110 011 00001 01111 0 ..... ..... @qrr_h |
| 1973 | |
| 1974 | BF1CVTL 0.10 1110 101 00001 01111 0 ..... ..... @qrr_h |
| 1975 | BF2CVTL 0.10 1110 111 00001 01111 0 ..... ..... @qrr_h |
| 1976 | |
| 1977 | &fcvt_q rd rn esz q shift |
| 1978 | @fcvtq_h . q:1 . ...... 001 .... ...... rn:5 rd:5 \ |
| 1979 | &fcvt_q esz=1 shift=%fcvt_f_sh_h |
| 1980 | @fcvtq_s . q:1 . ...... 01 ..... ...... rn:5 rd:5 \ |
| 1981 | &fcvt_q esz=2 shift=%fcvt_f_sh_s |
| 1982 | @fcvtq_d . q:1 . ...... 1 ...... ...... rn:5 rd:5 \ |
| 1983 | &fcvt_q esz=3 shift=%fcvt_f_sh_d |
| 1984 | |
| 1985 | SCVTF_vf 0.00 11110 ....... 111001 ..... ..... @fcvtq_h |
| 1986 | SCVTF_vf 0.00 11110 ....... 111001 ..... ..... @fcvtq_s |
| 1987 | SCVTF_vf 0.00 11110 ....... 111001 ..... ..... @fcvtq_d |
| 1988 | |
| 1989 | UCVTF_vf 0.10 11110 ....... 111001 ..... ..... @fcvtq_h |
| 1990 | UCVTF_vf 0.10 11110 ....... 111001 ..... ..... @fcvtq_s |
| 1991 | UCVTF_vf 0.10 11110 ....... 111001 ..... ..... @fcvtq_d |
| 1992 | |
| 1993 | FCVTZS_vf 0.00 11110 ....... 111111 ..... ..... @fcvtq_h |
| 1994 | FCVTZS_vf 0.00 11110 ....... 111111 ..... ..... @fcvtq_s |
| 1995 | FCVTZS_vf 0.00 11110 ....... 111111 ..... ..... @fcvtq_d |
| 1996 | |
| 1997 | FCVTZU_vf 0.10 11110 ....... 111111 ..... ..... @fcvtq_h |
| 1998 | FCVTZU_vf 0.10 11110 ....... 111111 ..... ..... @fcvtq_s |
| 1999 | FCVTZU_vf 0.10 11110 ....... 111111 ..... ..... @fcvtq_d |