| 1 | # Thumb2 instructions |
| 2 | # |
| 3 | # Copyright (c) 2019 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 | &empty !extern |
| 23 | &s_rrr_shi !extern s rd rn rm shim shty |
| 24 | &s_rrr_shr !extern s rn rd rm rs shty |
| 25 | &s_rri_rot !extern s rn rd imm rot |
| 26 | &s_rrrr !extern s rd rn rm ra |
| 27 | &rrrr !extern rd rn rm ra |
| 28 | &rrr_rot !extern rd rn rm rot |
| 29 | &rrr !extern rd rn rm |
| 30 | &rr !extern rd rm |
| 31 | &ri !extern rd imm |
| 32 | &r !extern rm |
| 33 | &i !extern imm |
| 34 | &msr_reg !extern rn r mask |
| 35 | &mrs_reg !extern rd r |
| 36 | &msr_bank !extern rn r sysm |
| 37 | &mrs_bank !extern rd r sysm |
| 38 | &ldst_rr !extern p w u rn rt rm shimm shtype |
| 39 | &ldst_ri !extern p w u rn rt imm |
| 40 | &ldst_block !extern rn i b u w list |
| 41 | &strex !extern rn rd rt rt2 imm |
| 42 | &ldrex !extern rn rt rt2 imm |
| 43 | &bfx !extern rd rn lsb widthm1 |
| 44 | &bfi !extern rd rn lsb msb |
| 45 | &sat !extern rd rn satimm imm sh |
| 46 | &pkh !extern rd rn rm imm tb |
| 47 | &cps !extern mode imod M A I F |
| 48 | &mcr !extern cp opc1 crn crm opc2 rt |
| 49 | &mcrr !extern cp opc1 crm rt rt2 |
| 50 | |
| 51 | &mve_shl_ri rdalo rdahi shim |
| 52 | &mve_shl_rr rdalo rdahi rm |
| 53 | &mve_sh_ri rda shim |
| 54 | &mve_sh_rr rda rm |
| 55 | |
| 56 | # rdahi: bits [3:1] from insn, bit 0 is 1 |
| 57 | # rdalo: bits [3:1] from insn, bit 0 is 0 |
| 58 | %rdahi_9 9:3 !function=times_2_plus_1 |
| 59 | %rdalo_17 17:3 !function=times_2 |
| 60 | |
| 61 | # Data-processing (register) |
| 62 | |
| 63 | %imm5_12_6 12:3 6:2 |
| 64 | |
| 65 | @s_rrr_shi ....... .... s:1 rn:4 .... rd:4 .. shty:2 rm:4 \ |
| 66 | &s_rrr_shi shim=%imm5_12_6 |
| 67 | @s_rxr_shi ....... .... s:1 .... .... rd:4 .. shty:2 rm:4 \ |
| 68 | &s_rrr_shi shim=%imm5_12_6 rn=0 |
| 69 | @S_xrr_shi ....... .... . rn:4 .... .... .. shty:2 rm:4 \ |
| 70 | &s_rrr_shi shim=%imm5_12_6 s=1 rd=0 |
| 71 | |
| 72 | @mve_shl_ri ....... .... . ... . . ... ... . .. .. .... \ |
| 73 | &mve_shl_ri shim=%imm5_12_6 rdalo=%rdalo_17 rdahi=%rdahi_9 |
| 74 | @mve_shl_rr ....... .... . ... . rm:4 ... . .. .. .... \ |
| 75 | &mve_shl_rr rdalo=%rdalo_17 rdahi=%rdahi_9 |
| 76 | @mve_sh_ri ....... .... . rda:4 . ... ... . .. .. .... \ |
| 77 | &mve_sh_ri shim=%imm5_12_6 |
| 78 | @mve_sh_rr ....... .... . rda:4 rm:4 .... .... .... &mve_sh_rr |
| 79 | |
| 80 | { |
| 81 | TST_xrri 1110101 0000 1 .... 0 ... 1111 .... .... @S_xrr_shi |
| 82 | AND_rrri 1110101 0000 . .... 0 ... .... .... .... @s_rrr_shi |
| 83 | } |
| 84 | BIC_rrri 1110101 0001 . .... 0 ... .... .... .... @s_rrr_shi |
| 85 | { |
| 86 | # The v8.1M MVE shift insns overlap in encoding with MOVS/ORRS |
| 87 | # and are distinguished by having Rm==13 or 15. Those are UNPREDICTABLE |
| 88 | # cases for MOVS/ORRS. We decode the MVE cases first, ensuring that |
| 89 | # they explicitly call unallocated_encoding() for cases that must UNDEF |
| 90 | # (eg "using a new shift insn on a v8.1M CPU without MVE"), and letting |
| 91 | # the rest fall through (where ORR_rrri and MOV_rxri will end up |
| 92 | # handling them as r13 and r15 accesses with the same semantics as A32). |
| 93 | [ |
| 94 | { |
| 95 | UQSHL_ri 1110101 0010 1 .... 0 ... 1111 .. 00 1111 @mve_sh_ri |
| 96 | LSLL_ri 1110101 0010 1 ... 0 0 ... ... 1 .. 00 1111 @mve_shl_ri |
| 97 | UQSHLL_ri 1110101 0010 1 ... 1 0 ... ... 1 .. 00 1111 @mve_shl_ri |
| 98 | } |
| 99 | |
| 100 | { |
| 101 | URSHR_ri 1110101 0010 1 .... 0 ... 1111 .. 01 1111 @mve_sh_ri |
| 102 | LSRL_ri 1110101 0010 1 ... 0 0 ... ... 1 .. 01 1111 @mve_shl_ri |
| 103 | URSHRL_ri 1110101 0010 1 ... 1 0 ... ... 1 .. 01 1111 @mve_shl_ri |
| 104 | } |
| 105 | |
| 106 | { |
| 107 | SRSHR_ri 1110101 0010 1 .... 0 ... 1111 .. 10 1111 @mve_sh_ri |
| 108 | ASRL_ri 1110101 0010 1 ... 0 0 ... ... 1 .. 10 1111 @mve_shl_ri |
| 109 | SRSHRL_ri 1110101 0010 1 ... 1 0 ... ... 1 .. 10 1111 @mve_shl_ri |
| 110 | } |
| 111 | |
| 112 | { |
| 113 | SQSHL_ri 1110101 0010 1 .... 0 ... 1111 .. 11 1111 @mve_sh_ri |
| 114 | SQSHLL_ri 1110101 0010 1 ... 1 0 ... ... 1 .. 11 1111 @mve_shl_ri |
| 115 | } |
| 116 | |
| 117 | { |
| 118 | UQRSHL_rr 1110101 0010 1 .... .... 1111 0000 1101 @mve_sh_rr |
| 119 | LSLL_rr 1110101 0010 1 ... 0 .... ... 1 0000 1101 @mve_shl_rr |
| 120 | UQRSHLL64_rr 1110101 0010 1 ... 1 .... ... 1 0000 1101 @mve_shl_rr |
| 121 | } |
| 122 | |
| 123 | { |
| 124 | SQRSHR_rr 1110101 0010 1 .... .... 1111 0010 1101 @mve_sh_rr |
| 125 | ASRL_rr 1110101 0010 1 ... 0 .... ... 1 0010 1101 @mve_shl_rr |
| 126 | SQRSHRL64_rr 1110101 0010 1 ... 1 .... ... 1 0010 1101 @mve_shl_rr |
| 127 | } |
| 128 | |
| 129 | UQRSHLL48_rr 1110101 0010 1 ... 1 .... ... 1 1000 1101 @mve_shl_rr |
| 130 | SQRSHRL48_rr 1110101 0010 1 ... 1 .... ... 1 1010 1101 @mve_shl_rr |
| 131 | ] |
| 132 | |
| 133 | MOV_rxri 1110101 0010 . 1111 0 ... .... .... .... @s_rxr_shi |
| 134 | ORR_rrri 1110101 0010 . .... 0 ... .... .... .... @s_rrr_shi |
| 135 | |
| 136 | # v8.1M CSEL and friends |
| 137 | CSEL 1110101 0010 1 rn:4 10 op:2 rd:4 fcond:4 rm:4 |
| 138 | } |
| 139 | { |
| 140 | MVN_rxri 1110101 0011 . 1111 0 ... .... .... .... @s_rxr_shi |
| 141 | ORN_rrri 1110101 0011 . .... 0 ... .... .... .... @s_rrr_shi |
| 142 | } |
| 143 | { |
| 144 | TEQ_xrri 1110101 0100 1 .... 0 ... 1111 .... .... @S_xrr_shi |
| 145 | EOR_rrri 1110101 0100 . .... 0 ... .... .... .... @s_rrr_shi |
| 146 | } |
| 147 | PKH 1110101 0110 0 rn:4 0 ... rd:4 .. tb:1 0 rm:4 \ |
| 148 | &pkh imm=%imm5_12_6 |
| 149 | { |
| 150 | CMN_xrri 1110101 1000 1 .... 0 ... 1111 .... .... @S_xrr_shi |
| 151 | ADD_rrri 1110101 1000 . .... 0 ... .... .... .... @s_rrr_shi |
| 152 | } |
| 153 | ADC_rrri 1110101 1010 . .... 0 ... .... .... .... @s_rrr_shi |
| 154 | SBC_rrri 1110101 1011 . .... 0 ... .... .... .... @s_rrr_shi |
| 155 | { |
| 156 | CMP_xrri 1110101 1101 1 .... 0 ... 1111 .... .... @S_xrr_shi |
| 157 | SUB_rrri 1110101 1101 . .... 0 ... .... .... .... @s_rrr_shi |
| 158 | } |
| 159 | RSB_rrri 1110101 1110 . .... 0 ... .... .... .... @s_rrr_shi |
| 160 | |
| 161 | # Data-processing (register-shifted register) |
| 162 | |
| 163 | MOV_rxrr 1111 1010 0 shty:2 s:1 rm:4 1111 rd:4 0000 rs:4 \ |
| 164 | &s_rrr_shr rn=0 |
| 165 | |
| 166 | # Data-processing (immediate) |
| 167 | |
| 168 | %t32extrot 26:1 12:3 0:8 !function=t32_expandimm_rot |
| 169 | %t32extimm 26:1 12:3 0:8 !function=t32_expandimm_imm |
| 170 | |
| 171 | @s_rri_rot ....... .... s:1 rn:4 . ... rd:4 ........ \ |
| 172 | &s_rri_rot imm=%t32extimm rot=%t32extrot |
| 173 | @s_rxi_rot ....... .... s:1 .... . ... rd:4 ........ \ |
| 174 | &s_rri_rot imm=%t32extimm rot=%t32extrot rn=0 |
| 175 | @S_xri_rot ....... .... . rn:4 . ... .... ........ \ |
| 176 | &s_rri_rot imm=%t32extimm rot=%t32extrot s=1 rd=0 |
| 177 | |
| 178 | { |
| 179 | TST_xri 1111 0.0 0000 1 .... 0 ... 1111 ........ @S_xri_rot |
| 180 | AND_rri 1111 0.0 0000 . .... 0 ... .... ........ @s_rri_rot |
| 181 | } |
| 182 | BIC_rri 1111 0.0 0001 . .... 0 ... .... ........ @s_rri_rot |
| 183 | { |
| 184 | MOV_rxi 1111 0.0 0010 . 1111 0 ... .... ........ @s_rxi_rot |
| 185 | ORR_rri 1111 0.0 0010 . .... 0 ... .... ........ @s_rri_rot |
| 186 | } |
| 187 | { |
| 188 | MVN_rxi 1111 0.0 0011 . 1111 0 ... .... ........ @s_rxi_rot |
| 189 | ORN_rri 1111 0.0 0011 . .... 0 ... .... ........ @s_rri_rot |
| 190 | } |
| 191 | { |
| 192 | TEQ_xri 1111 0.0 0100 1 .... 0 ... 1111 ........ @S_xri_rot |
| 193 | EOR_rri 1111 0.0 0100 . .... 0 ... .... ........ @s_rri_rot |
| 194 | } |
| 195 | { |
| 196 | CMN_xri 1111 0.0 1000 1 .... 0 ... 1111 ........ @S_xri_rot |
| 197 | ADD_rri 1111 0.0 1000 . .... 0 ... .... ........ @s_rri_rot |
| 198 | } |
| 199 | ADC_rri 1111 0.0 1010 . .... 0 ... .... ........ @s_rri_rot |
| 200 | SBC_rri 1111 0.0 1011 . .... 0 ... .... ........ @s_rri_rot |
| 201 | { |
| 202 | CMP_xri 1111 0.0 1101 1 .... 0 ... 1111 ........ @S_xri_rot |
| 203 | SUB_rri 1111 0.0 1101 . .... 0 ... .... ........ @s_rri_rot |
| 204 | } |
| 205 | RSB_rri 1111 0.0 1110 . .... 0 ... .... ........ @s_rri_rot |
| 206 | |
| 207 | # Data processing (plain binary immediate) |
| 208 | |
| 209 | %imm12_26_12_0 26:1 12:3 0:8 |
| 210 | %neg12_26_12_0 26:1 12:3 0:8 !function=negate |
| 211 | @s0_rri_12 .... ... .... . rn:4 . ... rd:4 ........ \ |
| 212 | &s_rri_rot imm=%imm12_26_12_0 rot=0 s=0 |
| 213 | |
| 214 | { |
| 215 | ADR 1111 0.1 0000 0 1111 0 ... rd:4 ........ \ |
| 216 | &ri imm=%imm12_26_12_0 |
| 217 | ADD_rri 1111 0.1 0000 0 .... 0 ... .... ........ @s0_rri_12 |
| 218 | } |
| 219 | { |
| 220 | ADR 1111 0.1 0101 0 1111 0 ... rd:4 ........ \ |
| 221 | &ri imm=%neg12_26_12_0 |
| 222 | SUB_rri 1111 0.1 0101 0 .... 0 ... .... ........ @s0_rri_12 |
| 223 | } |
| 224 | |
| 225 | # Move Wide |
| 226 | |
| 227 | %imm16_26_16_12_0 16:4 26:1 12:3 0:8 |
| 228 | @mov16 .... .... .... .... .... rd:4 .... .... \ |
| 229 | &ri imm=%imm16_26_16_12_0 |
| 230 | |
| 231 | MOVW 1111 0.10 0100 .... 0 ... .... ........ @mov16 |
| 232 | MOVT 1111 0.10 1100 .... 0 ... .... ........ @mov16 |
| 233 | |
| 234 | # Saturate, bitfield |
| 235 | |
| 236 | @sat .... .... .. sh:1 . rn:4 . ... rd:4 .. . satimm:5 \ |
| 237 | &sat imm=%imm5_12_6 |
| 238 | @sat16 .... .... .. . . rn:4 . ... rd:4 .. . satimm:5 \ |
| 239 | &sat sh=0 imm=0 |
| 240 | |
| 241 | { |
| 242 | SSAT16 1111 0011 001 0 .... 0 000 .... 00 0 ..... @sat16 |
| 243 | SSAT 1111 0011 00. 0 .... 0 ... .... .. 0 ..... @sat |
| 244 | } |
| 245 | { |
| 246 | USAT16 1111 0011 101 0 .... 0 000 .... 00 0 ..... @sat16 |
| 247 | USAT 1111 0011 10. 0 .... 0 ... .... .. 0 ..... @sat |
| 248 | } |
| 249 | |
| 250 | @bfx .... .... ... . rn:4 . ... rd:4 .. . widthm1:5 \ |
| 251 | &bfx lsb=%imm5_12_6 |
| 252 | @bfi .... .... ... . rn:4 . ... rd:4 .. . msb:5 \ |
| 253 | &bfi lsb=%imm5_12_6 |
| 254 | |
| 255 | SBFX 1111 0011 010 0 .... 0 ... .... ..0..... @bfx |
| 256 | UBFX 1111 0011 110 0 .... 0 ... .... ..0..... @bfx |
| 257 | |
| 258 | # bfc is bfi w/ rn=15 |
| 259 | BFCI 1111 0011 011 0 .... 0 ... .... ..0..... @bfi |
| 260 | |
| 261 | # Multiply and multiply accumulate |
| 262 | |
| 263 | @s0_rnadm .... .... .... rn:4 ra:4 rd:4 .... rm:4 &s_rrrr s=0 |
| 264 | @s0_rn0dm .... .... .... rn:4 .... rd:4 .... rm:4 &s_rrrr ra=0 s=0 |
| 265 | @rnadm .... .... .... rn:4 ra:4 rd:4 .... rm:4 &rrrr |
| 266 | @rn0dm .... .... .... rn:4 .... rd:4 .... rm:4 &rrrr ra=0 |
| 267 | @rndm .... .... .... rn:4 .... rd:4 .... rm:4 &rrr |
| 268 | @rdm .... .... .... .... .... rd:4 .... rm:4 &rr |
| 269 | |
| 270 | { |
| 271 | MUL 1111 1011 0000 .... 1111 .... 0000 .... @s0_rn0dm |
| 272 | MLA 1111 1011 0000 .... .... .... 0000 .... @s0_rnadm |
| 273 | } |
| 274 | MLS 1111 1011 0000 .... .... .... 0001 .... @rnadm |
| 275 | SMULL 1111 1011 1000 .... .... .... 0000 .... @s0_rnadm |
| 276 | UMULL 1111 1011 1010 .... .... .... 0000 .... @s0_rnadm |
| 277 | SMLAL 1111 1011 1100 .... .... .... 0000 .... @s0_rnadm |
| 278 | UMLAL 1111 1011 1110 .... .... .... 0000 .... @s0_rnadm |
| 279 | UMAAL 1111 1011 1110 .... .... .... 0110 .... @rnadm |
| 280 | { |
| 281 | SMULWB 1111 1011 0011 .... 1111 .... 0000 .... @rn0dm |
| 282 | SMLAWB 1111 1011 0011 .... .... .... 0000 .... @rnadm |
| 283 | } |
| 284 | { |
| 285 | SMULWT 1111 1011 0011 .... 1111 .... 0001 .... @rn0dm |
| 286 | SMLAWT 1111 1011 0011 .... .... .... 0001 .... @rnadm |
| 287 | } |
| 288 | { |
| 289 | SMULBB 1111 1011 0001 .... 1111 .... 0000 .... @rn0dm |
| 290 | SMLABB 1111 1011 0001 .... .... .... 0000 .... @rnadm |
| 291 | } |
| 292 | { |
| 293 | SMULBT 1111 1011 0001 .... 1111 .... 0001 .... @rn0dm |
| 294 | SMLABT 1111 1011 0001 .... .... .... 0001 .... @rnadm |
| 295 | } |
| 296 | { |
| 297 | SMULTB 1111 1011 0001 .... 1111 .... 0010 .... @rn0dm |
| 298 | SMLATB 1111 1011 0001 .... .... .... 0010 .... @rnadm |
| 299 | } |
| 300 | { |
| 301 | SMULTT 1111 1011 0001 .... 1111 .... 0011 .... @rn0dm |
| 302 | SMLATT 1111 1011 0001 .... .... .... 0011 .... @rnadm |
| 303 | } |
| 304 | SMLALBB 1111 1011 1100 .... .... .... 1000 .... @rnadm |
| 305 | SMLALBT 1111 1011 1100 .... .... .... 1001 .... @rnadm |
| 306 | SMLALTB 1111 1011 1100 .... .... .... 1010 .... @rnadm |
| 307 | SMLALTT 1111 1011 1100 .... .... .... 1011 .... @rnadm |
| 308 | |
| 309 | # usad8 is usada8 w/ ra=15 |
| 310 | USADA8 1111 1011 0111 .... .... .... 0000 .... @rnadm |
| 311 | |
| 312 | SMLAD 1111 1011 0010 .... .... .... 0000 .... @rnadm |
| 313 | SMLADX 1111 1011 0010 .... .... .... 0001 .... @rnadm |
| 314 | SMLSD 1111 1011 0100 .... .... .... 0000 .... @rnadm |
| 315 | SMLSDX 1111 1011 0100 .... .... .... 0001 .... @rnadm |
| 316 | |
| 317 | SMLALD 1111 1011 1100 .... .... .... 1100 .... @rnadm |
| 318 | SMLALDX 1111 1011 1100 .... .... .... 1101 .... @rnadm |
| 319 | SMLSLD 1111 1011 1101 .... .... .... 1100 .... @rnadm |
| 320 | SMLSLDX 1111 1011 1101 .... .... .... 1101 .... @rnadm |
| 321 | |
| 322 | SMMLA 1111 1011 0101 .... .... .... 0000 .... @rnadm |
| 323 | SMMLAR 1111 1011 0101 .... .... .... 0001 .... @rnadm |
| 324 | SMMLS 1111 1011 0110 .... .... .... 0000 .... @rnadm |
| 325 | SMMLSR 1111 1011 0110 .... .... .... 0001 .... @rnadm |
| 326 | |
| 327 | SDIV 1111 1011 1001 .... 1111 .... 1111 .... @rndm |
| 328 | UDIV 1111 1011 1011 .... 1111 .... 1111 .... @rndm |
| 329 | |
| 330 | # Data-processing (two source registers) |
| 331 | |
| 332 | QADD 1111 1010 1000 .... 1111 .... 1000 .... @rndm |
| 333 | QSUB 1111 1010 1000 .... 1111 .... 1010 .... @rndm |
| 334 | QDADD 1111 1010 1000 .... 1111 .... 1001 .... @rndm |
| 335 | QDSUB 1111 1010 1000 .... 1111 .... 1011 .... @rndm |
| 336 | |
| 337 | CRC32B 1111 1010 1100 .... 1111 .... 1000 .... @rndm |
| 338 | CRC32H 1111 1010 1100 .... 1111 .... 1001 .... @rndm |
| 339 | CRC32W 1111 1010 1100 .... 1111 .... 1010 .... @rndm |
| 340 | CRC32CB 1111 1010 1101 .... 1111 .... 1000 .... @rndm |
| 341 | CRC32CH 1111 1010 1101 .... 1111 .... 1001 .... @rndm |
| 342 | CRC32CW 1111 1010 1101 .... 1111 .... 1010 .... @rndm |
| 343 | |
| 344 | SEL 1111 1010 1010 .... 1111 .... 1000 .... @rndm |
| 345 | |
| 346 | # Note rn != rm is CONSTRAINED UNPREDICTABLE; we choose to ignore rn. |
| 347 | REV 1111 1010 1001 ---- 1111 .... 1000 .... @rdm |
| 348 | REV16 1111 1010 1001 ---- 1111 .... 1001 .... @rdm |
| 349 | RBIT 1111 1010 1001 ---- 1111 .... 1010 .... @rdm |
| 350 | REVSH 1111 1010 1001 ---- 1111 .... 1011 .... @rdm |
| 351 | CLZ 1111 1010 1011 ---- 1111 .... 1000 .... @rdm |
| 352 | |
| 353 | # Branches and miscellaneous control |
| 354 | |
| 355 | %msr_sysm 4:1 8:4 |
| 356 | %mrs_sysm 4:1 16:4 |
| 357 | %imm16_16_0 16:4 0:12 |
| 358 | %imm21 26:s1 11:1 13:1 16:6 0:11 !function=times_2 |
| 359 | &ci cond imm |
| 360 | |
| 361 | { |
| 362 | # Group insn[25:23] = 111, which is cond=111x for the branch below, |
| 363 | # or unconditional, which would be illegal for the branch. |
| 364 | [ |
| 365 | # Hints, and CPS |
| 366 | { |
| 367 | [ |
| 368 | YIELD 1111 0011 1010 1111 1000 0000 0000 0001 |
| 369 | WFE 1111 0011 1010 1111 1000 0000 0000 0010 |
| 370 | WFI 1111 0011 1010 1111 1000 0000 0000 0011 |
| 371 | |
| 372 | SEV 1111 0011 1010 1111 1000 0000 0000 0100 |
| 373 | SEVL 1111 0011 1010 1111 1000 0000 0000 0101 |
| 374 | |
| 375 | ESB 1111 0011 1010 1111 1000 0000 0001 0000 |
| 376 | ] |
| 377 | |
| 378 | # The canonical nop ends in 0000 0000, but the whole rest |
| 379 | # of the space is "reserved hint, behaves as nop". |
| 380 | NOP 1111 0011 1010 1111 1000 0000 ---- ---- |
| 381 | |
| 382 | # If imod == '00' && M == '0' then SEE "Hint instructions", above. |
| 383 | CPS 1111 0011 1010 1111 1000 0 imod:2 M:1 A:1 I:1 F:1 mode:5 \ |
| 384 | &cps |
| 385 | } |
| 386 | |
| 387 | # Miscellaneous control |
| 388 | CLREX 1111 0011 1011 1111 1000 1111 0010 1111 |
| 389 | DSB 1111 0011 1011 1111 1000 1111 0100 ---- |
| 390 | DMB 1111 0011 1011 1111 1000 1111 0101 ---- |
| 391 | ISB 1111 0011 1011 1111 1000 1111 0110 ---- |
| 392 | SB 1111 0011 1011 1111 1000 1111 0111 0000 |
| 393 | |
| 394 | # Note that the v7m insn overlaps both the normal and banked insn. |
| 395 | { |
| 396 | MRS_bank 1111 0011 111 r:1 .... 1000 rd:4 001. 0000 \ |
| 397 | &mrs_bank sysm=%mrs_sysm |
| 398 | MRS_reg 1111 0011 111 r:1 1111 1000 rd:4 0000 0000 &mrs_reg |
| 399 | MRS_v7m 1111 0011 111 0 1111 1000 rd:4 sysm:8 |
| 400 | } |
| 401 | { |
| 402 | MSR_bank 1111 0011 100 r:1 rn:4 1000 .... 001. 0000 \ |
| 403 | &msr_bank sysm=%msr_sysm |
| 404 | MSR_reg 1111 0011 100 r:1 rn:4 1000 mask:4 0000 0000 &msr_reg |
| 405 | MSR_v7m 1111 0011 100 0 rn:4 1000 mask:2 00 sysm:8 |
| 406 | } |
| 407 | BXJ 1111 0011 1100 rm:4 1000 1111 0000 0000 &r |
| 408 | { |
| 409 | # At v6T2, this is the T5 encoding of SUBS PC, LR, #IMM, and works as for |
| 410 | # every other encoding of SUBS. With v7VE, IMM=0 is redefined as ERET. |
| 411 | # The distinction between the two only matters for Hyp mode. |
| 412 | ERET 1111 0011 1101 1110 1000 1111 0000 0000 |
| 413 | SUB_rri 1111 0011 1101 1110 1000 1111 imm:8 \ |
| 414 | &s_rri_rot rot=0 s=1 rd=15 rn=14 |
| 415 | } |
| 416 | SMC 1111 0111 1111 imm:4 1000 0000 0000 0000 &i |
| 417 | HVC 1111 0111 1110 .... 1000 .... .... .... \ |
| 418 | &i imm=%imm16_16_0 |
| 419 | UDF 1111 0111 1111 ---- 1010 ---- ---- ---- |
| 420 | ] |
| 421 | B_cond_thumb 1111 0. cond:4 ...... 10.0 ............ &ci imm=%imm21 |
| 422 | } |
| 423 | |
| 424 | # Load/store (register, immediate, literal) |
| 425 | |
| 426 | @ldst_rr .... .... .... rn:4 rt:4 ...... shimm:2 rm:4 \ |
| 427 | &ldst_rr p=1 w=0 u=1 shtype=0 |
| 428 | @ldst_ri_idx .... .... .... rn:4 rt:4 . p:1 u:1 . imm:8 \ |
| 429 | &ldst_ri w=1 |
| 430 | @ldst_ri_neg .... .... .... rn:4 rt:4 .... imm:8 \ |
| 431 | &ldst_ri p=1 w=0 u=0 |
| 432 | @ldst_ri_unp .... .... .... rn:4 rt:4 .... imm:8 \ |
| 433 | &ldst_ri p=1 w=0 u=1 |
| 434 | @ldst_ri_pos .... .... .... rn:4 rt:4 imm:12 \ |
| 435 | &ldst_ri p=1 w=0 u=1 |
| 436 | @ldst_ri_lit .... .... u:1 ... .... rt:4 imm:12 \ |
| 437 | &ldst_ri p=1 w=0 rn=15 |
| 438 | |
| 439 | STRB_rr 1111 1000 0000 .... .... 000000 .. .... @ldst_rr |
| 440 | STRB_ri 1111 1000 0000 .... .... 1..1 ........ @ldst_ri_idx |
| 441 | STRB_ri 1111 1000 0000 .... .... 1100 ........ @ldst_ri_neg |
| 442 | STRBT_ri 1111 1000 0000 .... .... 1110 ........ @ldst_ri_unp |
| 443 | STRB_ri 1111 1000 1000 .... .... ............ @ldst_ri_pos |
| 444 | |
| 445 | STRH_rr 1111 1000 0010 .... .... 000000 .. .... @ldst_rr |
| 446 | STRH_ri 1111 1000 0010 .... .... 1..1 ........ @ldst_ri_idx |
| 447 | STRH_ri 1111 1000 0010 .... .... 1100 ........ @ldst_ri_neg |
| 448 | STRHT_ri 1111 1000 0010 .... .... 1110 ........ @ldst_ri_unp |
| 449 | STRH_ri 1111 1000 1010 .... .... ............ @ldst_ri_pos |
| 450 | |
| 451 | STR_rr 1111 1000 0100 .... .... 000000 .. .... @ldst_rr |
| 452 | STR_ri 1111 1000 0100 .... .... 1..1 ........ @ldst_ri_idx |
| 453 | STR_ri 1111 1000 0100 .... .... 1100 ........ @ldst_ri_neg |
| 454 | STRT_ri 1111 1000 0100 .... .... 1110 ........ @ldst_ri_unp |
| 455 | STR_ri 1111 1000 1100 .... .... ............ @ldst_ri_pos |
| 456 | |
| 457 | # Note that Load, unsigned (literal) overlaps all other load encodings. |
| 458 | { |
| 459 | { |
| 460 | PLD 1111 1000 -001 1111 1111 ------------ # (literal) |
| 461 | LDRB_ri 1111 1000 .001 1111 .... ............ @ldst_ri_lit |
| 462 | } |
| 463 | { |
| 464 | PLD 1111 1000 1001 ---- 1111 ------------ # (immediate T1) |
| 465 | LDRB_ri 1111 1000 1001 .... .... ............ @ldst_ri_pos |
| 466 | } |
| 467 | LDRB_ri 1111 1000 0001 .... .... 1..1 ........ @ldst_ri_idx |
| 468 | { |
| 469 | PLD 1111 1000 0001 ---- 1111 1100 -------- # (immediate T2) |
| 470 | LDRB_ri 1111 1000 0001 .... .... 1100 ........ @ldst_ri_neg |
| 471 | } |
| 472 | LDRBT_ri 1111 1000 0001 .... .... 1110 ........ @ldst_ri_unp |
| 473 | { |
| 474 | PLD 1111 1000 0001 ---- 1111 000000 -- ---- # (register) |
| 475 | LDRB_rr 1111 1000 0001 .... .... 000000 .. .... @ldst_rr |
| 476 | } |
| 477 | } |
| 478 | { |
| 479 | { |
| 480 | PLD 1111 1000 -011 1111 1111 ------------ # (literal) |
| 481 | LDRH_ri 1111 1000 .011 1111 .... ............ @ldst_ri_lit |
| 482 | } |
| 483 | { |
| 484 | PLDW 1111 1000 1011 ---- 1111 ------------ # (immediate T1) |
| 485 | LDRH_ri 1111 1000 1011 .... .... ............ @ldst_ri_pos |
| 486 | } |
| 487 | LDRH_ri 1111 1000 0011 .... .... 1..1 ........ @ldst_ri_idx |
| 488 | { |
| 489 | PLDW 1111 1000 0011 ---- 1111 1100 -------- # (immediate T2) |
| 490 | LDRH_ri 1111 1000 0011 .... .... 1100 ........ @ldst_ri_neg |
| 491 | } |
| 492 | LDRHT_ri 1111 1000 0011 .... .... 1110 ........ @ldst_ri_unp |
| 493 | { |
| 494 | PLDW 1111 1000 0011 ---- 1111 000000 -- ---- # (register) |
| 495 | LDRH_rr 1111 1000 0011 .... .... 000000 .. .... @ldst_rr |
| 496 | } |
| 497 | } |
| 498 | { |
| 499 | LDR_ri 1111 1000 .101 1111 .... ............ @ldst_ri_lit |
| 500 | LDR_ri 1111 1000 1101 .... .... ............ @ldst_ri_pos |
| 501 | LDR_ri 1111 1000 0101 .... .... 1..1 ........ @ldst_ri_idx |
| 502 | LDR_ri 1111 1000 0101 .... .... 1100 ........ @ldst_ri_neg |
| 503 | LDRT_ri 1111 1000 0101 .... .... 1110 ........ @ldst_ri_unp |
| 504 | LDR_rr 1111 1000 0101 .... .... 000000 .. .... @ldst_rr |
| 505 | } |
| 506 | { |
| 507 | { |
| 508 | PLI 1111 1001 -001 1111 1111 ------------ # (literal T3) |
| 509 | LDRSB_ri 1111 1001 .001 1111 .... ............ @ldst_ri_lit |
| 510 | } |
| 511 | { |
| 512 | PLI 1111 1001 1001 ---- 1111 ------------ # (immediate T1) |
| 513 | LDRSB_ri 1111 1001 1001 .... .... ............ @ldst_ri_pos |
| 514 | } |
| 515 | LDRSB_ri 1111 1001 0001 .... .... 1..1 ........ @ldst_ri_idx |
| 516 | { |
| 517 | PLI 1111 1001 0001 ---- 1111 1100 -------- # (immediate T2) |
| 518 | LDRSB_ri 1111 1001 0001 .... .... 1100 ........ @ldst_ri_neg |
| 519 | } |
| 520 | LDRSBT_ri 1111 1001 0001 .... .... 1110 ........ @ldst_ri_unp |
| 521 | { |
| 522 | PLI 1111 1001 0001 ---- 1111 000000 -- ---- # (register) |
| 523 | LDRSB_rr 1111 1001 0001 .... .... 000000 .. .... @ldst_rr |
| 524 | } |
| 525 | } |
| 526 | # NOPs here are unallocated memory hints, treated as NOP. |
| 527 | { |
| 528 | { |
| 529 | NOP 1111 1001 -011 1111 1111 ------------ |
| 530 | LDRSH_ri 1111 1001 .011 1111 .... ............ @ldst_ri_lit |
| 531 | } |
| 532 | { |
| 533 | NOP 1111 1001 1011 ---- 1111 ------------ |
| 534 | LDRSH_ri 1111 1001 1011 .... .... ............ @ldst_ri_pos |
| 535 | } |
| 536 | LDRSH_ri 1111 1001 0011 .... .... 1..1 ........ @ldst_ri_idx |
| 537 | { |
| 538 | NOP 1111 1001 0011 ---- 1111 1100 -------- |
| 539 | LDRSH_ri 1111 1001 0011 .... .... 1100 ........ @ldst_ri_neg |
| 540 | } |
| 541 | LDRSHT_ri 1111 1001 0011 .... .... 1110 ........ @ldst_ri_unp |
| 542 | { |
| 543 | NOP 1111 1001 0011 ---- 1111 000000 -- ---- |
| 544 | LDRSH_rr 1111 1001 0011 .... .... 000000 .. .... @ldst_rr |
| 545 | } |
| 546 | } |
| 547 | |
| 548 | %imm8x4 0:8 !function=times_4 |
| 549 | &ldst_ri2 p w u rn rt rt2 imm |
| 550 | @ldstd_ri8 .... .... u:1 ... rn:4 rt:4 rt2:4 ........ \ |
| 551 | &ldst_ri2 imm=%imm8x4 |
| 552 | |
| 553 | STRD_ri_t32 1110 1000 .110 .... .... .... ........ @ldstd_ri8 w=1 p=0 |
| 554 | LDRD_ri_t32 1110 1000 .111 .... .... .... ........ @ldstd_ri8 w=1 p=0 |
| 555 | |
| 556 | STRD_ri_t32 1110 1001 .100 .... .... .... ........ @ldstd_ri8 w=0 p=1 |
| 557 | LDRD_ri_t32 1110 1001 .101 .... .... .... ........ @ldstd_ri8 w=0 p=1 |
| 558 | |
| 559 | STRD_ri_t32 1110 1001 .110 .... .... .... ........ @ldstd_ri8 w=1 p=1 |
| 560 | { |
| 561 | SG 1110 1001 0111 1111 1110 1001 01111111 |
| 562 | LDRD_ri_t32 1110 1001 .111 .... .... .... ........ @ldstd_ri8 w=1 p=1 |
| 563 | } |
| 564 | |
| 565 | # Load/Store Exclusive, Load-Acquire/Store-Release, and Table Branch |
| 566 | |
| 567 | @strex_i .... .... .... rn:4 rt:4 rd:4 .... .... \ |
| 568 | &strex rt2=15 imm=%imm8x4 |
| 569 | @strex_0 .... .... .... rn:4 rt:4 .... .... rd:4 \ |
| 570 | &strex rt2=15 imm=0 |
| 571 | @strex_d .... .... .... rn:4 rt:4 rt2:4 .... rd:4 \ |
| 572 | &strex imm=0 |
| 573 | |
| 574 | @ldrex_i .... .... .... rn:4 rt:4 .... .... .... \ |
| 575 | &ldrex rt2=15 imm=%imm8x4 |
| 576 | @ldrex_0 .... .... .... rn:4 rt:4 .... .... .... \ |
| 577 | &ldrex rt2=15 imm=0 |
| 578 | @ldrex_d .... .... .... rn:4 rt:4 rt2:4 .... .... \ |
| 579 | &ldrex imm=0 |
| 580 | |
| 581 | { |
| 582 | TT 1110 1000 0100 rn:4 1111 rd:4 A:1 T:1 000000 |
| 583 | STREX 1110 1000 0100 .... .... .... .... .... @strex_i |
| 584 | } |
| 585 | STREXB 1110 1000 1100 .... .... 1111 0100 .... @strex_0 |
| 586 | STREXH 1110 1000 1100 .... .... 1111 0101 .... @strex_0 |
| 587 | STREXD_t32 1110 1000 1100 .... .... .... 0111 .... @strex_d |
| 588 | |
| 589 | STLEX 1110 1000 1100 .... .... 1111 1110 .... @strex_0 |
| 590 | STLEXB 1110 1000 1100 .... .... 1111 1100 .... @strex_0 |
| 591 | STLEXH 1110 1000 1100 .... .... 1111 1101 .... @strex_0 |
| 592 | STLEXD_t32 1110 1000 1100 .... .... .... 1111 .... @strex_d |
| 593 | |
| 594 | STL 1110 1000 1100 .... .... 1111 1010 1111 @ldrex_0 |
| 595 | STLB 1110 1000 1100 .... .... 1111 1000 1111 @ldrex_0 |
| 596 | STLH 1110 1000 1100 .... .... 1111 1001 1111 @ldrex_0 |
| 597 | |
| 598 | LDREX 1110 1000 0101 .... .... 1111 .... .... @ldrex_i |
| 599 | LDREXB 1110 1000 1101 .... .... 1111 0100 1111 @ldrex_0 |
| 600 | LDREXH 1110 1000 1101 .... .... 1111 0101 1111 @ldrex_0 |
| 601 | LDREXD_t32 1110 1000 1101 .... .... .... 0111 1111 @ldrex_d |
| 602 | |
| 603 | LDAEX 1110 1000 1101 .... .... 1111 1110 1111 @ldrex_0 |
| 604 | LDAEXB 1110 1000 1101 .... .... 1111 1100 1111 @ldrex_0 |
| 605 | LDAEXH 1110 1000 1101 .... .... 1111 1101 1111 @ldrex_0 |
| 606 | LDAEXD_t32 1110 1000 1101 .... .... .... 1111 1111 @ldrex_d |
| 607 | |
| 608 | LDA 1110 1000 1101 .... .... 1111 1010 1111 @ldrex_0 |
| 609 | LDAB 1110 1000 1101 .... .... 1111 1000 1111 @ldrex_0 |
| 610 | LDAH 1110 1000 1101 .... .... 1111 1001 1111 @ldrex_0 |
| 611 | |
| 612 | &tbranch rn rm |
| 613 | @tbranch .... .... .... rn:4 .... .... .... rm:4 &tbranch |
| 614 | |
| 615 | TBB 1110 1000 1101 .... 1111 0000 0000 .... @tbranch |
| 616 | TBH 1110 1000 1101 .... 1111 0000 0001 .... @tbranch |
| 617 | |
| 618 | # Parallel addition and subtraction |
| 619 | |
| 620 | SADD8 1111 1010 1000 .... 1111 .... 0000 .... @rndm |
| 621 | QADD8 1111 1010 1000 .... 1111 .... 0001 .... @rndm |
| 622 | SHADD8 1111 1010 1000 .... 1111 .... 0010 .... @rndm |
| 623 | UADD8 1111 1010 1000 .... 1111 .... 0100 .... @rndm |
| 624 | UQADD8 1111 1010 1000 .... 1111 .... 0101 .... @rndm |
| 625 | UHADD8 1111 1010 1000 .... 1111 .... 0110 .... @rndm |
| 626 | |
| 627 | SADD16 1111 1010 1001 .... 1111 .... 0000 .... @rndm |
| 628 | QADD16 1111 1010 1001 .... 1111 .... 0001 .... @rndm |
| 629 | SHADD16 1111 1010 1001 .... 1111 .... 0010 .... @rndm |
| 630 | UADD16 1111 1010 1001 .... 1111 .... 0100 .... @rndm |
| 631 | UQADD16 1111 1010 1001 .... 1111 .... 0101 .... @rndm |
| 632 | UHADD16 1111 1010 1001 .... 1111 .... 0110 .... @rndm |
| 633 | |
| 634 | SASX 1111 1010 1010 .... 1111 .... 0000 .... @rndm |
| 635 | QASX 1111 1010 1010 .... 1111 .... 0001 .... @rndm |
| 636 | SHASX 1111 1010 1010 .... 1111 .... 0010 .... @rndm |
| 637 | UASX 1111 1010 1010 .... 1111 .... 0100 .... @rndm |
| 638 | UQASX 1111 1010 1010 .... 1111 .... 0101 .... @rndm |
| 639 | UHASX 1111 1010 1010 .... 1111 .... 0110 .... @rndm |
| 640 | |
| 641 | SSUB8 1111 1010 1100 .... 1111 .... 0000 .... @rndm |
| 642 | QSUB8 1111 1010 1100 .... 1111 .... 0001 .... @rndm |
| 643 | SHSUB8 1111 1010 1100 .... 1111 .... 0010 .... @rndm |
| 644 | USUB8 1111 1010 1100 .... 1111 .... 0100 .... @rndm |
| 645 | UQSUB8 1111 1010 1100 .... 1111 .... 0101 .... @rndm |
| 646 | UHSUB8 1111 1010 1100 .... 1111 .... 0110 .... @rndm |
| 647 | |
| 648 | SSUB16 1111 1010 1101 .... 1111 .... 0000 .... @rndm |
| 649 | QSUB16 1111 1010 1101 .... 1111 .... 0001 .... @rndm |
| 650 | SHSUB16 1111 1010 1101 .... 1111 .... 0010 .... @rndm |
| 651 | USUB16 1111 1010 1101 .... 1111 .... 0100 .... @rndm |
| 652 | UQSUB16 1111 1010 1101 .... 1111 .... 0101 .... @rndm |
| 653 | UHSUB16 1111 1010 1101 .... 1111 .... 0110 .... @rndm |
| 654 | |
| 655 | SSAX 1111 1010 1110 .... 1111 .... 0000 .... @rndm |
| 656 | QSAX 1111 1010 1110 .... 1111 .... 0001 .... @rndm |
| 657 | SHSAX 1111 1010 1110 .... 1111 .... 0010 .... @rndm |
| 658 | USAX 1111 1010 1110 .... 1111 .... 0100 .... @rndm |
| 659 | UQSAX 1111 1010 1110 .... 1111 .... 0101 .... @rndm |
| 660 | UHSAX 1111 1010 1110 .... 1111 .... 0110 .... @rndm |
| 661 | |
| 662 | # Register extends |
| 663 | |
| 664 | @rrr_rot .... .... .... rn:4 .... rd:4 .. rot:2 rm:4 &rrr_rot |
| 665 | |
| 666 | SXTAH 1111 1010 0000 .... 1111 .... 10.. .... @rrr_rot |
| 667 | UXTAH 1111 1010 0001 .... 1111 .... 10.. .... @rrr_rot |
| 668 | SXTAB16 1111 1010 0010 .... 1111 .... 10.. .... @rrr_rot |
| 669 | UXTAB16 1111 1010 0011 .... 1111 .... 10.. .... @rrr_rot |
| 670 | SXTAB 1111 1010 0100 .... 1111 .... 10.. .... @rrr_rot |
| 671 | UXTAB 1111 1010 0101 .... 1111 .... 10.. .... @rrr_rot |
| 672 | |
| 673 | # Load/store multiple |
| 674 | |
| 675 | @ldstm .... .... .. w:1 . rn:4 list:16 &ldst_block u=0 |
| 676 | |
| 677 | STM_t32 1110 1000 10.0 .... ................ @ldstm i=1 b=0 |
| 678 | STM_t32 1110 1001 00.0 .... ................ @ldstm i=0 b=1 |
| 679 | { |
| 680 | # Rn=15 UNDEFs for LDM; M-profile CLRM uses that encoding |
| 681 | CLRM 1110 1000 1001 1111 list:16 |
| 682 | LDM_t32 1110 1000 10.1 .... ................ @ldstm i=1 b=0 |
| 683 | } |
| 684 | LDM_t32 1110 1001 00.1 .... ................ @ldstm i=0 b=1 |
| 685 | |
| 686 | &rfe !extern rn w pu |
| 687 | @rfe .... .... .. w:1 . rn:4 ................ &rfe |
| 688 | |
| 689 | RFE 1110 1000 00.1 .... 1100000000000000 @rfe pu=2 |
| 690 | RFE 1110 1001 10.1 .... 1100000000000000 @rfe pu=1 |
| 691 | |
| 692 | &srs !extern mode w pu |
| 693 | @srs .... .... .. w:1 . .... ........... mode:5 &srs |
| 694 | |
| 695 | SRS 1110 1000 00.0 1101 1100 0000 000. .... @srs pu=2 |
| 696 | SRS 1110 1001 10.0 1101 1100 0000 000. .... @srs pu=1 |
| 697 | |
| 698 | # Coprocessor instructions |
| 699 | |
| 700 | # We decode MCR, MCR, MRRC and MCRR only, because for QEMU the |
| 701 | # other coprocessor instructions always UNDEF. |
| 702 | # The trans_ functions for these will ignore cp values 8..13 for v7 or |
| 703 | # earlier, and 0..13 for v8 and later, because those areas of the |
| 704 | # encoding space may be used for other things, such as VFP or Neon. |
| 705 | |
| 706 | @mcr .... .... opc1:3 . crn:4 rt:4 cp:4 opc2:3 . crm:4 |
| 707 | @mcrr .... .... .... rt2:4 rt:4 cp:4 opc1:4 crm:4 |
| 708 | |
| 709 | MCRR 1110 1100 0100 .... .... .... .... .... @mcrr |
| 710 | MRRC 1110 1100 0101 .... .... .... .... .... @mcrr |
| 711 | |
| 712 | MCR 1110 1110 ... 0 .... .... .... ... 1 .... @mcr |
| 713 | MRC 1110 1110 ... 1 .... .... .... ... 1 .... @mcr |
| 714 | |
| 715 | # Branches |
| 716 | |
| 717 | %imm24 26:s1 13:1 11:1 16:10 0:11 !function=t32_branch24 |
| 718 | @branch24 ................................ &i imm=%imm24 |
| 719 | |
| 720 | B 1111 0. .......... 10.1 ............ @branch24 |
| 721 | BL 1111 0. .......... 11.1 ............ @branch24 |
| 722 | { |
| 723 | # BLX_i is non-M-profile only |
| 724 | BLX_i 1111 0. .......... 11.0 ............ @branch24 |
| 725 | # M-profile only: loop and branch insns |
| 726 | [ |
| 727 | # All these BF insns have boff != 0b0000; we NOP them all |
| 728 | BF 1111 0 boff:4 ------- 1100 - ---------- 1 # BFL |
| 729 | BF 1111 0 boff:4 0 ------ 1110 - ---------- 1 # BFCSEL |
| 730 | BF 1111 0 boff:4 10 ----- 1110 - ---------- 1 # BF |
| 731 | BF 1111 0 boff:4 11 ----- 1110 0 0000000000 1 # BFX, BFLX |
| 732 | ] |
| 733 | [ |
| 734 | # LE and WLS immediate |
| 735 | %lob_imm 1:10 11:1 !function=times_2 |
| 736 | |
| 737 | DLS 1111 0 0000 100 rn:4 1110 0000 0000 0001 size=4 |
| 738 | WLS 1111 0 0000 100 rn:4 1100 . .......... 1 imm=%lob_imm size=4 |
| 739 | { |
| 740 | LE 1111 0 0000 0 f:1 tp:1 1111 1100 . .......... 1 imm=%lob_imm |
| 741 | # This is WLSTP |
| 742 | WLS 1111 0 0000 0 size:2 rn:4 1100 . .......... 1 imm=%lob_imm |
| 743 | } |
| 744 | { |
| 745 | LCTP 1111 0 0000 000 1111 1110 0000 0000 0001 |
| 746 | # This is DLSTP |
| 747 | DLS 1111 0 0000 0 size:2 rn:4 1110 0000 0000 0001 |
| 748 | } |
| 749 | VCTP 1111 0 0000 0 size:2 rn:4 1110 1000 0000 0001 |
| 750 | ] |
| 751 | } |