PageRenderTime 60ms CodeModel.GetById 19ms RepoModel.GetById 0ms app.codeStats 1ms

/test/MC/AArch64/basic-a64-diagnostics.s

http://github.com/earl/llvm-mirror
Assembly | 3893 lines | 3879 code | 14 blank | 0 comment | 9 complexity | 7a0d7fb06ab593b2178a9ef085589a76 MD5 | raw file
Possible License(s): BSD-3-Clause, Apache-2.0
  1. // RUN: not llvm-mc -triple aarch64-none-linux-gnu < %s 2> %t
  2. // RUN: FileCheck --check-prefix=CHECK-ERROR --check-prefix=CHECK-ERROR-ARM64 < %t %s
  3. //------------------------------------------------------------------------------
  4. // Add/sub (extended register)
  5. //------------------------------------------------------------------------------
  6. // Mismatched final register and extend
  7. add x2, x3, x5, sxtb
  8. add x2, x4, w2, uxtx
  9. add x2, x4, w2, lsl #3
  10. add w5, w7, x9, sxtx
  11. // CHECK-ERROR: error: expected 'sxtx' 'uxtx' or 'lsl' with optional integer in range [0, 4]
  12. // CHECK-ERROR: add x2, x3, x5, sxtb
  13. // CHECK-ERROR: ^
  14. // CHECK-ERROR: error: expected '[su]xt[bhw]' with optional integer in range [0, 4]
  15. // CHECK-ERROR: add x2, x4, w2, uxtx
  16. // CHECK-ERROR: ^
  17. // CHECK-ERROR: error: expected '[su]xt[bhw]' with optional integer in range [0, 4]
  18. // CHECK-ERROR: add x2, x4, w2, lsl #3
  19. // CHECK-ERROR: ^
  20. // CHECK-ERROR: error: expected compatible register, symbol or integer in range [0, 4095]
  21. // CHECK-ERROR: add w5, w7, x9, sxtx
  22. // CHECK-ERROR: ^
  23. // Out of range extends
  24. add x9, x10, w11, uxtb #-1
  25. add x3, x5, w7, uxtb #5
  26. sub x9, x15, x2, uxth #5
  27. // CHECK-ERROR: error: expected integer shift amount
  28. // CHECK-ERROR: add x9, x10, w11, uxtb #-1
  29. // CHECK-ERROR: ^
  30. // CHECK-ERROR: error: expected '[su]xt[bhw]' with optional integer in range [0, 4]
  31. // CHECK-ERROR: add x3, x5, w7, uxtb #5
  32. // CHECK-ERROR: ^
  33. // CHECK-ERROR: error: expected 'sxtx' 'uxtx' or 'lsl' with optional integer in range [0, 4]
  34. // CHECK-ERROR: sub x9, x15, x2, uxth #5
  35. // CHECK-ERROR: ^
  36. // Wrong registers on normal variants
  37. add xzr, x3, x5, uxtx
  38. sub x3, xzr, w9, sxth #1
  39. add x1, x2, sp, uxtx
  40. // CHECK-ERROR: error: expected 'lsl', 'lsr' or 'asr' with optional integer in range [0, 63]
  41. // CHECK-ERROR: add xzr, x3, x5, uxtx
  42. // CHECK-ERROR: ^
  43. // CHECK-ERROR: error: invalid operand for instruction
  44. // CHECK-ERROR: sub x3, xzr, w9, sxth #1
  45. // CHECK-ERROR: ^
  46. // CHECK-ERROR: error: expected compatible register, symbol or integer in range [0, 4095]
  47. // CHECK-ERROR: add x1, x2, sp, uxtx
  48. // CHECK-ERROR: ^
  49. // Wrong registers on flag-setting variants
  50. adds sp, x3, w2, uxtb
  51. adds x3, xzr, x9, uxtx
  52. subs x2, x1, sp, uxtx
  53. adds x2, x1, sp, uxtb #2
  54. // CHECK-ERROR: error: invalid operand for instruction
  55. // CHECK-ERROR: adds sp, x3, w2, uxtb
  56. // CHECK-ERROR: ^
  57. // CHECK-ERROR: error: expected 'lsl', 'lsr' or 'asr' with optional integer in range [0, 63]
  58. // CHECK-ERROR: adds x3, xzr, x9, uxtx
  59. // CHECK-ERROR: ^
  60. // CHECK-ERROR: error: expected compatible register, symbol or integer in range [0, 4095]
  61. // CHECK-ERROR: subs x2, x1, sp, uxtx
  62. // CHECK-ERROR: ^
  63. // CHECK-ERROR: error: expected compatible register, symbol or integer in range [0, 4095]
  64. // CHECK-ERROR: adds x2, x1, sp, uxtb #2
  65. // CHECK-ERROR: ^
  66. // Amount not optional if lsl valid and used
  67. add sp, x5, x7, lsl
  68. // CHECK-ERROR: error: expected #imm after shift specifier
  69. // CHECK-ERROR: add sp, x5, x7, lsl
  70. // CHECK-ERROR: ^
  71. //------------------------------------------------------------------------------
  72. // Add/sub (immediate)
  73. //------------------------------------------------------------------------------
  74. // Out of range immediates: more than 12 bits
  75. add w4, w5, #-4097
  76. add w5, w6, #0x1000
  77. add w4, w5, #-4096, lsl #12
  78. add w5, w6, #0x1000, lsl #12
  79. // CHECK-ERROR: error: expected compatible register, symbol or integer in range [0, 4095]
  80. // CHECK-ERROR-NEXT: add w4, w5, #-4097
  81. // CHECK-ERROR-NEXT: ^
  82. // CHECK-ERROR-AARCH64-NEXT: error: expected compatible register, symbol or integer in range [0, 4095]
  83. // CHECK-ERROR-AARCH64-NEXT: add w5, w6, #0x1000
  84. // CHECK-ERROR-AARCH64-NEXT: ^
  85. // CHECK-ERROR-NEXT: error: expected compatible register, symbol or integer in range [0, 4095]
  86. // CHECK-ERROR-NEXT: add w4, w5, #-4096, lsl #12
  87. // CHECK-ERROR-NEXT: ^
  88. // CHECK-ERROR-NEXT: error: expected compatible register, symbol or integer in range [0, 4095]
  89. // CHECK-ERROR-NEXT: add w5, w6, #0x1000, lsl #12
  90. // CHECK-ERROR-NEXT: ^
  91. // Only lsl #0 and lsl #12 are allowed
  92. add w2, w3, #0x1, lsl #1
  93. add w5, w17, #0xfff, lsl #13
  94. add w17, w20, #0x1000, lsl #12
  95. sub xsp, x34, #0x100, lsl #-1
  96. // CHECK-ERROR: error: expected compatible register, symbol or integer in range [0, 4095]
  97. // CHECK-ERROR-NEXT: add w2, w3, #0x1, lsl #1
  98. // CHECK-ERROR-NEXT: ^
  99. // CHECK-ERROR-NEXT: error: expected compatible register, symbol or integer in range [0, 4095]
  100. // CHECK-ERROR-NEXT: add w5, w17, #0xfff, lsl #13
  101. // CHECK-ERROR-NEXT: ^
  102. // CHECK-ERROR-NEXT: error: expected compatible register, symbol or integer in range [0, 4095]
  103. // CHECK-ERROR-NEXT: add w17, w20, #0x1000, lsl #12
  104. // CHECK-ERROR-NEXT: ^
  105. // CHECK-ERROR-NEXT: error: only 'lsl #+N' valid after immediate
  106. // CHECK-ERROR-NEXT: sub xsp, x34, #0x100, lsl #-1
  107. // CHECK-ERROR-NEXT: ^
  108. // Incorrect registers (w31 doesn't exist at all, and 31 decodes to sp for these).
  109. add w31, w20, #1234
  110. add wzr, w20, #0x123
  111. add w20, wzr, #0x321
  112. add wzr, wzr, #0xfff
  113. // CHECK-ERROR: error: invalid operand for instruction
  114. // CHECK-ERROR-NEXT: add w31, w20, #1234
  115. // CHECK-ERROR-NEXT: ^
  116. // CHECK-ERROR-NEXT: error: invalid operand for instruction
  117. // CHECK-ERROR-NEXT: add wzr, w20, #0x123
  118. // CHECK-ERROR-NEXT: ^
  119. // CHECK-ERROR-NEXT: error: invalid operand for instruction
  120. // CHECK-ERROR-NEXT: add w20, wzr, #0x321
  121. // CHECK-ERROR-NEXT: ^
  122. // CHECK-ERROR-NEXT: error: invalid operand for instruction
  123. // CHECK-ERROR-NEXT: add wzr, wzr, #0xfff
  124. // CHECK-ERROR-NEXT: ^
  125. // Mixed register classes
  126. add xsp, w2, #123
  127. sub w2, x30, #32
  128. // CHECK-ERROR: error: invalid operand for instruction
  129. // CHECK-ERROR-NEXT: add xsp, w2, #123
  130. // CHECK-ERROR-NEXT: ^
  131. // CHECK-ERROR-NEXT: error: invalid operand for instruction
  132. // CHECK-ERROR-NEXT: sub w2, x30, #32
  133. // CHECK-ERROR-NEXT: ^
  134. // Out of range immediate
  135. adds w0, w5, #0x10000
  136. // CHECK-ERROR-AARCH64: error: expected compatible register, symbol or integer in range [0, 4095]
  137. // CHECK-ERROR-AARCH64-NEXT: adds w0, w5, #0x10000
  138. // CHECK-ERROR-AARCH64-NEXT: ^
  139. // Wn|WSP should be in second place
  140. adds w4, wzr, #0x123
  141. // ...but wzr is the 31 destination
  142. subs wsp, w5, #123
  143. subs x5, xzr, #0x456, lsl #12
  144. // CHECK-ERROR: error: invalid operand for instruction
  145. // CHECK-ERROR-NEXT: adds w4, wzr, #0x123
  146. // CHECK-ERROR-NEXT: ^
  147. // CHECK-ERROR-NEXT: error: invalid operand for instruction
  148. // CHECK-ERROR-NEXT: subs wsp, w5, #123
  149. // CHECK-ERROR-NEXT: ^
  150. // CHECK-ERROR-NEXT: error: invalid operand for instruction
  151. // CHECK-ERROR-NEXT: subs x5, xzr, #0x456, lsl #12
  152. // CHECK-ERROR-NEXT: ^
  153. // MOV alias should not accept any fiddling
  154. mov x2, xsp, #123
  155. mov wsp, w27, #0xfff, lsl #12
  156. // CHECK-ERROR: error: expected compatible register or logical immediate
  157. // CHECK-ERROR-NEXT: mov x2, xsp, #123
  158. // CHECK-ERROR-NEXT: ^
  159. // CHECK-ERROR-NEXT: error: invalid operand for instruction
  160. // CHECK-ERROR-NEXT: mov wsp, w27, #0xfff, lsl #12
  161. // CHECK-ERROR-NEXT: ^
  162. // A relocation should be provided for symbols
  163. add x3, x9, #variable
  164. add x3, x9, #variable-16
  165. // CHECK-ERROR: error: expected compatible register, symbol or integer in range [0, 4095]
  166. // CHECK-ERROR-NEXT: add x3, x9, #variable
  167. // CHECK-ERROR-NEXT: ^
  168. // CHECK-ERROR-NEXT: error: expected compatible register, symbol or integer in range [0, 4095]
  169. // CHECK-ERROR-NEXT: add x3, x9, #variable-16
  170. // CHECK-ERROR-NEXT: ^
  171. // Relocation on a sub
  172. sub x1, x0, :lo12:loc
  173. // CHECK-ERROR: error: invalid immediate expression
  174. // CHECK-ERROR: sub x1, x0, :lo12:loc
  175. // CHECK-ERROR: ^
  176. //------------------------------------------------------------------------------
  177. // Add-subtract (shifted register)
  178. //------------------------------------------------------------------------------
  179. add wsp, w1, w2, lsr #3
  180. add x4, sp, x9, asr #5
  181. add x9, x10, x5, ror #3
  182. // CHECK-ERROR: error: expected 'sxtx' 'uxtx' or 'lsl' with optional integer in range [0, 4]
  183. // CHECK-ERROR-NEXT: add wsp, w1, w2, lsr #3
  184. // CHECK-ERROR-NEXT: ^
  185. // CHECK-ERROR-NEXT: error: expected 'sxtx' 'uxtx' or 'lsl' with optional integer in range [0, 4]
  186. // CHECK-ERROR-NEXT: add x4, sp, x9, asr #5
  187. // CHECK-ERROR-NEXT: ^
  188. // CHECK-ERROR-NEXT: error: expected 'sxtx' 'uxtx' or 'lsl' with optional integer in range [0, 4]
  189. // CHECK-ERROR-NEXT: add x9, x10, x5, ror #3
  190. // CHECK-ERROR-NEXT: ^
  191. add w1, w2, w3, lsl #-1
  192. add w1, w2, w3, lsl #32
  193. add w1, w2, w3, lsr #-1
  194. add w1, w2, w3, lsr #32
  195. add w1, w2, w3, asr #-1
  196. add w1, w2, w3, asr #32
  197. add x1, x2, x3, lsl #-1
  198. add x1, x2, x3, lsl #64
  199. add x1, x2, x3, lsr #-1
  200. add x1, x2, x3, lsr #64
  201. add x1, x2, x3, asr #-1
  202. add x1, x2, x3, asr #64
  203. // CHECK-ERROR: error: expected integer shift amount
  204. // CHECK-ERROR-NEXT: add w1, w2, w3, lsl #-1
  205. // CHECK-ERROR-NEXT: ^
  206. // CHECK-ERROR-NEXT: error: expected 'sxtx' 'uxtx' or 'lsl' with optional integer in range [0, 4]
  207. // CHECK-ERROR-NEXT: add w1, w2, w3, lsl #32
  208. // CHECK-ERROR-NEXT: ^
  209. // CHECK-ERROR-NEXT: error: expected integer shift amount
  210. // CHECK-ERROR-NEXT: add w1, w2, w3, lsr #-1
  211. // CHECK-ERROR-NEXT: ^
  212. // CHECK-ERROR-NEXT: error: expected 'sxtx' 'uxtx' or 'lsl' with optional integer in range [0, 4]
  213. // CHECK-ERROR-NEXT: add w1, w2, w3, lsr #32
  214. // CHECK-ERROR-NEXT: ^
  215. // CHECK-ERROR-NEXT: error: expected integer shift amount
  216. // CHECK-ERROR-NEXT: add w1, w2, w3, asr #-1
  217. // CHECK-ERROR-NEXT: ^
  218. // CHECK-ERROR-NEXT: error: expected 'sxtx' 'uxtx' or 'lsl' with optional integer in range [0, 4]
  219. // CHECK-ERROR-NEXT: add w1, w2, w3, asr #32
  220. // CHECK-ERROR-NEXT: ^
  221. // CHECK-ERROR-NEXT: error: expected integer shift amount
  222. // CHECK-ERROR-NEXT: add x1, x2, x3, lsl #-1
  223. // CHECK-ERROR-NEXT: ^
  224. // CHECK-ERROR-NEXT: error: expected 'sxtx' 'uxtx' or 'lsl' with optional integer in range [0, 4]
  225. // CHECK-ERROR-NEXT: add x1, x2, x3, lsl #64
  226. // CHECK-ERROR-NEXT: ^
  227. // CHECK-ERROR-NEXT: error: expected integer shift amount
  228. // CHECK-ERROR-NEXT: add x1, x2, x3, lsr #-1
  229. // CHECK-ERROR-NEXT: ^
  230. // CHECK-ERROR-NEXT: error: expected 'sxtx' 'uxtx' or 'lsl' with optional integer in range [0, 4]
  231. // CHECK-ERROR-NEXT: add x1, x2, x3, lsr #64
  232. // CHECK-ERROR-NEXT: ^
  233. // CHECK-ERROR-NEXT: error: expected integer shift amount
  234. // CHECK-ERROR-NEXT: add x1, x2, x3, asr #-1
  235. // CHECK-ERROR-NEXT: ^
  236. // CHECK-ERROR-NEXT: error: expected 'sxtx' 'uxtx' or 'lsl' with optional integer in range [0, 4]
  237. // CHECK-ERROR-NEXT: add x1, x2, x3, asr #64
  238. // CHECK-ERROR-NEXT: ^
  239. adds w1, w2, w3, lsl #-1
  240. adds w1, w2, w3, lsl #32
  241. adds w1, w2, w3, lsr #-1
  242. adds w1, w2, w3, lsr #32
  243. adds w1, w2, w3, asr #-1
  244. adds w1, w2, w3, asr #32
  245. adds x1, x2, x3, lsl #-1
  246. adds x1, x2, x3, lsl #64
  247. adds x1, x2, x3, lsr #-1
  248. adds x1, x2, x3, lsr #64
  249. adds x1, x2, x3, asr #-1
  250. adds x1, x2, x3, asr #64
  251. // CHECK-ERROR: error: expected integer shift amount
  252. // CHECK-ERROR-NEXT: adds w1, w2, w3, lsl #-1
  253. // CHECK-ERROR-NEXT: ^
  254. // CHECK-ERROR-NEXT: error: expected 'sxtx' 'uxtx' or 'lsl' with optional integer in range [0, 4]
  255. // CHECK-ERROR-NEXT: adds w1, w2, w3, lsl #32
  256. // CHECK-ERROR-NEXT: ^
  257. // CHECK-ERROR-NEXT: error: expected integer shift amount
  258. // CHECK-ERROR-NEXT: adds w1, w2, w3, lsr #-1
  259. // CHECK-ERROR-NEXT: ^
  260. // CHECK-ERROR-NEXT: error: expected 'sxtx' 'uxtx' or 'lsl' with optional integer in range [0, 4]
  261. // CHECK-ERROR-NEXT: adds w1, w2, w3, lsr #32
  262. // CHECK-ERROR-NEXT: ^
  263. // CHECK-ERROR-NEXT: error: expected integer shift amount
  264. // CHECK-ERROR-NEXT: adds w1, w2, w3, asr #-1
  265. // CHECK-ERROR-NEXT: ^
  266. // CHECK-ERROR-NEXT: error: expected 'sxtx' 'uxtx' or 'lsl' with optional integer in range [0, 4]
  267. // CHECK-ERROR-NEXT: adds w1, w2, w3, asr #32
  268. // CHECK-ERROR-NEXT: ^
  269. // CHECK-ERROR-NEXT: error: expected integer shift amount
  270. // CHECK-ERROR-NEXT: adds x1, x2, x3, lsl #-1
  271. // CHECK-ERROR-NEXT: ^
  272. // CHECK-ERROR-NEXT: error: expected 'sxtx' 'uxtx' or 'lsl' with optional integer in range [0, 4]
  273. // CHECK-ERROR-NEXT: adds x1, x2, x3, lsl #64
  274. // CHECK-ERROR-NEXT: ^
  275. // CHECK-ERROR-NEXT: error: expected integer shift amount
  276. // CHECK-ERROR-NEXT: adds x1, x2, x3, lsr #-1
  277. // CHECK-ERROR-NEXT: ^
  278. // CHECK-ERROR-NEXT: error: expected 'sxtx' 'uxtx' or 'lsl' with optional integer in range [0, 4]
  279. // CHECK-ERROR-NEXT: adds x1, x2, x3, lsr #64
  280. // CHECK-ERROR-NEXT: ^
  281. // CHECK-ERROR-NEXT: error: expected integer shift amount
  282. // CHECK-ERROR-NEXT: adds x1, x2, x3, asr #-1
  283. // CHECK-ERROR-NEXT: ^
  284. // CHECK-ERROR-NEXT: error: expected 'sxtx' 'uxtx' or 'lsl' with optional integer in range [0, 4]
  285. // CHECK-ERROR-NEXT: adds x1, x2, x3, asr #64
  286. // CHECK-ERROR-NEXT: ^
  287. sub w1, w2, w3, lsl #-1
  288. sub w1, w2, w3, lsl #32
  289. sub w1, w2, w3, lsr #-1
  290. sub w1, w2, w3, lsr #32
  291. sub w1, w2, w3, asr #-1
  292. sub w1, w2, w3, asr #32
  293. sub x1, x2, x3, lsl #-1
  294. sub x1, x2, x3, lsl #64
  295. sub x1, x2, x3, lsr #-1
  296. sub x1, x2, x3, lsr #64
  297. sub x1, x2, x3, asr #-1
  298. sub x1, x2, x3, asr #64
  299. // CHECK-ERROR: error: expected integer shift amount
  300. // CHECK-ERROR-NEXT: sub w1, w2, w3, lsl #-1
  301. // CHECK-ERROR-NEXT: ^
  302. // CHECK-ERROR-NEXT: error: expected 'sxtx' 'uxtx' or 'lsl' with optional integer in range [0, 4]
  303. // CHECK-ERROR-NEXT: sub w1, w2, w3, lsl #32
  304. // CHECK-ERROR-NEXT: ^
  305. // CHECK-ERROR-NEXT: error: expected integer shift amount
  306. // CHECK-ERROR-NEXT: sub w1, w2, w3, lsr #-1
  307. // CHECK-ERROR-NEXT: ^
  308. // CHECK-ERROR-NEXT: error: expected 'sxtx' 'uxtx' or 'lsl' with optional integer in range [0, 4]
  309. // CHECK-ERROR-NEXT: sub w1, w2, w3, lsr #32
  310. // CHECK-ERROR-NEXT: ^
  311. // CHECK-ERROR-NEXT: error: expected integer shift amount
  312. // CHECK-ERROR-NEXT: sub w1, w2, w3, asr #-1
  313. // CHECK-ERROR-NEXT: ^
  314. // CHECK-ERROR-NEXT: error: expected 'sxtx' 'uxtx' or 'lsl' with optional integer in range [0, 4]
  315. // CHECK-ERROR-NEXT: sub w1, w2, w3, asr #32
  316. // CHECK-ERROR-NEXT: ^
  317. // CHECK-ERROR-NEXT: error: expected integer shift amount
  318. // CHECK-ERROR-NEXT: sub x1, x2, x3, lsl #-1
  319. // CHECK-ERROR-NEXT: ^
  320. // CHECK-ERROR-NEXT: error: expected 'sxtx' 'uxtx' or 'lsl' with optional integer in range [0, 4]
  321. // CHECK-ERROR-NEXT: sub x1, x2, x3, lsl #64
  322. // CHECK-ERROR-NEXT: ^
  323. // CHECK-ERROR-NEXT: error: expected integer shift amount
  324. // CHECK-ERROR-NEXT: sub x1, x2, x3, lsr #-1
  325. // CHECK-ERROR-NEXT: ^
  326. // CHECK-ERROR-NEXT: error: expected 'sxtx' 'uxtx' or 'lsl' with optional integer in range [0, 4]
  327. // CHECK-ERROR-NEXT: sub x1, x2, x3, lsr #64
  328. // CHECK-ERROR-NEXT: ^
  329. // CHECK-ERROR-NEXT: error: expected integer shift amount
  330. // CHECK-ERROR-NEXT: sub x1, x2, x3, asr #-1
  331. // CHECK-ERROR-NEXT: ^
  332. // CHECK-ERROR-NEXT: error: expected 'sxtx' 'uxtx' or 'lsl' with optional integer in range [0, 4]
  333. // CHECK-ERROR-NEXT: sub x1, x2, x3, asr #64
  334. // CHECK-ERROR-NEXT: ^
  335. subs w1, w2, w3, lsl #-1
  336. subs w1, w2, w3, lsl #32
  337. subs w1, w2, w3, lsr #-1
  338. subs w1, w2, w3, lsr #32
  339. subs w1, w2, w3, asr #-1
  340. subs w1, w2, w3, asr #32
  341. subs x1, x2, x3, lsl #-1
  342. subs x1, x2, x3, lsl #64
  343. subs x1, x2, x3, lsr #-1
  344. subs x1, x2, x3, lsr #64
  345. subs x1, x2, x3, asr #-1
  346. subs x1, x2, x3, asr #64
  347. // CHECK-ERROR: error: expected integer shift amount
  348. // CHECK-ERROR-NEXT: subs w1, w2, w3, lsl #-1
  349. // CHECK-ERROR-NEXT: ^
  350. // CHECK-ERROR-NEXT: error: expected 'sxtx' 'uxtx' or 'lsl' with optional integer in range [0, 4]
  351. // CHECK-ERROR-NEXT: subs w1, w2, w3, lsl #32
  352. // CHECK-ERROR-NEXT: ^
  353. // CHECK-ERROR-NEXT: error: expected integer shift amount
  354. // CHECK-ERROR-NEXT: subs w1, w2, w3, lsr #-1
  355. // CHECK-ERROR-NEXT: ^
  356. // CHECK-ERROR-NEXT: error: expected 'sxtx' 'uxtx' or 'lsl' with optional integer in range [0, 4]
  357. // CHECK-ERROR-NEXT: subs w1, w2, w3, lsr #32
  358. // CHECK-ERROR-NEXT: ^
  359. // CHECK-ERROR-NEXT: error: expected integer shift amount
  360. // CHECK-ERROR-NEXT: subs w1, w2, w3, asr #-1
  361. // CHECK-ERROR-NEXT: ^
  362. // CHECK-ERROR-NEXT: error: expected 'sxtx' 'uxtx' or 'lsl' with optional integer in range [0, 4]
  363. // CHECK-ERROR-NEXT: subs w1, w2, w3, asr #32
  364. // CHECK-ERROR-NEXT: ^
  365. // CHECK-ERROR-NEXT: error: expected integer shift amount
  366. // CHECK-ERROR-NEXT: subs x1, x2, x3, lsl #-1
  367. // CHECK-ERROR-NEXT: ^
  368. // CHECK-ERROR-NEXT: error: expected 'sxtx' 'uxtx' or 'lsl' with optional integer in range [0, 4]
  369. // CHECK-ERROR-NEXT: subs x1, x2, x3, lsl #64
  370. // CHECK-ERROR-NEXT: ^
  371. // CHECK-ERROR-NEXT: error: expected integer shift amount
  372. // CHECK-ERROR-NEXT: subs x1, x2, x3, lsr #-1
  373. // CHECK-ERROR-NEXT: ^
  374. // CHECK-ERROR-NEXT: error: expected 'sxtx' 'uxtx' or 'lsl' with optional integer in range [0, 4]
  375. // CHECK-ERROR-NEXT: subs x1, x2, x3, lsr #64
  376. // CHECK-ERROR-NEXT: ^
  377. // CHECK-ERROR-NEXT: error: expected integer shift amount
  378. // CHECK-ERROR-NEXT: subs x1, x2, x3, asr #-1
  379. // CHECK-ERROR-NEXT: ^
  380. // CHECK-ERROR-NEXT: error: expected 'sxtx' 'uxtx' or 'lsl' with optional integer in range [0, 4]
  381. // CHECK-ERROR-NEXT: subs x1, x2, x3, asr #64
  382. // CHECK-ERROR-NEXT: ^
  383. cmn w9, w10, lsl #-1
  384. cmn w9, w10, lsl #32
  385. cmn w11, w12, lsr #-1
  386. cmn w11, w12, lsr #32
  387. cmn w19, wzr, asr #-1
  388. cmn wzr, wzr, asr #32
  389. cmn x9, x10, lsl #-1
  390. cmn x9, x10, lsl #64
  391. cmn x11, x12, lsr #-1
  392. cmn x11, x12, lsr #64
  393. cmn x19, xzr, asr #-1
  394. cmn xzr, xzr, asr #64
  395. // CHECK-ERROR: error: expected integer shift amount
  396. // CHECK-ERROR-NEXT: cmn w9, w10, lsl #-1
  397. // CHECK-ERROR-NEXT: ^
  398. // CHECK-ERROR-NEXT: error: expected 'sxtx' 'uxtx' or 'lsl' with optional integer in range [0, 4]
  399. // CHECK-ERROR-NEXT: cmn w9, w10, lsl #32
  400. // CHECK-ERROR-NEXT: ^
  401. // CHECK-ERROR-NEXT: error: expected integer shift amount
  402. // CHECK-ERROR-NEXT: cmn w11, w12, lsr #-1
  403. // CHECK-ERROR-NEXT: ^
  404. // CHECK-ERROR-NEXT: error: expected 'sxtx' 'uxtx' or 'lsl' with optional integer in range [0, 4]
  405. // CHECK-ERROR-NEXT: cmn w11, w12, lsr #32
  406. // CHECK-ERROR-NEXT: ^
  407. // CHECK-ERROR-NEXT: error: expected integer shift amount
  408. // CHECK-ERROR-NEXT: cmn w19, wzr, asr #-1
  409. // CHECK-ERROR-NEXT: ^
  410. // CHECK-ERROR-NEXT: error: expected 'lsl', 'lsr' or 'asr' with optional integer in range [0, 31]
  411. // CHECK-ERROR-NEXT: cmn wzr, wzr, asr #32
  412. // CHECK-ERROR-NEXT: ^
  413. // CHECK-ERROR-NEXT: error: expected integer shift amount
  414. // CHECK-ERROR-NEXT: cmn x9, x10, lsl #-1
  415. // CHECK-ERROR-NEXT: ^
  416. // CHECK-ERROR-NEXT: error: expected 'sxtx' 'uxtx' or 'lsl' with optional integer in range [0, 4]
  417. // CHECK-ERROR-NEXT: cmn x9, x10, lsl #64
  418. // CHECK-ERROR-NEXT: ^
  419. // CHECK-ERROR-NEXT: error: expected integer shift amount
  420. // CHECK-ERROR-NEXT: cmn x11, x12, lsr #-1
  421. // CHECK-ERROR-NEXT: ^
  422. // CHECK-ERROR-NEXT: error: expected 'sxtx' 'uxtx' or 'lsl' with optional integer in range [0, 4]
  423. // CHECK-ERROR-NEXT: cmn x11, x12, lsr #64
  424. // CHECK-ERROR-NEXT: ^
  425. // CHECK-ERROR-NEXT: error: expected integer shift amount
  426. // CHECK-ERROR-NEXT: cmn x19, xzr, asr #-1
  427. // CHECK-ERROR-NEXT: ^
  428. // CHECK-ERROR-NEXT: error: expected 'lsl', 'lsr' or 'asr' with optional integer in range [0, 63]
  429. // CHECK-ERROR-NEXT: cmn xzr, xzr, asr #64
  430. // CHECK-ERROR-NEXT: ^
  431. cmp w9, w10, lsl #-1
  432. cmp w9, w10, lsl #32
  433. cmp w11, w12, lsr #-1
  434. cmp w11, w12, lsr #32
  435. cmp w19, wzr, asr #-1
  436. cmp wzr, wzr, asr #32
  437. cmp x9, x10, lsl #-1
  438. cmp x9, x10, lsl #64
  439. cmp x11, x12, lsr #-1
  440. cmp x11, x12, lsr #64
  441. cmp x19, xzr, asr #-1
  442. cmp xzr, xzr, asr #64
  443. // CHECK-ERROR: error: expected integer shift amount
  444. // CHECK-ERROR-NEXT: cmp w9, w10, lsl #-1
  445. // CHECK-ERROR-NEXT: ^
  446. // CHECK-ERROR-NEXT: error: expected 'sxtx' 'uxtx' or 'lsl' with optional integer in range [0, 4]
  447. // CHECK-ERROR-NEXT: cmp w9, w10, lsl #32
  448. // CHECK-ERROR-NEXT: ^
  449. // CHECK-ERROR-NEXT: error: expected integer shift amount
  450. // CHECK-ERROR-NEXT: cmp w11, w12, lsr #-1
  451. // CHECK-ERROR-NEXT: ^
  452. // CHECK-ERROR-NEXT: error: expected 'sxtx' 'uxtx' or 'lsl' with optional integer in range [0, 4]
  453. // CHECK-ERROR-NEXT: cmp w11, w12, lsr #32
  454. // CHECK-ERROR-NEXT: ^
  455. // CHECK-ERROR-NEXT: error: expected integer shift amount
  456. // CHECK-ERROR-NEXT: cmp w19, wzr, asr #-1
  457. // CHECK-ERROR-NEXT: ^
  458. // CHECK-ERROR-NEXT: error: expected 'lsl', 'lsr' or 'asr' with optional integer in range [0, 31]
  459. // CHECK-ERROR-NEXT: cmp wzr, wzr, asr #32
  460. // CHECK-ERROR-NEXT: ^
  461. // CHECK-ERROR-NEXT: error: expected integer shift amount
  462. // CHECK-ERROR-NEXT: cmp x9, x10, lsl #-1
  463. // CHECK-ERROR-NEXT: ^
  464. // CHECK-ERROR-NEXT: error: expected 'sxtx' 'uxtx' or 'lsl' with optional integer in range [0, 4]
  465. // CHECK-ERROR-NEXT: cmp x9, x10, lsl #64
  466. // CHECK-ERROR-NEXT: ^
  467. // CHECK-ERROR-NEXT: error: expected integer shift amount
  468. // CHECK-ERROR-NEXT: cmp x11, x12, lsr #-1
  469. // CHECK-ERROR-NEXT: ^
  470. // CHECK-ERROR-NEXT: error: expected 'sxtx' 'uxtx' or 'lsl' with optional integer in range [0, 4]
  471. // CHECK-ERROR-NEXT: cmp x11, x12, lsr #64
  472. // CHECK-ERROR-NEXT: ^
  473. // CHECK-ERROR-NEXT: error: expected integer shift amount
  474. // CHECK-ERROR-NEXT: cmp x19, xzr, asr #-1
  475. // CHECK-ERROR-NEXT: ^
  476. // CHECK-ERROR-NEXT: error: expected 'lsl', 'lsr' or 'asr' with optional integer in range [0, 63]
  477. // CHECK-ERROR-NEXT: cmp xzr, xzr, asr #64
  478. // CHECK-ERROR-NEXT: ^
  479. neg w9, w10, lsl #-1
  480. neg w9, w10, lsl #32
  481. neg w11, w12, lsr #-1
  482. neg w11, w12, lsr #32
  483. neg w19, wzr, asr #-1
  484. neg wzr, wzr, asr #32
  485. neg x9, x10, lsl #-1
  486. neg x9, x10, lsl #64
  487. neg x11, x12, lsr #-1
  488. neg x11, x12, lsr #64
  489. neg x19, xzr, asr #-1
  490. neg xzr, xzr, asr #64
  491. // CHECK-ERROR: error: expected integer shift amount
  492. // CHECK-ERROR-NEXT: neg w9, w10, lsl #-1
  493. // CHECK-ERROR-NEXT: ^
  494. // CHECK-ERROR-NEXT: error: expected 'lsl', 'lsr' or 'asr' with optional integer in range [0, 31]
  495. // CHECK-ERROR-NEXT: neg w9, w10, lsl #32
  496. // CHECK-ERROR-NEXT: ^
  497. // CHECK-ERROR-NEXT: error: expected integer shift amount
  498. // CHECK-ERROR-NEXT: neg w11, w12, lsr #-1
  499. // CHECK-ERROR-NEXT: ^
  500. // CHECK-ERROR-NEXT: error: expected 'lsl', 'lsr' or 'asr' with optional integer in range [0, 31]
  501. // CHECK-ERROR-NEXT: neg w11, w12, lsr #32
  502. // CHECK-ERROR-NEXT: ^
  503. // CHECK-ERROR-NEXT: error: expected integer shift amount
  504. // CHECK-ERROR-NEXT: neg w19, wzr, asr #-1
  505. // CHECK-ERROR-NEXT: ^
  506. // CHECK-ERROR-NEXT: error: expected 'lsl', 'lsr' or 'asr' with optional integer in range [0, 31]
  507. // CHECK-ERROR-NEXT: neg wzr, wzr, asr #32
  508. // CHECK-ERROR-NEXT: ^
  509. // CHECK-ERROR-NEXT: error: expected integer shift amount
  510. // CHECK-ERROR-NEXT: neg x9, x10, lsl #-1
  511. // CHECK-ERROR-NEXT: ^
  512. // CHECK-ERROR-NEXT: error: expected 'lsl', 'lsr' or 'asr' with optional integer in range [0, 63]
  513. // CHECK-ERROR-NEXT: neg x9, x10, lsl #64
  514. // CHECK-ERROR-NEXT: ^
  515. // CHECK-ERROR-NEXT: error: expected integer shift amount
  516. // CHECK-ERROR-NEXT: neg x11, x12, lsr #-1
  517. // CHECK-ERROR-NEXT: ^
  518. // CHECK-ERROR-NEXT: error: expected 'lsl', 'lsr' or 'asr' with optional integer in range [0, 63]
  519. // CHECK-ERROR-NEXT: neg x11, x12, lsr #64
  520. // CHECK-ERROR-NEXT: ^
  521. // CHECK-ERROR-NEXT: error: expected integer shift amount
  522. // CHECK-ERROR-NEXT: neg x19, xzr, asr #-1
  523. // CHECK-ERROR-NEXT: ^
  524. // CHECK-ERROR-NEXT: error: expected 'lsl', 'lsr' or 'asr' with optional integer in range [0, 63]
  525. // CHECK-ERROR-NEXT: neg xzr, xzr, asr #64
  526. // CHECK-ERROR-NEXT: ^
  527. negs w9, w10, lsl #-1
  528. negs w9, w10, lsl #32
  529. negs w11, w12, lsr #-1
  530. negs w11, w12, lsr #32
  531. negs w19, wzr, asr #-1
  532. negs wzr, wzr, asr #32
  533. negs x9, x10, lsl #-1
  534. negs x9, x10, lsl #64
  535. negs x11, x12, lsr #-1
  536. negs x11, x12, lsr #64
  537. negs x19, xzr, asr #-1
  538. negs xzr, xzr, asr #64
  539. // CHECK-ERROR: error: expected integer shift amount
  540. // CHECK-ERROR-NEXT: negs w9, w10, lsl #-1
  541. // CHECK-ERROR-NEXT: ^
  542. // CHECK-ERROR-NEXT: error: expected 'lsl', 'lsr' or 'asr' with optional integer in range [0, 31]
  543. // CHECK-ERROR-NEXT: negs w9, w10, lsl #32
  544. // CHECK-ERROR-NEXT: ^
  545. // CHECK-ERROR-NEXT: error: expected integer shift amount
  546. // CHECK-ERROR-NEXT: negs w11, w12, lsr #-1
  547. // CHECK-ERROR-NEXT: ^
  548. // CHECK-ERROR-NEXT: error: expected 'lsl', 'lsr' or 'asr' with optional integer in range [0, 31]
  549. // CHECK-ERROR-NEXT: negs w11, w12, lsr #32
  550. // CHECK-ERROR-NEXT: ^
  551. // CHECK-ERROR-NEXT: error: expected integer shift amount
  552. // CHECK-ERROR-NEXT: negs w19, wzr, asr #-1
  553. // CHECK-ERROR-NEXT: ^
  554. // CHECK-ERROR-NEXT: error: expected 'lsl', 'lsr' or 'asr' with optional integer in range [0, 31]
  555. // CHECK-ERROR-NEXT: negs wzr, wzr, asr #32
  556. // CHECK-ERROR-NEXT: ^
  557. // CHECK-ERROR-NEXT: error: expected integer shift amount
  558. // CHECK-ERROR-NEXT: negs x9, x10, lsl #-1
  559. // CHECK-ERROR-NEXT: ^
  560. // CHECK-ERROR-NEXT: error: expected 'lsl', 'lsr' or 'asr' with optional integer in range [0, 63]
  561. // CHECK-ERROR-NEXT: negs x9, x10, lsl #64
  562. // CHECK-ERROR-NEXT: ^
  563. // CHECK-ERROR-NEXT: error: expected integer shift amount
  564. // CHECK-ERROR-NEXT: negs x11, x12, lsr #-1
  565. // CHECK-ERROR-NEXT: ^
  566. // CHECK-ERROR-NEXT: error: expected 'lsl', 'lsr' or 'asr' with optional integer in range [0, 63]
  567. // CHECK-ERROR-NEXT: negs x11, x12, lsr #64
  568. // CHECK-ERROR-NEXT: ^
  569. // CHECK-ERROR-NEXT: error: expected integer shift amount
  570. // CHECK-ERROR-NEXT: negs x19, xzr, asr #-1
  571. // CHECK-ERROR-NEXT: ^
  572. // CHECK-ERROR-NEXT: error: expected 'lsl', 'lsr' or 'asr' with optional integer in range [0, 63]
  573. // CHECK-ERROR-NEXT: negs xzr, xzr, asr #64
  574. // CHECK-ERROR-NEXT: ^
  575. //------------------------------------------------------------------------------
  576. // Add-subtract (shifted register)
  577. //------------------------------------------------------------------------------
  578. adc wsp, w3, w5
  579. adc w1, wsp, w2
  580. adc w0, w10, wsp
  581. // CHECK-ERROR: error: invalid operand for instruction
  582. // CHECK-ERROR-NEXT: adc wsp, w3, w5
  583. // CHECK-ERROR-NEXT: ^
  584. // CHECK-ERROR-NEXT: error: invalid operand for instruction
  585. // CHECK-ERROR-NEXT: adc w1, wsp, w2
  586. // CHECK-ERROR-NEXT: ^
  587. // CHECK-ERROR-NEXT: error: invalid operand for instruction
  588. // CHECK-ERROR-NEXT: adc w0, w10, wsp
  589. // CHECK-ERROR-NEXT: ^
  590. adc sp, x3, x5
  591. adc x1, sp, x2
  592. adc x0, x10, sp
  593. // CHECK-ERROR: error: invalid operand for instruction
  594. // CHECK-ERROR-NEXT: adc sp, x3, x5
  595. // CHECK-ERROR-NEXT: ^
  596. // CHECK-ERROR-NEXT: error: invalid operand for instruction
  597. // CHECK-ERROR-NEXT: adc x1, sp, x2
  598. // CHECK-ERROR-NEXT: ^
  599. // CHECK-ERROR-NEXT: error: invalid operand for instruction
  600. // CHECK-ERROR-NEXT: adc x0, x10, sp
  601. // CHECK-ERROR-NEXT: ^
  602. adcs wsp, w3, w5
  603. adcs w1, wsp, w2
  604. adcs w0, w10, wsp
  605. // CHECK-ERROR: error: invalid operand for instruction
  606. // CHECK-ERROR-NEXT: adcs wsp, w3, w5
  607. // CHECK-ERROR-NEXT: ^
  608. // CHECK-ERROR-NEXT: error: invalid operand for instruction
  609. // CHECK-ERROR-NEXT: adcs w1, wsp, w2
  610. // CHECK-ERROR-NEXT: ^
  611. // CHECK-ERROR-NEXT: error: invalid operand for instruction
  612. // CHECK-ERROR-NEXT: adcs w0, w10, wsp
  613. // CHECK-ERROR-NEXT: ^
  614. adcs sp, x3, x5
  615. adcs x1, sp, x2
  616. adcs x0, x10, sp
  617. // CHECK-ERROR: error: invalid operand for instruction
  618. // CHECK-ERROR-NEXT: adcs sp, x3, x5
  619. // CHECK-ERROR-NEXT: ^
  620. // CHECK-ERROR-NEXT: error: invalid operand for instruction
  621. // CHECK-ERROR-NEXT: adcs x1, sp, x2
  622. // CHECK-ERROR-NEXT: ^
  623. // CHECK-ERROR-NEXT: error: invalid operand for instruction
  624. // CHECK-ERROR-NEXT: adcs x0, x10, sp
  625. // CHECK-ERROR-NEXT: ^
  626. sbc wsp, w3, w5
  627. sbc w1, wsp, w2
  628. sbc w0, w10, wsp
  629. // CHECK-ERROR: error: invalid operand for instruction
  630. // CHECK-ERROR-NEXT: sbc wsp, w3, w5
  631. // CHECK-ERROR-NEXT: ^
  632. // CHECK-ERROR-NEXT: error: invalid operand for instruction
  633. // CHECK-ERROR-NEXT: sbc w1, wsp, w2
  634. // CHECK-ERROR-NEXT: ^
  635. // CHECK-ERROR-NEXT: error: invalid operand for instruction
  636. // CHECK-ERROR-NEXT: sbc w0, w10, wsp
  637. // CHECK-ERROR-NEXT: ^
  638. sbc sp, x3, x5
  639. sbc x1, sp, x2
  640. sbc x0, x10, sp
  641. // CHECK-ERROR: error: invalid operand for instruction
  642. // CHECK-ERROR-NEXT: sbc sp, x3, x5
  643. // CHECK-ERROR-NEXT: ^
  644. // CHECK-ERROR-NEXT: error: invalid operand for instruction
  645. // CHECK-ERROR-NEXT: sbc x1, sp, x2
  646. // CHECK-ERROR-NEXT: ^
  647. // CHECK-ERROR-NEXT: error: invalid operand for instruction
  648. // CHECK-ERROR-NEXT: sbc x0, x10, sp
  649. // CHECK-ERROR-NEXT: ^
  650. sbcs wsp, w3, w5
  651. sbcs w1, wsp, w2
  652. sbcs w0, w10, wsp
  653. // CHECK-ERROR: error: invalid operand for instruction
  654. // CHECK-ERROR-NEXT: sbcs wsp, w3, w5
  655. // CHECK-ERROR-NEXT: ^
  656. // CHECK-ERROR-NEXT: error: invalid operand for instruction
  657. // CHECK-ERROR-NEXT: sbcs w1, wsp, w2
  658. // CHECK-ERROR-NEXT: ^
  659. // CHECK-ERROR-NEXT: error: invalid operand for instruction
  660. // CHECK-ERROR-NEXT: sbcs w0, w10, wsp
  661. // CHECK-ERROR-NEXT: ^
  662. sbcs sp, x3, x5
  663. sbcs x1, sp, x2
  664. sbcs x0, x10, sp
  665. // CHECK-ERROR: error: invalid operand for instruction
  666. // CHECK-ERROR-NEXT: sbcs sp, x3, x5
  667. // CHECK-ERROR-NEXT: ^
  668. // CHECK-ERROR-NEXT: error: invalid operand for instruction
  669. // CHECK-ERROR-NEXT: sbcs x1, sp, x2
  670. // CHECK-ERROR-NEXT: ^
  671. // CHECK-ERROR-NEXT: error: invalid operand for instruction
  672. // CHECK-ERROR-NEXT: sbcs x0, x10, sp
  673. // CHECK-ERROR-NEXT: ^
  674. ngc wsp, w3
  675. ngc w9, wsp
  676. ngc sp, x9
  677. ngc x2, sp
  678. // CHECK-ERROR: error: invalid operand for instruction
  679. // CHECK-ERROR-NEXT: ngc wsp, w3
  680. // CHECK-ERROR-NEXT: ^
  681. // CHECK-ERROR-NEXT: error: invalid operand for instruction
  682. // CHECK-ERROR-NEXT: ngc w9, wsp
  683. // CHECK-ERROR-NEXT: ^
  684. // CHECK-ERROR-NEXT: error: invalid operand for instruction
  685. // CHECK-ERROR-NEXT: ngc sp, x9
  686. // CHECK-ERROR-NEXT: ^
  687. // CHECK-ERROR-NEXT: error: invalid operand for instruction
  688. // CHECK-ERROR-NEXT: ngc x2, sp
  689. // CHECK-ERROR-NEXT: ^
  690. ngcs wsp, w3
  691. ngcs w9, wsp
  692. ngcs sp, x9
  693. ngcs x2, sp
  694. // CHECK-ERROR: error: invalid operand for instruction
  695. // CHECK-ERROR-NEXT: ngcs wsp, w3
  696. // CHECK-ERROR-NEXT: ^
  697. // CHECK-ERROR-NEXT: error: invalid operand for instruction
  698. // CHECK-ERROR-NEXT: ngcs w9, wsp
  699. // CHECK-ERROR-NEXT: ^
  700. // CHECK-ERROR-NEXT: error: invalid operand for instruction
  701. // CHECK-ERROR-NEXT: ngcs sp, x9
  702. // CHECK-ERROR-NEXT: ^
  703. // CHECK-ERROR-NEXT: error: invalid operand for instruction
  704. // CHECK-ERROR-NEXT: ngcs x2, sp
  705. // CHECK-ERROR-NEXT: ^
  706. //------------------------------------------------------------------------------
  707. // Logical (immediates)
  708. //------------------------------------------------------------------------------
  709. and w2, w3, #4294967296
  710. eor w2, w3, #4294967296
  711. orr w2, w3, #4294967296
  712. ands w2, w3, #4294967296
  713. // CHECK-ERROR: error: expected compatible register or logical immediate
  714. // CHECK-ERROR-NEXT: and w2, w3, #4294967296
  715. // CHECK-ERROR-NEXT: ^
  716. // CHECK-ERROR-NEXT: error: expected compatible register or logical immediate
  717. // CHECK-ERROR-NEXT: eor w2, w3, #4294967296
  718. // CHECK-ERROR-NEXT: ^
  719. // CHECK-ERROR-NEXT: error: expected compatible register or logical immediate
  720. // CHECK-ERROR-NEXT: orr w2, w3, #4294967296
  721. // CHECK-ERROR-NEXT: ^
  722. // CHECK-ERROR-NEXT: error: expected compatible register or logical immediate
  723. // CHECK-ERROR-NEXT: ands w2, w3, #4294967296
  724. // CHECK-ERROR-NEXT: ^
  725. //------------------------------------------------------------------------------
  726. // Bitfield
  727. //------------------------------------------------------------------------------
  728. sbfm x3, w13, #0, #0
  729. sbfm w12, x9, #0, #0
  730. sbfm sp, x3, #3, #5
  731. sbfm w3, wsp, #1, #9
  732. sbfm x9, x5, #-1, #0
  733. sbfm x9, x5, #0, #-1
  734. // CHECK-ERROR: error: invalid operand for instruction
  735. // CHECK-ERROR-NEXT: sbfm x3, w13, #0, #0
  736. // CHECK-ERROR-NEXT: ^
  737. // CHECK-ERROR-NEXT: error: invalid operand for instruction
  738. // CHECK-ERROR-NEXT: sbfm w12, x9, #0, #0
  739. // CHECK-ERROR-NEXT: ^
  740. // CHECK-ERROR-NEXT: error: invalid operand for instruction
  741. // CHECK-ERROR-NEXT: sbfm sp, x3, #3, #5
  742. // CHECK-ERROR-NEXT: ^
  743. // CHECK-ERROR-NEXT: error: invalid operand for instruction
  744. // CHECK-ERROR-NEXT: sbfm w3, wsp, #1, #9
  745. // CHECK-ERROR-NEXT: ^
  746. // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 63]
  747. // CHECK-ERROR-NEXT: sbfm x9, x5, #-1, #0
  748. // CHECK-ERROR-NEXT: ^
  749. // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 63]
  750. // CHECK-ERROR-NEXT: sbfm x9, x5, #0, #-1
  751. // CHECK-ERROR-NEXT: ^
  752. sbfm w3, w5, #32, #1
  753. sbfm w7, w11, #19, #32
  754. sbfm x29, x30, #64, #0
  755. sbfm x10, x20, #63, #64
  756. // CHECK-ERROR: error: {{expected|immediate must be an}} integer in range [0, 31]
  757. // CHECK-ERROR-NEXT: sbfm w3, w5, #32, #1
  758. // CHECK-ERROR-NEXT: ^
  759. // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 31]
  760. // CHECK-ERROR-NEXT: sbfm w7, w11, #19, #32
  761. // CHECK-ERROR-NEXT: ^
  762. // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 63]
  763. // CHECK-ERROR-NEXT: sbfm x29, x30, #64, #0
  764. // CHECK-ERROR-NEXT: ^
  765. // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 63]
  766. // CHECK-ERROR-NEXT: sbfm x10, x20, #63, #64
  767. // CHECK-ERROR-NEXT: ^
  768. ubfm w3, w5, #32, #1
  769. ubfm w7, w11, #19, #32
  770. ubfm x29, x30, #64, #0
  771. ubfm x10, x20, #63, #64
  772. // CHECK-ERROR: error: {{expected|immediate must be an}} integer in range [0, 31]
  773. // CHECK-ERROR-NEXT: ubfm w3, w5, #32, #1
  774. // CHECK-ERROR-NEXT: ^
  775. // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 31]
  776. // CHECK-ERROR-NEXT: ubfm w7, w11, #19, #32
  777. // CHECK-ERROR-NEXT: ^
  778. // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 63]
  779. // CHECK-ERROR-NEXT: ubfm x29, x30, #64, #0
  780. // CHECK-ERROR-NEXT: ^
  781. // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 63]
  782. // CHECK-ERROR-NEXT: ubfm x10, x20, #63, #64
  783. // CHECK-ERROR-NEXT: ^
  784. bfm w3, w5, #32, #1
  785. bfm w7, w11, #19, #32
  786. bfm x29, x30, #64, #0
  787. bfm x10, x20, #63, #64
  788. // CHECK-ERROR: error: {{expected|immediate must be an}} integer in range [0, 31]
  789. // CHECK-ERROR-NEXT: bfm w3, w5, #32, #1
  790. // CHECK-ERROR-NEXT: ^
  791. // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 31]
  792. // CHECK-ERROR-NEXT: bfm w7, w11, #19, #32
  793. // CHECK-ERROR-NEXT: ^
  794. // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 63]
  795. // CHECK-ERROR-NEXT: bfm x29, x30, #64, #0
  796. // CHECK-ERROR-NEXT: ^
  797. // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 63]
  798. // CHECK-ERROR-NEXT: bfm x10, x20, #63, #64
  799. // CHECK-ERROR-NEXT: ^
  800. sxtb x3, x2
  801. sxth xzr, xzr
  802. sxtw x3, x5
  803. // CHECK-ERROR-AARCH64: error: invalid operand for instruction
  804. // CHECK-ERROR-AARCH64-NEXT: sxtb x3, x2
  805. // CHECK-ERROR-AARCH64-NEXT: ^
  806. // CHECK-ERROR-AARCH64-NEXT: error: invalid operand for instruction
  807. // CHECK-ERROR-AARCH64-NEXT: sxth xzr, xzr
  808. // CHECK-ERROR-AARCH64-NEXT: ^
  809. // CHECK-ERROR-AARCH64-NEXT: error: invalid operand for instruction
  810. // CHECK-ERROR-AARCH64-NEXT: sxtw x3, x5
  811. // CHECK-ERROR-AARCH64-NEXT: ^
  812. uxtb x3, x12
  813. uxth x5, x9
  814. uxtw x3, x5
  815. uxtb x2, sp
  816. uxtb sp, xzr
  817. // CHECK-ERROR: error: invalid operand for instruction
  818. // CHECK-ERROR-NEXT: uxtb x3, x12
  819. // CHECK-ERROR-NEXT: ^
  820. // CHECK-ERROR-NEXT: error: invalid operand for instruction
  821. // CHECK-ERROR-NEXT: uxth x5, x9
  822. // CHECK-ERROR-NEXT: ^
  823. // CHECK-ERROR-AARCH64-NEXT: error: invalid instruction
  824. // CHECK-ERROR-AARCH64-NEXT: uxtw x3, x5
  825. // CHECK-ERROR-AARCH64-NEXT: ^
  826. // CHECK-ERROR-NEXT: error: invalid operand for instruction
  827. // CHECK-ERROR-NEXT: uxtb x2, sp
  828. // CHECK-ERROR-NEXT: ^
  829. // CHECK-ERROR-NEXT: error: invalid operand for instruction
  830. // CHECK-ERROR-NEXT: uxtb sp, xzr
  831. // CHECK-ERROR-NEXT: ^
  832. asr x3, w2, #1
  833. asr sp, x2, #1
  834. asr x25, x26, #-1
  835. asr x25, x26, #64
  836. asr w9, w8, #32
  837. // CHECK-ERROR: error: invalid operand for instruction
  838. // CHECK-ERROR-NEXT: asr x3, w2, #1
  839. // CHECK-ERROR-NEXT: ^
  840. // CHECK-ERROR-NEXT: error: invalid operand for instruction
  841. // CHECK-ERROR-NEXT: asr sp, x2, #1
  842. // CHECK-ERROR-NEXT: ^
  843. // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 63]
  844. // CHECK-ERROR-NEXT: asr x25, x26, #-1
  845. // CHECK-ERROR-NEXT: ^
  846. // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 63]
  847. // CHECK-ERROR-NEXT: asr x25, x26, #64
  848. // CHECK-ERROR-NEXT: ^
  849. // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 31]
  850. // CHECK-ERROR-NEXT: asr w9, w8, #32
  851. // CHECK-ERROR-NEXT: ^
  852. sbfiz w1, w2, #0, #0
  853. sbfiz wsp, w9, #0, #1
  854. sbfiz w9, w10, #32, #1
  855. sbfiz w11, w12, #32, #0
  856. sbfiz w9, w10, #10, #23
  857. sbfiz x3, x5, #12, #53
  858. sbfiz sp, x3, #7, #6
  859. sbfiz w3, wsp, #10, #8
  860. // CHECK-ERROR-AARCH64: error: expected integer in range [<lsb>, 31]
  861. // CHECK-ERROR-ARM64: error: expected integer in range [1, 32]
  862. // CHECK-ERROR-NEXT: sbfiz w1, w2, #0, #0
  863. // CHECK-ERROR-NEXT: ^
  864. // CHECK-ERROR-NEXT: error: invalid operand for instruction
  865. // CHECK-ERROR-NEXT: sbfiz wsp, w9, #0, #1
  866. // CHECK-ERROR-NEXT: ^
  867. // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 31]
  868. // CHECK-ERROR-NEXT: sbfiz w9, w10, #32, #1
  869. // CHECK-ERROR-NEXT: ^
  870. // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 31]
  871. // CHECK-ERROR-NEXT: sbfiz w11, w12, #32, #0
  872. // CHECK-ERROR-NEXT: ^
  873. // CHECK-ERROR-NEXT: error: requested insert overflows register
  874. // CHECK-ERROR-NEXT: sbfiz w9, w10, #10, #23
  875. // CHECK-ERROR-NEXT: ^
  876. // CHECK-ERROR-NEXT: error: requested insert overflows register
  877. // CHECK-ERROR-NEXT: sbfiz x3, x5, #12, #53
  878. // CHECK-ERROR-NEXT: ^
  879. // CHECK-ERROR-NEXT: error: invalid operand for instruction
  880. // CHECK-ERROR-NEXT: sbfiz sp, x3, #7, #6
  881. // CHECK-ERROR-NEXT: ^
  882. // CHECK-ERROR-NEXT: error: invalid operand for instruction
  883. // CHECK-ERROR-NEXT: sbfiz w3, wsp, #10, #8
  884. // CHECK-ERROR-NEXT: ^
  885. sbfx w1, w2, #0, #0
  886. sbfx wsp, w9, #0, #1
  887. sbfx w9, w10, #32, #1
  888. sbfx w11, w12, #32, #0
  889. sbfx w9, w10, #10, #23
  890. sbfx x3, x5, #12, #53
  891. sbfx sp, x3, #7, #6
  892. sbfx w3, wsp, #10, #8
  893. // CHECK-ERROR-AARCH64: error: expected integer in range [<lsb>, 31]
  894. // CHECK-ERROR-ARM64: error: expected integer in range [1, 32]
  895. // CHECK-ERROR-NEXT: sbfx w1, w2, #0, #0
  896. // CHECK-ERROR-NEXT: ^
  897. // CHECK-ERROR-NEXT: error: invalid operand for instruction
  898. // CHECK-ERROR-NEXT: sbfx wsp, w9, #0, #1
  899. // CHECK-ERROR-NEXT: ^
  900. // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 31]
  901. // CHECK-ERROR-NEXT: sbfx w9, w10, #32, #1
  902. // CHECK-ERROR-NEXT: ^
  903. // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 31]
  904. // CHECK-ERROR-NEXT: sbfx w11, w12, #32, #0
  905. // CHECK-ERROR-NEXT: ^
  906. // CHECK-ERROR-NEXT: error: requested extract overflows register
  907. // CHECK-ERROR-NEXT: sbfx w9, w10, #10, #23
  908. // CHECK-ERROR-NEXT: ^
  909. // CHECK-ERROR-NEXT: error: requested extract overflows register
  910. // CHECK-ERROR-NEXT: sbfx x3, x5, #12, #53
  911. // CHECK-ERROR-NEXT: ^
  912. // CHECK-ERROR-NEXT: error: invalid operand for instruction
  913. // CHECK-ERROR-NEXT: sbfx sp, x3, #7, #6
  914. // CHECK-ERROR-NEXT: ^
  915. // CHECK-ERROR-NEXT: error: invalid operand for instruction
  916. // CHECK-ERROR-NEXT: sbfx w3, wsp, #10, #8
  917. // CHECK-ERROR-NEXT: ^
  918. bfi w1, w2, #0, #0
  919. bfi wsp, w9, #0, #1
  920. bfi w9, w10, #32, #1
  921. bfi w11, w12, #32, #0
  922. bfi w9, w10, #10, #23
  923. bfi x3, x5, #12, #53
  924. bfi sp, x3, #7, #6
  925. bfi w3, wsp, #10, #8
  926. // CHECK-ERROR-AARCH64: error: expected integer in range [<lsb>, 31]
  927. // CHECK-ERROR-ARM64: error: expected integer in range [1, 32]
  928. // CHECK-ERROR-NEXT: bfi w1, w2, #0, #0
  929. // CHECK-ERROR-NEXT: ^
  930. // CHECK-ERROR-NEXT: error: invalid operand for instruction
  931. // CHECK-ERROR-NEXT: bfi wsp, w9, #0, #1
  932. // CHECK-ERROR-NEXT: ^
  933. // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 31]
  934. // CHECK-ERROR-NEXT: bfi w9, w10, #32, #1
  935. // CHECK-ERROR-NEXT: ^
  936. // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 31]
  937. // CHECK-ERROR-NEXT: bfi w11, w12, #32, #0
  938. // CHECK-ERROR-NEXT: ^
  939. // CHECK-ERROR-NEXT: error: requested insert overflows register
  940. // CHECK-ERROR-NEXT: bfi w9, w10, #10, #23
  941. // CHECK-ERROR-NEXT: ^
  942. // CHECK-ERROR-NEXT: error: requested insert overflows register
  943. // CHECK-ERROR-NEXT: bfi x3, x5, #12, #53
  944. // CHECK-ERROR-NEXT: ^
  945. // CHECK-ERROR-NEXT: error: invalid operand for instruction
  946. // CHECK-ERROR-NEXT: bfi sp, x3, #7, #6
  947. // CHECK-ERROR-NEXT: ^
  948. // CHECK-ERROR-NEXT: error: invalid operand for instruction
  949. // CHECK-ERROR-NEXT: bfi w3, wsp, #10, #8
  950. // CHECK-ERROR-NEXT: ^
  951. bfxil w1, w2, #0, #0
  952. bfxil wsp, w9, #0, #1
  953. bfxil w9, w10, #32, #1
  954. bfxil w11, w12, #32, #0
  955. bfxil w9, w10, #10, #23
  956. bfxil x3, x5, #12, #53
  957. bfxil sp, x3, #7, #6
  958. bfxil w3, wsp, #10, #8
  959. // CHECK-ERROR-AARCH64: error: expected integer in range [<lsb>, 31]
  960. // CHECK-ERROR-ARM64: error: expected integer in range [1, 32]
  961. // CHECK-ERROR-NEXT: bfxil w1, w2, #0, #0
  962. // CHECK-ERROR-NEXT: ^
  963. // CHECK-ERROR-NEXT: error: invalid operand for instruction
  964. // CHECK-ERROR-NEXT: bfxil wsp, w9, #0, #1
  965. // CHECK-ERROR-NEXT: ^
  966. // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 31]
  967. // CHECK-ERROR-NEXT: bfxil w9, w10, #32, #1
  968. // CHECK-ERROR-NEXT: ^
  969. // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 31]
  970. // CHECK-ERROR-NEXT: bfxil w11, w12, #32, #0
  971. // CHECK-ERROR-NEXT: ^
  972. // CHECK-ERROR-NEXT: error: requested extract overflows register
  973. // CHECK-ERROR-NEXT: bfxil w9, w10, #10, #23
  974. // CHECK-ERROR-NEXT: ^
  975. // CHECK-ERROR-NEXT: error: requested extract overflows register
  976. // CHECK-ERROR-NEXT: bfxil x3, x5, #12, #53
  977. // CHECK-ERROR-NEXT: ^
  978. // CHECK-ERROR-NEXT: error: invalid operand for instruction
  979. // CHECK-ERROR-NEXT: bfxil sp, x3, #7, #6
  980. // CHECK-ERROR-NEXT: ^
  981. // CHECK-ERROR-NEXT: error: invalid operand for instruction
  982. // CHECK-ERROR-NEXT: bfxil w3, wsp, #10, #8
  983. // CHECK-ERROR-NEXT: ^
  984. ubfiz w1, w2, #0, #0
  985. ubfiz wsp, w9, #0, #1
  986. ubfiz w9, w10, #32, #1
  987. ubfiz w11, w12, #32, #0
  988. ubfiz w9, w10, #10, #23
  989. ubfiz x3, x5, #12, #53
  990. ubfiz sp, x3, #7, #6
  991. ubfiz w3, wsp, #10, #8
  992. // CHECK-ERROR-AARCH64: error: expected integer in range [<lsb>, 31]
  993. // CHECK-ERROR-ARM64: error: expected integer in range [1, 32]
  994. // CHECK-ERROR-NEXT: ubfiz w1, w2, #0, #0
  995. // CHECK-ERROR-NEXT: ^
  996. // CHECK-ERROR-NEXT: error: invalid operand for instruction
  997. // CHECK-ERROR-NEXT: ubfiz wsp, w9, #0, #1
  998. // CHECK-ERROR-NEXT: ^
  999. // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 31]
  1000. // CHECK-ERROR-NEXT: ubfiz w9, w10, #32, #1
  1001. // CHECK-ERROR-NEXT: ^
  1002. // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 31]
  1003. // CHECK-ERROR-NEXT: ubfiz w11, w12, #32, #0
  1004. // CHECK-ERROR-NEXT: ^
  1005. // CHECK-ERROR-NEXT: error: requested insert overflows register
  1006. // CHECK-ERROR-NEXT: ubfiz w9, w10, #10, #23
  1007. // CHECK-ERROR-NEXT: ^
  1008. // CHECK-ERROR-NEXT: error: requested insert overflows register
  1009. // CHECK-ERROR-NEXT: ubfiz x3, x5, #12, #53
  1010. // CHECK-ERROR-NEXT: ^
  1011. // CHECK-ERROR-NEXT: error: invalid operand for instruction
  1012. // CHECK-ERROR-NEXT: ubfiz sp, x3, #7, #6
  1013. // CHECK-ERROR-NEXT: ^
  1014. // CHECK-ERROR-NEXT: error: invalid operand for instruction
  1015. // CHECK-ERROR-NEXT: ubfiz w3, wsp, #10, #8
  1016. // CHECK-ERROR-NEXT: ^
  1017. ubfx w1, w2, #0, #0
  1018. ubfx wsp, w9, #0, #1
  1019. ubfx w9, w10, #32, #1
  1020. ubfx w11, w12, #32, #0
  1021. ubfx w9, w10, #10, #23
  1022. ubfx x3, x5, #12, #53
  1023. ubfx sp, x3, #7, #6
  1024. ubfx w3, wsp, #10, #8
  1025. // CHECK-ERROR-AARCH64: error: expected integer in range [<lsb>, 31]
  1026. // CHECK-ERROR-ARM64: error: expected integer in range [1, 32]
  1027. // CHECK-ERROR-NEXT: ubfx w1, w2, #0, #0
  1028. // CHECK-ERROR-NEXT: ^
  1029. // CHECK-ERROR-NEXT: error: invalid operand for instruction
  1030. // CHECK-ERROR-NEXT: ubfx wsp, w9, #0, #1
  1031. // CHECK-ERROR-NEXT: ^
  1032. // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 31]
  1033. // CHECK-ERROR-NEXT: ubfx w9, w10, #32, #1
  1034. // CHECK-ERROR-NEXT: ^
  1035. // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 31]
  1036. // CHECK-ERROR-NEXT: ubfx w11, w12, #32, #0
  1037. // CHECK-ERROR-NEXT: ^
  1038. // CHECK-ERROR-NEXT: error: requested extract overflows register
  1039. // CHECK-ERROR-NEXT: ubfx w9, w10, #10, #23
  1040. // CHECK-ERROR-NEXT: ^
  1041. // CHECK-ERROR-NEXT: error: requested extract overflows register
  1042. // CHECK-ERROR-NEXT: ubfx x3, x5, #12, #53
  1043. // CHECK-ERROR-NEXT: ^
  1044. // CHECK-ERROR-NEXT: error: invalid operand for instruction
  1045. // CHECK-ERROR-NEXT: ubfx sp, x3, #7, #6
  1046. // CHECK-ERROR-NEXT: ^
  1047. // CHECK-ERROR-NEXT: error: invalid operand for instruction
  1048. // CHECK-ERROR-NEXT: ubfx w3, wsp, #10, #8
  1049. // CHECK-ERROR-NEXT: ^
  1050. bfc wsp, #3, #6
  1051. bfc w4, #2, #31
  1052. bfc sp, #0, #1
  1053. bfc x6, #0, #0
  1054. // CHECK-ERROR: error: invalid operand for instruction
  1055. // CHECK-ERROR-NEXT: bfc wsp, #3, #6
  1056. // CHECK-ERROR-NEXT: ^
  1057. // CHECK-ERROR-NEXT: error: requested insert overflows register
  1058. // CHECK-ERROR-NEXT: bfc w4, #2, #31
  1059. // CHECK-ERROR-NEXT: ^
  1060. // CHECK-ERROR-NEXT: error: invalid operand for instruction
  1061. // CHECK-ERROR-NEXT: bfc sp, #0, #1
  1062. // CHECK-ERROR-NEXT: ^
  1063. // CHECK-ERROR-NEXT: error: expected integer in range [1, 32]
  1064. // CHECK-ERROR-NEXT: bfc x6, #0, #0
  1065. // CHECK-ERROR-NEXT: ^
  1066. //------------------------------------------------------------------------------
  1067. // Compare & branch (immediate)
  1068. //------------------------------------------------------------------------------
  1069. cbnz wsp, lbl
  1070. cbz sp, lbl
  1071. cbz x3, x5
  1072. // CHECK-ERROR: error: invalid operand for instruction
  1073. // CHECK-ERROR-NEXT: cbnz wsp, lbl
  1074. // CHECK-ERROR-NEXT: ^
  1075. // CHECK-ERROR-NEXT: error: invalid operand for instruction
  1076. // CHECK-ERROR-NEXT: cbz sp, lbl
  1077. // CHECK-ERROR-NEXT: ^
  1078. // CHECK-ERROR-NEXT: error: expected label or encodable integer pc offset
  1079. // CHECK-ERROR-NEXT: cbz x3, x5
  1080. // CHECK-ERROR-NEXT: ^
  1081. cbz w20, #1048576
  1082. cbnz xzr, #-1048580
  1083. cbz x29, #1
  1084. // CHECK-ERROR: error: expected label or encodable integer pc offset
  1085. // CHECK-ERROR-NEXT: cbz w20, #1048576
  1086. // CHECK-ERROR-NEXT: ^
  1087. // CHECK-ERROR-NEXT: error: expected label or encodable integer pc offset
  1088. // CHECK-ERROR-NEXT: cbnz xzr, #-1048580
  1089. // CHECK-ERROR-NEXT: ^
  1090. // CHECK-ERROR-NEXT: error: expected label or encodable integer pc offset
  1091. // CHECK-ERROR-NEXT: cbz x29, #1
  1092. // CHECK-ERROR-NEXT: ^
  1093. //------------------------------------------------------------------------------
  1094. // Conditional branch (immediate)
  1095. //------------------------------------------------------------------------------
  1096. b.zf lbl
  1097. // CHECK-ERROR: error: invalid condition code
  1098. // CHECK-ERROR-NEXT: b.zf lbl
  1099. // CHECK-ERROR-NEXT: ^
  1100. b.eq #1048576
  1101. b.ge #-1048580
  1102. b.cc #1
  1103. // CHECK-ERROR: error: expected label or encodable integer pc offset
  1104. // CHECK-ERROR-NEXT: b.eq #1048576
  1105. // CHECK-ERROR-NEXT: ^
  1106. // CHECK-ERROR-NEXT: error: expected label or encodable integer pc offset
  1107. // CHECK-ERROR-NEXT: b.ge #-1048580
  1108. // CHECK-ERROR-NEXT: ^
  1109. // CHECK-ERROR-NEXT: error: expected label or encodable integer pc offset
  1110. // CHECK-ERROR-NEXT: b.cc #1
  1111. // CHECK-ERROR-NEXT: ^
  1112. //------------------------------------------------------------------------------
  1113. // Conditional compare (immediate)
  1114. //------------------------------------------------------------------------------
  1115. ccmp wsp, #4, #2, ne
  1116. ccmp w25, #-1, #15, hs
  1117. ccmp w3, #32, #0, ge
  1118. ccmp w19, #5, #-1, lt
  1119. ccmp w20, #7, #16, hs
  1120. // CHECK-ERROR: error: invalid operand for instruction
  1121. // CHECK-ERROR-NEXT: ccmp wsp, #4, #2, ne
  1122. // CHECK-ERROR-NEXT: ^
  1123. // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 31]
  1124. // CHECK-ERROR-NEXT: ccmp w25, #-1, #15, hs
  1125. // CHECK-ERROR-NEXT: ^
  1126. // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 31]
  1127. // CHECK-ERROR-NEXT: ccmp w3, #32, #0, ge
  1128. // CHECK-ERROR-NEXT: ^
  1129. // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 15]
  1130. // CHECK-ERROR-NEXT: ccmp w19, #5, #-1, lt
  1131. // CHECK-ERROR-NEXT: ^
  1132. // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 15]
  1133. // CHECK-ERROR-NEXT: ccmp w20, #7, #16, hs
  1134. // CHECK-ERROR-NEXT: ^
  1135. ccmp sp, #4, #2, ne
  1136. ccmp x25, #-1, #15, hs
  1137. ccmp x3, #32, #0, ge
  1138. ccmp x19, #5, #-1, lt
  1139. ccmp x20, #7, #16, hs
  1140. // CHECK-ERROR: error: invalid operand for instruction
  1141. // CHECK-ERROR-NEXT: ccmp sp, #4, #2, ne
  1142. // CHECK-ERROR-NEXT: ^
  1143. // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 31]
  1144. // CHECK-ERROR-NEXT: ccmp x25, #-1, #15, hs
  1145. // CHECK-ERROR-NEXT: ^
  1146. // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 31]
  1147. // CHECK-ERROR-NEXT: ccmp x3, #32, #0, ge
  1148. // CHECK-ERROR-NEXT: ^
  1149. // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 15]
  1150. // CHECK-ERROR-NEXT: ccmp x19, #5, #-1, lt
  1151. // CHECK-ERROR-NEXT: ^
  1152. // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 15]
  1153. // CHECK-ERROR-NEXT: ccmp x20, #7, #16, hs
  1154. // CHECK-ERROR-NEXT: ^
  1155. ccmn wsp, #4, #2, ne
  1156. ccmn w25, #-1, #15, hs
  1157. ccmn w3, #32, #0, ge
  1158. ccmn w19, #5, #-1, lt
  1159. ccmn w20, #7, #16, hs
  1160. // CHECK-ERROR: error: invalid operand for instruction
  1161. // CHECK-ERROR-NEXT: ccmn wsp, #4, #2, ne
  1162. // CHECK-ERROR-NEXT: ^
  1163. // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 31]
  1164. // CHECK-ERROR-NEXT: ccmn w25, #-1, #15, hs
  1165. // CHECK-ERROR-NEXT: ^
  1166. // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 31]
  1167. // CHECK-ERROR-NEXT: ccmn w3, #32, #0, ge
  1168. // CHECK-ERROR-NEXT: ^
  1169. // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 15]
  1170. // CHECK-ERROR-NEXT: ccmn w19, #5, #-1, lt
  1171. // CHECK-ERROR-NEXT: ^
  1172. // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 15]
  1173. // CHECK-ERROR-NEXT: ccmn w20, #7, #16, hs
  1174. // CHECK-ERROR-NEXT: ^
  1175. ccmn sp, #4, #2, ne
  1176. ccmn x25, #-1, #15, hs
  1177. ccmn x3, #32, #0, ge
  1178. ccmn x19, #5, #-1, lt
  1179. ccmn x20, #7, #16, hs
  1180. // CHECK-ERROR: error: invalid operand for instruction
  1181. // CHECK-ERROR-NEXT: ccmn sp, #4, #2, ne
  1182. // CHECK-ERROR-NEXT: ^
  1183. // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 31]
  1184. // CHECK-ERROR-NEXT: ccmn x25, #-1, #15, hs
  1185. // CHECK-ERROR-NEXT: ^
  1186. // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 31]
  1187. // CHECK-ERROR-NEXT: ccmn x3, #32, #0, ge
  1188. // CHECK-ERROR-NEXT: ^
  1189. // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 15]
  1190. // CHECK-ERROR-NEXT: ccmn x19, #5, #-1, lt
  1191. // CHECK-ERROR-NEXT: ^
  1192. // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 15]
  1193. // CHECK-ERROR-NEXT: ccmn x20, #7, #16, hs
  1194. // CHECK-ERROR-NEXT: ^
  1195. //------------------------------------------------------------------------------
  1196. // Conditional compare (register)
  1197. //------------------------------------------------------------------------------
  1198. ccmp wsp, w4, #2, ne
  1199. ccmp w3, wsp, #0, ge
  1200. ccmp w19, w5, #-1, lt
  1201. ccmp w20, w7, #16, hs
  1202. // CHECK-ERROR: error: invalid operand for instruction
  1203. // CHECK-ERROR-NEXT: ccmp wsp, w4, #2, ne
  1204. // CHECK-ERROR-NEXT: ^
  1205. // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 31]
  1206. // CHECK-ERROR-NEXT: ccmp w3, wsp, #0, ge
  1207. // CHECK-ERROR-NEXT: ^
  1208. // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 15]
  1209. // CHECK-ERROR-NEXT: ccmp w19, w5, #-1, lt
  1210. // CHECK-ERROR-NEXT: ^
  1211. // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 15]
  1212. // CHECK-ERROR-NEXT: ccmp w20, w7, #16, hs
  1213. // CHECK-ERROR-NEXT: ^
  1214. ccmp sp, x4, #2, ne
  1215. ccmp x25, sp, #15, hs
  1216. ccmp x19, x5, #-1, lt
  1217. ccmp x20, x7, #16, hs
  1218. // CHECK-ERROR: error: invalid operand for instruction
  1219. // CHECK-ERROR-NEXT: ccmp sp, x4, #2, ne
  1220. // CHECK-ERROR-NEXT: ^
  1221. // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 31]
  1222. // CHECK-ERROR-NEXT: ccmp x25, sp, #15, hs
  1223. // CHECK-ERROR-NEXT: ^
  1224. // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 15]
  1225. // CHECK-ERROR-NEXT: ccmp x19, x5, #-1, lt
  1226. // CHECK-ERROR-NEXT: ^
  1227. // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 15]
  1228. // CHECK-ERROR-NEXT: ccmp x20, x7, #16, hs
  1229. // CHECK-ERROR-NEXT: ^
  1230. ccmn wsp, w4, #2, ne
  1231. ccmn w25, wsp, #15, hs
  1232. ccmn w19, w5, #-1, lt
  1233. ccmn w20, w7, #16, hs
  1234. // CHECK-ERROR: error: invalid operand for instruction
  1235. // CHECK-ERROR-NEXT: ccmn wsp, w4, #2, ne
  1236. // CHECK-ERROR-NEXT: ^
  1237. // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 31]
  1238. // CHECK-ERROR-NEXT: ccmn w25, wsp, #15, hs
  1239. // CHECK-ERROR-NEXT: ^
  1240. // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 15]
  1241. // CHECK-ERROR-NEXT: ccmn w19, w5, #-1, lt
  1242. // CHECK-ERROR-NEXT: ^
  1243. // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 15]
  1244. // CHECK-ERROR-NEXT: ccmn w20, w7, #16, hs
  1245. // CHECK-ERROR-NEXT: ^
  1246. ccmn sp, x4, #2, ne
  1247. ccmn x25, sp, #15, hs
  1248. ccmn x19, x5, #-1, lt
  1249. ccmn x20, x7, #16, hs
  1250. // CHECK-ERROR: error: invalid operand for instruction
  1251. // CHECK-ERROR-NEXT: ccmn sp, x4, #2, ne
  1252. // CHECK-ERROR-NEXT: ^
  1253. // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 31]
  1254. // CHECK-ERROR-NEXT: ccmn x25, sp, #15, hs
  1255. // CHECK-ERROR-NEXT: ^
  1256. // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 15]
  1257. // CHECK-ERROR-NEXT: ccmn x19, x5, #-1, lt
  1258. // CHECK-ERROR-NEXT: ^
  1259. // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 15]
  1260. // CHECK-ERROR-NEXT: ccmn x20, x7, #16, hs
  1261. // CHECK-ERROR-NEXT: ^
  1262. //------------------------------------------------------------------------------
  1263. // Conditional select
  1264. //------------------------------------------------------------------------------
  1265. csel w4, wsp, w9, eq
  1266. csel wsp, w2, w3, ne
  1267. csel w10, w11, wsp, ge
  1268. csel w1, w2, w3, #3
  1269. csel x4, sp, x9, eq
  1270. csel sp, x2, x3, ne
  1271. csel x10, x11, sp, ge
  1272. csel x1, x2, x3, #3
  1273. // CHECK-ERROR: error: invalid operand for instruction
  1274. // CHECK-ERROR-NEXT: csel w4, wsp, w9, eq
  1275. // CHECK-ERROR-NEXT: ^
  1276. // CHECK-ERROR-NEXT: error: invalid operand for instruction
  1277. // CHECK-ERROR-NEXT: csel wsp, w2, w3, ne
  1278. // CHECK-ERROR-NEXT: ^
  1279. // CHECK-ERROR-NEXT: error: invalid operand for instruction
  1280. // CHECK-ERROR-NEXT: csel w10, w11, wsp, ge
  1281. // CHECK-ERROR-NEXT: ^
  1282. // CHECK-ERROR-NEXT: error: expected AArch64 condition code
  1283. // CHECK-ERROR-NEXT: csel w1, w2, w3, #3
  1284. // CHECK-ERROR-NEXT: ^
  1285. // CHECK-ERROR-NEXT: error: invalid operand for instruction
  1286. // CHECK-ERROR-NEXT: csel x4, sp, x9, eq
  1287. // CHECK-ERROR-NEXT: ^
  1288. // CHECK-ERROR-NEXT: error: invalid operand for instruction
  1289. // CHECK-ERROR-NEXT: csel sp, x2, x3, ne
  1290. // CHECK-ERROR-NEXT: ^
  1291. // CHECK-ERROR-NEXT: error: invalid operand for instruction
  1292. // CHECK-ERROR-NEXT: csel x10, x11, sp, ge
  1293. // CHECK-ERROR-NEXT: ^
  1294. // CHECK-ERROR-NEXT: error: expected AArch64 condition code
  1295. // CHECK-ERROR-NEXT: csel x1, x2, x3, #3
  1296. // CHECK-ERROR-NEXT: ^
  1297. csinc w20, w21, wsp, mi
  1298. csinc sp, x30, x29, eq
  1299. // CHECK-ERROR: error: invalid operand for instruction
  1300. // CHECK-ERROR-NEXT: csinc w20, w21, wsp, mi
  1301. // CHECK-ERROR-NEXT: ^
  1302. // CHECK-ERROR-NEXT: error: invalid operand for instruction
  1303. // CHECK-ERROR-NEXT: csinc sp, x30, x29, eq
  1304. // CHECK-ERROR-NEXT: ^
  1305. csinv w20, wsp, wsp, mi
  1306. csinv sp, x30, x29, le
  1307. // CHECK-ERROR: error: invalid operand for instruction
  1308. // CHECK-ERROR-NEXT: csinv w20, wsp, wsp, mi
  1309. // CHECK-ERROR-NEXT: ^
  1310. // CHECK-ERROR-NEXT: error: invalid operand for instruction
  1311. // CHECK-ERROR-NEXT: csinv sp, x30, x29, le
  1312. // CHECK-ERROR-NEXT: ^
  1313. csneg w20, w21, wsp, mi
  1314. csneg x0, sp, x29, le
  1315. // CHECK-ERROR: error: invalid operand for instruction
  1316. // CHECK-ERROR-NEXT: csneg w20, w21, wsp, mi
  1317. // CHECK-ERROR-NEXT: ^
  1318. // CHECK-ERROR-NEXT: error: invalid operand for instruction
  1319. // CHECK-ERROR-NEXT: csneg x0, sp, x29, le
  1320. // CHECK-ERROR-NEXT: ^
  1321. cset wsp, lt
  1322. csetm sp, ge
  1323. cset w1, al
  1324. csetm x6, nv
  1325. // CHECK-ERROR: error: invalid operand for instruction
  1326. // CHECK-ERROR-NEXT: cset wsp, lt
  1327. // CHECK-ERROR-NEXT: ^
  1328. // CHECK-ERROR-NEXT: error: invalid operand for instruction
  1329. // CHECK-ERROR-NEXT: csetm sp, ge
  1330. // CHECK-ERROR-NEXT: ^
  1331. // CHECK-ERROR-NEXT: error: condition codes AL and NV are invalid for this instruction
  1332. // CHECK-ERROR-NEXT: cset w1, al
  1333. // CHECK-ERROR-NEXT: ^
  1334. // CHECK-ERROR-NEXT: error: condition codes AL and NV are invalid for this instruction
  1335. // CHECK-ERROR-NEXT: csetm x6, nv
  1336. // CHECK-ERROR-NEXT: ^
  1337. cinc w3, wsp, ne
  1338. cinc sp, x9, eq
  1339. cinc x2, x0, nv
  1340. // CHECK-ERROR: error: invalid operand for instruction
  1341. // CHECK-ERROR-NEXT: cinc w3, wsp, ne
  1342. // CHECK-ERROR-NEXT: ^
  1343. // CHECK-ERROR-NEXT: error: invalid operand for instruction
  1344. // CHECK-ERROR-NEXT: cinc sp, x9, eq
  1345. // CHECK-ERROR-NEXT: ^
  1346. // CHECK-ERROR-NEXT: error: condition codes AL and NV are invalid for this instruction
  1347. // CHECK-ERROR-NEXT: cinc x2, x0, nv
  1348. // CHECK-ERROR-NEXT: ^
  1349. cinv w3, wsp, ne
  1350. cinv sp, x9, eq
  1351. cinv w8, x7, nv
  1352. // CHECK-ERROR: error: invalid operand for instruction
  1353. // CHECK-ERROR-NEXT: cinv w3, wsp, ne
  1354. // CHECK-ERROR-NEXT: ^
  1355. // CHECK-ERROR-NEXT: error: invalid operand for instruction
  1356. // CHECK-ERROR-NEXT: cinv sp, x9, eq
  1357. // CHECK-ERROR-NEXT: ^
  1358. // CHECK-ERROR-NEXT: error: condition codes AL and NV are invalid for this instruction
  1359. // CHECK-ERROR-NEXT: cinv w8, x7, nv
  1360. // CHECK-ERROR-NEXT: ^
  1361. cneg w3, wsp, ne
  1362. cneg sp, x9, eq
  1363. cneg x4, x5, al
  1364. // CHECK-ERROR: error: invalid operand for instruction
  1365. // CHECK-ERROR-NEXT: cneg w3, wsp, ne
  1366. // CHECK-ERROR-NEXT: ^
  1367. // CHECK-ERROR-NEXT: error: invalid operand for instruction
  1368. // CHECK-ERROR-NEXT: cneg sp, x9, eq
  1369. // CHECK-ERROR-NEXT: ^
  1370. // CHECK-ERROR-NEXT: error: condition codes AL and NV are invalid for this instruction
  1371. // CHECK-ERROR-NEXT: cneg x4, x5, al
  1372. // CHECK-ERROR-NEXT: ^
  1373. //------------------------------------------------------------------------------
  1374. // Data Processing (1 source)
  1375. //------------------------------------------------------------------------------
  1376. rbit x23, w2
  1377. //CHECK-ERROR: error: invalid operand for instruction
  1378. //CHECK-ERROR-NEXT: rbit x23, w2
  1379. cls sp, x2
  1380. //CHECK-ERROR: error: invalid operand for instruction
  1381. //CHECK-ERROR-NEXT: cls sp, x2
  1382. clz wsp, w3
  1383. //CHECK-ERROR: error: invalid operand for instruction
  1384. //CHECK-ERROR-NEXT: clz wsp, w3
  1385. //------------------------------------------------------------------------------
  1386. // Data Processing (2 sources)
  1387. //------------------------------------------------------------------------------
  1388. udiv x23, w2, x18
  1389. //CHECK-ERROR: error: invalid operand for instruction
  1390. //CHECK-ERROR-NEXT: udiv x23, w2, x18
  1391. lsl sp, x2, x4
  1392. //CHECK-ERROR: error: invalid operand for instruction
  1393. //CHECK-ERROR-NEXT: lsl sp, x2, x4
  1394. asr wsp, w3, w9
  1395. //CHECK-ERROR: error: invalid operand for instruction
  1396. //CHECK-ERROR-NEXT: asr wsp, w3, w9
  1397. //------------------------------------------------------------------------------
  1398. // Data Processing (3 sources)
  1399. //------------------------------------------------------------------------------
  1400. madd sp, x3, x9, x10
  1401. //CHECK-ERROR: error: invalid operand for instruction
  1402. //CHECK-ERROR-NEXT: madd sp, x3, x9, x10
  1403. //------------------------------------------------------------------------------
  1404. // Exception generation
  1405. //------------------------------------------------------------------------------
  1406. svc #-1
  1407. hlt #65536
  1408. dcps4 #43
  1409. dcps4
  1410. // CHECK-ERROR: error: {{expected|immediate must be an}} integer in range [0, 65535]
  1411. // CHECK-ERROR-NEXT: svc #-1
  1412. // CHECK-ERROR-NEXT: ^
  1413. // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 65535]
  1414. // CHECK-ERROR-NEXT: hlt #65536
  1415. // CHECK-ERROR-NEXT: ^
  1416. // CHECK-ERROR-NEXT: error: {{invalid instruction|unrecognized instruction mnemonic}}
  1417. // CHECK-ERROR-NEXT: dcps4 #43
  1418. // CHECK-ERROR-NEXT: ^
  1419. // CHECK-ERROR-NEXT: error: {{invalid instruction|unrecognized instruction mnemonic}}
  1420. // CHECK-ERROR-NEXT: dcps4
  1421. // CHECK-ERROR-NEXT: ^
  1422. //------------------------------------------------------------------------------
  1423. // Extract (immediate)
  1424. //------------------------------------------------------------------------------
  1425. extr w2, w20, w30, #-1
  1426. extr w9, w19, w20, #32
  1427. // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 31]
  1428. // CHECK-ERROR-NEXT: extr w2, w20, w30, #-1
  1429. // CHECK-ERROR-NEXT: ^
  1430. // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 31]
  1431. // CHECK-ERROR-NEXT: extr w9, w19, w20, #32
  1432. // CHECK-ERROR-NEXT: ^
  1433. extr x10, x15, x20, #-1
  1434. extr x20, x25, x30, #64
  1435. // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 63]
  1436. // CHECK-ERROR-NEXT: extr x10, x15, x20, #-1
  1437. // CHECK-ERROR-NEXT: ^
  1438. // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 63]
  1439. // CHECK-ERROR-NEXT: extr x20, x25, x30, #64
  1440. // CHECK-ERROR-NEXT: ^
  1441. ror w9, w10, #32
  1442. ror x10, x11, #64
  1443. // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 31]
  1444. // CHECK-ERROR-NEXT: ror w9, w10, #32
  1445. // CHECK-ERROR-NEXT: ^
  1446. // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 63]
  1447. // CHECK-ERROR-NEXT: ror x10, x11, #64
  1448. // CHECK-ERROR-NEXT: ^
  1449. //------------------------------------------------------------------------------
  1450. // Floating-point compare
  1451. //------------------------------------------------------------------------------
  1452. fcmp s3, d2
  1453. // CHECK-ERROR-AARCH64: error: expected floating-point constant #0.0
  1454. // CHECK-ERROR-ARM64: error: invalid operand for instruction
  1455. // CHECK-ERROR-NEXT: fcmp s3, d2
  1456. // CHECK-ERROR-NEXT: ^
  1457. fcmp s9, #-0.0
  1458. fcmp d3, #-0.0
  1459. fcmp s1, #1.0
  1460. fcmpe s30, #-0.0
  1461. // CHECK-ERROR: error: expected floating-point constant #0.0
  1462. // CHECK-ERROR-NEXT: fcmp s9, #-0.0
  1463. // CHECK-ERROR-NEXT: ^
  1464. // CHECK-ERROR-NEXT: error: expected floating-point constant #0.0
  1465. // CHECK-ERROR-NEXT: fcmp d3, #-0.0
  1466. // CHECK-ERROR-NEXT: ^
  1467. // CHECK-ERROR-NEXT: error: expected floating-point constant #0.0
  1468. // CHECK-ERROR-NEXT: fcmp s1, #1.0
  1469. // CHECK-ERROR-NEXT: ^
  1470. // CHECK-ERROR-NEXT: error: expected floating-point constant #0.0
  1471. // CHECK-ERROR-NEXT: fcmpe s30, #-0.0
  1472. // CHECK-ERROR-NEXT: ^
  1473. //------------------------------------------------------------------------------
  1474. // Floating-point conditional compare
  1475. //------------------------------------------------------------------------------
  1476. fccmp s19, s5, #-1, lt
  1477. fccmp s20, s7, #16, hs
  1478. // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 15]
  1479. // CHECK-ERROR-NEXT: fccmp s19, s5, #-1, lt
  1480. // CHECK-ERROR-NEXT: ^
  1481. // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 15]
  1482. // CHECK-ERROR-NEXT: fccmp s20, s7, #16, hs
  1483. // CHECK-ERROR-NEXT: ^
  1484. fccmp d19, d5, #-1, lt
  1485. fccmp d20, d7, #16, hs
  1486. // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 15]
  1487. // CHECK-ERROR-NEXT: fccmp d19, d5, #-1, lt
  1488. // CHECK-ERROR-NEXT: ^
  1489. // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 15]
  1490. // CHECK-ERROR-NEXT: fccmp d20, d7, #16, hs
  1491. // CHECK-ERROR-NEXT: ^
  1492. fccmpe s19, s5, #-1, lt
  1493. fccmpe s20, s7, #16, hs
  1494. // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 15]
  1495. // CHECK-ERROR-NEXT: fccmpe s19, s5, #-1, lt
  1496. // CHECK-ERROR-NEXT: ^
  1497. // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 15]
  1498. // CHECK-ERROR-NEXT: fccmpe s20, s7, #16, hs
  1499. // CHECK-ERROR-NEXT: ^
  1500. fccmpe d19, d5, #-1, lt
  1501. fccmpe d20, d7, #16, hs
  1502. // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 15]
  1503. // CHECK-ERROR-NEXT: fccmpe d19, d5, #-1, lt
  1504. // CHECK-ERROR-NEXT: ^
  1505. // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 15]
  1506. // CHECK-ERROR-NEXT: fccmpe d20, d7, #16, hs
  1507. // CHECK-ERROR-NEXT: ^
  1508. //------------------------------------------------------------------------------
  1509. // Floating-point conditional compare
  1510. //------------------------------------------------------------------------------
  1511. fcsel q3, q20, q9, pl
  1512. fcsel h9, h10, h11, mi
  1513. fcsel b9, b10, b11, mi
  1514. // CHECK-ERROR: error: invalid operand for instruction
  1515. // CHECK-ERROR-NEXT: fcsel q3, q20, q9, pl
  1516. // CHECK-ERROR-NEXT: ^
  1517. // CHECK-ERROR-NEXT: error: instruction requires: fullfp16
  1518. // CHECK-ERROR-NEXT: fcsel h9, h10, h11, mi
  1519. // CHECK-ERROR-NEXT: ^
  1520. // CHECK-ERROR-NEXT: error: invalid operand for instruction
  1521. // CHECK-ERROR-NEXT: fcsel b9, b10, b11, mi
  1522. // CHECK-ERROR-NEXT: ^
  1523. //------------------------------------------------------------------------------
  1524. // Floating-point data-processing (1 source)
  1525. //------------------------------------------------------------------------------
  1526. fmov d0, s3
  1527. fcvt d0, d1
  1528. // CHECK-ERROR: error: expected compatible register or floating-point constant
  1529. // CHECK-ERROR-NEXT: fmov d0, s3
  1530. // CHECK-ERROR-NEXT: ^
  1531. // CHECK-ERROR-NEXT: error: invalid operand for instruction
  1532. // CHECK-ERROR-NEXT: fcvt d0, d1
  1533. // CHECK-ERROR-NEXT: ^
  1534. //------------------------------------------------------------------------------
  1535. // Floating-point data-processing (2 sources)
  1536. //------------------------------------------------------------------------------
  1537. fadd s0, d3, d7
  1538. fmaxnm d3, s19, d12
  1539. fnmul d1, d9, s18
  1540. // CHECK-ERROR: error: invalid operand for instruction
  1541. // CHECK-ERROR-NEXT: fadd s0, d3, d7
  1542. // CHECK-ERROR-NEXT: ^
  1543. // CHECK-ERROR-NEXT: error: invalid operand for instruction
  1544. // CHECK-ERROR-NEXT: fmaxnm d3, s19, d12
  1545. // CHECK-ERROR-NEXT: ^
  1546. // CHECK-ERROR-NEXT: error: invalid operand for instruction
  1547. // CHECK-ERROR-NEXT: fnmul d1, d9, s18
  1548. // CHECK-ERROR-NEXT: ^
  1549. //------------------------------------------------------------------------------
  1550. // Floating-point data-processing (3 sources)
  1551. //------------------------------------------------------------------------------
  1552. fmadd b3, b4, b5, b6
  1553. fmsub h1, h2, h3, h4
  1554. fnmadd q3, q5, q6, q7
  1555. fnmsub s2, s4, d5, h9
  1556. // CHECK-ERROR: error: invalid operand for instruction
  1557. // CHECK-ERROR-NEXT: fmadd b3, b4, b5, b6
  1558. // CHECK-ERROR-NEXT: ^
  1559. // CHECK-ERROR-NEXT: error: instruction requires: fullfp16
  1560. // CHECK-ERROR-NEXT: fmsub h1, h2, h3, h4
  1561. // CHECK-ERROR-NEXT: ^
  1562. // CHECK-ERROR-NEXT: error: invalid operand for instruction
  1563. // CHECK-ERROR-NEXT: fnmadd q3, q5, q6, q7
  1564. // CHECK-ERROR-NEXT: ^
  1565. // CHECK-ERROR-NEXT: error: invalid operand for instruction
  1566. // CHECK-ERROR-NEXT: fnmsub s2, s4, d5, h9
  1567. // CHECK-ERROR-NEXT: ^
  1568. //------------------------------------------------------------------------------
  1569. // Floating-point conditional compare
  1570. //------------------------------------------------------------------------------
  1571. fcvtzs w13, s31, #0
  1572. fcvtzs w19, s20, #33
  1573. fcvtzs wsp, s19, #14
  1574. // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [1, 32]
  1575. // CHECK-ERROR-NEXT: fcvtzs w13, s31, #0
  1576. // CHECK-ERROR-NEXT: ^
  1577. // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [1, 32]
  1578. // CHECK-ERROR-NEXT: fcvtzs w19, s20, #33
  1579. // CHECK-ERROR-NEXT: ^
  1580. // CHECK-ERROR-NEXT: error: invalid operand for instruction
  1581. // CHECK-ERROR-NEXT: fcvtzs wsp, s19, #14
  1582. // CHECK-ERROR-NEXT: ^
  1583. fcvtzs x13, s31, #0
  1584. fcvtzs x19, s20, #65
  1585. fcvtzs sp, s19, #14
  1586. // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [1, 64]
  1587. // CHECK-ERROR-NEXT: fcvtzs x13, s31, #0
  1588. // CHECK-ERROR-NEXT: ^
  1589. // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [1, 64]
  1590. // CHECK-ERROR-NEXT: fcvtzs x19, s20, #65
  1591. // CHECK-ERROR-NEXT: ^
  1592. // CHECK-ERROR-NEXT: error: invalid operand for instruction
  1593. // CHECK-ERROR-NEXT: fcvtzs sp, s19, #14
  1594. // CHECK-ERROR-NEXT: ^
  1595. fcvtzu w13, s31, #0
  1596. fcvtzu w19, s20, #33
  1597. fcvtzu wsp, s19, #14
  1598. // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [1, 32]
  1599. // CHECK-ERROR-NEXT: fcvtzu w13, s31, #0
  1600. // CHECK-ERROR-NEXT: ^
  1601. // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [1, 32]
  1602. // CHECK-ERROR-NEXT: fcvtzu w19, s20, #33
  1603. // CHECK-ERROR-NEXT: ^
  1604. // CHECK-ERROR-NEXT: error: invalid operand for instruction
  1605. // CHECK-ERROR-NEXT: fcvtzu wsp, s19, #14
  1606. // CHECK-ERROR-NEXT: ^
  1607. fcvtzu x13, s31, #0
  1608. fcvtzu x19, s20, #65
  1609. fcvtzu sp, s19, #14
  1610. // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [1, 64]
  1611. // CHECK-ERROR-NEXT: fcvtzu x13, s31, #0
  1612. // CHECK-ERROR-NEXT: ^
  1613. // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [1, 64]
  1614. // CHECK-ERROR-NEXT: fcvtzu x19, s20, #65
  1615. // CHECK-ERROR-NEXT: ^
  1616. // CHECK-ERROR-NEXT: error: invalid operand for instruction
  1617. // CHECK-ERROR-NEXT: fcvtzu sp, s19, #14
  1618. // CHECK-ERROR-NEXT: ^
  1619. scvtf w13, s31, #0
  1620. scvtf w19, s20, #33
  1621. scvtf wsp, s19, #14
  1622. // CHECK-ERROR-NEXT: error: invalid operand for instruction
  1623. // CHECK-ERROR-NEXT: scvtf w13, s31, #0
  1624. // CHECK-ERROR-NEXT: ^
  1625. // CHECK-ERROR-NEXT: error: invalid operand for instruction
  1626. // CHECK-ERROR-NEXT: scvtf w19, s20, #33
  1627. // CHECK-ERROR-NEXT: ^
  1628. // CHECK-ERROR-NEXT: error: invalid operand for instruction
  1629. // CHECK-ERROR-NEXT: scvtf wsp, s19, #14
  1630. // CHECK-ERROR-NEXT: ^
  1631. scvtf x13, s31, #0
  1632. scvtf x19, s20, #65
  1633. scvtf sp, s19, #14
  1634. // CHECK-ERROR-NEXT: error: invalid operand for instruction
  1635. // CHECK-ERROR-NEXT: scvtf x13, s31, #0
  1636. // CHECK-ERROR-NEXT: ^
  1637. // CHECK-ERROR-NEXT: error: invalid operand for instruction
  1638. // CHECK-ERROR-NEXT: scvtf x19, s20, #65
  1639. // CHECK-ERROR-NEXT: ^
  1640. // CHECK-ERROR-NEXT: error: invalid operand for instruction
  1641. // CHECK-ERROR-NEXT: scvtf sp, s19, #14
  1642. // CHECK-ERROR-NEXT: ^
  1643. ucvtf w13, s31, #0
  1644. ucvtf w19, s20, #33
  1645. ucvtf wsp, s19, #14
  1646. // CHECK-ERROR-NEXT: error: invalid operand for instruction
  1647. // CHECK-ERROR-NEXT: ucvtf w13, s31, #0
  1648. // CHECK-ERROR-NEXT: ^
  1649. // CHECK-ERROR-NEXT: error: invalid operand for instruction
  1650. // CHECK-ERROR-NEXT: ucvtf w19, s20, #33
  1651. // CHECK-ERROR-NEXT: ^
  1652. // CHECK-ERROR-NEXT: error: invalid operand for instruction
  1653. // CHECK-ERROR-NEXT: ucvtf wsp, s19, #14
  1654. // CHECK-ERROR-NEXT: ^
  1655. ucvtf x13, s31, #0
  1656. ucvtf x19, s20, #65
  1657. ucvtf sp, s19, #14
  1658. // CHECK-ERROR-NEXT: error: invalid operand for instruction
  1659. // CHECK-ERROR-NEXT: ucvtf x13, s31, #0
  1660. // CHECK-ERROR-NEXT: ^
  1661. // CHECK-ERROR-NEXT: error: invalid operand for instruction
  1662. // CHECK-ERROR-NEXT: ucvtf x19, s20, #65
  1663. // CHECK-ERROR-NEXT: ^
  1664. // CHECK-ERROR-NEXT: error: invalid operand for instruction
  1665. // CHECK-ERROR-NEXT: ucvtf sp, s19, #14
  1666. // CHECK-ERROR-NEXT: ^
  1667. //------------------------------------------------------------------------------
  1668. // Floating-point immediate
  1669. //------------------------------------------------------------------------------
  1670. ;; Exponent too large
  1671. fmov d3, #0.0625
  1672. fmov s2, #32.0
  1673. fmov s2, #32
  1674. fmov v0.4s, #-32
  1675. // CHECK-ERROR: error: expected compatible register or floating-point constant
  1676. // CHECK-ERROR-NEXT: fmov d3, #0.0625
  1677. // CHECK-ERROR-NEXT: ^
  1678. // CHECK-ERROR-NEXT: error: expected compatible register or floating-point constant
  1679. // CHECK-ERROR-NEXT: fmov s2, #32.0
  1680. // CHECK-ERROR-NEXT: ^
  1681. // CHECK-ERROR-NEXT: error: expected compatible register or floating-point constant
  1682. // CHECK-ERROR-NEXT: fmov s2, #32
  1683. // CHECK-ERROR-NEXT: ^
  1684. // CHECK-ERROR-NEXT: error: expected compatible register or floating-point constant
  1685. // CHECK-ERROR-NEXT: fmov v0.4s, #-32
  1686. // CHECK-ERROR-NEXT: ^
  1687. ;; Fraction too precise
  1688. fmov s9, #1.03125
  1689. fmov s28, #1.96875
  1690. // CHECK-ERROR: error: expected compatible register or floating-point constant
  1691. // CHECK-ERROR-NEXT: fmov s9, #1.03125
  1692. // CHECK-ERROR-NEXT: ^
  1693. // CHECK-ERROR-NEXT: error: expected compatible register or floating-point constant
  1694. // CHECK-ERROR-NEXT: fmov s28, #1.96875
  1695. // CHECK-ERROR-NEXT: ^
  1696. ;; Explicitly encoded value too large
  1697. fmov s15, #0x100
  1698. // CHECK-ERROR: error: encoded floating point value out of range
  1699. // CHECK-ERROR-NEXT: fmov s15, #0x100
  1700. // CHECK-ERROR-NEXT: ^
  1701. ;; Not possible to fmov ZR to a whole vector
  1702. fmov v0.4s, #0.0
  1703. // CHECK-ERROR: error: expected compatible register or floating-point constant
  1704. // CHECK-ERROR-NEXT: fmov v0.4s, #0.0
  1705. // CHECK-ERROR-NEXT: ^
  1706. //------------------------------------------------------------------------------
  1707. // Floating-point <-> integer conversion
  1708. //------------------------------------------------------------------------------
  1709. fmov x3, v0.d[0]
  1710. fmov v29.1d[1], x2
  1711. fmov x7, v0.d[2]
  1712. fcvtns sp, s5
  1713. scvtf s6, wsp
  1714. // CHECK-ERROR: error: expected lane specifier '[1]'
  1715. // CHECK-ERROR-NEXT: fmov x3, v0.d[0]
  1716. // CHECK-ERROR-NEXT: ^
  1717. // CHECK-ERROR-AARCH64-NEXT: error: lane number incompatible with layout
  1718. // CHECK-ERROR-ARM64-NEXT: error: invalid operand for instruction
  1719. // CHECK-ERROR-NEXT: fmov v29.1d[1], x2
  1720. // CHECK-ERROR-NEXT: ^
  1721. // CHECK-ERROR-AARCH64-NEXT: error: lane number incompatible with layout
  1722. // CHECK-ERROR-ARM64-NEXT: error: expected lane specifier '[1]'
  1723. // CHECK-ERROR-NEXT: fmov x7, v0.d[2]
  1724. // CHECK-ERROR-NEXT: ^
  1725. // CHECK-ERROR-NEXT: error: invalid operand for instruction
  1726. // CHECK-ERROR-NEXT: fcvtns sp, s5
  1727. // CHECK-ERROR-NEXT: ^
  1728. // CHECK-ERROR-NEXT: error: invalid operand for instruction
  1729. // CHECK-ERROR-NEXT: scvtf s6, wsp
  1730. // CHECK-ERROR-NEXT: ^
  1731. //------------------------------------------------------------------------------
  1732. // Load-register (literal)
  1733. //------------------------------------------------------------------------------
  1734. ldr sp, some_label
  1735. ldrsw w3, somewhere
  1736. ldr v0, some_label
  1737. // CHECK-ERROR: error: invalid operand for instruction
  1738. // CHECK-ERROR-NEXT: ldr sp, some_label
  1739. // CHECK-ERROR-NEXT: ^
  1740. // CHECK-ERROR-NEXT: error: invalid operand for instruction
  1741. // CHECK-ERROR-NEXT: ldrsw w3, somewhere
  1742. // CHECK-ERROR-NEXT: ^
  1743. // CHECK-ERROR-NEXT: error: invalid operand for instruction
  1744. // CHECK-ERROR-NEXT: ldr v0, some_label
  1745. // CHECK-ERROR-NEXT: ^
  1746. ldrsw x2, #1048576
  1747. ldr q0, #-1048580
  1748. ldr x0, #2
  1749. // CHECK-ERROR: error: expected label or encodable integer pc offset
  1750. // CHECK-ERROR-NEXT: ldrsw x2, #1048576
  1751. // CHECK-ERROR-NEXT: ^
  1752. // CHECK-ERROR-NEXT: error: expected label or encodable integer pc offset
  1753. // CHECK-ERROR-NEXT: ldr q0, #-1048580
  1754. // CHECK-ERROR-NEXT: ^
  1755. // CHECK-ERROR-NEXT: error: expected label or encodable integer pc offset
  1756. // CHECK-ERROR-NEXT: ldr x0, #2
  1757. // CHECK-ERROR-NEXT: ^
  1758. //------------------------------------------------------------------------------
  1759. // Load/store exclusive
  1760. //------------------------------------------------------------------------------
  1761. stxrb w2, w3, [x4, #20]
  1762. stlxrh w10, w11, [w2]
  1763. // CHECK-ERROR-AARCH64: error: expected '#0'
  1764. // CHECK-ERROR-ARM64: error: index must be absent or #0
  1765. // CHECK-ERROR-NEXT: stxrb w2, w3, [x4, #20]
  1766. // CHECK-ERROR-NEXT: ^
  1767. // CHECK-ERROR: error: invalid operand for instruction
  1768. // CHECK-ERROR-NEXT: stlxrh w10, w11, [w2]
  1769. // CHECK-ERROR-NEXT: ^
  1770. stlxr x20, w21, [sp]
  1771. // CHECK-ERROR: error: invalid operand for instruction
  1772. // CHECK-ERROR-NEXT: stlxr x20, w21, [sp]
  1773. // CHECK-ERROR-NEXT: ^
  1774. ldxr sp, [sp]
  1775. // CHECK-ERROR: error: invalid operand for instruction
  1776. // CHECK-ERROR-NEXT: ldxr sp, [sp]
  1777. // CHECK-ERROR-NEXT: ^
  1778. stxp x1, x2, x3, [x4]
  1779. // CHECK-ERROR: error: invalid operand for instruction
  1780. // CHECK-ERROR-NEXT: stxp x1, x2, x3, [x4]
  1781. // CHECK-ERROR-NEXT: ^
  1782. stlxp w5, x1, w4, [x5]
  1783. // CHECK-ERROR: error: invalid operand for instruction
  1784. // CHECK-ERROR-NEXT: stlxp w5, x1, w4, [x5]
  1785. // CHECK-ERROR-NEXT: ^
  1786. stlxp w17, w6, x7, [x22]
  1787. // CHECK-ERROR: error: invalid operand for instruction
  1788. // CHECK-ERROR-NEXT: stlxp w17, w6, x7, [x22]
  1789. // CHECK-ERROR-NEXT: ^
  1790. //------------------------------------------------------------------------------
  1791. // Load/store (unscaled immediate)
  1792. //------------------------------------------------------------------------------
  1793. ldur v0, [x0, #0]
  1794. stur v0, [x0, #0]
  1795. // CHECK-ERROR-NEXT: error: invalid operand for instruction
  1796. // CHECK-ERROR-NEXT: ldur v0, [x0, #0]
  1797. // CHECK-ERROR-NEXT: ^
  1798. // CHECK-ERROR-NEXT: error: invalid operand for instruction
  1799. // CHECK-ERROR-NEXT: stur v0, [x0, #0]
  1800. // CHECK-ERROR-NEXT: ^
  1801. ldurb w2, [sp, #256]
  1802. sturh w17, [x1, #256]
  1803. ldursw x20, [x1, #256]
  1804. ldur x12, [sp, #256]
  1805. // CHECK-ERROR: error: {{expected|index must be an}} integer in range [-256, 255]
  1806. // CHECK-ERROR-NEXT: ldurb w2, [sp, #256]
  1807. // CHECK-ERROR-NEXT: ^
  1808. // CHECK-ERROR-NEXT: error: {{expected|index must be an}} integer in range [-256, 255]
  1809. // CHECK-ERROR-NEXT: sturh w17, [x1, #256]
  1810. // CHECK-ERROR-NEXT: ^
  1811. // CHECK-ERROR-NEXT: error: {{expected|index must be an}} integer in range [-256, 255]
  1812. // CHECK-ERROR-NEXT: ldursw x20, [x1, #256]
  1813. // CHECK-ERROR-NEXT: ^
  1814. // CHECK-ERROR-NEXT: error: {{expected|index must be an}} integer in range [-256, 255]
  1815. // CHECK-ERROR-NEXT: ldur x12, [sp, #256]
  1816. // CHECK-ERROR-NEXT: ^
  1817. stur h2, [x2, #-257]
  1818. stur b2, [x2, #-257]
  1819. ldursb x9, [sp, #-257]
  1820. ldur w2, [x30, #-257]
  1821. stur q9, [x20, #-257]
  1822. // CHECK-ERROR: error: {{expected|index must be an}} integer in range [-256, 255]
  1823. // CHECK-ERROR-NEXT: stur h2, [x2, #-257]
  1824. // CHECK-ERROR-NEXT: ^
  1825. // CHECK-ERROR-NEXT: error: {{expected|index must be an}} integer in range [-256, 255]
  1826. // CHECK-ERROR-NEXT: stur b2, [x2, #-257]
  1827. // CHECK-ERROR-NEXT: ^
  1828. // CHECK-ERROR-NEXT: error: {{expected|index must be an}} integer in range [-256, 255]
  1829. // CHECK-ERROR-NEXT: ldursb x9, [sp, #-257]
  1830. // CHECK-ERROR-NEXT: ^
  1831. // CHECK-ERROR-NEXT: error: {{expected|index must be an}} integer in range [-256, 255]
  1832. // CHECK-ERROR-NEXT: ldur w2, [x30, #-257]
  1833. // CHECK-ERROR-NEXT: ^
  1834. // CHECK-ERROR-NEXT: error: {{expected|index must be an}} integer in range [-256, 255]
  1835. // CHECK-ERROR-NEXT: stur q9, [x20, #-257]
  1836. // CHECK-ERROR-NEXT: ^
  1837. prfum pstl3strm, [xzr]
  1838. // CHECK-ERROR: error: invalid operand for instruction
  1839. // CHECK-ERROR-NEXT: prfum pstl3strm, [xzr]
  1840. // CHECK-ERROR-NEXT: ^
  1841. //------------------------------------------------------------------------------
  1842. // Load-store register (immediate post-indexed)
  1843. //------------------------------------------------------------------------------
  1844. ldr v0, [x0], #0
  1845. str v0, [x0], #0
  1846. // CHECK-ERROR: error: invalid operand for instruction
  1847. // CHECK-ERROR-NEXT: ldr v0, [x0], #0
  1848. // CHECK-ERROR-NEXT: ^
  1849. // CHECK-ERROR: error: invalid operand for instruction
  1850. // CHECK-ERROR-NEXT: str v0, [x0], #0
  1851. // CHECK-ERROR-NEXT: ^
  1852. ldr x3, [x4, #25], #0
  1853. ldr x4, [x9, #0], #4
  1854. // CHECK-ERROR-AARCH64: error: invalid operand for instruction
  1855. // CHECK-ERROR-ARM64: error: invalid operand for instruction
  1856. // CHECK-ERROR-NEXT: ldr x3, [x4, #25], #0
  1857. // CHECK-ERROR-NEXT: ^
  1858. // CHECK-ERROR-AARCH64-NEXT: error: expected label or encodable integer pc offset
  1859. // CHECK-ERROR-AARCH64-NEXT: ldr x4, [x9, #0], #4
  1860. // CHECK-ERROR-AARCH64-NEXT: ^
  1861. strb w1, [x19], #256
  1862. strb w9, [sp], #-257
  1863. strh w1, [x19], #256
  1864. strh w9, [sp], #-257
  1865. str w1, [x19], #256
  1866. str w9, [sp], #-257
  1867. // CHECK-ERROR: error: {{expected|index must be an}} integer in range [-256, 255]
  1868. // CHECK-ERROR-NEXT: strb w1, [x19], #256
  1869. // CHECK-ERROR-NEXT: ^
  1870. // CHECK-ERROR-NEXT: error: {{expected|index must be an}} integer in range [-256, 255]
  1871. // CHECK-ERROR-NEXT: strb w9, [sp], #-257
  1872. // CHECK-ERROR-NEXT: ^
  1873. // CHECK-ERROR-NEXT: error: {{expected|index must be an}} integer in range [-256, 255]
  1874. // CHECK-ERROR-NEXT: strh w1, [x19], #256
  1875. // CHECK-ERROR-NEXT: ^
  1876. // CHECK-ERROR-NEXT: error: {{expected|index must be an}} integer in range [-256, 255]
  1877. // CHECK-ERROR-NEXT: strh w9, [sp], #-257
  1878. // CHECK-ERROR-NEXT: ^
  1879. // CHECK-ERROR-NEXT: error: {{expected|index must be an}} integer in range [-256, 255]
  1880. // CHECK-ERROR-NEXT: str w1, [x19], #256
  1881. // CHECK-ERROR-NEXT: ^
  1882. // CHECK-ERROR-NEXT: error: {{expected|index must be an}} integer in range [-256, 255]
  1883. // CHECK-ERROR-NEXT: str w9, [sp], #-257
  1884. // CHECK-ERROR-NEXT: ^
  1885. ldrb w1, [x19], #256
  1886. ldrb w9, [sp], #-257
  1887. ldrh w1, [x19], #256
  1888. ldrh w9, [sp], #-257
  1889. ldr w1, [x19], #256
  1890. ldr w9, [sp], #-257
  1891. // CHECK-ERROR: error: {{expected|index must be an}} integer in range [-256, 255]
  1892. // CHECK-ERROR-NEXT: ldrb w1, [x19], #256
  1893. // CHECK-ERROR-NEXT: ^
  1894. // CHECK-ERROR-NEXT: error: {{expected|index must be an}} integer in range [-256, 255]
  1895. // CHECK-ERROR-NEXT: ldrb w9, [sp], #-257
  1896. // CHECK-ERROR-NEXT: ^
  1897. // CHECK-ERROR-NEXT: error: {{expected|index must be an}} integer in range [-256, 255]
  1898. // CHECK-ERROR-NEXT: ldrh w1, [x19], #256
  1899. // CHECK-ERROR-NEXT: ^
  1900. // CHECK-ERROR-NEXT: error: {{expected|index must be an}} integer in range [-256, 255]
  1901. // CHECK-ERROR-NEXT: ldrh w9, [sp], #-257
  1902. // CHECK-ERROR-NEXT: ^
  1903. // CHECK-ERROR-NEXT: error: {{expected|index must be an}} integer in range [-256, 255]
  1904. // CHECK-ERROR-NEXT: ldr w1, [x19], #256
  1905. // CHECK-ERROR-NEXT: ^
  1906. // CHECK-ERROR-NEXT: error: {{expected|index must be an}} integer in range [-256, 255]
  1907. // CHECK-ERROR-NEXT: ldr w9, [sp], #-257
  1908. // CHECK-ERROR-NEXT: ^
  1909. ldrsb x2, [x3], #256
  1910. ldrsb x22, [x13], #-257
  1911. ldrsh x2, [x3], #256
  1912. ldrsh x22, [x13], #-257
  1913. ldrsw x2, [x3], #256
  1914. ldrsw x22, [x13], #-257
  1915. // CHECK-ERROR: error: {{expected|index must be an}} integer in range [-256, 255]
  1916. // CHECK-ERROR-NEXT: ldrsb x2, [x3], #256
  1917. // CHECK-ERROR-NEXT: ^
  1918. // CHECK-ERROR-NEXT: error: {{expected|index must be an}} integer in range [-256, 255]
  1919. // CHECK-ERROR-NEXT: ldrsb x22, [x13], #-257
  1920. // CHECK-ERROR-NEXT: ^
  1921. // CHECK-ERROR-NEXT: error: {{expected|index must be an}} integer in range [-256, 255]
  1922. // CHECK-ERROR-NEXT: ldrsh x2, [x3], #256
  1923. // CHECK-ERROR-NEXT: ^
  1924. // CHECK-ERROR-NEXT: error: {{expected|index must be an}} integer in range [-256, 255]
  1925. // CHECK-ERROR-NEXT: ldrsh x22, [x13], #-257
  1926. // CHECK-ERROR-NEXT: ^
  1927. // CHECK-ERROR-NEXT: error: {{expected|index must be an}} integer in range [-256, 255]
  1928. // CHECK-ERROR-NEXT: ldrsw x2, [x3], #256
  1929. // CHECK-ERROR-NEXT: ^
  1930. // CHECK-ERROR-NEXT: error: {{expected|index must be an}} integer in range [-256, 255]
  1931. // CHECK-ERROR-NEXT: ldrsw x22, [x13], #-257
  1932. // CHECK-ERROR-NEXT: ^
  1933. ldrsb w2, [x3], #256
  1934. ldrsb w22, [x13], #-257
  1935. ldrsh w2, [x3], #256
  1936. ldrsh w22, [x13], #-257
  1937. // CHECK-ERROR: error: {{expected|index must be an}} integer in range [-256, 255]
  1938. // CHECK-ERROR-NEXT: ldrsb w2, [x3], #256
  1939. // CHECK-ERROR-NEXT: ^
  1940. // CHECK-ERROR-NEXT: error: {{expected|index must be an}} integer in range [-256, 255]
  1941. // CHECK-ERROR-NEXT: ldrsb w22, [x13], #-257
  1942. // CHECK-ERROR-NEXT: ^
  1943. // CHECK-ERROR-NEXT: error: {{expected|index must be an}} integer in range [-256, 255]
  1944. // CHECK-ERROR-NEXT: ldrsh w2, [x3], #256
  1945. // CHECK-ERROR-NEXT: ^
  1946. // CHECK-ERROR-NEXT: error: {{expected|index must be an}} integer in range [-256, 255]
  1947. // CHECK-ERROR-NEXT: ldrsh w22, [x13], #-257
  1948. // CHECK-ERROR-NEXT: ^
  1949. str b3, [x3], #256
  1950. str b3, [x13], #-257
  1951. str h3, [x3], #256
  1952. str h3, [x13], #-257
  1953. str s3, [x3], #256
  1954. str s3, [x13], #-257
  1955. str d3, [x3], #256
  1956. str d3, [x13], #-257
  1957. str q3, [x3], #256
  1958. str q3, [x13], #-257
  1959. // CHECK-ERROR: error: {{expected|index must be an}} integer in range [-256, 255]
  1960. // CHECK-ERROR-NEXT: str b3, [x3], #256
  1961. // CHECK-ERROR-NEXT: ^
  1962. // CHECK-ERROR-NEXT: error: {{expected|index must be an}} integer in range [-256, 255]
  1963. // CHECK-ERROR-NEXT: str b3, [x13], #-257
  1964. // CHECK-ERROR-NEXT: ^
  1965. // CHECK-ERROR-NEXT: error: {{expected|index must be an}} integer in range [-256, 255]
  1966. // CHECK-ERROR-NEXT: str h3, [x3], #256
  1967. // CHECK-ERROR-NEXT: ^
  1968. // CHECK-ERROR-NEXT: error: {{expected|index must be an}} integer in range [-256, 255]
  1969. // CHECK-ERROR-NEXT: str h3, [x13], #-257
  1970. // CHECK-ERROR-NEXT: ^
  1971. // CHECK-ERROR-NEXT: error: {{expected|index must be an}} integer in range [-256, 255]
  1972. // CHECK-ERROR-NEXT: str s3, [x3], #256
  1973. // CHECK-ERROR-NEXT: ^
  1974. // CHECK-ERROR-NEXT: error: {{expected|index must be an}} integer in range [-256, 255]
  1975. // CHECK-ERROR-NEXT: str s3, [x13], #-257
  1976. // CHECK-ERROR-NEXT: ^
  1977. // CHECK-ERROR-NEXT: error: {{expected|index must be an}} integer in range [-256, 255]
  1978. // CHECK-ERROR-NEXT: str d3, [x3], #256
  1979. // CHECK-ERROR-NEXT: ^
  1980. // CHECK-ERROR-NEXT: error: {{expected|index must be an}} integer in range [-256, 255]
  1981. // CHECK-ERROR-NEXT: str d3, [x13], #-257
  1982. // CHECK-ERROR-NEXT: ^
  1983. // CHECK-ERROR-NEXT: error: {{expected|index must be an}} integer in range [-256, 255]
  1984. // CHECK-ERROR-NEXT: str q3, [x3], #256
  1985. // CHECK-ERROR-NEXT: ^
  1986. // CHECK-ERROR-NEXT: error: {{expected|index must be an}} integer in range [-256, 255]
  1987. // CHECK-ERROR-NEXT: str q3, [x13], #-257
  1988. // CHECK-ERROR-NEXT: ^
  1989. ldr b3, [x3], #256
  1990. ldr b3, [x13], #-257
  1991. ldr h3, [x3], #256
  1992. ldr h3, [x13], #-257
  1993. ldr s3, [x3], #256
  1994. ldr s3, [x13], #-257
  1995. ldr d3, [x3], #256
  1996. ldr d3, [x13], #-257
  1997. ldr q3, [x3], #256
  1998. ldr q3, [x13], #-257
  1999. // CHECK-ERROR: error: {{expected|index must be an}} integer in range [-256, 255]
  2000. // CHECK-ERROR-NEXT: ldr b3, [x3], #256
  2001. // CHECK-ERROR-NEXT: ^
  2002. // CHECK-ERROR-NEXT: error: {{expected|index must be an}} integer in range [-256, 255]
  2003. // CHECK-ERROR-NEXT: ldr b3, [x13], #-257
  2004. // CHECK-ERROR-NEXT: ^
  2005. // CHECK-ERROR-NEXT: error: {{expected|index must be an}} integer in range [-256, 255]
  2006. // CHECK-ERROR-NEXT: ldr h3, [x3], #256
  2007. // CHECK-ERROR-NEXT: ^
  2008. // CHECK-ERROR-NEXT: error: {{expected|index must be an}} integer in range [-256, 255]
  2009. // CHECK-ERROR-NEXT: ldr h3, [x13], #-257
  2010. // CHECK-ERROR-NEXT: ^
  2011. // CHECK-ERROR-NEXT: error: {{expected|index must be an}} integer in range [-256, 255]
  2012. // CHECK-ERROR-NEXT: ldr s3, [x3], #256
  2013. // CHECK-ERROR-NEXT: ^
  2014. // CHECK-ERROR-NEXT: error: {{expected|index must be an}} integer in range [-256, 255]
  2015. // CHECK-ERROR-NEXT: ldr s3, [x13], #-257
  2016. // CHECK-ERROR-NEXT: ^
  2017. // CHECK-ERROR-NEXT: error: {{expected|index must be an}} integer in range [-256, 255]
  2018. // CHECK-ERROR-NEXT: ldr d3, [x3], #256
  2019. // CHECK-ERROR-NEXT: ^
  2020. // CHECK-ERROR-NEXT: error: {{expected|index must be an}} integer in range [-256, 255]
  2021. // CHECK-ERROR-NEXT: ldr d3, [x13], #-257
  2022. // CHECK-ERROR-NEXT: ^
  2023. // CHECK-ERROR-NEXT: error: {{expected|index must be an}} integer in range [-256, 255]
  2024. // CHECK-ERROR-NEXT: ldr q3, [x3], #256
  2025. // CHECK-ERROR-NEXT: ^
  2026. // CHECK-ERROR-NEXT: error: {{expected|index must be an}} integer in range [-256, 255]
  2027. // CHECK-ERROR-NEXT: ldr q3, [x13], #-257
  2028. // CHECK-ERROR-NEXT: ^
  2029. //------------------------------------------------------------------------------
  2030. // Load-store register (immediate pre-indexed)
  2031. //------------------------------------------------------------------------------
  2032. ldr v0, [x0, #0]!
  2033. str v0, [x0, #0]!
  2034. // CHECK-ERROR: error: invalid operand for instruction
  2035. // CHECK-ERROR-NEXT: ldr v0, [x0, #0]!
  2036. // CHECK-ERROR-NEXT: ^
  2037. // CHECK-ERROR: error: invalid operand for instruction
  2038. // CHECK-ERROR-NEXT: str v0, [x0, #0]!
  2039. // CHECK-ERROR-NEXT: ^
  2040. ldr x3, [x4]!
  2041. // CHECK-ERROR: error:
  2042. // CHECK-ERROR-NEXT: ldr x3, [x4]!
  2043. // CHECK-ERROR-NEXT: ^
  2044. strb w1, [x19, #256]!
  2045. strb w9, [sp, #-257]!
  2046. strh w1, [x19, #256]!
  2047. strh w9, [sp, #-257]!
  2048. str w1, [x19, #256]!
  2049. str w9, [sp, #-257]!
  2050. // CHECK-ERROR: error: invalid operand for instruction
  2051. // CHECK-ERROR-NEXT: strb w1, [x19, #256]!
  2052. // CHECK-ERROR-NEXT: ^
  2053. // CHECK-ERROR-NEXT: error: {{expected|index must be an}} integer in range [-256, 255]
  2054. // CHECK-ERROR-NEXT: strb w9, [sp, #-257]!
  2055. // CHECK-ERROR-NEXT: ^
  2056. // CHECK-ERROR-NEXT: error: invalid operand for instruction
  2057. // CHECK-ERROR-NEXT: strh w1, [x19, #256]!
  2058. // CHECK-ERROR-NEXT: ^
  2059. // CHECK-ERROR-NEXT: error: {{expected|index must be an}} integer in range [-256, 255]
  2060. // CHECK-ERROR-NEXT: strh w9, [sp, #-257]!
  2061. // CHECK-ERROR-NEXT: ^
  2062. // CHECK-ERROR-NEXT: error: invalid operand for instruction
  2063. // CHECK-ERROR-NEXT: str w1, [x19, #256]!
  2064. // CHECK-ERROR-NEXT: ^
  2065. // CHECK-ERROR-NEXT: error: {{expected|index must be an}} integer in range [-256, 255]
  2066. // CHECK-ERROR-NEXT: str w9, [sp, #-257]!
  2067. // CHECK-ERROR-NEXT: ^
  2068. ldrb w1, [x19, #256]!
  2069. ldrb w9, [sp, #-257]!
  2070. ldrh w1, [x19, #256]!
  2071. ldrh w9, [sp, #-257]!
  2072. ldr w1, [x19, #256]!
  2073. ldr w9, [sp, #-257]!
  2074. // CHECK-ERROR: error: invalid operand for instruction
  2075. // CHECK-ERROR-NEXT: ldrb w1, [x19, #256]!
  2076. // CHECK-ERROR-NEXT: ^
  2077. // CHECK-ERROR-NEXT: error: {{expected|index must be an}} integer in range [-256, 255]
  2078. // CHECK-ERROR-NEXT: ldrb w9, [sp, #-257]!
  2079. // CHECK-ERROR-NEXT: ^
  2080. // CHECK-ERROR-NEXT: error: invalid operand for instruction
  2081. // CHECK-ERROR-NEXT: ldrh w1, [x19, #256]!
  2082. // CHECK-ERROR-NEXT: ^
  2083. // CHECK-ERROR-NEXT: error: {{expected|index must be an}} integer in range [-256, 255]
  2084. // CHECK-ERROR-NEXT: ldrh w9, [sp, #-257]!
  2085. // CHECK-ERROR-NEXT: ^
  2086. // CHECK-ERROR-NEXT: error: invalid operand for instruction
  2087. // CHECK-ERROR-NEXT: ldr w1, [x19, #256]!
  2088. // CHECK-ERROR-NEXT: ^
  2089. // CHECK-ERROR-NEXT: error: {{expected|index must be an}} integer in range [-256, 255]
  2090. // CHECK-ERROR-NEXT: ldr w9, [sp, #-257]!
  2091. // CHECK-ERROR-NEXT: ^
  2092. ldrsb x2, [x3, #256]!
  2093. ldrsb x22, [x13, #-257]!
  2094. ldrsh x2, [x3, #256]!
  2095. ldrsh x22, [x13, #-257]!
  2096. ldrsw x2, [x3, #256]!
  2097. ldrsw x22, [x13, #-257]!
  2098. // CHECK-ERROR: error: invalid operand for instruction
  2099. // CHECK-ERROR-NEXT: ldrsb x2, [x3, #256]!
  2100. // CHECK-ERROR-NEXT: ^
  2101. // CHECK-ERROR-NEXT: error: {{expected|index must be an}} integer in range [-256, 255]
  2102. // CHECK-ERROR-NEXT: ldrsb x22, [x13, #-257]!
  2103. // CHECK-ERROR-NEXT: ^
  2104. // CHECK-ERROR-NEXT: error: invalid operand for instruction
  2105. // CHECK-ERROR-NEXT: ldrsh x2, [x3, #256]!
  2106. // CHECK-ERROR-NEXT: ^
  2107. // CHECK-ERROR-NEXT: error: {{expected|index must be an}} integer in range [-256, 255]
  2108. // CHECK-ERROR-NEXT: ldrsh x22, [x13, #-257]!
  2109. // CHECK-ERROR-NEXT: ^
  2110. // CHECK-ERROR-NEXT: error: invalid operand for instruction
  2111. // CHECK-ERROR-NEXT: ldrsw x2, [x3, #256]!
  2112. // CHECK-ERROR-NEXT: ^
  2113. // CHECK-ERROR-NEXT: error: {{expected|index must be an}} integer in range [-256, 255]
  2114. // CHECK-ERROR-NEXT: ldrsw x22, [x13, #-257]!
  2115. // CHECK-ERROR-NEXT: ^
  2116. ldrsb w2, [x3, #256]!
  2117. ldrsb w22, [x13, #-257]!
  2118. ldrsh w2, [x3, #256]!
  2119. ldrsh w22, [x13, #-257]!
  2120. // CHECK-ERROR: error: invalid operand for instruction
  2121. // CHECK-ERROR-NEXT: ldrsb w2, [x3, #256]!
  2122. // CHECK-ERROR-NEXT: ^
  2123. // CHECK-ERROR-NEXT: error: {{expected|index must be an}} integer in range [-256, 255]
  2124. // CHECK-ERROR-NEXT: ldrsb w22, [x13, #-257]!
  2125. // CHECK-ERROR-NEXT: ^
  2126. // CHECK-ERROR-NEXT: error: invalid operand for instruction
  2127. // CHECK-ERROR-NEXT: ldrsh w2, [x3, #256]!
  2128. // CHECK-ERROR-NEXT: ^
  2129. // CHECK-ERROR-NEXT: error: {{expected|index must be an}} integer in range [-256, 255]
  2130. // CHECK-ERROR-NEXT: ldrsh w22, [x13, #-257]!
  2131. // CHECK-ERROR-NEXT: ^
  2132. str b3, [x3, #256]!
  2133. str b3, [x13, #-257]!
  2134. str h3, [x3, #256]!
  2135. str h3, [x13, #-257]!
  2136. str s3, [x3, #256]!
  2137. str s3, [x13, #-257]!
  2138. str d3, [x3, #256]!
  2139. str d3, [x13, #-257]!
  2140. // CHECK-ERROR: error: invalid operand for instruction
  2141. // CHECK-ERROR-NEXT: str b3, [x3, #256]!
  2142. // CHECK-ERROR-NEXT: ^
  2143. // CHECK-ERROR-NEXT: error: {{expected|index must be an}} integer in range [-256, 255]
  2144. // CHECK-ERROR-NEXT: str b3, [x13, #-257]!
  2145. // CHECK-ERROR-NEXT: ^
  2146. // CHECK-ERROR-NEXT: error: invalid operand for instruction
  2147. // CHECK-ERROR-NEXT: str h3, [x3, #256]!
  2148. // CHECK-ERROR-NEXT: ^
  2149. // CHECK-ERROR-NEXT: error: {{expected|index must be an}} integer in range [-256, 255]
  2150. // CHECK-ERROR-NEXT: str h3, [x13, #-257]!
  2151. // CHECK-ERROR-NEXT: ^
  2152. // CHECK-ERROR-NEXT: error: invalid operand for instruction
  2153. // CHECK-ERROR-NEXT: str s3, [x3, #256]!
  2154. // CHECK-ERROR-NEXT: ^
  2155. // CHECK-ERROR-NEXT: error: {{expected|index must be an}} integer in range [-256, 255]
  2156. // CHECK-ERROR-NEXT: str s3, [x13, #-257]!
  2157. // CHECK-ERROR-NEXT: ^
  2158. // CHECK-ERROR-NEXT: error: invalid operand for instruction
  2159. // CHECK-ERROR-NEXT: str d3, [x3, #256]!
  2160. // CHECK-ERROR-NEXT: ^
  2161. // CHECK-ERROR-NEXT: error: {{expected|index must be an}} integer in range [-256, 255]
  2162. // CHECK-ERROR-NEXT: str d3, [x13, #-257]!
  2163. // CHECK-ERROR-NEXT: ^
  2164. ldr b3, [x3, #256]!
  2165. ldr b3, [x13, #-257]!
  2166. ldr h3, [x3, #256]!
  2167. ldr h3, [x13, #-257]!
  2168. ldr s3, [x3, #256]!
  2169. ldr s3, [x13, #-257]!
  2170. ldr d3, [x3, #256]!
  2171. ldr d3, [x13, #-257]!
  2172. // CHECK-ERROR: error: invalid operand for instruction
  2173. // CHECK-ERROR-NEXT: ldr b3, [x3, #256]!
  2174. // CHECK-ERROR-NEXT: ^
  2175. // CHECK-ERROR-NEXT: error: {{expected|index must be an}} integer in range [-256, 255]
  2176. // CHECK-ERROR-NEXT: ldr b3, [x13, #-257]!
  2177. // CHECK-ERROR-NEXT: ^
  2178. // CHECK-ERROR-NEXT: error: invalid operand for instruction
  2179. // CHECK-ERROR-NEXT: ldr h3, [x3, #256]!
  2180. // CHECK-ERROR-NEXT: ^
  2181. // CHECK-ERROR-NEXT: error: {{expected|index must be an}} integer in range [-256, 255]
  2182. // CHECK-ERROR-NEXT: ldr h3, [x13, #-257]!
  2183. // CHECK-ERROR-NEXT: ^
  2184. // CHECK-ERROR-NEXT: error: invalid operand for instruction
  2185. // CHECK-ERROR-NEXT: ldr s3, [x3, #256]!
  2186. // CHECK-ERROR-NEXT: ^
  2187. // CHECK-ERROR-NEXT: error: {{expected|index must be an}} integer in range [-256, 255]
  2188. // CHECK-ERROR-NEXT: ldr s3, [x13, #-257]!
  2189. // CHECK-ERROR-NEXT: ^
  2190. // CHECK-ERROR-NEXT: error: invalid operand for instruction
  2191. // CHECK-ERROR-NEXT: ldr d3, [x3, #256]!
  2192. // CHECK-ERROR-NEXT: ^
  2193. // CHECK-ERROR-NEXT: error: {{expected|index must be an}} integer in range [-256, 255]
  2194. // CHECK-ERROR-NEXT: ldr d3, [x13, #-257]!
  2195. // CHECK-ERROR-NEXT: ^
  2196. //------------------------------------------------------------------------------
  2197. // Load/store (unprivileged)
  2198. //------------------------------------------------------------------------------
  2199. ldtrb w2, [sp, #256]
  2200. sttrh w17, [x1, #256]
  2201. ldtrsw x20, [x1, #256]
  2202. ldtr x12, [sp, #256]
  2203. // CHECK-ERROR: error: {{expected|index must be an}} integer in range [-256, 255]
  2204. // CHECK-ERROR-NEXT: ldtrb w2, [sp, #256]
  2205. // CHECK-ERROR-NEXT: ^
  2206. // CHECK-ERROR-NEXT: error: {{expected|index must be an}} integer in range [-256, 255]
  2207. // CHECK-ERROR-NEXT: sttrh w17, [x1, #256]
  2208. // CHECK-ERROR-NEXT: ^
  2209. // CHECK-ERROR-NEXT: error: {{expected|index must be an}} integer in range [-256, 255]
  2210. // CHECK-ERROR-NEXT: ldtrsw x20, [x1, #256]
  2211. // CHECK-ERROR-NEXT: ^
  2212. // CHECK-ERROR-NEXT: error: {{expected|index must be an}} integer in range [-256, 255]
  2213. // CHECK-ERROR-NEXT: ldtr x12, [sp, #256]
  2214. // CHECK-ERROR-NEXT: ^
  2215. sttr h2, [x2, #-257]
  2216. sttr b2, [x2, #-257]
  2217. ldtrsb x9, [sp, #-257]
  2218. ldtr w2, [x30, #-257]
  2219. sttr q9, [x20, #-257]
  2220. // CHECK-ERROR: error: invalid operand for instruction
  2221. // CHECK-ERROR-NEXT: sttr h2, [x2, #-257]
  2222. // CHECK-ERROR-NEXT: ^
  2223. // CHECK-ERROR-NEXT: error: invalid operand for instruction
  2224. // CHECK-ERROR-NEXT: sttr b2, [x2, #-257]
  2225. // CHECK-ERROR-NEXT: ^
  2226. // CHECK-ERROR-NEXT: error: {{expected|index must be an}} integer in range [-256, 255]
  2227. // CHECK-ERROR-NEXT: ldtrsb x9, [sp, #-257]
  2228. // CHECK-ERROR-NEXT: ^
  2229. // CHECK-ERROR-NEXT: error: {{expected|index must be an}} integer in range [-256, 255]
  2230. // CHECK-ERROR-NEXT: ldtr w2, [x30, #-257]
  2231. // CHECK-ERROR-NEXT: ^
  2232. // CHECK-ERROR-NEXT: error: invalid operand for instruction
  2233. // CHECK-ERROR-NEXT: sttr q9, [x20, #-257]
  2234. // CHECK-ERROR-NEXT: ^
  2235. //------------------------------------------------------------------------------
  2236. // Load/store (unsigned immediate)
  2237. //------------------------------------------------------------------------------
  2238. ldr v0, [x0, #0]
  2239. str v0, [x0, #0]
  2240. // CHECK-ERROR: error: invalid operand for instruction
  2241. // CHECK-ERROR-NEXT: ldr v0, [x0, #0]
  2242. // CHECK-ERROR-NEXT: ^
  2243. // CHECK-ERROR: error: invalid operand for instruction
  2244. // CHECK-ERROR-NEXT: str v0, [x0, #0]
  2245. // CHECK-ERROR-NEXT: ^
  2246. //// Out of range immediates
  2247. ldr q0, [x11, #65536]
  2248. ldr x0, [sp, #32768]
  2249. ldr w0, [x4, #16384]
  2250. ldrh w2, [x21, #8192]
  2251. ldrb w3, [x12, #4096]
  2252. // CHECK-ERROR: error: {{expected|index must be an}} integer in range [-256, 255]
  2253. // CHECK-ERROR-NEXT: ldr q0, [x11, #65536]
  2254. // CHECK-ERROR-NEXT: ^
  2255. // CHECK-ERROR-NEXT: error: {{expected|index must be an}} integer in range [-256, 255]
  2256. // CHECK-ERROR-NEXT: ldr x0, [sp, #32768]
  2257. // CHECK-ERROR-NEXT: ^
  2258. // CHECK-ERROR-NEXT: error: {{expected|index must be an}} integer in range [-256, 255]
  2259. // CHECK-ERROR-NEXT: ldr w0, [x4, #16384]
  2260. // CHECK-ERROR-NEXT: ^
  2261. // CHECK-ERROR-NEXT: error: {{expected|index must be an}} integer in range [-256, 255]
  2262. // CHECK-ERROR-NEXT: ldrh w2, [x21, #8192]
  2263. // CHECK-ERROR-NEXT: ^
  2264. // CHECK-ERROR-NEXT: error: {{expected|index must be an}} integer in range [-256, 255]
  2265. // CHECK-ERROR-NEXT: ldrb w3, [x12, #4096]
  2266. // CHECK-ERROR-NEXT: ^
  2267. //// Misaligned addresses
  2268. ldr w0, [x0, #2]
  2269. ldrsh w2, [x0, #123]
  2270. str q0, [x0, #8]
  2271. // CHECK-ERROR-AARCH64: error: too few operands for instruction
  2272. // CHECK-ERROR-AARCH64-NEXT: ldr w0, [x0, #2]
  2273. // CHECK-ERROR-AARCH64-NEXT: ^
  2274. // CHECK-ERROR-AARCH64-NEXT: error: too few operands for instruction
  2275. // CHECK-ERROR-AARCH64-NEXT: ldrsh w2, [x0, #123]
  2276. // CHECK-ERROR-AARCH64-NEXT: ^
  2277. // CHECK-ERROR-AARCH64-NEXT: error: too few operands for instruction
  2278. // CHECK-ERROR-AARCH64-NEXT: str q0, [x0, #8]
  2279. // CHECK-ERROR-AARCH64-NEXT: ^
  2280. //// 32-bit addresses
  2281. ldr w0, [w20]
  2282. ldrsh x3, [wsp]
  2283. // CHECK-ERROR: error: invalid operand for instruction
  2284. // CHECK-ERROR-NEXT: ldr w0, [w20]
  2285. // CHECK-ERROR-NEXT: ^
  2286. // CHECK-ERROR-NEXT: error: invalid operand for instruction
  2287. // CHECK-ERROR-NEXT: ldrsh x3, [wsp]
  2288. // CHECK-ERROR-NEXT: ^
  2289. //// Store things
  2290. strb w0, [wsp]
  2291. strh w31, [x23, #1]
  2292. str x5, [x22, #12]
  2293. str w7, [x12, #16384]
  2294. // CHECK-ERROR: error: invalid operand for instruction
  2295. // CHECK-ERROR-NEXT: strb w0, [wsp]
  2296. // CHECK-ERROR-NEXT: ^
  2297. // CHECK-ERROR-AARCH64: error: invalid operand for instruction
  2298. // CHECK-ERROR-AARCH64-NEXT: strh w31, [x23, #1]
  2299. // CHECK-ERROR-AARCH64-NEXT: ^
  2300. // CHECK-ERROR-AARCH64-NEXT: error: too few operands for instruction
  2301. // CHECK-ERROR-AARCH64-NEXT: str x5, [x22, #12]
  2302. // CHECK-ERROR-AARCH64-NEXT: ^
  2303. // CHECK-ERROR-NEXT: error: {{expected|index must be an}} integer in range [-256, 255]
  2304. // CHECK-ERROR-NEXT: str w7, [x12, #16384]
  2305. // CHECK-ERROR-NEXT: ^
  2306. //// Bad PRFMs
  2307. prfm #-1, [sp]
  2308. prfm #32, [sp, #8]
  2309. prfm pldl1strm, [w3, #8]
  2310. prfm wibble, [sp]
  2311. // CHECK-ERROR-AARCH64: error: Invalid immediate for instruction
  2312. // CHECK-ERROR-ARM64: error: prefetch operand out of range, [0,31] expected
  2313. // CHECK-ERROR-NEXT: prfm #-1, [sp]
  2314. // CHECK-ERROR-NEXT: ^
  2315. // CHECK-ERROR-AARCH64-NEXT: error: Invalid immediate for instruction
  2316. // CHECK-ERROR-ARM64-NEXT: error: prefetch operand out of range, [0,31] expected
  2317. // CHECK-ERROR-NEXT: prfm #32, [sp, #8]
  2318. // CHECK-ERROR-NEXT: ^
  2319. // CHECK-ERROR-NEXT: error: invalid operand for instruction
  2320. // CHECK-ERROR-NEXT: prfm pldl1strm, [w3, #8]
  2321. // CHECK-ERROR-NEXT: ^
  2322. // CHECK-ERROR-AARCH64-NEXT: error: operand specifier not recognised
  2323. // CHECK-ERROR-ARM64-NEXT: error: prefetch hint expected
  2324. // CHECK-ERROR-NEXT: prfm wibble, [sp]
  2325. // CHECK-ERROR-NEXT: ^
  2326. //------------------------------------------------------------------------------
  2327. // Load/store register (register offset)
  2328. //------------------------------------------------------------------------------
  2329. ldr v0, [x0, xzr]
  2330. ldr v0, [x0, x1, lsl #0]
  2331. ldr v0, [x0, x1, lsl #0]
  2332. str v0, [x0, xzr]
  2333. str v0, [x0, x1, lsl #0]
  2334. str v0, [x0, x1, lsl #0]
  2335. // CHECK-ERROR-NEXT: error: invalid operand for instruction
  2336. // CHECK-ERROR-NEXT: ldr v0, [x0, xzr]
  2337. // CHECK-ERROR-NEXT: ^
  2338. // CHECK-ERROR-NEXT: error: invalid operand for instruction
  2339. // CHECK-ERROR-NEXT: ldr v0, [x0, x1, lsl #0]
  2340. // CHECK-ERROR-NEXT: ^
  2341. // CHECK-ERROR-NEXT: error: invalid operand for instruction
  2342. // CHECK-ERROR-NEXT: ldr v0, [x0, x1, lsl #0]
  2343. // CHECK-ERROR-NEXT: ^
  2344. // CHECK-ERROR-NEXT: error: invalid operand for instruction
  2345. // CHECK-ERROR-NEXT: str v0, [x0, xzr]
  2346. // CHECK-ERROR-NEXT: ^
  2347. // CHECK-ERROR-NEXT: error: invalid operand for instruction
  2348. // CHECK-ERROR-NEXT: str v0, [x0, x1, lsl #0]
  2349. // CHECK-ERROR-NEXT: ^
  2350. // CHECK-ERROR-NEXT: error: invalid operand for instruction
  2351. // CHECK-ERROR-NEXT: str v0, [x0, x1, lsl #0]
  2352. // CHECK-ERROR-NEXT: ^
  2353. ldr w3, [xzr, x3]
  2354. ldr w4, [x0, x4, lsl]
  2355. ldr w9, [x5, x5, uxtw]
  2356. ldr w10, [x6, x9, sxtw #2]
  2357. ldr w11, [x7, w2, lsl #2]
  2358. ldr w12, [x8, w1, sxtx]
  2359. // CHECK-ERROR-NEXT: error: invalid operand for instruction
  2360. // CHECK-ERROR-NEXT: ldr w3, [xzr, x3]
  2361. // CHECK-ERROR-NEXT: ^
  2362. // CHECK-ERROR-NEXT: error: expected #imm after shift specifier
  2363. // CHECK-ERROR-NEXT: ldr w4, [x0, x4, lsl]
  2364. // CHECK-ERROR-NEXT: ^
  2365. // CHECK-ERROR-NEXT: error: expected 'lsl' or 'sxtx' with optional shift of #0 or #2
  2366. // CHECK-ERROR-NEXT: ldr w9, [x5, x5, uxtw]
  2367. // CHECK-ERROR-NEXT: ^
  2368. // CHECK-ERROR-NEXT: error: expected 'lsl' or 'sxtx' with optional shift of #0 or #2
  2369. // CHECK-ERROR-NEXT: ldr w10, [x6, x9, sxtw #2]
  2370. // CHECK-ERROR-NEXT: ^
  2371. // CHECK-ERROR-NEXT: error: expected 'uxtw' or 'sxtw' with optional shift of #0 or #2
  2372. // CHECK-ERROR-NEXT: ldr w11, [x7, w2, lsl #2]
  2373. // CHECK-ERROR-NEXT: ^
  2374. // CHECK-ERROR-NEXT: error: expected 'uxtw' or 'sxtw' with optional shift of #0 or #2
  2375. // CHECK-ERROR-NEXT: ldr w12, [x8, w1, sxtx]
  2376. // CHECK-ERROR-NEXT: ^
  2377. ldrsb w9, [x4, x2, lsl #-1]
  2378. strb w9, [x4, x2, lsl #1]
  2379. // CHECK-ERROR-NEXT: error: expected integer shift amount
  2380. // CHECK-ERROR-NEXT: ldrsb w9, [x4, x2, lsl #-1]
  2381. // CHECK-ERROR-NEXT: ^
  2382. // CHECK-ERROR-NEXT: error: expected 'lsl' or 'sxtx' with optional shift of #0
  2383. // CHECK-ERROR-NEXT: strb w9, [x4, x2, lsl #1]
  2384. // CHECK-ERROR-NEXT: ^
  2385. ldrsh w9, [x4, x2, lsl #-1]
  2386. ldr h13, [x4, w2, uxtw #2]
  2387. // CHECK-ERROR-NEXT: error: expected integer shift amount
  2388. // CHECK-ERROR-NEXT: ldrsh w9, [x4, x2, lsl #-1]
  2389. // CHECK-ERROR-NEXT: ^
  2390. // CHECK-ERROR-NEXT: error: expected 'uxtw' or 'sxtw' with optional shift of #0 or #1
  2391. // CHECK-ERROR-NEXT: ldr h13, [x4, w2, uxtw #2]
  2392. // CHECK-ERROR-NEXT: ^
  2393. str w9, [x5, w9, sxtw #-1]
  2394. str s3, [sp, w9, uxtw #1]
  2395. ldrsw x9, [x15, x4, sxtx #3]
  2396. // CHECK-ERROR-NEXT: error: expected integer shift amount
  2397. // CHECK-ERROR-NEXT: str w9, [x5, w9, sxtw #-1]
  2398. // CHECK-ERROR-NEXT: ^
  2399. // CHECK-ERROR-NEXT: error: expected 'uxtw' or 'sxtw' with optional shift of #0 or #2
  2400. // CHECK-ERROR-NEXT: str s3, [sp, w9, uxtw #1]
  2401. // CHECK-ERROR-NEXT: ^
  2402. // CHECK-ERROR-NEXT: error: expected 'lsl' or 'sxtx' with optional shift of #0 or #2
  2403. // CHECK-ERROR-NEXT: ldrsw x9, [x15, x4, sxtx #3]
  2404. // CHECK-ERROR-NEXT: ^
  2405. str xzr, [x5, x9, sxtx #-1]
  2406. prfm pldl3keep, [sp, x20, lsl #2]
  2407. ldr d3, [x20, wzr, uxtw #4]
  2408. // CHECK-ERROR-NEXT: error: expected integer shift amount
  2409. // CHECK-ERROR-NEXT: str xzr, [x5, x9, sxtx #-1]
  2410. // CHECK-ERROR-NEXT: ^
  2411. // CHECK-ERROR-NEXT: error: expected 'lsl' or 'sxtx' with optional shift of #0 or #3
  2412. // CHECK-ERROR-NEXT: prfm pldl3keep, [sp, x20, lsl #2]
  2413. // CHECK-ERROR-NEXT: ^
  2414. // CHECK-ERROR-NEXT: error: expected 'uxtw' or 'sxtw' with optional shift of #0 or #3
  2415. // CHECK-ERROR-NEXT: ldr d3, [x20, wzr, uxtw #4]
  2416. // CHECK-ERROR-NEXT: ^
  2417. ldr q5, [sp, x2, lsl #-1]
  2418. ldr q10, [x20, w4, uxtw #2]
  2419. str q21, [x20, w4, uxtw #5]
  2420. // CHECK-ERROR-NEXT: error: expected integer shift amount
  2421. // CHECK-ERROR-NEXT: ldr q5, [sp, x2, lsl #-1]
  2422. // CHECK-ERROR-NEXT: ^
  2423. // CHECK-ERROR-AARCH64-NEXT: error: expected 'lsl' or 'sxtw' with optional shift of #0 or #4
  2424. // CHECK-ERROR-ARM64-NEXT: error: expected 'uxtw' or 'sxtw' with optional shift of #0 or #4
  2425. // CHECK-ERROR-NEXT: ldr q10, [x20, w4, uxtw #2]
  2426. // CHECK-ERROR-NEXT: ^
  2427. // CHECK-ERROR-AARCH64-NEXT: error: expected 'lsl' or 'sxtw' with optional shift of #0 or #4
  2428. // CHECK-ERROR-ARM64-NEXT: error: expected 'uxtw' or 'sxtw' with optional shift of #0 or #4
  2429. // CHECK-ERROR-NEXT: str q21, [x20, w4, uxtw #5]
  2430. // CHECK-ERROR-NEXT: ^
  2431. //------------------------------------------------------------------------------
  2432. // Load/store register pair (offset)
  2433. //------------------------------------------------------------------------------
  2434. ldp v0, v1, [x0, #0]
  2435. stp v0, v1, [x0, #0]
  2436. // CHECK-ERROR-NEXT: error: invalid operand for instruction
  2437. // CHECK-ERROR-NEXT: ldp v0, v1, [x0, #0]
  2438. // CHECK-ERROR-NEXT: ^
  2439. // CHECK-ERROR-NEXT: error: invalid operand for instruction
  2440. // CHECK-ERROR-NEXT: stp v0, v1, [x0, #0]
  2441. // CHECK-ERROR-NEXT: ^
  2442. ldp w3, w2, [x4, #1]
  2443. stp w1, w2, [x3, #253]
  2444. stp w9, w10, [x5, #256]
  2445. ldp w11, w12, [x9, #-260]
  2446. stp wsp, w9, [sp]
  2447. // CHECK-ERROR: error: {{expected integer|index must be a}} multiple of 4 in range [-256, 252]
  2448. // CHECK-ERROR-NEXT: ldp w3, w2, [x4, #1]
  2449. // CHECK-ERROR-NEXT: ^
  2450. // CHECK-ERROR-NEXT: error: {{expected integer|index must be a}} multiple of 4 in range [-256, 252]
  2451. // CHECK-ERROR-NEXT: stp w1, w2, [x3, #253]
  2452. // CHECK-ERROR-NEXT: ^
  2453. // CHECK-ERROR-NEXT: error: {{expected integer|index must be a}} multiple of 4 in range [-256, 252]
  2454. // CHECK-ERROR-NEXT: stp w9, w10, [x5, #256]
  2455. // CHECK-ERROR-NEXT: ^
  2456. // CHECK-ERROR-NEXT: error: {{expected integer|index must be a}} multiple of 4 in range [-256, 252]
  2457. // CHECK-ERROR-NEXT: ldp w11, w12, [x9, #-260]
  2458. // CHECK-ERROR-NEXT: ^
  2459. // CHECK-ERROR-NEXT: error: invalid operand for instruction
  2460. // CHECK-ERROR-NEXT: stp wsp, w9, [sp]
  2461. // CHECK-ERROR-NEXT: ^
  2462. ldpsw x9, x2, [sp, #2]
  2463. ldpsw x1, x2, [x10, #256]
  2464. ldpsw x3, x4, [x11, #-260]
  2465. // CHECK-ERROR: error: {{expected integer|index must be a}} multiple of 4 in range [-256, 252]
  2466. // CHECK-ERROR-NEXT: ldpsw x9, x2, [sp, #2]
  2467. // CHECK-ERROR-NEXT: ^
  2468. // CHECK-ERROR-NEXT: error: {{expected integer|index must be a}} multiple of 4 in range [-256, 252]
  2469. // CHECK-ERROR-NEXT: ldpsw x1, x2, [x10, #256]
  2470. // CHECK-ERROR-NEXT: ^
  2471. // CHECK-ERROR-NEXT: error: {{expected integer|index must be a}} multiple of 4 in range [-256, 252]
  2472. // CHECK-ERROR-NEXT: ldpsw x3, x4, [x11, #-260]
  2473. // CHECK-ERROR-NEXT: ^
  2474. ldp x2, x5, [sp, #4]
  2475. ldp x5, x6, [x9, #512]
  2476. stp x7, x8, [x10, #-520]
  2477. // CHECK-ERROR: error: {{expected integer|index must be a}} multiple of 8 in range [-512, 504]
  2478. // CHECK-ERROR-NEXT: ldp x2, x5, [sp, #4]
  2479. // CHECK-ERROR-NEXT: ^
  2480. // CHECK-ERROR-NEXT: error: {{expected integer|index must be a}} multiple of 8 in range [-512, 504]
  2481. // CHECK-ERROR-NEXT: ldp x5, x6, [x9, #512]
  2482. // CHECK-ERROR-NEXT: ^
  2483. // CHECK-ERROR-NEXT: error: {{expected integer|index must be a}} multiple of 8 in range [-512, 504]
  2484. // CHECK-ERROR-NEXT: stp x7, x8, [x10, #-520]
  2485. // CHECK-ERROR-NEXT: ^
  2486. ldp sp, x3, [x10]
  2487. stp x3, sp, [x9]
  2488. // CHECK-ERROR: error: invalid operand for instruction
  2489. // CHECK-ERROR-NEXT: ldp sp, x3, [x10]
  2490. // CHECK-ERROR-NEXT: ^
  2491. // CHECK-ERROR-NEXT: error: invalid operand for instruction
  2492. // CHECK-ERROR-NEXT: stp x3, sp, [x9]
  2493. // CHECK-ERROR-NEXT: ^
  2494. stp s3, s5, [sp, #-2]
  2495. ldp s6, s26, [x4, #-260]
  2496. stp s13, s19, [x5, #256]
  2497. // CHECK-ERROR: error: {{expected integer|index must be a}} multiple of 4 in range [-256, 252]
  2498. // CHECK-ERROR-NEXT: stp s3, s5, [sp, #-2]
  2499. // CHECK-ERROR-NEXT: ^
  2500. // CHECK-ERROR-NEXT: error: {{expected integer|index must be a}} multiple of 4 in range [-256, 252]
  2501. // CHECK-ERROR-NEXT: ldp s6, s26, [x4, #-260]
  2502. // CHECK-ERROR-NEXT: ^
  2503. // CHECK-ERROR-NEXT: error: {{expected integer|index must be a}} multiple of 4 in range [-256, 252]
  2504. // CHECK-ERROR-NEXT: stp s13, s19, [x5, #256]
  2505. // CHECK-ERROR-NEXT: ^
  2506. ldp d3, d4, [xzr]
  2507. ldp d5, d6, [x0, #512]
  2508. stp d7, d8, [x0, #-520]
  2509. // CHECK-ERROR: error: invalid operand for instruction
  2510. // CHECK-ERROR-NEXT: ldp d3, d4, [xzr]
  2511. // CHECK-ERROR-NEXT: ^
  2512. // CHECK-ERROR-NEXT: error: {{expected integer|index must be a}} multiple of 8 in range [-512, 504]
  2513. // CHECK-ERROR-NEXT: ldp d5, d6, [x0, #512]
  2514. // CHECK-ERROR-NEXT: ^
  2515. // CHECK-ERROR-NEXT: error: {{expected integer|index must be a}} multiple of 8 in range [-512, 504]
  2516. // CHECK-ERROR-NEXT: stp d7, d8, [x0, #-520]
  2517. // CHECK-ERROR-NEXT: ^
  2518. ldp d3, q2, [sp]
  2519. ldp q3, q5, [sp, #8]
  2520. stp q20, q25, [x5, #1024]
  2521. ldp q30, q15, [x23, #-1040]
  2522. // CHECK-ERROR: error: invalid operand for instruction
  2523. // CHECK-ERROR-NEXT: ldp d3, q2, [sp]
  2524. // CHECK-ERROR-NEXT: ^
  2525. // CHECK-ERROR-NEXT: error: {{expected integer|index must be a}} multiple of 16 in range [-1024, 1008]
  2526. // CHECK-ERROR-NEXT: ldp q3, q5, [sp, #8]
  2527. // CHECK-ERROR-NEXT: ^
  2528. // CHECK-ERROR-NEXT: error: {{expected integer|index must be a}} multiple of 16 in range [-1024, 1008]
  2529. // CHECK-ERROR-NEXT: stp q20, q25, [x5, #1024]
  2530. // CHECK-ERROR-NEXT: ^
  2531. // CHECK-ERROR-NEXT: error: {{expected integer|index must be a}} multiple of 16 in range [-1024, 1008]
  2532. // CHECK-ERROR-NEXT: ldp q30, q15, [x23, #-1040]
  2533. // CHECK-ERROR-NEXT: ^
  2534. //------------------------------------------------------------------------------
  2535. // Load/store register pair (post-indexed)
  2536. //------------------------------------------------------------------------------
  2537. ldp v0, v1, [x0], #0
  2538. stp v0, v1, [x0], #0
  2539. // CHECK-ERROR-NEXT: error: invalid operand for instruction
  2540. // CHECK-ERROR-NEXT: ldp v0, v1, [x0], #0
  2541. // CHECK-ERROR-NEXT: ^
  2542. // CHECK-ERROR-NEXT: error: invalid operand for instruction
  2543. // CHECK-ERROR-NEXT: stp v0, v1, [x0], #0
  2544. // CHECK-ERROR-NEXT: ^
  2545. ldp w3, w2, [x4], #1
  2546. stp w1, w2, [x3], #253
  2547. stp w9, w10, [x5], #256
  2548. ldp w11, w12, [x9], #-260
  2549. stp wsp, w9, [sp], #0
  2550. // CHECK-ERROR: error: {{expected integer|index must be a}} multiple of 4 in range [-256, 252]
  2551. // CHECK-ERROR-NEXT: ldp w3, w2, [x4], #1
  2552. // CHECK-ERROR-NEXT: ^
  2553. // CHECK-ERROR-NEXT: error: {{expected integer|index must be a}} multiple of 4 in range [-256, 252]
  2554. // CHECK-ERROR-NEXT: stp w1, w2, [x3], #253
  2555. // CHECK-ERROR-NEXT: ^
  2556. // CHECK-ERROR-NEXT: error: {{expected integer|index must be a}} multiple of 4 in range [-256, 252]
  2557. // CHECK-ERROR-NEXT: stp w9, w10, [x5], #256
  2558. // CHECK-ERROR-NEXT: ^
  2559. // CHECK-ERROR-NEXT: error: {{expected integer|index must be a}} multiple of 4 in range [-256, 252]
  2560. // CHECK-ERROR-NEXT: ldp w11, w12, [x9], #-260
  2561. // CHECK-ERROR-NEXT: ^
  2562. // CHECK-ERROR-NEXT: error: invalid operand for instruction
  2563. // CHECK-ERROR-NEXT: stp wsp, w9, [sp], #0
  2564. // CHECK-ERROR-NEXT: ^
  2565. ldpsw x9, x2, [sp], #2
  2566. ldpsw x1, x2, [x10], #256
  2567. ldpsw x3, x4, [x11], #-260
  2568. // CHECK-ERROR: error: {{expected integer|index must be a}} multiple of 4 in range [-256, 252]
  2569. // CHECK-ERROR-NEXT: ldpsw x9, x2, [sp], #2
  2570. // CHECK-ERROR-NEXT: ^
  2571. // CHECK-ERROR-NEXT: error: {{expected integer|index must be a}} multiple of 4 in range [-256, 252]
  2572. // CHECK-ERROR-NEXT: ldpsw x1, x2, [x10], #256
  2573. // CHECK-ERROR-NEXT: ^
  2574. // CHECK-ERROR-NEXT: error: {{expected integer|index must be a}} multiple of 4 in range [-256, 252]
  2575. // CHECK-ERROR-NEXT: ldpsw x3, x4, [x11], #-260
  2576. // CHECK-ERROR-NEXT: ^
  2577. ldp x2, x5, [sp], #4
  2578. ldp x5, x6, [x9], #512
  2579. stp x7, x8, [x10], #-520
  2580. // CHECK-ERROR: error: {{expected integer|index must be a}} multiple of 8 in range [-512, 504]
  2581. // CHECK-ERROR-NEXT: ldp x2, x5, [sp], #4
  2582. // CHECK-ERROR-NEXT: ^
  2583. // CHECK-ERROR-NEXT: error: {{expected integer|index must be a}} multiple of 8 in range [-512, 504]
  2584. // CHECK-ERROR-NEXT: ldp x5, x6, [x9], #512
  2585. // CHECK-ERROR-NEXT: ^
  2586. // CHECK-ERROR-NEXT: error: {{expected integer|index must be a}} multiple of 8 in range [-512, 504]
  2587. // CHECK-ERROR-NEXT: stp x7, x8, [x10], #-520
  2588. // CHECK-ERROR-NEXT: ^
  2589. ldp sp, x3, [x10], #0
  2590. stp x3, sp, [x9], #0
  2591. // CHECK-ERROR: error: invalid operand for instruction
  2592. // CHECK-ERROR-NEXT: ldp sp, x3, [x10], #0
  2593. // CHECK-ERROR-NEXT: ^
  2594. // CHECK-ERROR-NEXT: error: invalid operand for instruction
  2595. // CHECK-ERROR-NEXT: stp x3, sp, [x9], #0
  2596. // CHECK-ERROR-NEXT: ^
  2597. stp s3, s5, [sp], #-2
  2598. ldp s6, s26, [x4], #-260
  2599. stp s13, s19, [x5], #256
  2600. // CHECK-ERROR: error: {{expected integer|index must be a}} multiple of 4 in range [-256, 252]
  2601. // CHECK-ERROR-NEXT: stp s3, s5, [sp], #-2
  2602. // CHECK-ERROR-NEXT: ^
  2603. // CHECK-ERROR-NEXT: error: {{expected integer|index must be a}} multiple of 4 in range [-256, 252]
  2604. // CHECK-ERROR-NEXT: ldp s6, s26, [x4], #-260
  2605. // CHECK-ERROR-NEXT: ^
  2606. // CHECK-ERROR-NEXT: error: {{expected integer|index must be a}} multiple of 4 in range [-256, 252]
  2607. // CHECK-ERROR-NEXT: stp s13, s19, [x5], #256
  2608. // CHECK-ERROR-NEXT: ^
  2609. ldp d3, d4, [xzr], #0
  2610. ldp d5, d6, [x0], #512
  2611. stp d7, d8, [x0], #-520
  2612. // CHECK-ERROR: error: invalid operand for instruction
  2613. // CHECK-ERROR-NEXT: ldp d3, d4, [xzr], #0
  2614. // CHECK-ERROR-NEXT: ^
  2615. // CHECK-ERROR-NEXT: error: {{expected integer|index must be a}} multiple of 8 in range [-512, 504]
  2616. // CHECK-ERROR-NEXT: ldp d5, d6, [x0], #512
  2617. // CHECK-ERROR-NEXT: ^
  2618. // CHECK-ERROR-NEXT: error: {{expected integer|index must be a}} multiple of 8 in range [-512, 504]
  2619. // CHECK-ERROR-NEXT: stp d7, d8, [x0], #-520
  2620. // CHECK-ERROR-NEXT: ^
  2621. ldp d3, q2, [sp], #0
  2622. ldp q3, q5, [sp], #8
  2623. stp q20, q25, [x5], #1024
  2624. ldp q30, q15, [x23], #-1040
  2625. // CHECK-ERROR: error: invalid operand for instruction
  2626. // CHECK-ERROR-NEXT: ldp d3, q2, [sp], #0
  2627. // CHECK-ERROR-NEXT: ^
  2628. // CHECK-ERROR-NEXT: error: {{expected integer|index must be a}} multiple of 16 in range [-1024, 1008]
  2629. // CHECK-ERROR-NEXT: ldp q3, q5, [sp], #8
  2630. // CHECK-ERROR-NEXT: ^
  2631. // CHECK-ERROR-NEXT: error: {{expected integer|index must be a}} multiple of 16 in range [-1024, 1008]
  2632. // CHECK-ERROR-NEXT: stp q20, q25, [x5], #1024
  2633. // CHECK-ERROR-NEXT: ^
  2634. // CHECK-ERROR-NEXT: error: {{expected integer|index must be a}} multiple of 16 in range [-1024, 1008]
  2635. // CHECK-ERROR-NEXT: ldp q30, q15, [x23], #-1040
  2636. // CHECK-ERROR-NEXT: ^
  2637. //------------------------------------------------------------------------------
  2638. // Load/store register pair (pre-indexed)
  2639. //------------------------------------------------------------------------------
  2640. ldp v0, v1, [x0, #0]!
  2641. stp v0, v1, [x0, #0]!
  2642. // CHECK-ERROR-NEXT: error: invalid operand for instruction
  2643. // CHECK-ERROR-NEXT: ldp v0, v1, [x0, #0]!
  2644. // CHECK-ERROR-NEXT: ^
  2645. // CHECK-ERROR-NEXT: error: invalid operand for instruction
  2646. // CHECK-ERROR-NEXT: stp v0, v1, [x0, #0]!
  2647. // CHECK-ERROR-NEXT: ^
  2648. ldp w3, w2, [x4, #1]!
  2649. stp w1, w2, [x3, #253]!
  2650. stp w9, w10, [x5, #256]!
  2651. ldp w11, w12, [x9, #-260]!
  2652. stp wsp, w9, [sp, #0]!
  2653. // CHECK-ERROR: error: {{expected integer|index must be a}} multiple of 4 in range [-256, 252]
  2654. // CHECK-ERROR-NEXT: ldp w3, w2, [x4, #1]!
  2655. // CHECK-ERROR-NEXT: ^
  2656. // CHECK-ERROR-NEXT: error: {{expected integer|index must be a}} multiple of 4 in range [-256, 252]
  2657. // CHECK-ERROR-NEXT: stp w1, w2, [x3, #253]!
  2658. // CHECK-ERROR-NEXT: ^
  2659. // CHECK-ERROR-NEXT: error: {{expected integer|index must be a}} multiple of 4 in range [-256, 252]
  2660. // CHECK-ERROR-NEXT: stp w9, w10, [x5, #256]!
  2661. // CHECK-ERROR-NEXT: ^
  2662. // CHECK-ERROR-NEXT: error: {{expected integer|index must be a}} multiple of 4 in range [-256, 252]
  2663. // CHECK-ERROR-NEXT: ldp w11, w12, [x9, #-260]!
  2664. // CHECK-ERROR-NEXT: ^
  2665. // CHECK-ERROR-NEXT: error: invalid operand for instruction
  2666. // CHECK-ERROR-NEXT: stp wsp, w9, [sp, #0]!
  2667. // CHECK-ERROR-NEXT: ^
  2668. ldpsw x9, x2, [sp, #2]!
  2669. ldpsw x1, x2, [x10, #256]!
  2670. ldpsw x3, x4, [x11, #-260]!
  2671. // CHECK-ERROR: error: {{expected integer|index must be a}} multiple of 4 in range [-256, 252]
  2672. // CHECK-ERROR-NEXT: ldpsw x9, x2, [sp, #2]!
  2673. // CHECK-ERROR-NEXT: ^
  2674. // CHECK-ERROR-NEXT: error: {{expected integer|index must be a}} multiple of 4 in range [-256, 252]
  2675. // CHECK-ERROR-NEXT: ldpsw x1, x2, [x10, #256]!
  2676. // CHECK-ERROR-NEXT: ^
  2677. // CHECK-ERROR-NEXT: error: {{expected integer|index must be a}} multiple of 4 in range [-256, 252]
  2678. // CHECK-ERROR-NEXT: ldpsw x3, x4, [x11, #-260]!
  2679. // CHECK-ERROR-NEXT: ^
  2680. ldp x2, x5, [sp, #4]!
  2681. ldp x5, x6, [x9, #512]!
  2682. stp x7, x8, [x10, #-520]!
  2683. // CHECK-ERROR: error: {{expected integer|index must be a}} multiple of 8 in range [-512, 504]
  2684. // CHECK-ERROR-NEXT: ldp x2, x5, [sp, #4]!
  2685. // CHECK-ERROR-NEXT: ^
  2686. // CHECK-ERROR-NEXT: error: {{expected integer|index must be a}} multiple of 8 in range [-512, 504]
  2687. // CHECK-ERROR-NEXT: ldp x5, x6, [x9, #512]!
  2688. // CHECK-ERROR-NEXT: ^
  2689. // CHECK-ERROR-NEXT: error: {{expected integer|index must be a}} multiple of 8 in range [-512, 504]
  2690. // CHECK-ERROR-NEXT: stp x7, x8, [x10, #-520]!
  2691. // CHECK-ERROR-NEXT: ^
  2692. ldp sp, x3, [x10, #0]!
  2693. stp x3, sp, [x9, #0]!
  2694. // CHECK-ERROR: error: invalid operand for instruction
  2695. // CHECK-ERROR-NEXT: ldp sp, x3, [x10, #0]!
  2696. // CHECK-ERROR-NEXT: ^
  2697. // CHECK-ERROR-NEXT: error: invalid operand for instruction
  2698. // CHECK-ERROR-NEXT: stp x3, sp, [x9, #0]!
  2699. // CHECK-ERROR-NEXT: ^
  2700. stp s3, s5, [sp, #-2]!
  2701. ldp s6, s26, [x4, #-260]!
  2702. stp s13, s19, [x5, #256]!
  2703. // CHECK-ERROR: error: {{expected integer|index must be a}} multiple of 4 in range [-256, 252]
  2704. // CHECK-ERROR-NEXT: stp s3, s5, [sp, #-2]!
  2705. // CHECK-ERROR-NEXT: ^
  2706. // CHECK-ERROR-NEXT: error: {{expected integer|index must be a}} multiple of 4 in range [-256, 252]
  2707. // CHECK-ERROR-NEXT: ldp s6, s26, [x4, #-260]!
  2708. // CHECK-ERROR-NEXT: ^
  2709. // CHECK-ERROR-NEXT: error: {{expected integer|index must be a}} multiple of 4 in range [-256, 252]
  2710. // CHECK-ERROR-NEXT: stp s13, s19, [x5, #256]!
  2711. // CHECK-ERROR-NEXT: ^
  2712. ldp d3, d4, [xzr, #0]!
  2713. ldp d5, d6, [x0, #512]!
  2714. stp d7, d8, [x0, #-520]!
  2715. // CHECK-ERROR: error: invalid operand for instruction
  2716. // CHECK-ERROR-NEXT: ldp d3, d4, [xzr, #0]!
  2717. // CHECK-ERROR-NEXT: ^
  2718. // CHECK-ERROR-NEXT: error: {{expected integer|index must be a}} multiple of 8 in range [-512, 504]
  2719. // CHECK-ERROR-NEXT: ldp d5, d6, [x0, #512]!
  2720. // CHECK-ERROR-NEXT: ^
  2721. // CHECK-ERROR-NEXT: error: {{expected integer|index must be a}} multiple of 8 in range [-512, 504]
  2722. // CHECK-ERROR-NEXT: stp d7, d8, [x0, #-520]!
  2723. // CHECK-ERROR-NEXT: ^
  2724. ldp d3, q2, [sp, #0]!
  2725. ldp q3, q5, [sp, #8]!
  2726. stp q20, q25, [x5, #1024]!
  2727. ldp q30, q15, [x23, #-1040]!
  2728. // CHECK-ERROR: error: invalid operand for instruction
  2729. // CHECK-ERROR-NEXT: ldp d3, q2, [sp, #0]!
  2730. // CHECK-ERROR-NEXT: ^
  2731. // CHECK-ERROR-NEXT: error: {{expected integer|index must be a}} multiple of 16 in range [-1024, 1008]
  2732. // CHECK-ERROR-NEXT: ldp q3, q5, [sp, #8]!
  2733. // CHECK-ERROR-NEXT: ^
  2734. // CHECK-ERROR-NEXT: error: {{expected integer|index must be a}} multiple of 16 in range [-1024, 1008]
  2735. // CHECK-ERROR-NEXT: stp q20, q25, [x5, #1024]!
  2736. // CHECK-ERROR-NEXT: ^
  2737. // CHECK-ERROR-NEXT: error: {{expected integer|index must be a}} multiple of 16 in range [-1024, 1008]
  2738. // CHECK-ERROR-NEXT: ldp q30, q15, [x23, #-1040]!
  2739. // CHECK-ERROR-NEXT: ^
  2740. //------------------------------------------------------------------------------
  2741. // Load/store register pair (offset)
  2742. //------------------------------------------------------------------------------
  2743. ldnp v0, v1, [x0, #0]
  2744. stnp v0, v1, [x0, #0]
  2745. // CHECK-ERROR-NEXT: error: invalid operand for instruction
  2746. // CHECK-ERROR-NEXT: ldnp v0, v1, [x0, #0]
  2747. // CHECK-ERROR-NEXT: ^
  2748. // CHECK-ERROR-NEXT: error: invalid operand for instruction
  2749. // CHECK-ERROR-NEXT: stnp v0, v1, [x0, #0]
  2750. // CHECK-ERROR-NEXT: ^
  2751. ldnp w3, w2, [x4, #1]
  2752. stnp w1, w2, [x3, #253]
  2753. stnp w9, w10, [x5, #256]
  2754. ldnp w11, w12, [x9, #-260]
  2755. stnp wsp, w9, [sp]
  2756. // CHECK-ERROR: error: {{expected integer|index must be a}} multiple of 4 in range [-256, 252]
  2757. // CHECK-ERROR-NEXT: ldnp w3, w2, [x4, #1]
  2758. // CHECK-ERROR-NEXT: ^
  2759. // CHECK-ERROR-NEXT: error: {{expected integer|index must be a}} multiple of 4 in range [-256, 252]
  2760. // CHECK-ERROR-NEXT: stnp w1, w2, [x3, #253]
  2761. // CHECK-ERROR-NEXT: ^
  2762. // CHECK-ERROR-NEXT: error: {{expected integer|index must be a}} multiple of 4 in range [-256, 252]
  2763. // CHECK-ERROR-NEXT: stnp w9, w10, [x5, #256]
  2764. // CHECK-ERROR-NEXT: ^
  2765. // CHECK-ERROR-NEXT: error: {{expected integer|index must be a}} multiple of 4 in range [-256, 252]
  2766. // CHECK-ERROR-NEXT: ldnp w11, w12, [x9, #-260]
  2767. // CHECK-ERROR-NEXT: ^
  2768. // CHECK-ERROR-NEXT: error: invalid operand for instruction
  2769. // CHECK-ERROR-NEXT: stnp wsp, w9, [sp]
  2770. // CHECK-ERROR-NEXT: ^
  2771. ldnp x2, x5, [sp, #4]
  2772. ldnp x5, x6, [x9, #512]
  2773. stnp x7, x8, [x10, #-520]
  2774. // CHECK-ERROR: error: {{expected integer|index must be a}} multiple of 8 in range [-512, 504]
  2775. // CHECK-ERROR-NEXT: ldnp x2, x5, [sp, #4]
  2776. // CHECK-ERROR-NEXT: ^
  2777. // CHECK-ERROR-NEXT: error: {{expected integer|index must be a}} multiple of 8 in range [-512, 504]
  2778. // CHECK-ERROR-NEXT: ldnp x5, x6, [x9, #512]
  2779. // CHECK-ERROR-NEXT: ^
  2780. // CHECK-ERROR-NEXT: error: {{expected integer|index must be a}} multiple of 8 in range [-512, 504]
  2781. // CHECK-ERROR-NEXT: stnp x7, x8, [x10, #-520]
  2782. // CHECK-ERROR-NEXT: ^
  2783. ldnp sp, x3, [x10]
  2784. stnp x3, sp, [x9]
  2785. // CHECK-ERROR: error: invalid operand for instruction
  2786. // CHECK-ERROR-NEXT: ldnp sp, x3, [x10]
  2787. // CHECK-ERROR-NEXT: ^
  2788. // CHECK-ERROR-NEXT: error: invalid operand for instruction
  2789. // CHECK-ERROR-NEXT: stnp x3, sp, [x9]
  2790. // CHECK-ERROR-NEXT: ^
  2791. stnp s3, s5, [sp, #-2]
  2792. ldnp s6, s26, [x4, #-260]
  2793. stnp s13, s19, [x5, #256]
  2794. // CHECK-ERROR: error: {{expected integer|index must be a}} multiple of 4 in range [-256, 252]
  2795. // CHECK-ERROR-NEXT: stnp s3, s5, [sp, #-2]
  2796. // CHECK-ERROR-NEXT: ^
  2797. // CHECK-ERROR-NEXT: error: {{expected integer|index must be a}} multiple of 4 in range [-256, 252]
  2798. // CHECK-ERROR-NEXT: ldnp s6, s26, [x4, #-260]
  2799. // CHECK-ERROR-NEXT: ^
  2800. // CHECK-ERROR-NEXT: error: {{expected integer|index must be a}} multiple of 4 in range [-256, 252]
  2801. // CHECK-ERROR-NEXT: stnp s13, s19, [x5, #256]
  2802. // CHECK-ERROR-NEXT: ^
  2803. ldnp d3, d4, [xzr]
  2804. ldnp d5, d6, [x0, #512]
  2805. stnp d7, d8, [x0, #-520]
  2806. // CHECK-ERROR: error: invalid operand for instruction
  2807. // CHECK-ERROR-NEXT: ldnp d3, d4, [xzr]
  2808. // CHECK-ERROR-NEXT: ^
  2809. // CHECK-ERROR-NEXT: error: {{expected integer|index must be a}} multiple of 8 in range [-512, 504]
  2810. // CHECK-ERROR-NEXT: ldnp d5, d6, [x0, #512]
  2811. // CHECK-ERROR-NEXT: ^
  2812. // CHECK-ERROR-NEXT: error: {{expected integer|index must be a}} multiple of 8 in range [-512, 504]
  2813. // CHECK-ERROR-NEXT: stnp d7, d8, [x0, #-520]
  2814. // CHECK-ERROR-NEXT: ^
  2815. ldnp d3, q2, [sp]
  2816. ldnp q3, q5, [sp, #8]
  2817. stnp q20, q25, [x5, #1024]
  2818. ldnp q30, q15, [x23, #-1040]
  2819. // CHECK-ERROR: error: invalid operand for instruction
  2820. // CHECK-ERROR-NEXT: ldnp d3, q2, [sp]
  2821. // CHECK-ERROR-NEXT: ^
  2822. // CHECK-ERROR-NEXT: error: {{expected integer|index must be a}} multiple of 16 in range [-1024, 1008]
  2823. // CHECK-ERROR-NEXT: ldnp q3, q5, [sp, #8]
  2824. // CHECK-ERROR-NEXT: ^
  2825. // CHECK-ERROR-NEXT: error: {{expected integer|index must be a}} multiple of 16 in range [-1024, 1008]
  2826. // CHECK-ERROR-NEXT: stnp q20, q25, [x5, #1024]
  2827. // CHECK-ERROR-NEXT: ^
  2828. // CHECK-ERROR-NEXT: error: {{expected integer|index must be a}} multiple of 16 in range [-1024, 1008]
  2829. // CHECK-ERROR-NEXT: ldnp q30, q15, [x23, #-1040]
  2830. // CHECK-ERROR-NEXT: ^
  2831. //------------------------------------------------------------------------------
  2832. // Logical (shifted register)
  2833. //------------------------------------------------------------------------------
  2834. orr w0, w1, #0xffffffff
  2835. and x3, x5, #0xffffffffffffffff
  2836. // CHECK-ERROR: error: expected compatible register or logical immediate
  2837. // CHECK-ERROR-NEXT: orr w0, w1, #0xffffffff
  2838. // CHECK-ERROR-NEXT: ^
  2839. // CHECK-ERROR-NEXT: error: expected compatible register or logical immediate
  2840. // CHECK-ERROR-NEXT: and x3, x5, #0xffffffffffffffff
  2841. // CHECK-ERROR-NEXT: ^
  2842. ands w3, w9, #0x0
  2843. eor x2, x0, #0x0
  2844. // CHECK-ERROR: error: expected compatible register or logical immediate
  2845. // CHECK-ERROR-NEXT: ands w3, w9, #0x0
  2846. // CHECK-ERROR-NEXT: ^
  2847. // CHECK-ERROR-NEXT: error: expected compatible register or logical immediate
  2848. // CHECK-ERROR-NEXT: eor x2, x0, #0x0
  2849. // CHECK-ERROR-NEXT: ^
  2850. eor w3, w5, #0x83
  2851. eor x9, x20, #0x1234
  2852. // CHECK-ERROR: error: expected compatible register or logical immediate
  2853. // CHECK-ERROR-NEXT: eor w3, w5, #0x83
  2854. // CHECK-ERROR-NEXT: ^
  2855. // CHECK-ERROR-NEXT: error: expected compatible register or logical immediate
  2856. // CHECK-ERROR-NEXT: eor x9, x20, #0x1234
  2857. // CHECK-ERROR-NEXT: ^
  2858. and wzr, w4, 0xffff0000
  2859. eor xzr, x9, #0xffff0000ffff0000
  2860. // CHECK-ERROR: error: invalid operand for instruction
  2861. // CHECK-ERROR-NEXT: and wzr, w4, 0xffff0000
  2862. // CHECK-ERROR-NEXT: ^
  2863. // CHECK-ERROR-NEXT: error: invalid operand for instruction
  2864. // CHECK-ERROR-NEXT: eor xzr, x9, #0xffff0000ffff0000
  2865. // CHECK-ERROR-NEXT: ^
  2866. orr w3, wsp, #0xf0f0f0f0
  2867. ands x3, sp, #0xaaaaaaaaaaaaaaaa
  2868. // CHECK-ERROR: error: invalid operand for instruction
  2869. // CHECK-ERROR-NEXT: orr w3, wsp, #0xf0f0f0f0
  2870. // CHECK-ERROR-NEXT: ^
  2871. // CHECK-ERROR-NEXT: error: invalid operand for instruction
  2872. // CHECK-ERROR-NEXT: ands x3, sp, #0xaaaaaaaaaaaaaaaa
  2873. // CHECK-ERROR-NEXT: ^
  2874. tst sp, #0xe0e0e0e0e0e0e0e0
  2875. // CHECK-ERROR: error: invalid operand for instruction
  2876. // CHECK-ERROR-NEXT: tst sp, #0xe0e0e0e0e0e0e0e0
  2877. // CHECK-ERROR-NEXT: ^
  2878. // movi has been removed from the specification. Make sure it's really gone.
  2879. movi wzr, #0x44444444
  2880. movi w3, #0xffff
  2881. movi x9, #0x0000ffff00000000
  2882. // CHECK-ERROR: error: invalid operand for instruction
  2883. // CHECK-ERROR-NEXT: movi wzr, #0x44444444
  2884. // CHECK-ERROR-NEXT: ^
  2885. // CHECK-ERROR: error: invalid operand for instruction
  2886. // CHECK-ERROR-NEXT: movi w3, #0xffff
  2887. // CHECK-ERROR-NEXT: ^
  2888. // CHECK-ERROR: error: invalid operand for instruction
  2889. // CHECK-ERROR-NEXT: movi x9, #0x0000ffff00000000
  2890. // CHECK-ERROR-NEXT: ^
  2891. //------------------------------------------------------------------------------
  2892. // Logical (shifted register)
  2893. //------------------------------------------------------------------------------
  2894. //// Out of range shifts
  2895. and w2, w24, w6, lsl #-1
  2896. and w4, w6, w12, lsl #32
  2897. and x4, x6, x12, lsl #64
  2898. and x2, x5, x11, asr
  2899. // CHECK-ERROR: error: expected integer shift amount
  2900. // CHECK-ERROR-NEXT: and w2, w24, w6, lsl #-1
  2901. // CHECK-ERROR-NEXT: ^
  2902. // CHECK-ERROR-NEXT: error: expected 'lsl', 'lsr' or 'asr' with optional integer in range [0, 31]
  2903. // CHECK-ERROR-NEXT: and w4, w6, w12, lsl #32
  2904. // CHECK-ERROR-NEXT: ^
  2905. // CHECK-ERROR-NEXT: error: expected 'lsl', 'lsr' or 'asr' with optional integer in range [0, 63]
  2906. // CHECK-ERROR-NEXT: and x4, x6, x12, lsl #64
  2907. // CHECK-ERROR-NEXT: ^
  2908. // CHECK-ERROR-NEXT: error: expected #imm after shift specifier
  2909. // CHECK-ERROR-NEXT: and x2, x5, x11, asr
  2910. // CHECK-ERROR-NEXT: ^
  2911. //// sp not allowed
  2912. orn wsp, w3, w5
  2913. bics x20, sp, x9, lsr #0
  2914. orn x2, x6, sp, lsl #3
  2915. // FIXME: the diagnostic we get for 'orn wsp, w3, w5' is from the orn alias,
  2916. // which is a better match than the genuine ORNWri, whereas it would be better
  2917. // to get the ORNWri diagnostic when the alias did not match, i.e. the
  2918. // alias' diagnostics should have a lower priority.
  2919. // CHECK-ERROR: error: expected compatible register or logical immediate
  2920. // CHECK-ERROR-NEXT: orn wsp, w3, w5
  2921. // CHECK-ERROR-NEXT: ^
  2922. // CHECK-ERROR-NEXT: error: invalid operand for instruction
  2923. // CHECK-ERROR-NEXT: bics x20, sp, x9, lsr #0
  2924. // CHECK-ERROR-NEXT: ^
  2925. // CHECK-ERROR-NEXT: error: expected compatible register or logical immediate
  2926. // CHECK-ERROR-NEXT: orn x2, x6, sp, lsl #3
  2927. // CHECK-ERROR-NEXT: ^
  2928. //// Mismatched registers
  2929. and x3, w2, w1
  2930. ands w1, x12, w2
  2931. and x4, x5, w6, lsl #12
  2932. orr w2, w5, x7, asr #0
  2933. // CHECK-ERROR: error: invalid operand for instruction
  2934. // CHECK-ERROR-NEXT: and x3, w2, w1
  2935. // CHECK-ERROR-NEXT: ^
  2936. // CHECK-ERROR-NEXT: error: invalid operand for instruction
  2937. // CHECK-ERROR-NEXT: ands w1, x12, w2
  2938. // CHECK-ERROR-NEXT: ^
  2939. // CHECK-ERROR-NEXT: error: expected compatible register or logical immediate
  2940. // CHECK-ERROR-NEXT: and x4, x5, w6, lsl #12
  2941. // CHECK-ERROR-NEXT: ^
  2942. // CHECK-ERROR-NEXT: error: expected compatible register or logical immediate
  2943. // CHECK-ERROR-NEXT: orr w2, w5, x7, asr #0
  2944. // CHECK-ERROR-NEXT: ^
  2945. //// Shifts should not be allowed on mov
  2946. mov w3, w7, lsl #13
  2947. // CHECK-ERROR: error: invalid operand for instruction
  2948. // CHECK-ERROR-NEXT: mov w3, w7, lsl #13
  2949. // CHECK-ERROR-NEXT: ^
  2950. //------------------------------------------------------------------------------
  2951. // Move wide (immediate)
  2952. //------------------------------------------------------------------------------
  2953. movz w3, #65536, lsl #0
  2954. movz w4, #65536
  2955. movn w1, #2, lsl #1
  2956. movk w3, #0, lsl #-1
  2957. movn w2, #-1, lsl #0
  2958. movz x3, #-1
  2959. movk w3, #1, lsl #32
  2960. movn x2, #12, lsl #64
  2961. // CHECK-ERROR: error: {{expected relocated symbol or|immediate must be an}} integer in range [0, 65535]
  2962. // CHECK-ERROR-NEXT: movz w3, #65536, lsl #0
  2963. // CHECK-ERROR-NEXT: ^
  2964. // CHECK-ERROR-NEXT: error: {{expected relocated symbol or|immediate must be an}} integer in range [0, 65535]
  2965. // CHECK-ERROR-NEXT: movz w4, #65536
  2966. // CHECK-ERROR-NEXT: ^
  2967. // CHECK-ERROR-AARCH64-NEXT: error: expected relocated symbol or integer in range [0, 65535]
  2968. // CHECK-ERROR-ARM64-NEXT: error: expected 'lsl' with optional integer 0 or 16
  2969. // CHECK-ERROR-NEXT: movn w1, #2, lsl #1
  2970. // CHECK-ERROR-NEXT: ^
  2971. // CHECK-ERROR-AARCH64-NEXT: error: only 'lsl #+N' valid after immediate
  2972. // CHECK-ERROR-ARM64-NEXT: error: expected integer shift amount
  2973. // CHECK-ERROR-NEXT: movk w3, #0, lsl #-1
  2974. // CHECK-ERROR-NEXT: ^
  2975. // CHECK-ERROR-NEXT: error: {{expected relocated symbol or|immediate must be an}} integer in range [0, 65535]
  2976. // CHECK-ERROR-NEXT: movn w2, #-1, lsl #0
  2977. // CHECK-ERROR-NEXT: ^
  2978. // CHECK-ERROR-NEXT: error: {{expected relocated symbol or|immediate must be an}} integer in range [0, 65535]
  2979. // CHECK-ERROR-NEXT: movz x3, #-1
  2980. // CHECK-ERROR-NEXT: ^
  2981. // CHECK-ERROR-AARCH64-NEXT: error: expected relocated symbol or integer in range [0, 65535]
  2982. // CHECK-ERROR-ARM64-NEXT: error: expected 'lsl' with optional integer 0 or 16
  2983. // CHECK-ERROR-NEXT: movk w3, #1, lsl #32
  2984. // CHECK-ERROR-NEXT: ^
  2985. // CHECK-ERROR-AARCH64-NEXT: error: expected relocated symbol or integer in range [0, 65535]
  2986. // CHECK-ERROR-ARM64-NEXT: error: expected 'lsl' with optional integer 0, 16, 32 or 48
  2987. // CHECK-ERROR-NEXT: movn x2, #12, lsl #64
  2988. // CHECK-ERROR-NEXT: ^
  2989. movz x12, #:abs_g0:sym, lsl #16
  2990. movz x12, #:abs_g0:sym, lsl #0
  2991. movn x2, #:abs_g0:sym
  2992. movk w3, #:abs_g0:sym
  2993. movz x3, #:abs_g0_nc:sym
  2994. movn x4, #:abs_g0_nc:sym
  2995. // CHECK-ERROR: error: invalid operand for instruction
  2996. // CHECK-ERROR-NEXT: movz x12, #:abs_g0:sym, lsl #16
  2997. // CHECK-ERROR-NEXT: ^
  2998. // CHECK-ERROR: error: invalid operand for instruction
  2999. // CHECK-ERROR-NEXT: movz x12, #:abs_g0:sym, lsl #0
  3000. // CHECK-ERROR-NEXT: ^
  3001. movn x2, #:abs_g1:sym
  3002. movk w3, #:abs_g1:sym
  3003. movz x3, #:abs_g1_nc:sym
  3004. movn x4, #:abs_g1_nc:sym
  3005. movz w12, #:abs_g2:sym
  3006. movn x12, #:abs_g2:sym
  3007. movk x13, #:abs_g2:sym
  3008. movk w3, #:abs_g2_nc:sym
  3009. movz x13, #:abs_g2_nc:sym
  3010. movn x24, #:abs_g2_nc:sym
  3011. // CHECK-ERROR: error: {{expected relocated symbol or|immediate must be an}} integer in range [0, 65535]
  3012. // CHECK-ERROR-NEXT: movz w12, #:abs_g2:sym
  3013. // CHECK-ERROR-NEXT: ^
  3014. // CHECK-ERROR-NEXT: error: {{expected relocated symbol or|immediate must be an}} integer in range [0, 65535]
  3015. // CHECK-ERROR-NEXT: movk w3, #:abs_g2_nc:sym
  3016. // CHECK-ERROR-NEXT: ^
  3017. movn x19, #:abs_g3:sym
  3018. movz w20, #:abs_g3:sym
  3019. movk w21, #:abs_g3:sym
  3020. // CHECK-ERROR-NEXT: error: {{expected relocated symbol or|immediate must be an}} integer in range [0, 65535]
  3021. // CHECK-ERROR-NEXT: movz w20, #:abs_g3:sym
  3022. // CHECK-ERROR-NEXT: ^
  3023. // CHECK-ERROR-NEXT: error: {{expected relocated symbol or|immediate must be an}} integer in range [0, 65535]
  3024. // CHECK-ERROR-NEXT: movk w21, #:abs_g3:sym
  3025. // CHECK-ERROR-NEXT: ^
  3026. movk x19, #:abs_g0_s:sym
  3027. movk w23, #:abs_g0_s:sym
  3028. movk x19, #:abs_g1_s:sym
  3029. movk w23, #:abs_g1_s:sym
  3030. movz w2, #:abs_g2_s:sym
  3031. movn w29, #:abs_g2_s:sym
  3032. movk x19, #:abs_g2_s:sym
  3033. movk w23, #:abs_g2_s:sym
  3034. // CHECK-ERROR: error: {{expected relocated symbol or|immediate must be an}} integer in range [0, 65535]
  3035. // CHECK-ERROR-NEXT: movz w2, #:abs_g2_s:sym
  3036. // CHECK-ERROR-NEXT: ^
  3037. // CHECK-ERROR-NEXT: error: {{expected relocated symbol or|immediate must be an}} integer in range [0, 65535]
  3038. // CHECK-ERROR-NEXT: movn w29, #:abs_g2_s:sym
  3039. // CHECK-ERROR-NEXT: ^
  3040. // CHECK-ERROR-NEXT: error: {{expected relocated symbol or|immediate must be an}} integer in range [0, 65535]
  3041. // CHECK-ERROR-NEXT: movk w23, #:abs_g2_s:sym
  3042. // CHECK-ERROR-NEXT: ^
  3043. //------------------------------------------------------------------------------
  3044. // PC-relative addressing
  3045. //------------------------------------------------------------------------------
  3046. adr sp, loc // expects xzr
  3047. adr x0, :got:loc // bad relocation type
  3048. adr x1, :lo12:loc
  3049. adrp x3, #20 // Immediate unaligned
  3050. adrp w2, loc // 64-bit register needed
  3051. adrp x5, :got_lo12:loc // bad relocation type
  3052. // CHECK-ERROR: error: invalid operand for instruction
  3053. // CHECK-ERROR-NEXT: adr sp, loc
  3054. // CHECK-ERROR-NEXT: ^
  3055. // CHECK-ERROR-NEXT: error: unexpected adr label
  3056. // CHECK-ERROR-NEXT: adr x0, :got:loc
  3057. // CHECK-ERROR-NEXT: ^
  3058. // CHECK-ERROR-NEXT: error: unexpected adr label
  3059. // CHECK-ERROR-NEXT: adr x1, :lo12:loc
  3060. // CHECK-ERROR-NEXT: ^
  3061. // CHECK-ERROR-NEXT: error: expected label or encodable integer pc offset
  3062. // CHECK-ERROR-NEXT: adrp x3, #20
  3063. // CHECK-ERROR-NEXT: ^
  3064. // CHECK-ERROR-NEXT: error: invalid operand for instruction
  3065. // CHECK-ERROR-NEXT: adrp w2, loc
  3066. // CHECK-ERROR-NEXT: ^
  3067. // CHECK-ERROR-NEXT: error: page or gotpage label reference expected
  3068. // CHECK-ERROR-NEXT: adrp x5, :got_lo12:loc
  3069. // CHECK-ERROR-NEXT: ^
  3070. adr x9, #1048576
  3071. adr x2, #-1048577
  3072. adrp x9, #4294967296
  3073. adrp x20, #-4294971392
  3074. // CHECK-ERROR: error: expected label or encodable integer pc offset
  3075. // CHECK-ERROR-NEXT: adr x9, #1048576
  3076. // CHECK-ERROR-NEXT: ^
  3077. // CHECK-ERROR-NEXT: error: expected label or encodable integer pc offset
  3078. // CHECK-ERROR-NEXT: adr x2, #-1048577
  3079. // CHECK-ERROR-NEXT: ^
  3080. // CHECK-ERROR-NEXT: error: expected label or encodable integer pc offset
  3081. // CHECK-ERROR-NEXT: adrp x9, #4294967296
  3082. // CHECK-ERROR-NEXT: ^
  3083. // CHECK-ERROR-NEXT: error: expected label or encodable integer pc offset
  3084. // CHECK-ERROR-NEXT: adrp x20, #-4294971392
  3085. // CHECK-ERROR-NEXT: ^
  3086. //------------------------------------------------------------------------------
  3087. // System
  3088. //------------------------------------------------------------------------------
  3089. hint #-1
  3090. hint #128
  3091. // CHECK-ERROR: error: {{expected|immediate must be an}} integer in range [0, 127]
  3092. // CHECK-ERROR-NEXT: hint #-1
  3093. // CHECK-ERROR-NEXT: ^
  3094. // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 127]
  3095. // CHECK-ERROR-NEXT: hint #128
  3096. // CHECK-ERROR-NEXT: ^
  3097. clrex #-1
  3098. clrex #16
  3099. // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 15]
  3100. // CHECK-ERROR-NEXT: clrex #-1
  3101. // CHECK-ERROR-NEXT: ^
  3102. // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 15]
  3103. // CHECK-ERROR-NEXT: clrex #16
  3104. // CHECK-ERROR-NEXT: ^
  3105. dsb #-1
  3106. dsb #16
  3107. dsb foo
  3108. dmb #-1
  3109. dmb #16
  3110. dmb foo
  3111. // CHECK-ERROR-NEXT: error: {{Invalid immediate for instruction|barrier operand out of range}}
  3112. // CHECK-ERROR-NEXT: dsb #-1
  3113. // CHECK-ERROR-NEXT: ^
  3114. // CHECK-ERROR-NEXT: error: {{Invalid immediate for instruction|barrier operand out of range}}
  3115. // CHECK-ERROR-NEXT: dsb #16
  3116. // CHECK-ERROR-NEXT: ^
  3117. // CHECK-ERROR-NEXT: error: invalid barrier option name
  3118. // CHECK-ERROR-NEXT: dsb foo
  3119. // CHECK-ERROR-NEXT: ^
  3120. // CHECK-ERROR-NEXT: error: {{Invalid immediate for instruction|barrier operand out of range}}
  3121. // CHECK-ERROR-NEXT: dmb #-1
  3122. // CHECK-ERROR-NEXT: ^
  3123. // CHECK-ERROR-NEXT: error: {{Invalid immediate for instruction|barrier operand out of range}}
  3124. // CHECK-ERROR-NEXT: dmb #16
  3125. // CHECK-ERROR-NEXT: ^
  3126. // CHECK-ERROR-NEXT: error: invalid barrier option name
  3127. // CHECK-ERROR-NEXT: dmb foo
  3128. // CHECK-ERROR-NEXT: ^
  3129. isb #-1
  3130. isb #16
  3131. isb foo
  3132. // CHECK-ERROR-NEXT: error: {{Invalid immediate for instruction|barrier operand out of range}}
  3133. // CHECK-ERROR-NEXT: isb #-1
  3134. // CHECK-ERROR-NEXT: ^
  3135. // CHECK-ERROR-NEXT: error: {{Invalid immediate for instruction|barrier operand out of range}}
  3136. // CHECK-ERROR-NEXT: isb #16
  3137. // CHECK-ERROR-NEXT: ^
  3138. // CHECK-ERROR-NEXT: error: 'sy' or #imm operand expected
  3139. // CHECK-ERROR-NEXT: isb foo
  3140. // CHECK-ERROR-NEXT: ^
  3141. msr daifset, x4
  3142. msr spsel, #-1
  3143. msr spsel #-1
  3144. msr daifclr, #16
  3145. // CHECK-ERROR: [[@LINE-4]]:22: error: {{expected|immediate must be an}} integer in range [0, 15]
  3146. // CHECK-ERROR: [[@LINE-4]]:20: error: {{expected|immediate must be an}} integer in range [0, 15]
  3147. // CHECK-ERROR: [[@LINE-4]]:{{9|19}}: error: {{too few operands for instruction|expected comma before next operand|unexpected token in argument list}}
  3148. // CHECK-ERROR: [[@LINE-4]]:22: error: {{expected|immediate must be an}} integer in range [0, 15]
  3149. sys #8, c1, c2, #7, x9
  3150. sys #3, c16, c2, #3, x10
  3151. sys #2, c11, c16, #5
  3152. sys #4, c9, c8, #8, xzr
  3153. sysl x11, #8, c1, c2, #7
  3154. sysl x13, #3, c16, c2, #3
  3155. sysl x9, #2, c11, c16, #5
  3156. sysl x4, #4, c9, c8, #8
  3157. // CHECK-ERROR: error: {{expected|immediate must be an}} integer in range [0, 7]
  3158. // CHECK-ERROR-NEXT: sys #8, c1, c2, #7, x9
  3159. // CHECK-ERROR-NEXT: ^
  3160. // CHECK-ERROR-NEXT: error: Expected cN operand where 0 <= N <= 15
  3161. // CHECK-ERROR-NEXT: sys #3, c16, c2, #3, x10
  3162. // CHECK-ERROR-NEXT: ^
  3163. // CHECK-ERROR-NEXT: error: Expected cN operand where 0 <= N <= 15
  3164. // CHECK-ERROR-NEXT: sys #2, c11, c16, #5
  3165. // CHECK-ERROR-NEXT: ^
  3166. // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 7]
  3167. // CHECK-ERROR-NEXT: sys #4, c9, c8, #8, xzr
  3168. // CHECK-ERROR-NEXT: ^
  3169. // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 7]
  3170. // CHECK-ERROR-NEXT: sysl x11, #8, c1, c2, #7
  3171. // CHECK-ERROR-NEXT: ^
  3172. // CHECK-ERROR-NEXT: error: Expected cN operand where 0 <= N <= 15
  3173. // CHECK-ERROR-NEXT: sysl x13, #3, c16, c2, #3
  3174. // CHECK-ERROR-NEXT: ^
  3175. // CHECK-ERROR-NEXT: error: Expected cN operand where 0 <= N <= 15
  3176. // CHECK-ERROR-NEXT: sysl x9, #2, c11, c16, #5
  3177. // CHECK-ERROR-NEXT: ^
  3178. // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 7]
  3179. // CHECK-ERROR-NEXT: sysl x4, #4, c9, c8, #8
  3180. // CHECK-ERROR-NEXT: ^
  3181. ic ialluis, x2
  3182. ic allu, x7
  3183. ic ivau
  3184. // CHECK-ERROR-NEXT: error: specified {{IC|ic}} op does not use a register
  3185. // CHECK-ERROR-NEXT: ic ialluis, x2
  3186. // CHECK-ERROR-NEXT: ^
  3187. // CHECK-ERROR-AARCH64-NEXT: error: operand specifier not recognised
  3188. // CHECK-ERROR-ARM64-NEXT: error: invalid operand for IC instruction
  3189. // CHECK-ERROR-NEXT: ic allu, x7
  3190. // CHECK-ERROR-NEXT: ^
  3191. // CHECK-ERROR-NEXT: error: specified {{IC|ic}} op requires a register
  3192. // CHECK-ERROR-NEXT: ic ivau
  3193. // CHECK-ERROR-NEXT: ^
  3194. tlbi IPAS2E1IS
  3195. tlbi IPAS2LE1IS
  3196. tlbi VMALLE1IS, x12
  3197. tlbi ALLE2IS, x11
  3198. tlbi ALLE3IS, x20
  3199. tlbi VAE1IS
  3200. tlbi VAE2IS
  3201. tlbi VAE3IS
  3202. tlbi ASIDE1IS
  3203. tlbi VAAE1IS
  3204. tlbi ALLE1IS, x0
  3205. tlbi VALE1IS
  3206. tlbi VALE2IS
  3207. tlbi VALE3IS
  3208. tlbi VMALLS12E1IS, xzr
  3209. tlbi VAALE1IS
  3210. tlbi IPAS2E1
  3211. tlbi IPAS2LE1
  3212. tlbi VMALLE1, x9
  3213. tlbi ALLE2, x10
  3214. tlbi ALLE3, x11
  3215. tlbi VAE1
  3216. tlbi VAE2
  3217. tlbi VAE3
  3218. tlbi ASIDE1
  3219. tlbi VAAE1
  3220. tlbi ALLE1, x25
  3221. tlbi VALE1
  3222. tlbi VALE2
  3223. tlbi VALE3
  3224. tlbi VMALLS12E1, x15
  3225. tlbi VAALE1
  3226. // CHECK-ERROR-NEXT: error: specified {{TLBI|tlbi}} op requires a register
  3227. // CHECK-ERROR-NEXT: tlbi IPAS2E1IS
  3228. // CHECK-ERROR-NEXT: ^
  3229. // CHECK-ERROR-NEXT: error: specified {{TLBI|tlbi}} op requires a register
  3230. // CHECK-ERROR-NEXT: tlbi IPAS2LE1IS
  3231. // CHECK-ERROR-NEXT: ^
  3232. // CHECK-ERROR-NEXT: error: specified {{TLBI|tlbi}} op does not use a register
  3233. // CHECK-ERROR-NEXT: tlbi VMALLE1IS, x12
  3234. // CHECK-ERROR-NEXT: ^
  3235. // CHECK-ERROR-NEXT: error: specified {{TLBI|tlbi}} op does not use a register
  3236. // CHECK-ERROR-NEXT: tlbi ALLE2IS, x11
  3237. // CHECK-ERROR-NEXT: ^
  3238. // CHECK-ERROR-NEXT: error: specified {{TLBI|tlbi}} op does not use a register
  3239. // CHECK-ERROR-NEXT: tlbi ALLE3IS, x20
  3240. // CHECK-ERROR-NEXT: ^
  3241. // CHECK-ERROR-NEXT: error: specified {{TLBI|tlbi}} op requires a register
  3242. // CHECK-ERROR-NEXT: tlbi VAE1IS
  3243. // CHECK-ERROR-NEXT: ^
  3244. // CHECK-ERROR-NEXT: error: specified {{TLBI|tlbi}} op requires a register
  3245. // CHECK-ERROR-NEXT: tlbi VAE2IS
  3246. // CHECK-ERROR-NEXT: ^
  3247. // CHECK-ERROR-NEXT: error: specified {{TLBI|tlbi}} op requires a register
  3248. // CHECK-ERROR-NEXT: tlbi VAE3IS
  3249. // CHECK-ERROR-NEXT: ^
  3250. // CHECK-ERROR-NEXT: error: specified {{TLBI|tlbi}} op requires a register
  3251. // CHECK-ERROR-NEXT: tlbi ASIDE1IS
  3252. // CHECK-ERROR-NEXT: ^
  3253. // CHECK-ERROR-NEXT: error: specified {{TLBI|tlbi}} op requires a register
  3254. // CHECK-ERROR-NEXT: tlbi VAAE1IS
  3255. // CHECK-ERROR-NEXT: ^
  3256. // CHECK-ERROR-NEXT: error: specified {{TLBI|tlbi}} op does not use a register
  3257. // CHECK-ERROR-NEXT: tlbi ALLE1IS, x0
  3258. // CHECK-ERROR-NEXT: ^
  3259. // CHECK-ERROR-NEXT: error: specified {{TLBI|tlbi}} op requires a register
  3260. // CHECK-ERROR-NEXT: tlbi VALE1IS
  3261. // CHECK-ERROR-NEXT: ^
  3262. // CHECK-ERROR-NEXT: error: specified {{TLBI|tlbi}} op requires a register
  3263. // CHECK-ERROR-NEXT: tlbi VALE2IS
  3264. // CHECK-ERROR-NEXT: ^
  3265. // CHECK-ERROR-NEXT: error: specified {{TLBI|tlbi}} op requires a register
  3266. // CHECK-ERROR-NEXT: tlbi VALE3IS
  3267. // CHECK-ERROR-NEXT: ^
  3268. // CHECK-ERROR-NEXT: error: specified {{TLBI|tlbi}} op does not use a register
  3269. // CHECK-ERROR-NEXT: tlbi VMALLS12E1IS, xzr
  3270. // CHECK-ERROR-NEXT: ^
  3271. // CHECK-ERROR-NEXT: error: specified {{TLBI|tlbi}} op requires a register
  3272. // CHECK-ERROR-NEXT: tlbi VAALE1IS
  3273. // CHECK-ERROR-NEXT: ^
  3274. // CHECK-ERROR-NEXT: error: specified {{TLBI|tlbi}} op requires a register
  3275. // CHECK-ERROR-NEXT: tlbi IPAS2E1
  3276. // CHECK-ERROR-NEXT: ^
  3277. // CHECK-ERROR-NEXT: error: specified {{TLBI|tlbi}} op requires a register
  3278. // CHECK-ERROR-NEXT: tlbi IPAS2LE1
  3279. // CHECK-ERROR-NEXT: ^
  3280. // CHECK-ERROR-NEXT: error: specified {{TLBI|tlbi}} op does not use a register
  3281. // CHECK-ERROR-NEXT: tlbi VMALLE1, x9
  3282. // CHECK-ERROR-NEXT: ^
  3283. // CHECK-ERROR-NEXT: error: specified {{TLBI|tlbi}} op does not use a register
  3284. // CHECK-ERROR-NEXT: tlbi ALLE2, x10
  3285. // CHECK-ERROR-NEXT: ^
  3286. // CHECK-ERROR-NEXT: error: specified {{TLBI|tlbi}} op does not use a register
  3287. // CHECK-ERROR-NEXT: tlbi ALLE3, x11
  3288. // CHECK-ERROR-NEXT: ^
  3289. // CHECK-ERROR-NEXT: error: specified {{TLBI|tlbi}} op requires a register
  3290. // CHECK-ERROR-NEXT: tlbi VAE1
  3291. // CHECK-ERROR-NEXT: ^
  3292. // CHECK-ERROR-NEXT: error: specified {{TLBI|tlbi}} op requires a register
  3293. // CHECK-ERROR-NEXT: tlbi VAE2
  3294. // CHECK-ERROR-NEXT: ^
  3295. // CHECK-ERROR-NEXT: error: specified {{TLBI|tlbi}} op requires a register
  3296. // CHECK-ERROR-NEXT: tlbi VAE3
  3297. // CHECK-ERROR-NEXT: ^
  3298. // CHECK-ERROR-NEXT: error: specified {{TLBI|tlbi}} op requires a register
  3299. // CHECK-ERROR-NEXT: tlbi ASIDE1
  3300. // CHECK-ERROR-NEXT: ^
  3301. // CHECK-ERROR-NEXT: error: specified {{TLBI|tlbi}} op requires a register
  3302. // CHECK-ERROR-NEXT: tlbi VAAE1
  3303. // CHECK-ERROR-NEXT: ^
  3304. // CHECK-ERROR-NEXT: error: specified {{TLBI|tlbi}} op does not use a register
  3305. // CHECK-ERROR-NEXT: tlbi ALLE1, x25
  3306. // CHECK-ERROR-NEXT: ^
  3307. // CHECK-ERROR-NEXT: error: specified {{TLBI|tlbi}} op requires a register
  3308. // CHECK-ERROR-NEXT: tlbi VALE1
  3309. // CHECK-ERROR-NEXT: ^
  3310. // CHECK-ERROR-NEXT: error: specified {{TLBI|tlbi}} op requires a register
  3311. // CHECK-ERROR-NEXT: tlbi VALE2
  3312. // CHECK-ERROR-NEXT: ^
  3313. // CHECK-ERROR-NEXT: error: specified {{TLBI|tlbi}} op requires a register
  3314. // CHECK-ERROR-NEXT: tlbi VALE3
  3315. // CHECK-ERROR-NEXT: ^
  3316. // CHECK-ERROR-NEXT: error: specified {{TLBI|tlbi}} op does not use a register
  3317. // CHECK-ERROR-NEXT: tlbi VMALLS12E1, x15
  3318. // CHECK-ERROR-NEXT: ^
  3319. // CHECK-ERROR-NEXT: error: specified {{TLBI|tlbi}} op requires a register
  3320. // CHECK-ERROR-NEXT: tlbi VAALE1
  3321. // CHECK-ERROR-NEXT: ^
  3322. // For the MSR/MRS instructions, first make sure read-only and
  3323. // write-only registers actually are.
  3324. msr MDCCSR_EL0, x12
  3325. msr DBGDTRRX_EL0, x12
  3326. msr MDRAR_EL1, x12
  3327. msr OSLSR_EL1, x12
  3328. msr DBGAUTHSTATUS_EL1, x12
  3329. msr MIDR_EL1, x12
  3330. msr CCSIDR_EL1, x12
  3331. msr CLIDR_EL1, x12
  3332. msr CCSIDR2_EL1, x12
  3333. msr CTR_EL0, x12
  3334. msr MPIDR_EL1, x12
  3335. msr REVIDR_EL1, x12
  3336. msr AIDR_EL1, x12
  3337. msr DCZID_EL0, x12
  3338. msr ID_PFR0_EL1, x12
  3339. msr ID_PFR1_EL1, x12
  3340. msr ID_DFR0_EL1, x12
  3341. msr ID_AFR0_EL1, x12
  3342. msr ID_MMFR0_EL1, x12
  3343. msr ID_MMFR1_EL1, x12
  3344. msr ID_MMFR2_EL1, x12
  3345. msr ID_MMFR3_EL1, x12
  3346. msr ID_MMFR4_EL1, x12
  3347. msr ID_MMFR5_EL1, x12
  3348. msr ID_ISAR0_EL1, x12
  3349. msr ID_ISAR1_EL1, x12
  3350. msr ID_ISAR2_EL1, x12
  3351. msr ID_ISAR3_EL1, x12
  3352. msr ID_ISAR4_EL1, x12
  3353. msr ID_ISAR5_EL1, x12
  3354. msr MVFR0_EL1, x12
  3355. msr MVFR1_EL1, x12
  3356. msr MVFR2_EL1, x12
  3357. msr ID_AA64PFR0_EL1, x12
  3358. msr ID_AA64PFR1_EL1, x12
  3359. msr ID_AA64DFR0_EL1, x12
  3360. msr ID_AA64DFR1_EL1, x12
  3361. msr ID_AA64AFR0_EL1, x12
  3362. msr ID_AA64AFR1_EL1, x12
  3363. msr ID_AA64ISAR0_EL1, x12
  3364. msr ID_AA64ISAR1_EL1, x12
  3365. msr ID_AA64MMFR0_EL1, x12
  3366. msr ID_AA64MMFR1_EL1, x12
  3367. msr PMCEID0_EL0, x12
  3368. msr PMCEID1_EL0, x12
  3369. msr RVBAR_EL1, x12
  3370. msr RVBAR_EL2, x12
  3371. msr RVBAR_EL3, x12
  3372. msr ISR_EL1, x12
  3373. msr CNTPCT_EL0, x12
  3374. msr CNTVCT_EL0, x12
  3375. msr PMEVCNTR31_EL0, x12
  3376. msr PMEVTYPER31_EL0, x12
  3377. // CHECK-ERROR: error: expected writable system register or pstate
  3378. // CHECK-ERROR-NEXT: msr MDCCSR_EL0, x12
  3379. // CHECK-ERROR-NEXT: ^
  3380. // CHECK-ERROR-NEXT: error: expected writable system register or pstate
  3381. // CHECK-ERROR-NEXT: msr DBGDTRRX_EL0, x12
  3382. // CHECK-ERROR-NEXT: ^
  3383. // CHECK-ERROR-NEXT: error: expected writable system register or pstate
  3384. // CHECK-ERROR-NEXT: msr MDRAR_EL1, x12
  3385. // CHECK-ERROR-NEXT: ^
  3386. // CHECK-ERROR-NEXT: error: expected writable system register or pstate
  3387. // CHECK-ERROR-NEXT: msr OSLSR_EL1, x12
  3388. // CHECK-ERROR-NEXT: ^
  3389. // CHECK-ERROR-NEXT: error: expected writable system register or pstate
  3390. // CHECK-ERROR-NEXT: msr DBGAUTHSTATUS_EL1, x12
  3391. // CHECK-ERROR-NEXT: ^
  3392. // CHECK-ERROR-NEXT: error: expected writable system register or pstate
  3393. // CHECK-ERROR-NEXT: msr MIDR_EL1, x12
  3394. // CHECK-ERROR-NEXT: ^
  3395. // CHECK-ERROR-NEXT: error: expected writable system register or pstate
  3396. // CHECK-ERROR-NEXT: msr CCSIDR_EL1, x12
  3397. // CHECK-ERROR-NEXT: ^
  3398. // CHECK-ERROR-NEXT: error: expected writable system register or pstate
  3399. // CHECK-ERROR-NEXT: msr CLIDR_EL1, x12
  3400. // CHECK-ERROR-NEXT: ^
  3401. // CHECK-ERROR-NEXT: error: expected writable system register or pstate
  3402. // CHECK-ERROR-NEXT: msr CCSIDR2_EL1, x12
  3403. // CHECK-ERROR-NEXT: ^
  3404. // CHECK-ERROR-NEXT: error: expected writable system register or pstate
  3405. // CHECK-ERROR-NEXT: msr CTR_EL0, x12
  3406. // CHECK-ERROR-NEXT: ^
  3407. // CHECK-ERROR-NEXT: error: expected writable system register or pstate
  3408. // CHECK-ERROR-NEXT: msr MPIDR_EL1, x12
  3409. // CHECK-ERROR-NEXT: ^
  3410. // CHECK-ERROR-NEXT: error: expected writable system register or pstate
  3411. // CHECK-ERROR-NEXT: msr REVIDR_EL1, x12
  3412. // CHECK-ERROR-NEXT: ^
  3413. // CHECK-ERROR-NEXT: error: expected writable system register or pstate
  3414. // CHECK-ERROR-NEXT: msr AIDR_EL1, x12
  3415. // CHECK-ERROR-NEXT: ^
  3416. // CHECK-ERROR-NEXT: error: expected writable system register or pstate
  3417. // CHECK-ERROR-NEXT: msr DCZID_EL0, x12
  3418. // CHECK-ERROR-NEXT: ^
  3419. // CHECK-ERROR-NEXT: error: expected writable system register or pstate
  3420. // CHECK-ERROR-NEXT: msr ID_PFR0_EL1, x12
  3421. // CHECK-ERROR-NEXT: ^
  3422. // CHECK-ERROR-NEXT: error: expected writable system register or pstate
  3423. // CHECK-ERROR-NEXT: msr ID_PFR1_EL1, x12
  3424. // CHECK-ERROR-NEXT: ^
  3425. // CHECK-ERROR-NEXT: error: expected writable system register or pstate
  3426. // CHECK-ERROR-NEXT: msr ID_DFR0_EL1, x12
  3427. // CHECK-ERROR-NEXT: ^
  3428. // CHECK-ERROR-NEXT: error: expected writable system register or pstate
  3429. // CHECK-ERROR-NEXT: msr ID_AFR0_EL1, x12
  3430. // CHECK-ERROR-NEXT: ^
  3431. // CHECK-ERROR-NEXT: error: expected writable system register or pstate
  3432. // CHECK-ERROR-NEXT: msr ID_MMFR0_EL1, x12
  3433. // CHECK-ERROR-NEXT: ^
  3434. // CHECK-ERROR-NEXT: error: expected writable system register or pstate
  3435. // CHECK-ERROR-NEXT: msr ID_MMFR1_EL1, x12
  3436. // CHECK-ERROR-NEXT: ^
  3437. // CHECK-ERROR-NEXT: error: expected writable system register or pstate
  3438. // CHECK-ERROR-NEXT: msr ID_MMFR2_EL1, x12
  3439. // CHECK-ERROR-NEXT: ^
  3440. // CHECK-ERROR-NEXT: error: expected writable system register or pstate
  3441. // CHECK-ERROR-NEXT: msr ID_MMFR3_EL1, x12
  3442. // CHECK-ERROR-NEXT: ^
  3443. // CHECK-ERROR-NEXT: error: expected writable system register or pstate
  3444. // CHECK-ERROR-NEXT: msr ID_MMFR4_EL1, x12
  3445. // CHECK-ERROR-NEXT: ^
  3446. // CHECK-ERROR-NEXT: error: expected writable system register or pstate
  3447. // CHECK-ERROR-NEXT: msr ID_MMFR5_EL1, x12
  3448. // CHECK-ERROR-NEXT: ^
  3449. // CHECK-ERROR-NEXT: error: expected writable system register or pstate
  3450. // CHECK-ERROR-NEXT: msr ID_ISAR0_EL1, x12
  3451. // CHECK-ERROR-NEXT: ^
  3452. // CHECK-ERROR-NEXT: error: expected writable system register or pstate
  3453. // CHECK-ERROR-NEXT: msr ID_ISAR1_EL1, x12
  3454. // CHECK-ERROR-NEXT: ^
  3455. // CHECK-ERROR-NEXT: error: expected writable system register or pstate
  3456. // CHECK-ERROR-NEXT: msr ID_ISAR2_EL1, x12
  3457. // CHECK-ERROR-NEXT: ^
  3458. // CHECK-ERROR-NEXT: error: expected writable system register or pstate
  3459. // CHECK-ERROR-NEXT: msr ID_ISAR3_EL1, x12
  3460. // CHECK-ERROR-NEXT: ^
  3461. // CHECK-ERROR-NEXT: error: expected writable system register or pstate
  3462. // CHECK-ERROR-NEXT: msr ID_ISAR4_EL1, x12
  3463. // CHECK-ERROR-NEXT: ^
  3464. // CHECK-ERROR-NEXT: error: expected writable system register or pstate
  3465. // CHECK-ERROR-NEXT: msr ID_ISAR5_EL1, x12
  3466. // CHECK-ERROR-NEXT: ^
  3467. // CHECK-ERROR-NEXT: error: expected writable system register or pstate
  3468. // CHECK-ERROR-NEXT: msr MVFR0_EL1, x12
  3469. // CHECK-ERROR-NEXT: ^
  3470. // CHECK-ERROR-NEXT: error: expected writable system register or pstate
  3471. // CHECK-ERROR-NEXT: msr MVFR1_EL1, x12
  3472. // CHECK-ERROR-NEXT: ^
  3473. // CHECK-ERROR-NEXT: error: expected writable system register or pstate
  3474. // CHECK-ERROR-NEXT: msr MVFR2_EL1, x12
  3475. // CHECK-ERROR-NEXT: ^
  3476. // CHECK-ERROR-NEXT: error: expected writable system register or pstate
  3477. // CHECK-ERROR-NEXT: msr ID_AA64PFR0_EL1, x12
  3478. // CHECK-ERROR-NEXT: ^
  3479. // CHECK-ERROR-NEXT: error: expected writable system register or pstate
  3480. // CHECK-ERROR-NEXT: msr ID_AA64PFR1_EL1, x12
  3481. // CHECK-ERROR-NEXT: ^
  3482. // CHECK-ERROR-NEXT: error: expected writable system register or pstate
  3483. // CHECK-ERROR-NEXT: msr ID_AA64DFR0_EL1, x12
  3484. // CHECK-ERROR-NEXT: ^
  3485. // CHECK-ERROR-NEXT: error: expected writable system register or pstate
  3486. // CHECK-ERROR-NEXT: msr ID_AA64DFR1_EL1, x12
  3487. // CHECK-ERROR-NEXT: ^
  3488. // CHECK-ERROR-NEXT: error: expected writable system register or pstate
  3489. // CHECK-ERROR-NEXT: msr ID_AA64AFR0_EL1, x12
  3490. // CHECK-ERROR-NEXT: ^
  3491. // CHECK-ERROR-NEXT: error: expected writable system register or pstate
  3492. // CHECK-ERROR-NEXT: msr ID_AA64AFR1_EL1, x12
  3493. // CHECK-ERROR-NEXT: ^
  3494. // CHECK-ERROR-NEXT: error: expected writable system register or pstate
  3495. // CHECK-ERROR-NEXT: msr ID_AA64ISAR0_EL1, x12
  3496. // CHECK-ERROR-NEXT: ^
  3497. // CHECK-ERROR-NEXT: error: expected writable system register or pstate
  3498. // CHECK-ERROR-NEXT: msr ID_AA64ISAR1_EL1, x12
  3499. // CHECK-ERROR-NEXT: ^
  3500. // CHECK-ERROR-NEXT: error: expected writable system register or pstate
  3501. // CHECK-ERROR-NEXT: msr ID_AA64MMFR0_EL1, x12
  3502. // CHECK-ERROR-NEXT: ^
  3503. // CHECK-ERROR-NEXT: error: expected writable system register or pstate
  3504. // CHECK-ERROR-NEXT: msr ID_AA64MMFR1_EL1, x12
  3505. // CHECK-ERROR-NEXT: ^
  3506. // CHECK-ERROR-NEXT: error: expected writable system register or pstate
  3507. // CHECK-ERROR-NEXT: msr PMCEID0_EL0, x12
  3508. // CHECK-ERROR-NEXT: ^
  3509. // CHECK-ERROR-NEXT: error: expected writable system register or pstate
  3510. // CHECK-ERROR-NEXT: msr PMCEID1_EL0, x12
  3511. // CHECK-ERROR-NEXT: ^
  3512. // CHECK-ERROR-NEXT: error: expected writable system register or pstate
  3513. // CHECK-ERROR-NEXT: msr RVBAR_EL1, x12
  3514. // CHECK-ERROR-NEXT: ^
  3515. // CHECK-ERROR-NEXT: error: expected writable system register or pstate
  3516. // CHECK-ERROR-NEXT: msr RVBAR_EL2, x12
  3517. // CHECK-ERROR-NEXT: ^
  3518. // CHECK-ERROR-NEXT: error: expected writable system register or pstate
  3519. // CHECK-ERROR-NEXT: msr RVBAR_EL3, x12
  3520. // CHECK-ERROR-NEXT: ^
  3521. // CHECK-ERROR-NEXT: error: expected writable system register or pstate
  3522. // CHECK-ERROR-NEXT: msr ISR_EL1, x12
  3523. // CHECK-ERROR-NEXT: ^
  3524. // CHECK-ERROR-NEXT: error: expected writable system register or pstate
  3525. // CHECK-ERROR-NEXT: msr CNTPCT_EL0, x12
  3526. // CHECK-ERROR-NEXT: ^
  3527. // CHECK-ERROR-NEXT: error: expected writable system register or pstate
  3528. // CHECK-ERROR-NEXT: msr CNTVCT_EL0, x12
  3529. // CHECK-ERROR-NEXT: ^
  3530. // CHECK-ERROR-NEXT: error: expected writable system register or pstate
  3531. // CHECK-ERROR-NEXT: msr PMEVCNTR31_EL0, x12
  3532. // CHECK-ERROR-NEXT: ^
  3533. // CHECK-ERROR-NEXT: error: expected writable system register or pstate
  3534. // CHECK-ERROR-NEXT: msr PMEVTYPER31_EL0, x12
  3535. // CHECK-ERROR-NEXT: ^
  3536. mrs x9, DBGDTRTX_EL0
  3537. mrs x9, OSLAR_EL1
  3538. mrs x9, PMSWINC_EL0
  3539. mrs x9, PMEVCNTR31_EL0
  3540. mrs x9, PMEVTYPER31_EL0
  3541. // CHECK-ERROR: error: expected readable system register
  3542. // CHECK-ERROR-NEXT: mrs x9, DBGDTRTX_EL0
  3543. // CHECK-ERROR-NEXT: ^
  3544. // CHECK-ERROR-NEXT: error: expected readable system register
  3545. // CHECK-ERROR-NEXT: mrs x9, OSLAR_EL1
  3546. // CHECK-ERROR-NEXT: ^
  3547. // CHECK-ERROR-NEXT: error: expected readable system register
  3548. // CHECK-ERROR-NEXT: mrs x9, PMSWINC_EL0
  3549. // CHECK-ERROR-NEXT: ^
  3550. // CHECK-ERROR-NEXT: error: expected readable system register
  3551. // CHECK-ERROR-NEXT: mrs x9, PMEVCNTR31_EL0
  3552. // CHECK-ERROR-NEXT: ^
  3553. // CHECK-ERROR-NEXT: error: expected readable system register
  3554. // CHECK-ERROR-NEXT: mrs x9, PMEVTYPER31_EL0
  3555. // CHECK-ERROR-NEXT: ^
  3556. // Now check some invalid generic names
  3557. mrs x12, s3_8_c11_c13_2
  3558. mrs x19, s3_2_c15_c16_2
  3559. mrs x30, s3_2_c15_c1_8
  3560. mrs x4, s4_7_c15_c15_7
  3561. mrs x14, s3_7_c16_c15_7
  3562. // CHECK-ERROR-NEXT: error: expected readable system register
  3563. // CHECK-ERROR-NEXT: mrs x12, s3_8_c11_c13_2
  3564. // CHECK-ERROR-NEXT: ^
  3565. // CHECK-ERROR-NEXT: error: expected readable system register
  3566. // CHECK-ERROR-NEXT: mrs x19, s3_2_c15_c16_2
  3567. // CHECK-ERROR-NEXT: ^
  3568. // CHECK-ERROR-NEXT: error: expected readable system register
  3569. // CHECK-ERROR-NEXT: mrs x30, s3_2_c15_c1_8
  3570. // CHECK-ERROR-NEXT: ^
  3571. // CHECK-ERROR-NEXT: error: expected readable system register
  3572. // CHECK-ERROR-NEXT: mrs x4, s4_7_c15_c15_7
  3573. // CHECK-ERROR-NEXT: ^
  3574. // CHECK-ERROR-NEXT: error: expected readable system register
  3575. // CHECK-ERROR-NEXT: mrs x14, s3_7_c16_c15_7
  3576. // CHECK-ERROR-NEXT: ^
  3577. //------------------------------------------------------------------------------
  3578. // Test and branch (immediate)
  3579. //------------------------------------------------------------------------------
  3580. tbz w3, #-1, addr
  3581. tbz w3, #32, nowhere
  3582. tbz x9, #-1, there
  3583. tbz x20, #64, dont
  3584. // CHECK-ERROR: error: {{expected|immediate must be an}} integer in range [0, 31]
  3585. // CHECK-ERROR-NEXT: tbz w3, #-1, addr
  3586. // CHECK-ERROR-NEXT: ^
  3587. // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 31]
  3588. // CHECK-ERROR-NEXT: tbz w3, #32, nowhere
  3589. // CHECK-ERROR-NEXT: ^
  3590. // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 63]
  3591. // CHECK-ERROR-NEXT: tbz x9, #-1, there
  3592. // CHECK-ERROR-NEXT: ^
  3593. // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 63]
  3594. // CHECK-ERROR-NEXT: tbz x20, #64, dont
  3595. // CHECK-ERROR-NEXT: ^
  3596. tbnz w3, #-1, addr
  3597. tbnz w3, #32, nowhere
  3598. tbnz x9, #-1, there
  3599. tbnz x20, #64, dont
  3600. // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 31]
  3601. // CHECK-ERROR-NEXT: tbnz w3, #-1, addr
  3602. // CHECK-ERROR-NEXT: ^
  3603. // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 31]
  3604. // CHECK-ERROR-NEXT: tbnz w3, #32, nowhere
  3605. // CHECK-ERROR-NEXT: ^
  3606. // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 63]
  3607. // CHECK-ERROR-NEXT: tbnz x9, #-1, there
  3608. // CHECK-ERROR-NEXT: ^
  3609. // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 63]
  3610. // CHECK-ERROR-NEXT: tbnz x20, #64, dont
  3611. //------------------------------------------------------------------------------
  3612. // Unconditional branch (immediate)
  3613. //------------------------------------------------------------------------------
  3614. b #134217728
  3615. b #-134217732
  3616. b #1
  3617. // CHECK-ERROR: error: expected label or encodable integer pc offset
  3618. // CHECK-ERROR-NEXT: b #134217728
  3619. // CHECK-ERROR-NEXT: ^
  3620. // CHECK-ERROR-NEXT: error: expected label or encodable integer pc offset
  3621. // CHECK-ERROR-NEXT: b #-134217732
  3622. // CHECK-ERROR-NEXT: ^
  3623. // CHECK-ERROR-NEXT: error: expected label or encodable integer pc offset
  3624. // CHECK-ERROR-NEXT: b #1
  3625. // CHECK-ERROR-NEXT: ^
  3626. //------------------------------------------------------------------------------
  3627. // Unconditional branch (register)
  3628. //------------------------------------------------------------------------------
  3629. br w2
  3630. br sp
  3631. // CHECK-ERROR: error: invalid operand for instruction
  3632. // CHECK-ERROR-NEXT: br w2
  3633. // CHECK-ERROR-NEXT: ^
  3634. // CHECK-ERROR-NEXT: error: invalid operand for instruction
  3635. // CHECK-ERROR-NEXT: br sp
  3636. // CHECK-ERROR-NEXT: ^
  3637. //// These ones shouldn't allow any registers
  3638. eret x2
  3639. drps x2
  3640. // CHECK-ERROR: error: invalid operand for instruction
  3641. // CHECK-ERROR-NEXT: eret x2
  3642. // CHECK-ERROR-NEXT: ^
  3643. // CHECK-ERROR-NEXT: error: invalid operand for instruction
  3644. // CHECK-ERROR-NEXT: drps x2
  3645. // CHECK-ERROR-NEXT: ^