a.out.go 15 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033
  1. // cmd/7c/7.out.h from Vita Nuova.
  2. // https://code.google.com/p/ken-cc/source/browse/src/cmd/7c/7.out.h
  3. //
  4. // Copyright © 1994-1999 Lucent Technologies Inc. All rights reserved.
  5. // Portions Copyright © 1995-1997 C H Forsyth (forsyth@terzarima.net)
  6. // Portions Copyright © 1997-1999 Vita Nuova Limited
  7. // Portions Copyright © 2000-2007 Vita Nuova Holdings Limited (www.vitanuova.com)
  8. // Portions Copyright © 2004,2006 Bruce Ellis
  9. // Portions Copyright © 2005-2007 C H Forsyth (forsyth@terzarima.net)
  10. // Revisions Copyright © 2000-2007 Lucent Technologies Inc. and others
  11. // Portions Copyright © 2009 The Go Authors. All rights reserved.
  12. //
  13. // Permission is hereby granted, free of charge, to any person obtaining a copy
  14. // of this software and associated documentation files (the "Software"), to deal
  15. // in the Software without restriction, including without limitation the rights
  16. // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
  17. // copies of the Software, and to permit persons to whom the Software is
  18. // furnished to do so, subject to the following conditions:
  19. //
  20. // The above copyright notice and this permission notice shall be included in
  21. // all copies or substantial portions of the Software.
  22. //
  23. // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
  24. // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
  25. // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
  26. // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
  27. // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
  28. // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
  29. // THE SOFTWARE.
  30. package arm64
  31. import "github.com/twitchyliquid64/golang-asm/obj"
  32. const (
  33. NSNAME = 8
  34. NSYM = 50
  35. NREG = 32 /* number of general registers */
  36. NFREG = 32 /* number of floating point registers */
  37. )
  38. // General purpose registers, kept in the low bits of Prog.Reg.
  39. const (
  40. // integer
  41. REG_R0 = obj.RBaseARM64 + iota
  42. REG_R1
  43. REG_R2
  44. REG_R3
  45. REG_R4
  46. REG_R5
  47. REG_R6
  48. REG_R7
  49. REG_R8
  50. REG_R9
  51. REG_R10
  52. REG_R11
  53. REG_R12
  54. REG_R13
  55. REG_R14
  56. REG_R15
  57. REG_R16
  58. REG_R17
  59. REG_R18
  60. REG_R19
  61. REG_R20
  62. REG_R21
  63. REG_R22
  64. REG_R23
  65. REG_R24
  66. REG_R25
  67. REG_R26
  68. REG_R27
  69. REG_R28
  70. REG_R29
  71. REG_R30
  72. REG_R31
  73. // scalar floating point
  74. REG_F0
  75. REG_F1
  76. REG_F2
  77. REG_F3
  78. REG_F4
  79. REG_F5
  80. REG_F6
  81. REG_F7
  82. REG_F8
  83. REG_F9
  84. REG_F10
  85. REG_F11
  86. REG_F12
  87. REG_F13
  88. REG_F14
  89. REG_F15
  90. REG_F16
  91. REG_F17
  92. REG_F18
  93. REG_F19
  94. REG_F20
  95. REG_F21
  96. REG_F22
  97. REG_F23
  98. REG_F24
  99. REG_F25
  100. REG_F26
  101. REG_F27
  102. REG_F28
  103. REG_F29
  104. REG_F30
  105. REG_F31
  106. // SIMD
  107. REG_V0
  108. REG_V1
  109. REG_V2
  110. REG_V3
  111. REG_V4
  112. REG_V5
  113. REG_V6
  114. REG_V7
  115. REG_V8
  116. REG_V9
  117. REG_V10
  118. REG_V11
  119. REG_V12
  120. REG_V13
  121. REG_V14
  122. REG_V15
  123. REG_V16
  124. REG_V17
  125. REG_V18
  126. REG_V19
  127. REG_V20
  128. REG_V21
  129. REG_V22
  130. REG_V23
  131. REG_V24
  132. REG_V25
  133. REG_V26
  134. REG_V27
  135. REG_V28
  136. REG_V29
  137. REG_V30
  138. REG_V31
  139. // The EQ in
  140. // CSET EQ, R0
  141. // is encoded as TYPE_REG, even though it's not really a register.
  142. COND_EQ
  143. COND_NE
  144. COND_HS
  145. COND_LO
  146. COND_MI
  147. COND_PL
  148. COND_VS
  149. COND_VC
  150. COND_HI
  151. COND_LS
  152. COND_GE
  153. COND_LT
  154. COND_GT
  155. COND_LE
  156. COND_AL
  157. COND_NV
  158. REG_RSP = REG_V31 + 32 // to differentiate ZR/SP, REG_RSP&0x1f = 31
  159. )
  160. // bits 0-4 indicates register: Vn
  161. // bits 5-8 indicates arrangement: <T>
  162. const (
  163. REG_ARNG = obj.RBaseARM64 + 1<<10 + iota<<9 // Vn.<T>
  164. REG_ELEM // Vn.<T>[index]
  165. REG_ELEM_END
  166. )
  167. // Not registers, but flags that can be combined with regular register
  168. // constants to indicate extended register conversion. When checking,
  169. // you should subtract obj.RBaseARM64 first. From this difference, bit 11
  170. // indicates extended register, bits 8-10 select the conversion mode.
  171. // REG_LSL is the index shift specifier, bit 9 indicates shifted offset register.
  172. const REG_LSL = obj.RBaseARM64 + 1<<9
  173. const REG_EXT = obj.RBaseARM64 + 1<<11
  174. const (
  175. REG_UXTB = REG_EXT + iota<<8
  176. REG_UXTH
  177. REG_UXTW
  178. REG_UXTX
  179. REG_SXTB
  180. REG_SXTH
  181. REG_SXTW
  182. REG_SXTX
  183. )
  184. // Special registers, after subtracting obj.RBaseARM64, bit 12 indicates
  185. // a special register and the low bits select the register.
  186. // SYSREG_END is the last item in the automatically generated system register
  187. // declaration, and it is defined in the sysRegEnc.go file.
  188. const (
  189. REG_SPECIAL = obj.RBaseARM64 + 1<<12
  190. REG_DAIFSet = SYSREG_END + iota
  191. REG_DAIFClr
  192. REG_PLDL1KEEP
  193. REG_PLDL1STRM
  194. REG_PLDL2KEEP
  195. REG_PLDL2STRM
  196. REG_PLDL3KEEP
  197. REG_PLDL3STRM
  198. REG_PLIL1KEEP
  199. REG_PLIL1STRM
  200. REG_PLIL2KEEP
  201. REG_PLIL2STRM
  202. REG_PLIL3KEEP
  203. REG_PLIL3STRM
  204. REG_PSTL1KEEP
  205. REG_PSTL1STRM
  206. REG_PSTL2KEEP
  207. REG_PSTL2STRM
  208. REG_PSTL3KEEP
  209. REG_PSTL3STRM
  210. )
  211. // Register assignments:
  212. //
  213. // compiler allocates R0 up as temps
  214. // compiler allocates register variables R7-R25
  215. // compiler allocates external registers R26 down
  216. //
  217. // compiler allocates register variables F7-F26
  218. // compiler allocates external registers F26 down
  219. const (
  220. REGMIN = REG_R7 // register variables allocated from here to REGMAX
  221. REGRT1 = REG_R16 // ARM64 IP0, external linker may use as a scrach register in trampoline
  222. REGRT2 = REG_R17 // ARM64 IP1, external linker may use as a scrach register in trampoline
  223. REGPR = REG_R18 // ARM64 platform register, unused in the Go toolchain
  224. REGMAX = REG_R25
  225. REGCTXT = REG_R26 // environment for closures
  226. REGTMP = REG_R27 // reserved for liblink
  227. REGG = REG_R28 // G
  228. REGFP = REG_R29 // frame pointer, unused in the Go toolchain
  229. REGLINK = REG_R30
  230. // ARM64 uses R31 as both stack pointer and zero register,
  231. // depending on the instruction. To differentiate RSP from ZR,
  232. // we use a different numeric value for REGZERO and REGSP.
  233. REGZERO = REG_R31
  234. REGSP = REG_RSP
  235. FREGRET = REG_F0
  236. FREGMIN = REG_F7 // first register variable
  237. FREGMAX = REG_F26 // last register variable for 7g only
  238. FREGEXT = REG_F26 // first external register
  239. )
  240. // http://infocenter.arm.com/help/topic/com.arm.doc.ecm0665627/abi_sve_aadwarf_100985_0000_00_en.pdf
  241. var ARM64DWARFRegisters = map[int16]int16{
  242. REG_R0: 0,
  243. REG_R1: 1,
  244. REG_R2: 2,
  245. REG_R3: 3,
  246. REG_R4: 4,
  247. REG_R5: 5,
  248. REG_R6: 6,
  249. REG_R7: 7,
  250. REG_R8: 8,
  251. REG_R9: 9,
  252. REG_R10: 10,
  253. REG_R11: 11,
  254. REG_R12: 12,
  255. REG_R13: 13,
  256. REG_R14: 14,
  257. REG_R15: 15,
  258. REG_R16: 16,
  259. REG_R17: 17,
  260. REG_R18: 18,
  261. REG_R19: 19,
  262. REG_R20: 20,
  263. REG_R21: 21,
  264. REG_R22: 22,
  265. REG_R23: 23,
  266. REG_R24: 24,
  267. REG_R25: 25,
  268. REG_R26: 26,
  269. REG_R27: 27,
  270. REG_R28: 28,
  271. REG_R29: 29,
  272. REG_R30: 30,
  273. // floating point
  274. REG_F0: 64,
  275. REG_F1: 65,
  276. REG_F2: 66,
  277. REG_F3: 67,
  278. REG_F4: 68,
  279. REG_F5: 69,
  280. REG_F6: 70,
  281. REG_F7: 71,
  282. REG_F8: 72,
  283. REG_F9: 73,
  284. REG_F10: 74,
  285. REG_F11: 75,
  286. REG_F12: 76,
  287. REG_F13: 77,
  288. REG_F14: 78,
  289. REG_F15: 79,
  290. REG_F16: 80,
  291. REG_F17: 81,
  292. REG_F18: 82,
  293. REG_F19: 83,
  294. REG_F20: 84,
  295. REG_F21: 85,
  296. REG_F22: 86,
  297. REG_F23: 87,
  298. REG_F24: 88,
  299. REG_F25: 89,
  300. REG_F26: 90,
  301. REG_F27: 91,
  302. REG_F28: 92,
  303. REG_F29: 93,
  304. REG_F30: 94,
  305. REG_F31: 95,
  306. // SIMD
  307. REG_V0: 64,
  308. REG_V1: 65,
  309. REG_V2: 66,
  310. REG_V3: 67,
  311. REG_V4: 68,
  312. REG_V5: 69,
  313. REG_V6: 70,
  314. REG_V7: 71,
  315. REG_V8: 72,
  316. REG_V9: 73,
  317. REG_V10: 74,
  318. REG_V11: 75,
  319. REG_V12: 76,
  320. REG_V13: 77,
  321. REG_V14: 78,
  322. REG_V15: 79,
  323. REG_V16: 80,
  324. REG_V17: 81,
  325. REG_V18: 82,
  326. REG_V19: 83,
  327. REG_V20: 84,
  328. REG_V21: 85,
  329. REG_V22: 86,
  330. REG_V23: 87,
  331. REG_V24: 88,
  332. REG_V25: 89,
  333. REG_V26: 90,
  334. REG_V27: 91,
  335. REG_V28: 92,
  336. REG_V29: 93,
  337. REG_V30: 94,
  338. REG_V31: 95,
  339. }
  340. const (
  341. BIG = 2048 - 8
  342. )
  343. const (
  344. /* mark flags */
  345. LABEL = 1 << iota
  346. LEAF
  347. FLOAT
  348. BRANCH
  349. LOAD
  350. FCMP
  351. SYNC
  352. LIST
  353. FOLL
  354. NOSCHED
  355. )
  356. const (
  357. // optab is sorted based on the order of these constants
  358. // and the first match is chosen.
  359. // The more specific class needs to come earlier.
  360. C_NONE = iota
  361. C_REG // R0..R30
  362. C_RSP // R0..R30, RSP
  363. C_FREG // F0..F31
  364. C_VREG // V0..V31
  365. C_PAIR // (Rn, Rm)
  366. C_SHIFT // Rn<<2
  367. C_EXTREG // Rn.UXTB[<<3]
  368. C_SPR // REG_NZCV
  369. C_COND // EQ, NE, etc
  370. C_ARNG // Vn.<T>
  371. C_ELEM // Vn.<T>[index]
  372. C_LIST // [V1, V2, V3]
  373. C_ZCON // $0 or ZR
  374. C_ABCON0 // could be C_ADDCON0 or C_BITCON
  375. C_ADDCON0 // 12-bit unsigned, unshifted
  376. C_ABCON // could be C_ADDCON or C_BITCON
  377. C_AMCON // could be C_ADDCON or C_MOVCON
  378. C_ADDCON // 12-bit unsigned, shifted left by 0 or 12
  379. C_MBCON // could be C_MOVCON or C_BITCON
  380. C_MOVCON // generated by a 16-bit constant, optionally inverted and/or shifted by multiple of 16
  381. C_BITCON // bitfield and logical immediate masks
  382. C_ADDCON2 // 24-bit constant
  383. C_LCON // 32-bit constant
  384. C_MOVCON2 // a constant that can be loaded with one MOVZ/MOVN and one MOVK
  385. C_MOVCON3 // a constant that can be loaded with one MOVZ/MOVN and two MOVKs
  386. C_VCON // 64-bit constant
  387. C_FCON // floating-point constant
  388. C_VCONADDR // 64-bit memory address
  389. C_AACON // ADDCON offset in auto constant $a(FP)
  390. C_AACON2 // 24-bit offset in auto constant $a(FP)
  391. C_LACON // 32-bit offset in auto constant $a(FP)
  392. C_AECON // ADDCON offset in extern constant $e(SB)
  393. // TODO(aram): only one branch class should be enough
  394. C_SBRA // for TYPE_BRANCH
  395. C_LBRA
  396. C_ZAUTO // 0(RSP)
  397. C_NSAUTO_8 // -256 <= x < 0, 0 mod 8
  398. C_NSAUTO_4 // -256 <= x < 0, 0 mod 4
  399. C_NSAUTO // -256 <= x < 0
  400. C_NPAUTO // -512 <= x < 0, 0 mod 8
  401. C_NAUTO4K // -4095 <= x < 0
  402. C_PSAUTO_8 // 0 to 255, 0 mod 8
  403. C_PSAUTO_4 // 0 to 255, 0 mod 4
  404. C_PSAUTO // 0 to 255
  405. C_PPAUTO // 0 to 504, 0 mod 8
  406. C_UAUTO4K_8 // 0 to 4095, 0 mod 8
  407. C_UAUTO4K_4 // 0 to 4095, 0 mod 4
  408. C_UAUTO4K_2 // 0 to 4095, 0 mod 2
  409. C_UAUTO4K // 0 to 4095
  410. C_UAUTO8K_8 // 0 to 8190, 0 mod 8
  411. C_UAUTO8K_4 // 0 to 8190, 0 mod 4
  412. C_UAUTO8K // 0 to 8190, 0 mod 2
  413. C_UAUTO16K_8 // 0 to 16380, 0 mod 8
  414. C_UAUTO16K // 0 to 16380, 0 mod 4
  415. C_UAUTO32K // 0 to 32760, 0 mod 8
  416. C_LAUTO // any other 32-bit constant
  417. C_SEXT1 // 0 to 4095, direct
  418. C_SEXT2 // 0 to 8190
  419. C_SEXT4 // 0 to 16380
  420. C_SEXT8 // 0 to 32760
  421. C_SEXT16 // 0 to 65520
  422. C_LEXT
  423. C_ZOREG // 0(R)
  424. C_NSOREG_8 // must mirror C_NSAUTO_8, etc
  425. C_NSOREG_4
  426. C_NSOREG
  427. C_NPOREG
  428. C_NOREG4K
  429. C_PSOREG_8
  430. C_PSOREG_4
  431. C_PSOREG
  432. C_PPOREG
  433. C_UOREG4K_8
  434. C_UOREG4K_4
  435. C_UOREG4K_2
  436. C_UOREG4K
  437. C_UOREG8K_8
  438. C_UOREG8K_4
  439. C_UOREG8K
  440. C_UOREG16K_8
  441. C_UOREG16K
  442. C_UOREG32K
  443. C_LOREG
  444. C_ADDR // TODO(aram): explain difference from C_VCONADDR
  445. // The GOT slot for a symbol in -dynlink mode.
  446. C_GOTADDR
  447. // TLS "var" in local exec mode: will become a constant offset from
  448. // thread local base that is ultimately chosen by the program linker.
  449. C_TLS_LE
  450. // TLS "var" in initial exec mode: will become a memory address (chosen
  451. // by the program linker) that the dynamic linker will fill with the
  452. // offset from the thread local base.
  453. C_TLS_IE
  454. C_ROFF // register offset (including register extended)
  455. C_GOK
  456. C_TEXTSIZE
  457. C_NCLASS // must be last
  458. )
  459. const (
  460. C_XPRE = 1 << 6 // match arm.C_WBIT, so Prog.String know how to print it
  461. C_XPOST = 1 << 5 // match arm.C_PBIT, so Prog.String know how to print it
  462. )
  463. //go:generate go run ../stringer.go -i $GOFILE -o anames.go -p arm64
  464. const (
  465. AADC = obj.ABaseARM64 + obj.A_ARCHSPECIFIC + iota
  466. AADCS
  467. AADCSW
  468. AADCW
  469. AADD
  470. AADDS
  471. AADDSW
  472. AADDW
  473. AADR
  474. AADRP
  475. AAND
  476. AANDS
  477. AANDSW
  478. AANDW
  479. AASR
  480. AASRW
  481. AAT
  482. ABFI
  483. ABFIW
  484. ABFM
  485. ABFMW
  486. ABFXIL
  487. ABFXILW
  488. ABIC
  489. ABICS
  490. ABICSW
  491. ABICW
  492. ABRK
  493. ACBNZ
  494. ACBNZW
  495. ACBZ
  496. ACBZW
  497. ACCMN
  498. ACCMNW
  499. ACCMP
  500. ACCMPW
  501. ACINC
  502. ACINCW
  503. ACINV
  504. ACINVW
  505. ACLREX
  506. ACLS
  507. ACLSW
  508. ACLZ
  509. ACLZW
  510. ACMN
  511. ACMNW
  512. ACMP
  513. ACMPW
  514. ACNEG
  515. ACNEGW
  516. ACRC32B
  517. ACRC32CB
  518. ACRC32CH
  519. ACRC32CW
  520. ACRC32CX
  521. ACRC32H
  522. ACRC32W
  523. ACRC32X
  524. ACSEL
  525. ACSELW
  526. ACSET
  527. ACSETM
  528. ACSETMW
  529. ACSETW
  530. ACSINC
  531. ACSINCW
  532. ACSINV
  533. ACSINVW
  534. ACSNEG
  535. ACSNEGW
  536. ADC
  537. ADCPS1
  538. ADCPS2
  539. ADCPS3
  540. ADMB
  541. ADRPS
  542. ADSB
  543. AEON
  544. AEONW
  545. AEOR
  546. AEORW
  547. AERET
  548. AEXTR
  549. AEXTRW
  550. AHINT
  551. AHLT
  552. AHVC
  553. AIC
  554. AISB
  555. ALDADDAB
  556. ALDADDAD
  557. ALDADDAH
  558. ALDADDAW
  559. ALDADDALB
  560. ALDADDALD
  561. ALDADDALH
  562. ALDADDALW
  563. ALDADDB
  564. ALDADDD
  565. ALDADDH
  566. ALDADDW
  567. ALDADDLB
  568. ALDADDLD
  569. ALDADDLH
  570. ALDADDLW
  571. ALDANDAB
  572. ALDANDAD
  573. ALDANDAH
  574. ALDANDAW
  575. ALDANDALB
  576. ALDANDALD
  577. ALDANDALH
  578. ALDANDALW
  579. ALDANDB
  580. ALDANDD
  581. ALDANDH
  582. ALDANDW
  583. ALDANDLB
  584. ALDANDLD
  585. ALDANDLH
  586. ALDANDLW
  587. ALDAR
  588. ALDARB
  589. ALDARH
  590. ALDARW
  591. ALDAXP
  592. ALDAXPW
  593. ALDAXR
  594. ALDAXRB
  595. ALDAXRH
  596. ALDAXRW
  597. ALDEORAB
  598. ALDEORAD
  599. ALDEORAH
  600. ALDEORAW
  601. ALDEORALB
  602. ALDEORALD
  603. ALDEORALH
  604. ALDEORALW
  605. ALDEORB
  606. ALDEORD
  607. ALDEORH
  608. ALDEORW
  609. ALDEORLB
  610. ALDEORLD
  611. ALDEORLH
  612. ALDEORLW
  613. ALDORAB
  614. ALDORAD
  615. ALDORAH
  616. ALDORAW
  617. ALDORALB
  618. ALDORALD
  619. ALDORALH
  620. ALDORALW
  621. ALDORB
  622. ALDORD
  623. ALDORH
  624. ALDORW
  625. ALDORLB
  626. ALDORLD
  627. ALDORLH
  628. ALDORLW
  629. ALDP
  630. ALDPW
  631. ALDPSW
  632. ALDXR
  633. ALDXRB
  634. ALDXRH
  635. ALDXRW
  636. ALDXP
  637. ALDXPW
  638. ALSL
  639. ALSLW
  640. ALSR
  641. ALSRW
  642. AMADD
  643. AMADDW
  644. AMNEG
  645. AMNEGW
  646. AMOVK
  647. AMOVKW
  648. AMOVN
  649. AMOVNW
  650. AMOVZ
  651. AMOVZW
  652. AMRS
  653. AMSR
  654. AMSUB
  655. AMSUBW
  656. AMUL
  657. AMULW
  658. AMVN
  659. AMVNW
  660. ANEG
  661. ANEGS
  662. ANEGSW
  663. ANEGW
  664. ANGC
  665. ANGCS
  666. ANGCSW
  667. ANGCW
  668. ANOOP
  669. AORN
  670. AORNW
  671. AORR
  672. AORRW
  673. APRFM
  674. APRFUM
  675. ARBIT
  676. ARBITW
  677. AREM
  678. AREMW
  679. AREV
  680. AREV16
  681. AREV16W
  682. AREV32
  683. AREVW
  684. AROR
  685. ARORW
  686. ASBC
  687. ASBCS
  688. ASBCSW
  689. ASBCW
  690. ASBFIZ
  691. ASBFIZW
  692. ASBFM
  693. ASBFMW
  694. ASBFX
  695. ASBFXW
  696. ASDIV
  697. ASDIVW
  698. ASEV
  699. ASEVL
  700. ASMADDL
  701. ASMC
  702. ASMNEGL
  703. ASMSUBL
  704. ASMULH
  705. ASMULL
  706. ASTXR
  707. ASTXRB
  708. ASTXRH
  709. ASTXP
  710. ASTXPW
  711. ASTXRW
  712. ASTLP
  713. ASTLPW
  714. ASTLR
  715. ASTLRB
  716. ASTLRH
  717. ASTLRW
  718. ASTLXP
  719. ASTLXPW
  720. ASTLXR
  721. ASTLXRB
  722. ASTLXRH
  723. ASTLXRW
  724. ASTP
  725. ASTPW
  726. ASUB
  727. ASUBS
  728. ASUBSW
  729. ASUBW
  730. ASVC
  731. ASXTB
  732. ASXTBW
  733. ASXTH
  734. ASXTHW
  735. ASXTW
  736. ASYS
  737. ASYSL
  738. ATBNZ
  739. ATBZ
  740. ATLBI
  741. ATST
  742. ATSTW
  743. AUBFIZ
  744. AUBFIZW
  745. AUBFM
  746. AUBFMW
  747. AUBFX
  748. AUBFXW
  749. AUDIV
  750. AUDIVW
  751. AUMADDL
  752. AUMNEGL
  753. AUMSUBL
  754. AUMULH
  755. AUMULL
  756. AUREM
  757. AUREMW
  758. AUXTB
  759. AUXTH
  760. AUXTW
  761. AUXTBW
  762. AUXTHW
  763. AWFE
  764. AWFI
  765. AYIELD
  766. AMOVB
  767. AMOVBU
  768. AMOVH
  769. AMOVHU
  770. AMOVW
  771. AMOVWU
  772. AMOVD
  773. AMOVNP
  774. AMOVNPW
  775. AMOVP
  776. AMOVPD
  777. AMOVPQ
  778. AMOVPS
  779. AMOVPSW
  780. AMOVPW
  781. ASWPAD
  782. ASWPAW
  783. ASWPAH
  784. ASWPAB
  785. ASWPALD
  786. ASWPALW
  787. ASWPALH
  788. ASWPALB
  789. ASWPD
  790. ASWPW
  791. ASWPH
  792. ASWPB
  793. ASWPLD
  794. ASWPLW
  795. ASWPLH
  796. ASWPLB
  797. ABEQ
  798. ABNE
  799. ABCS
  800. ABHS
  801. ABCC
  802. ABLO
  803. ABMI
  804. ABPL
  805. ABVS
  806. ABVC
  807. ABHI
  808. ABLS
  809. ABGE
  810. ABLT
  811. ABGT
  812. ABLE
  813. AFABSD
  814. AFABSS
  815. AFADDD
  816. AFADDS
  817. AFCCMPD
  818. AFCCMPED
  819. AFCCMPS
  820. AFCCMPES
  821. AFCMPD
  822. AFCMPED
  823. AFCMPES
  824. AFCMPS
  825. AFCVTSD
  826. AFCVTDS
  827. AFCVTZSD
  828. AFCVTZSDW
  829. AFCVTZSS
  830. AFCVTZSSW
  831. AFCVTZUD
  832. AFCVTZUDW
  833. AFCVTZUS
  834. AFCVTZUSW
  835. AFDIVD
  836. AFDIVS
  837. AFLDPD
  838. AFLDPS
  839. AFMOVD
  840. AFMOVS
  841. AFMOVQ
  842. AFMULD
  843. AFMULS
  844. AFNEGD
  845. AFNEGS
  846. AFSQRTD
  847. AFSQRTS
  848. AFSTPD
  849. AFSTPS
  850. AFSUBD
  851. AFSUBS
  852. ASCVTFD
  853. ASCVTFS
  854. ASCVTFWD
  855. ASCVTFWS
  856. AUCVTFD
  857. AUCVTFS
  858. AUCVTFWD
  859. AUCVTFWS
  860. AWORD
  861. ADWORD
  862. AFCSELS
  863. AFCSELD
  864. AFMAXS
  865. AFMINS
  866. AFMAXD
  867. AFMIND
  868. AFMAXNMS
  869. AFMAXNMD
  870. AFNMULS
  871. AFNMULD
  872. AFRINTNS
  873. AFRINTND
  874. AFRINTPS
  875. AFRINTPD
  876. AFRINTMS
  877. AFRINTMD
  878. AFRINTZS
  879. AFRINTZD
  880. AFRINTAS
  881. AFRINTAD
  882. AFRINTXS
  883. AFRINTXD
  884. AFRINTIS
  885. AFRINTID
  886. AFMADDS
  887. AFMADDD
  888. AFMSUBS
  889. AFMSUBD
  890. AFNMADDS
  891. AFNMADDD
  892. AFNMSUBS
  893. AFNMSUBD
  894. AFMINNMS
  895. AFMINNMD
  896. AFCVTDH
  897. AFCVTHS
  898. AFCVTHD
  899. AFCVTSH
  900. AAESD
  901. AAESE
  902. AAESIMC
  903. AAESMC
  904. ASHA1C
  905. ASHA1H
  906. ASHA1M
  907. ASHA1P
  908. ASHA1SU0
  909. ASHA1SU1
  910. ASHA256H
  911. ASHA256H2
  912. ASHA256SU0
  913. ASHA256SU1
  914. ASHA512H
  915. ASHA512H2
  916. ASHA512SU0
  917. ASHA512SU1
  918. AVADD
  919. AVADDP
  920. AVAND
  921. AVBIF
  922. AVCMEQ
  923. AVCNT
  924. AVEOR
  925. AVMOV
  926. AVLD1
  927. AVLD2
  928. AVLD3
  929. AVLD4
  930. AVLD1R
  931. AVLD2R
  932. AVLD3R
  933. AVLD4R
  934. AVORR
  935. AVREV16
  936. AVREV32
  937. AVREV64
  938. AVST1
  939. AVST2
  940. AVST3
  941. AVST4
  942. AVDUP
  943. AVADDV
  944. AVMOVI
  945. AVUADDLV
  946. AVSUB
  947. AVFMLA
  948. AVFMLS
  949. AVPMULL
  950. AVPMULL2
  951. AVEXT
  952. AVRBIT
  953. AVUSHR
  954. AVUSHLL
  955. AVUSHLL2
  956. AVUXTL
  957. AVUXTL2
  958. AVUZP1
  959. AVUZP2
  960. AVSHL
  961. AVSRI
  962. AVBSL
  963. AVBIT
  964. AVTBL
  965. AVZIP1
  966. AVZIP2
  967. AVCMTST
  968. ALAST
  969. AB = obj.AJMP
  970. ABL = obj.ACALL
  971. )
  972. const (
  973. // shift types
  974. SHIFT_LL = 0 << 22
  975. SHIFT_LR = 1 << 22
  976. SHIFT_AR = 2 << 22
  977. )
  978. // Arrangement for ARM64 SIMD instructions
  979. const (
  980. // arrangement types
  981. ARNG_8B = iota
  982. ARNG_16B
  983. ARNG_1D
  984. ARNG_4H
  985. ARNG_8H
  986. ARNG_2S
  987. ARNG_4S
  988. ARNG_2D
  989. ARNG_1Q
  990. ARNG_B
  991. ARNG_H
  992. ARNG_S
  993. ARNG_D
  994. )