c-aarch64.texi 19 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566
  1. @c Copyright (C) 2009-2022 Free Software Foundation, Inc.
  2. @c Contributed by ARM Ltd.
  3. @c This is part of the GAS manual.
  4. @c For copying conditions, see the file as.texinfo.
  5. @c man end
  6. @ifset GENERIC
  7. @page
  8. @node AArch64-Dependent
  9. @chapter AArch64 Dependent Features
  10. @end ifset
  11. @ifclear GENERIC
  12. @node Machine Dependencies
  13. @chapter AArch64 Dependent Features
  14. @end ifclear
  15. @cindex AArch64 support
  16. @menu
  17. * AArch64 Options:: Options
  18. * AArch64 Extensions:: Extensions
  19. * AArch64 Syntax:: Syntax
  20. * AArch64 Floating Point:: Floating Point
  21. * AArch64 Directives:: AArch64 Machine Directives
  22. * AArch64 Opcodes:: Opcodes
  23. * AArch64 Mapping Symbols:: Mapping Symbols
  24. @end menu
  25. @node AArch64 Options
  26. @section Options
  27. @cindex AArch64 options (none)
  28. @cindex options for AArch64 (none)
  29. @c man begin OPTIONS
  30. @table @gcctabopt
  31. @cindex @option{-EB} command-line option, AArch64
  32. @item -EB
  33. This option specifies that the output generated by the assembler should
  34. be marked as being encoded for a big-endian processor.
  35. @cindex @option{-EL} command-line option, AArch64
  36. @item -EL
  37. This option specifies that the output generated by the assembler should
  38. be marked as being encoded for a little-endian processor.
  39. @cindex @option{-mabi=} command-line option, AArch64
  40. @item -mabi=@var{abi}
  41. Specify which ABI the source code uses. The recognized arguments
  42. are: @code{ilp32} and @code{lp64}, which decides the generated object
  43. file in ELF32 and ELF64 format respectively. The default is @code{lp64}.
  44. @cindex @option{-mcpu=} command-line option, AArch64
  45. @item -mcpu=@var{processor}[+@var{extension}@dots{}]
  46. This option specifies the target processor. The assembler will issue an error
  47. message if an attempt is made to assemble an instruction which will not execute
  48. on the target processor. The following processor names are recognized:
  49. @code{cortex-a34},
  50. @code{cortex-a35},
  51. @code{cortex-a53},
  52. @code{cortex-a55},
  53. @code{cortex-a57},
  54. @code{cortex-a65},
  55. @code{cortex-a65ae},
  56. @code{cortex-a72},
  57. @code{cortex-a73},
  58. @code{cortex-a75},
  59. @code{cortex-a76},
  60. @code{cortex-a76ae},
  61. @code{cortex-a77},
  62. @code{cortex-a78},
  63. @code{cortex-a78ae},
  64. @code{cortex-a78c},
  65. @code{cortex-a510},
  66. @code{cortex-a710},
  67. @code{ares},
  68. @code{exynos-m1},
  69. @code{falkor},
  70. @code{neoverse-n1},
  71. @code{neoverse-n2},
  72. @code{neoverse-e1},
  73. @code{neoverse-v1},
  74. @code{qdf24xx},
  75. @code{saphira},
  76. @code{thunderx},
  77. @code{vulcan},
  78. @code{xgene1}
  79. @code{xgene2},
  80. @code{cortex-r82},
  81. @code{cortex-x1},
  82. and
  83. @code{cortex-x2}.
  84. The special name @code{all} may be used to allow the assembler to accept
  85. instructions valid for any supported processor, including all optional
  86. extensions.
  87. In addition to the basic instruction set, the assembler can be told to
  88. accept, or restrict, various extension mnemonics that extend the
  89. processor. @xref{AArch64 Extensions}.
  90. If some implementations of a particular processor can have an
  91. extension, then then those extensions are automatically enabled.
  92. Consequently, you will not normally have to specify any additional
  93. extensions.
  94. @cindex @option{-march=} command-line option, AArch64
  95. @item -march=@var{architecture}[+@var{extension}@dots{}]
  96. This option specifies the target architecture. The assembler will
  97. issue an error message if an attempt is made to assemble an
  98. instruction which will not execute on the target architecture. The
  99. following architecture names are recognized: @code{armv8-a},
  100. @code{armv8.1-a}, @code{armv8.2-a}, @code{armv8.3-a}, @code{armv8.4-a}
  101. @code{armv8.5-a}, @code{armv8.6-a}, @code{armv8.7-a}, @code{armv8.8-a},
  102. @code{armv8-r}, @code{armv9-a}, @code{armv9.1-a}, @code{armv9.2-a},
  103. and @code{armv9.3-a}.
  104. If both @option{-mcpu} and @option{-march} are specified, the
  105. assembler will use the setting for @option{-mcpu}. If neither are
  106. specified, the assembler will default to @option{-mcpu=all}.
  107. The architecture option can be extended with the same instruction set
  108. extension options as the @option{-mcpu} option. Unlike
  109. @option{-mcpu}, extensions are not always enabled by default,
  110. @xref{AArch64 Extensions}.
  111. @cindex @code{-mverbose-error} command-line option, AArch64
  112. @item -mverbose-error
  113. This option enables verbose error messages for AArch64 gas. This option
  114. is enabled by default.
  115. @cindex @code{-mno-verbose-error} command-line option, AArch64
  116. @item -mno-verbose-error
  117. This option disables verbose error messages in AArch64 gas.
  118. @end table
  119. @c man end
  120. @node AArch64 Extensions
  121. @section Architecture Extensions
  122. The table below lists the permitted architecture extensions that are
  123. supported by the assembler and the conditions under which they are
  124. automatically enabled.
  125. Multiple extensions may be specified, separated by a @code{+}.
  126. Extension mnemonics may also be removed from those the assembler
  127. accepts. This is done by prepending @code{no} to the option that adds
  128. the extension. Extensions that are removed must be listed after all
  129. extensions that have been added.
  130. Enabling an extension that requires other extensions will
  131. automatically cause those extensions to be enabled. Similarly,
  132. disabling an extension that is required by other extensions will
  133. automatically cause those extensions to be disabled.
  134. @multitable @columnfractions .12 .17 .17 .54
  135. @headitem Extension @tab Minimum Architecture @tab Enabled by default
  136. @tab Description
  137. @item @code{aes} @tab ARMv8-A @tab No
  138. @tab Enable the AES cryptographic extensions. This implies @code{fp} and
  139. @code{simd}.
  140. @item @code{bf16} @tab ARMv8.2-A @tab ARMv8.6-A or later
  141. @tab Enable BFloat16 extension.
  142. @item @code{compnum} @tab ARMv8.2-A @tab ARMv8.3-A or later
  143. @tab Enable the complex number SIMD extensions. This implies @code{fp16} and
  144. @code{simd}.
  145. @item @code{crc} @tab ARMv8-A @tab ARMv8.1-A or later
  146. @tab Enable CRC instructions.
  147. @item @code{crypto} @tab ARMv8-A @tab No
  148. @tab Enable cryptographic extensions. This implies @code{fp}, @code{simd},
  149. @code{aes} and @code{sha2}.
  150. @item @code{dotprod} @tab ARMv8.2-A @tab ARMv8.4-A or later
  151. @tab Enable the Dot Product extension. This implies @code{simd}.
  152. @item @code{f32mm} @tab ARMv8.2-A @tab No
  153. @tab Enable F32 Matrix Multiply extension. This implies @code{sve}.
  154. @item @code{f64mm} @tab ARMv8.2-A @tab No
  155. @tab Enable F64 Matrix Multiply extension. This implies @code{sve}.
  156. @item @code{flagm} @tab ARMv8-A @tab ARMv8.4-A or later
  157. @tab Enable Flag Manipulation instructions.
  158. @item @code{fp16fml} @tab ARMv8.2-A @tab ARMv8.4-A or later
  159. @tab Enable ARMv8.2 16-bit floating-point multiplication variant support. This
  160. implies @code{fp} and @code{fp16}.
  161. @item @code{fp16} @tab ARMv8.2-A @tab ARMv8.2-A or later
  162. @tab Enable ARMv8.2 16-bit floating-point support. This implies @code{fp}.
  163. @item @code{fp} @tab ARMv8-A @tab ARMv8-A or later
  164. @tab Enable floating-point extensions.
  165. @item @code{hbc} @tab @tab Armv8.8-A or later
  166. @tab Enable Armv8.8-A hinted conditional branch instructions
  167. @item @code{i8mm} @tab ARMv8.2-A @tab ARMv8.6-A or later
  168. @tab Enable Int8 Matrix Multiply extension.
  169. @item @code{lor} @tab ARMv8-A @tab ARMv8.1-A or later
  170. @tab Enable Limited Ordering Regions extensions.
  171. @item @code{ls64} @tab ARMv8.6-A @tab ARMv8.7-A or later
  172. @tab Enable 64 Byte Loads/Stores.
  173. @item @code{lse} @tab ARMv8-A @tab ARMv8.1-A or later
  174. @tab Enable Large System extensions.
  175. @item @code{memtag} @tab ARMv8.5-A @tab No
  176. @tab Enable ARMv8.5-A Memory Tagging Extensions.
  177. @item @code{mops} @tab @tab Armv8.8-A or later
  178. @tab Enable Armv8.8-A memcpy and memset acceleration instructions
  179. @item @code{pan} @tab ARMv8-A @tab ARMv8.1-A or later
  180. @tab Enable Privileged Access Never support.
  181. @item @code{pauth} @tab ARMv8-A @tab No
  182. @tab Enable Pointer Authentication.
  183. @item @code{predres} @tab ARMv8-A @tab ARMv8.5-A or later
  184. @tab Enable the Execution and Data and Prediction instructions.
  185. @item @code{profile} @tab ARMv8.2-A @tab No
  186. @tab Enable statistical profiling extensions.
  187. @item @code{ras} @tab ARMv8-A @tab ARMv8.2-A or later
  188. @tab Enable the Reliability, Availability and Serviceability extension.
  189. @item @code{rcpc} @tab ARMv8.2-A @tab ARMv8.3-A or later
  190. @tab Enable the weak release consistency extension.
  191. @item @code{rdma} @tab ARMv8-A @tab ARMv8.1-A or later
  192. @tab Enable ARMv8.1 Advanced SIMD extensions. This implies @code{simd}.
  193. @item @code{rng} @tab ARMv8.5-A @tab No
  194. @tab Enable ARMv8.5-A random number instructions.
  195. @item @code{sb} @tab ARMv8-A @tab ARMv8.5-A or later
  196. @tab Enable the speculation barrier instruction sb.
  197. @item @code{sha2} @tab ARMv8-A @tab No
  198. @tab Enable the SHA2 cryptographic extensions. This implies @code{fp} and
  199. @code{simd}.
  200. @item @code{sha3} @tab ARMv8.2-A @tab No
  201. @tab Enable the ARMv8.2-A SHA2 and SHA3 cryptographic extensions. This implies
  202. @code{fp}, @code{simd} and @code{sha2}.
  203. @item @code{simd} @tab ARMv8-A @tab ARMv8-A or later
  204. @tab Enable Advanced SIMD extensions. This implies @code{fp}.
  205. @item @code{sm4} @tab ARMv8.2-A @tab No
  206. @tab Enable the ARMv8.2-A SM3 and SM4 cryptographic extensions. This implies
  207. @code{fp} and @code{simd}.
  208. @item @code{sme} @tab Armv9-A @tab No
  209. @tab Enable SME Extension.
  210. @item @code{sme-f64} @tab Armv9-A @tab No
  211. @tab Enable SME F64 Extension.
  212. @item @code{sme-i64} @tab Armv9-A @tab No
  213. @tab Enable SME I64 Extension.
  214. @item @code{ssbs} @tab ARMv8-A @tab ARMv8.5-A or later
  215. @tab Enable Speculative Store Bypassing Safe state read and write.
  216. @item @code{sve} @tab ARMv8.2-A @tab Armv9-A or later
  217. @tab Enable the Scalable Vector Extensions. This implies @code{fp16},
  218. @code{simd} and @code{compnum}.
  219. @item @code{sve2} @tab ARMv8-A @tab Armv9-A or later
  220. @tab Enable the SVE2 Extension. This implies @code{sve}.
  221. @item @code{sve2-aes} @tab ARMv8-A @tab No
  222. @tab Enable SVE2 AES Extension. This also enables the .Q->.B form of the
  223. @code{pmullt} and @code{pmullb} instructions. This implies @code{aes} and
  224. @code{sve2}.
  225. @item @code{sve2-bitperm} @tab ARMv8-A @tab No
  226. @tab Enable SVE2 BITPERM Extension.
  227. @item @code{sve2-sha3} @tab ARMv8-A @tab No
  228. @tab Enable SVE2 SHA3 Extension. This implies @code{sha3} and @code{sve2}.
  229. @item @code{sve2-sm4} @tab ARMv8-A @tab No
  230. @tab Enable SVE2 SM4 Extension. This implies @code{sm4} and @code{sve2}.
  231. @item @code{tme} @tab ARMv8-A @tab No
  232. @tab Enable Transactional Memory Extensions.
  233. @end multitable
  234. @node AArch64 Syntax
  235. @section Syntax
  236. @menu
  237. * AArch64-Chars:: Special Characters
  238. * AArch64-Regs:: Register Names
  239. * AArch64-Relocations:: Relocations
  240. @end menu
  241. @node AArch64-Chars
  242. @subsection Special Characters
  243. @cindex line comment character, AArch64
  244. @cindex AArch64 line comment character
  245. The presence of a @samp{//} on a line indicates the start of a comment
  246. that extends to the end of the current line. If a @samp{#} appears as
  247. the first character of a line, the whole line is treated as a comment.
  248. @cindex line separator, AArch64
  249. @cindex statement separator, AArch64
  250. @cindex AArch64 line separator
  251. The @samp{;} character can be used instead of a newline to separate
  252. statements.
  253. @cindex immediate character, AArch64
  254. @cindex AArch64 immediate character
  255. The @samp{#} can be optionally used to indicate immediate operands.
  256. @node AArch64-Regs
  257. @subsection Register Names
  258. @cindex AArch64 register names
  259. @cindex register names, AArch64
  260. Please refer to the section @samp{4.4 Register Names} of
  261. @samp{ARMv8 Instruction Set Overview}, which is available at
  262. @uref{http://infocenter.arm.com}.
  263. @node AArch64-Relocations
  264. @subsection Relocations
  265. @cindex relocations, AArch64
  266. @cindex AArch64 relocations
  267. @cindex MOVN, MOVZ and MOVK group relocations, AArch64
  268. Relocations for @samp{MOVZ} and @samp{MOVK} instructions can be generated
  269. by prefixing the label with @samp{#:abs_g2:} etc.
  270. For example to load the 48-bit absolute address of @var{foo} into x0:
  271. @smallexample
  272. movz x0, #:abs_g2:foo // bits 32-47, overflow check
  273. movk x0, #:abs_g1_nc:foo // bits 16-31, no overflow check
  274. movk x0, #:abs_g0_nc:foo // bits 0-15, no overflow check
  275. @end smallexample
  276. @cindex ADRP, ADD, LDR/STR group relocations, AArch64
  277. Relocations for @samp{ADRP}, and @samp{ADD}, @samp{LDR} or @samp{STR}
  278. instructions can be generated by prefixing the label with
  279. @samp{:pg_hi21:} and @samp{#:lo12:} respectively.
  280. For example to use 33-bit (+/-4GB) pc-relative addressing to
  281. load the address of @var{foo} into x0:
  282. @smallexample
  283. adrp x0, :pg_hi21:foo
  284. add x0, x0, #:lo12:foo
  285. @end smallexample
  286. Or to load the value of @var{foo} into x0:
  287. @smallexample
  288. adrp x0, :pg_hi21:foo
  289. ldr x0, [x0, #:lo12:foo]
  290. @end smallexample
  291. Note that @samp{:pg_hi21:} is optional.
  292. @smallexample
  293. adrp x0, foo
  294. @end smallexample
  295. is equivalent to
  296. @smallexample
  297. adrp x0, :pg_hi21:foo
  298. @end smallexample
  299. @node AArch64 Floating Point
  300. @section Floating Point
  301. @cindex floating point, AArch64 (@sc{ieee})
  302. @cindex AArch64 floating point (@sc{ieee})
  303. The AArch64 architecture uses @sc{ieee} floating-point numbers.
  304. @node AArch64 Directives
  305. @section AArch64 Machine Directives
  306. @cindex machine directives, AArch64
  307. @cindex AArch64 machine directives
  308. @table @code
  309. @c AAAAAAAAAAAAAAAAAAAAAAAAA
  310. @cindex @code{.arch} directive, AArch64
  311. @item .arch @var{name}
  312. Select the target architecture. Valid values for @var{name} are the same as
  313. for the @option{-march} command-line option.
  314. Specifying @code{.arch} clears any previously selected architecture
  315. extensions.
  316. @cindex @code{.arch_extension} directive, AArch64
  317. @item .arch_extension @var{name}
  318. Add or remove an architecture extension to the target architecture. Valid
  319. values for @var{name} are the same as those accepted as architectural
  320. extensions by the @option{-mcpu} command-line option.
  321. @code{.arch_extension} may be used multiple times to add or remove extensions
  322. incrementally to the architecture being compiled for.
  323. @c BBBBBBBBBBBBBBBBBBBBBBBBBB
  324. @cindex @code{.bss} directive, AArch64
  325. @item .bss
  326. This directive switches to the @code{.bss} section.
  327. @c CCCCCCCCCCCCCCCCCCCCCCCCCC
  328. @cindex @code{.cpu} directive, AArch64
  329. @item .cpu @var{name}
  330. Set the target processor. Valid values for @var{name} are the same as
  331. those accepted by the @option{-mcpu=} command-line option.
  332. @c DDDDDDDDDDDDDDDDDDDDDDDDDD
  333. @cindex @code{.dword} directive, AArch64
  334. @item .dword @var{expressions}
  335. The @code{.dword} directive produces 64 bit values.
  336. @c EEEEEEEEEEEEEEEEEEEEEEEEEE
  337. @cindex @code{.even} directive, AArch64
  338. @item .even
  339. The @code{.even} directive aligns the output on the next even byte
  340. boundary.
  341. @c FFFFFFFFFFFFFFFFFFFFFFFFFF
  342. @cindex @code{.float16} directive, AArch64
  343. @item .float16 @var{value [,...,value_n]}
  344. Place the half precision floating point representation of one or more
  345. floating-point values into the current section.
  346. The format used to encode the floating point values is always the
  347. IEEE 754-2008 half precision floating point format.
  348. @c GGGGGGGGGGGGGGGGGGGGGGGGGG
  349. @c HHHHHHHHHHHHHHHHHHHHHHHHHH
  350. @c IIIIIIIIIIIIIIIIIIIIIIIIII
  351. @cindex @code{.inst} directive, AArch64
  352. @item .inst @var{expressions}
  353. Inserts the expressions into the output as if they were instructions,
  354. rather than data.
  355. @c JJJJJJJJJJJJJJJJJJJJJJJJJJ
  356. @c KKKKKKKKKKKKKKKKKKKKKKKKKK
  357. @c LLLLLLLLLLLLLLLLLLLLLLLLLL
  358. @cindex @code{.ltorg} directive, AArch64
  359. @item .ltorg
  360. This directive causes the current contents of the literal pool to be
  361. dumped into the current section (which is assumed to be the .text
  362. section) at the current location (aligned to a word boundary).
  363. GAS maintains a separate literal pool for each section and each
  364. sub-section. The @code{.ltorg} directive will only affect the literal
  365. pool of the current section and sub-section. At the end of assembly
  366. all remaining, un-empty literal pools will automatically be dumped.
  367. Note - older versions of GAS would dump the current literal
  368. pool any time a section change occurred. This is no longer done, since
  369. it prevents accurate control of the placement of literal pools.
  370. @c MMMMMMMMMMMMMMMMMMMMMMMMMM
  371. @c NNNNNNNNNNNNNNNNNNNNNNNNNN
  372. @c OOOOOOOOOOOOOOOOOOOOOOOOOO
  373. @c PPPPPPPPPPPPPPPPPPPPPPPPPP
  374. @cindex @code{.pool} directive, AArch64
  375. @item .pool
  376. This is a synonym for .ltorg.
  377. @c QQQQQQQQQQQQQQQQQQQQQQQQQQ
  378. @c RRRRRRRRRRRRRRRRRRRRRRRRRR
  379. @cindex @code{.req} directive, AArch64
  380. @item @var{name} .req @var{register name}
  381. This creates an alias for @var{register name} called @var{name}. For
  382. example:
  383. @smallexample
  384. foo .req w0
  385. @end smallexample
  386. ip0, ip1, lr and fp are automatically defined to
  387. alias to X16, X17, X30 and X29 respectively.
  388. @c SSSSSSSSSSSSSSSSSSSSSSSSSS
  389. @c TTTTTTTTTTTTTTTTTTTTTTTTTT
  390. @cindex @code{.tlsdescadd} directive, AArch64
  391. @item @code{.tlsdescadd}
  392. Emits a TLSDESC_ADD reloc on the next instruction.
  393. @cindex @code{.tlsdesccall} directive, AArch64
  394. @item @code{.tlsdesccall}
  395. Emits a TLSDESC_CALL reloc on the next instruction.
  396. @cindex @code{.tlsdescldr} directive, AArch64
  397. @item @code{.tlsdescldr}
  398. Emits a TLSDESC_LDR reloc on the next instruction.
  399. @c UUUUUUUUUUUUUUUUUUUUUUUUUU
  400. @cindex @code{.unreq} directive, AArch64
  401. @item .unreq @var{alias-name}
  402. This undefines a register alias which was previously defined using the
  403. @code{req} directive. For example:
  404. @smallexample
  405. foo .req w0
  406. .unreq foo
  407. @end smallexample
  408. An error occurs if the name is undefined. Note - this pseudo op can
  409. be used to delete builtin in register name aliases (eg 'w0'). This
  410. should only be done if it is really necessary.
  411. @c VVVVVVVVVVVVVVVVVVVVVVVVVV
  412. @cindex @code{.variant_pcs} directive, AArch64
  413. @item .variant_pcs @var{symbol}
  414. This directive marks @var{symbol} referencing a function that may
  415. follow a variant procedure call standard with different register
  416. usage convention from the base procedure call standard.
  417. @c WWWWWWWWWWWWWWWWWWWWWWWWWW
  418. @c XXXXXXXXXXXXXXXXXXXXXXXXXX
  419. @cindex @code{.xword} directive, AArch64
  420. @item .xword @var{expressions}
  421. The @code{.xword} directive produces 64 bit values. This is the same
  422. as the @code{.dword} directive.
  423. @c YYYYYYYYYYYYYYYYYYYYYYYYYY
  424. @c ZZZZZZZZZZZZZZZZZZZZZZZZZZ
  425. @cindex @code{.cfi_b_key_frame} directive, AArch64
  426. @item @code{.cfi_b_key_frame}
  427. The @code{.cfi_b_key_frame} directive inserts a 'B' character into the CIE
  428. corresponding to the current frame's FDE, meaning that its return address has
  429. been signed with the B-key. If two frames are signed with differing keys then
  430. they will not share the same CIE. This information is intended to be used by
  431. the stack unwinder in order to properly authenticate return addresses.
  432. @end table
  433. @node AArch64 Opcodes
  434. @section Opcodes
  435. @cindex AArch64 opcodes
  436. @cindex opcodes for AArch64
  437. GAS implements all the standard AArch64 opcodes. It also
  438. implements several pseudo opcodes, including several synthetic load
  439. instructions.
  440. @table @code
  441. @cindex @code{LDR reg,=<expr>} pseudo op, AArch64
  442. @item LDR =
  443. @smallexample
  444. ldr <register> , =<expression>
  445. @end smallexample
  446. The constant expression will be placed into the nearest literal pool (if it not
  447. already there) and a PC-relative LDR instruction will be generated.
  448. @end table
  449. For more information on the AArch64 instruction set and assembly language
  450. notation, see @samp{ARMv8 Instruction Set Overview} available at
  451. @uref{http://infocenter.arm.com}.
  452. @node AArch64 Mapping Symbols
  453. @section Mapping Symbols
  454. The AArch64 ELF specification requires that special symbols be inserted
  455. into object files to mark certain features:
  456. @table @code
  457. @cindex @code{$x}
  458. @item $x
  459. At the start of a region of code containing AArch64 instructions.
  460. @cindex @code{$d}
  461. @item $d
  462. At the start of a region of data.
  463. @end table