ARM-Directives.html 21 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521
  1. <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
  2. <html>
  3. <!-- This file documents the GNU Assembler "as".
  4. Copyright (C) 1991-2020 Free Software Foundation, Inc.
  5. Permission is granted to copy, distribute and/or modify this document
  6. under the terms of the GNU Free Documentation License, Version 1.3
  7. or any later version published by the Free Software Foundation;
  8. with no Invariant Sections, with no Front-Cover Texts, and with no
  9. Back-Cover Texts. A copy of the license is included in the
  10. section entitled "GNU Free Documentation License".
  11. -->
  12. <!-- Created by GNU Texinfo 5.1, http://www.gnu.org/software/texinfo/ -->
  13. <head>
  14. <title>Using as: ARM Directives</title>
  15. <meta name="description" content="Using as: ARM Directives">
  16. <meta name="keywords" content="Using as: ARM Directives">
  17. <meta name="resource-type" content="document">
  18. <meta name="distribution" content="global">
  19. <meta name="Generator" content="makeinfo">
  20. <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
  21. <link href="index.html#Top" rel="start" title="Top">
  22. <link href="AS-Index.html#AS-Index" rel="index" title="AS Index">
  23. <link href="index.html#SEC_Contents" rel="contents" title="Table of Contents">
  24. <link href="ARM_002dDependent.html#ARM_002dDependent" rel="up" title="ARM-Dependent">
  25. <link href="ARM-Opcodes.html#ARM-Opcodes" rel="next" title="ARM Opcodes">
  26. <link href="ARM-Floating-Point.html#ARM-Floating-Point" rel="previous" title="ARM Floating Point">
  27. <style type="text/css">
  28. <!--
  29. a.summary-letter {text-decoration: none}
  30. blockquote.smallquotation {font-size: smaller}
  31. div.display {margin-left: 3.2em}
  32. div.example {margin-left: 3.2em}
  33. div.indentedblock {margin-left: 3.2em}
  34. div.lisp {margin-left: 3.2em}
  35. div.smalldisplay {margin-left: 3.2em}
  36. div.smallexample {margin-left: 3.2em}
  37. div.smallindentedblock {margin-left: 3.2em; font-size: smaller}
  38. div.smalllisp {margin-left: 3.2em}
  39. kbd {font-style:oblique}
  40. pre.display {font-family: inherit}
  41. pre.format {font-family: inherit}
  42. pre.menu-comment {font-family: serif}
  43. pre.menu-preformatted {font-family: serif}
  44. pre.smalldisplay {font-family: inherit; font-size: smaller}
  45. pre.smallexample {font-size: smaller}
  46. pre.smallformat {font-family: inherit; font-size: smaller}
  47. pre.smalllisp {font-size: smaller}
  48. span.nocodebreak {white-space:nowrap}
  49. span.nolinebreak {white-space:nowrap}
  50. span.roman {font-family:serif; font-weight:normal}
  51. span.sansserif {font-family:sans-serif; font-weight:normal}
  52. ul.no-bullet {list-style: none}
  53. -->
  54. </style>
  55. </head>
  56. <body lang="en" bgcolor="#FFFFFF" text="#000000" link="#0000FF" vlink="#800080" alink="#FF0000">
  57. <a name="ARM-Directives"></a>
  58. <div class="header">
  59. <p>
  60. Next: <a href="ARM-Opcodes.html#ARM-Opcodes" accesskey="n" rel="next">ARM Opcodes</a>, Previous: <a href="ARM-Floating-Point.html#ARM-Floating-Point" accesskey="p" rel="previous">ARM Floating Point</a>, Up: <a href="ARM_002dDependent.html#ARM_002dDependent" accesskey="u" rel="up">ARM-Dependent</a> &nbsp; [<a href="index.html#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="AS-Index.html#AS-Index" title="Index" rel="index">Index</a>]</p>
  61. </div>
  62. <hr>
  63. <a name="ARM-Machine-Directives"></a>
  64. <h4 class="subsection">9.4.4 ARM Machine Directives</h4>
  65. <a name="index-machine-directives_002c-ARM"></a>
  66. <a name="index-ARM-machine-directives"></a>
  67. <dl compact="compact">
  68. <dd>
  69. <a name="index-_002ealign-directive_002c-ARM"></a>
  70. </dd>
  71. <dt><code>.align <var>expression</var> [, <var>expression</var>]</code></dt>
  72. <dd><p>This is the generic <var>.align</var> directive. For the ARM however if the
  73. first argument is zero (ie no alignment is needed) the assembler will
  74. behave as if the argument had been 2 (ie pad to the next four byte
  75. boundary). This is for compatibility with ARM&rsquo;s own assembler.
  76. </p>
  77. <a name="index-_002earch-directive_002c-ARM"></a>
  78. </dd>
  79. <dt><code>.arch <var>name</var></code></dt>
  80. <dd><p>Select the target architecture. Valid values for <var>name</var> are the same as
  81. for the <samp>-march</samp> command-line option without the instruction set
  82. extension.
  83. </p>
  84. <p>Specifying <code>.arch</code> clears any previously selected architecture
  85. extensions.
  86. </p>
  87. <a name="index-_002earch_005fextension-directive_002c-ARM"></a>
  88. </dd>
  89. <dt><code>.arch_extension <var>name</var></code></dt>
  90. <dd><p>Add or remove an architecture extension to the target architecture. Valid
  91. values for <var>name</var> are the same as those accepted as architectural
  92. extensions by the <samp>-mcpu</samp> and <samp>-march</samp> command-line options.
  93. </p>
  94. <p><code>.arch_extension</code> may be used multiple times to add or remove extensions
  95. incrementally to the architecture being compiled for.
  96. </p>
  97. <a name="index-_002earm-directive_002c-ARM"></a>
  98. </dd>
  99. <dt><code>.arm</code></dt>
  100. <dd><p>This performs the same action as <var>.code 32</var>.
  101. </p>
  102. <a name="index-_002ebss-directive_002c-ARM"></a>
  103. </dd>
  104. <dt><code>.bss</code></dt>
  105. <dd><p>This directive switches to the <code>.bss</code> section.
  106. </p>
  107. <a name="index-_002ecantunwind-directive_002c-ARM"></a>
  108. </dd>
  109. <dt><code>.cantunwind</code></dt>
  110. <dd><p>Prevents unwinding through the current function. No personality routine
  111. or exception table data is required or permitted.
  112. </p>
  113. <a name="index-_002ecode-directive_002c-ARM"></a>
  114. </dd>
  115. <dt><code>.code <code>[16|32]</code></code></dt>
  116. <dd><p>This directive selects the instruction set being generated. The value 16
  117. selects Thumb, with the value 32 selecting ARM.
  118. </p>
  119. <a name="index-_002ecpu-directive_002c-ARM"></a>
  120. </dd>
  121. <dt><code>.cpu <var>name</var></code></dt>
  122. <dd><p>Select the target processor. Valid values for <var>name</var> are the same as
  123. for the <samp>-mcpu</samp> command-line option without the instruction set
  124. extension.
  125. </p>
  126. <p>Specifying <code>.cpu</code> clears any previously selected architecture
  127. extensions.
  128. </p>
  129. <a name="index-_002edn-and-_002eqn-directives_002c-ARM"></a>
  130. </dd>
  131. <dt><code><var>name</var> .dn <var>register name</var> [<var>.type</var>] [[<var>index</var>]]</code></dt>
  132. <dt><code><var>name</var> .qn <var>register name</var> [<var>.type</var>] [[<var>index</var>]]</code></dt>
  133. <dd>
  134. <p>The <code>dn</code> and <code>qn</code> directives are used to create typed
  135. and/or indexed register aliases for use in Advanced SIMD Extension
  136. (Neon) instructions. The former should be used to create aliases
  137. of double-precision registers, and the latter to create aliases of
  138. quad-precision registers.
  139. </p>
  140. <p>If these directives are used to create typed aliases, those aliases can
  141. be used in Neon instructions instead of writing types after the mnemonic
  142. or after each operand. For example:
  143. </p>
  144. <div class="smallexample">
  145. <pre class="smallexample"> x .dn d2.f32
  146. y .dn d3.f32
  147. z .dn d4.f32[1]
  148. vmul x,y,z
  149. </pre></div>
  150. <p>This is equivalent to writing the following:
  151. </p>
  152. <div class="smallexample">
  153. <pre class="smallexample"> vmul.f32 d2,d3,d4[1]
  154. </pre></div>
  155. <p>Aliases created using <code>dn</code> or <code>qn</code> can be destroyed using
  156. <code>unreq</code>.
  157. </p>
  158. <a name="index-_002eeabi_005fattribute-directive_002c-ARM"></a>
  159. </dd>
  160. <dt><code>.eabi_attribute <var>tag</var>, <var>value</var></code></dt>
  161. <dd><p>Set the EABI object attribute <var>tag</var> to <var>value</var>.
  162. </p>
  163. <p>The <var>tag</var> is either an attribute number, or one of the following:
  164. <code>Tag_CPU_raw_name</code>, <code>Tag_CPU_name</code>, <code>Tag_CPU_arch</code>,
  165. <code>Tag_CPU_arch_profile</code>, <code>Tag_ARM_ISA_use</code>,
  166. <code>Tag_THUMB_ISA_use</code>, <code>Tag_FP_arch</code>, <code>Tag_WMMX_arch</code>,
  167. <code>Tag_Advanced_SIMD_arch</code>, <code>Tag_MVE_arch</code>, <code>Tag_PCS_config</code>,
  168. <code>Tag_ABI_PCS_R9_use</code>, <code>Tag_ABI_PCS_RW_data</code>,
  169. <code>Tag_ABI_PCS_RO_data</code>, <code>Tag_ABI_PCS_GOT_use</code>,
  170. <code>Tag_ABI_PCS_wchar_t</code>, <code>Tag_ABI_FP_rounding</code>,
  171. <code>Tag_ABI_FP_denormal</code>, <code>Tag_ABI_FP_exceptions</code>,
  172. <code>Tag_ABI_FP_user_exceptions</code>, <code>Tag_ABI_FP_number_model</code>,
  173. <code>Tag_ABI_align_needed</code>, <code>Tag_ABI_align_preserved</code>,
  174. <code>Tag_ABI_enum_size</code>, <code>Tag_ABI_HardFP_use</code>,
  175. <code>Tag_ABI_VFP_args</code>, <code>Tag_ABI_WMMX_args</code>,
  176. <code>Tag_ABI_optimization_goals</code>, <code>Tag_ABI_FP_optimization_goals</code>,
  177. <code>Tag_compatibility</code>, <code>Tag_CPU_unaligned_access</code>,
  178. <code>Tag_FP_HP_extension</code>, <code>Tag_ABI_FP_16bit_format</code>,
  179. <code>Tag_MPextension_use</code>, <code>Tag_DIV_use</code>,
  180. <code>Tag_nodefaults</code>, <code>Tag_also_compatible_with</code>,
  181. <code>Tag_conformance</code>, <code>Tag_T2EE_use</code>,
  182. <code>Tag_Virtualization_use</code>
  183. </p>
  184. <p>The <var>value</var> is either a <code>number</code>, <code>&quot;string&quot;</code>, or
  185. <code>number, &quot;string&quot;</code> depending on the tag.
  186. </p>
  187. <p>Note - the following legacy values are also accepted by <var>tag</var>:
  188. <code>Tag_VFP_arch</code>, <code>Tag_ABI_align8_needed</code>,
  189. <code>Tag_ABI_align8_preserved</code>, <code>Tag_VFP_HP_extension</code>,
  190. </p>
  191. <a name="index-_002eeven-directive_002c-ARM"></a>
  192. </dd>
  193. <dt><code>.even</code></dt>
  194. <dd><p>This directive aligns to an even-numbered address.
  195. </p>
  196. <a name="index-_002eextend-directive_002c-ARM"></a>
  197. <a name="index-_002eldouble-directive_002c-ARM"></a>
  198. </dd>
  199. <dt><code>.extend <var>expression</var> [, <var>expression</var>]*</code></dt>
  200. <dt><code>.ldouble <var>expression</var> [, <var>expression</var>]*</code></dt>
  201. <dd><p>These directives write 12byte long double floating-point values to the
  202. output section. These are not compatible with current ARM processors
  203. or ABIs.
  204. </p>
  205. <a name="index-_002efloat16-directive_002c-ARM"></a>
  206. </dd>
  207. <dt><code>.float16 <var>value [,...,value_n]</var></code></dt>
  208. <dd><p>Place the half precision floating point representation of one or more
  209. floating-point values into the current section. The exact format of the
  210. encoding is specified by <code>.float16_format</code>. If the format has not
  211. been explicitly set yet (either via the <code>.float16_format</code> directive or
  212. the command line option) then the IEEE 754-2008 format is used.
  213. </p>
  214. <a name="index-_002efloat16_005fformat-directive_002c-ARM"></a>
  215. </dd>
  216. <dt><code>.float16_format <var>format</var></code></dt>
  217. <dd><p>Set the format to use when encoding float16 values emitted by
  218. the <code>.float16</code> directive.
  219. Once the format has been set it cannot be changed.
  220. <code>format</code> should be one of the following: <code>ieee</code> (encode in
  221. the IEEE 754-2008 half precision format) or <code>alternative</code> (encode in
  222. the Arm alternative half precision format).
  223. </p>
  224. <a name="arm_005ffnend"></a><a name="index-_002efnend-directive_002c-ARM"></a>
  225. </dd>
  226. <dt><code>.fnend</code></dt>
  227. <dd><p>Marks the end of a function with an unwind table entry. The unwind index
  228. table entry is created when this directive is processed.
  229. </p>
  230. <p>If no personality routine has been specified then standard personality
  231. routine 0 or 1 will be used, depending on the number of unwind opcodes
  232. required.
  233. </p>
  234. <a name="arm_005ffnstart"></a><a name="index-_002efnstart-directive_002c-ARM"></a>
  235. </dd>
  236. <dt><code>.fnstart</code></dt>
  237. <dd><p>Marks the start of a function with an unwind table entry.
  238. </p>
  239. <a name="index-_002eforce_005fthumb-directive_002c-ARM"></a>
  240. </dd>
  241. <dt><code>.force_thumb</code></dt>
  242. <dd><p>This directive forces the selection of Thumb instructions, even if the
  243. target processor does not support those instructions
  244. </p>
  245. <a name="index-_002efpu-directive_002c-ARM"></a>
  246. </dd>
  247. <dt><code>.fpu <var>name</var></code></dt>
  248. <dd><p>Select the floating-point unit to assemble for. Valid values for <var>name</var>
  249. are the same as for the <samp>-mfpu</samp> command-line option.
  250. </p>
  251. <a name="index-_002ehandlerdata-directive_002c-ARM"></a>
  252. </dd>
  253. <dt><code>.handlerdata</code></dt>
  254. <dd><p>Marks the end of the current function, and the start of the exception table
  255. entry for that function. Anything between this directive and the
  256. <code>.fnend</code> directive will be added to the exception table entry.
  257. </p>
  258. <p>Must be preceded by a <code>.personality</code> or <code>.personalityindex</code>
  259. directive.
  260. </p>
  261. <a name="index-_002einst-directive_002c-ARM"></a>
  262. </dd>
  263. <dt><code>.inst <var>opcode</var> [ , &hellip; ]</code></dt>
  264. <dt><code>.inst.n <var>opcode</var> [ , &hellip; ]</code></dt>
  265. <dt><code>.inst.w <var>opcode</var> [ , &hellip; ]</code></dt>
  266. <dd><p>Generates the instruction corresponding to the numerical value <var>opcode</var>.
  267. <code>.inst.n</code> and <code>.inst.w</code> allow the Thumb instruction size to be
  268. specified explicitly, overriding the normal encoding rules.
  269. </p>
  270. </dd>
  271. <dt><code>.ldouble <var>expression</var> [, <var>expression</var>]*</code></dt>
  272. <dd><p>See <code>.extend</code>.
  273. </p>
  274. <a name="index-_002eltorg-directive_002c-ARM"></a>
  275. </dd>
  276. <dt><code>.ltorg</code></dt>
  277. <dd><p>This directive causes the current contents of the literal pool to be
  278. dumped into the current section (which is assumed to be the .text
  279. section) at the current location (aligned to a word boundary).
  280. <code>GAS</code> maintains a separate literal pool for each section and each
  281. sub-section. The <code>.ltorg</code> directive will only affect the literal
  282. pool of the current section and sub-section. At the end of assembly
  283. all remaining, un-empty literal pools will automatically be dumped.
  284. </p>
  285. <p>Note - older versions of <code>GAS</code> would dump the current literal
  286. pool any time a section change occurred. This is no longer done, since
  287. it prevents accurate control of the placement of literal pools.
  288. </p>
  289. <a name="index-_002emovsp-directive_002c-ARM"></a>
  290. </dd>
  291. <dt><code>.movsp <var>reg</var> [, #<var>offset</var>]</code></dt>
  292. <dd><p>Tell the unwinder that <var>reg</var> contains an offset from the current
  293. stack pointer. If <var>offset</var> is not specified then it is assumed to be
  294. zero.
  295. </p>
  296. <a name="index-_002eobject_005farch-directive_002c-ARM"></a>
  297. </dd>
  298. <dt><code>.object_arch <var>name</var></code></dt>
  299. <dd><p>Override the architecture recorded in the EABI object attribute section.
  300. Valid values for <var>name</var> are the same as for the <code>.arch</code> directive.
  301. Typically this is useful when code uses runtime detection of CPU features.
  302. </p>
  303. <a name="index-_002epacked-directive_002c-ARM"></a>
  304. </dd>
  305. <dt><code>.packed <var>expression</var> [, <var>expression</var>]*</code></dt>
  306. <dd><p>This directive writes 12-byte packed floating-point values to the
  307. output section. These are not compatible with current ARM processors
  308. or ABIs.
  309. </p>
  310. <a name="arm_005fpad"></a><a name="index-_002epad-directive_002c-ARM"></a>
  311. </dd>
  312. <dt><code>.pad #<var>count</var></code></dt>
  313. <dd><p>Generate unwinder annotations for a stack adjustment of <var>count</var> bytes.
  314. A positive value indicates the function prologue allocated stack space by
  315. decrementing the stack pointer.
  316. </p>
  317. <a name="index-_002epersonality-directive_002c-ARM"></a>
  318. </dd>
  319. <dt><code>.personality <var>name</var></code></dt>
  320. <dd><p>Sets the personality routine for the current function to <var>name</var>.
  321. </p>
  322. <a name="index-_002epersonalityindex-directive_002c-ARM"></a>
  323. </dd>
  324. <dt><code>.personalityindex <var>index</var></code></dt>
  325. <dd><p>Sets the personality routine for the current function to the EABI standard
  326. routine number <var>index</var>
  327. </p>
  328. <a name="index-_002epool-directive_002c-ARM"></a>
  329. </dd>
  330. <dt><code>.pool</code></dt>
  331. <dd><p>This is a synonym for .ltorg.
  332. </p>
  333. <a name="index-_002ereq-directive_002c-ARM"></a>
  334. </dd>
  335. <dt><code><var>name</var> .req <var>register name</var></code></dt>
  336. <dd><p>This creates an alias for <var>register name</var> called <var>name</var>. For
  337. example:
  338. </p>
  339. <div class="smallexample">
  340. <pre class="smallexample"> foo .req r0
  341. </pre></div>
  342. <a name="arm_005fsave"></a><a name="index-_002esave-directive_002c-ARM"></a>
  343. </dd>
  344. <dt><code>.save <var>reglist</var></code></dt>
  345. <dd><p>Generate unwinder annotations to restore the registers in <var>reglist</var>.
  346. The format of <var>reglist</var> is the same as the corresponding store-multiple
  347. instruction.
  348. </p>
  349. <div class="smallexample">
  350. <pre class="smallexample"><em>core registers</em>
  351. </pre><pre class="smallexample"> .save {r4, r5, r6, lr}
  352. stmfd sp!, {r4, r5, r6, lr}
  353. </pre><pre class="smallexample"><em>FPA registers</em>
  354. </pre><pre class="smallexample"> .save f4, 2
  355. sfmfd f4, 2, [sp]!
  356. </pre><pre class="smallexample"><em>VFP registers</em>
  357. </pre><pre class="smallexample"> .save {d8, d9, d10}
  358. fstmdx sp!, {d8, d9, d10}
  359. </pre><pre class="smallexample"><em>iWMMXt registers</em>
  360. </pre><pre class="smallexample"> .save {wr10, wr11}
  361. wstrd wr11, [sp, #-8]!
  362. wstrd wr10, [sp, #-8]!
  363. or
  364. .save wr11
  365. wstrd wr11, [sp, #-8]!
  366. .save wr10
  367. wstrd wr10, [sp, #-8]!
  368. </pre></div>
  369. <a name="arm_005fsetfp"></a><a name="index-_002esetfp-directive_002c-ARM"></a>
  370. </dd>
  371. <dt><code>.setfp <var>fpreg</var>, <var>spreg</var> [, #<var>offset</var>]</code></dt>
  372. <dd><p>Make all unwinder annotations relative to a frame pointer. Without this
  373. the unwinder will use offsets from the stack pointer.
  374. </p>
  375. <p>The syntax of this directive is the same as the <code>add</code> or <code>mov</code>
  376. instruction used to set the frame pointer. <var>spreg</var> must be either
  377. <code>sp</code> or mentioned in a previous <code>.movsp</code> directive.
  378. </p>
  379. <div class="smallexample">
  380. <pre class="smallexample">.movsp ip
  381. mov ip, sp
  382. &hellip;
  383. .setfp fp, ip, #4
  384. add fp, ip, #4
  385. </pre></div>
  386. <a name="index-_002esecrel32-directive_002c-ARM"></a>
  387. </dd>
  388. <dt><code>.secrel32 <var>expression</var> [, <var>expression</var>]*</code></dt>
  389. <dd><p>This directive emits relocations that evaluate to the section-relative
  390. offset of each expression&rsquo;s symbol. This directive is only supported
  391. for PE targets.
  392. </p>
  393. <a name="index-_002esyntax-directive_002c-ARM"></a>
  394. </dd>
  395. <dt><code>.syntax [<code>unified</code> | <code>divided</code>]</code></dt>
  396. <dd><p>This directive sets the Instruction Set Syntax as described in the
  397. <a href="ARM_002dInstruction_002dSet.html#ARM_002dInstruction_002dSet">ARM-Instruction-Set</a> section.
  398. </p>
  399. <a name="index-_002ethumb-directive_002c-ARM"></a>
  400. </dd>
  401. <dt><code>.thumb</code></dt>
  402. <dd><p>This performs the same action as <var>.code 16</var>.
  403. </p>
  404. <a name="index-_002ethumb_005ffunc-directive_002c-ARM"></a>
  405. </dd>
  406. <dt><code>.thumb_func</code></dt>
  407. <dd><p>This directive specifies that the following symbol is the name of a
  408. Thumb encoded function. This information is necessary in order to allow
  409. the assembler and linker to generate correct code for interworking
  410. between Arm and Thumb instructions and should be used even if
  411. interworking is not going to be performed. The presence of this
  412. directive also implies <code>.thumb</code>
  413. </p>
  414. <p>This directive is not necessary when generating EABI objects. On these
  415. targets the encoding is implicit when generating Thumb code.
  416. </p>
  417. <a name="index-_002ethumb_005fset-directive_002c-ARM"></a>
  418. </dd>
  419. <dt><code>.thumb_set</code></dt>
  420. <dd><p>This performs the equivalent of a <code>.set</code> directive in that it
  421. creates a symbol which is an alias for another symbol (possibly not yet
  422. defined). This directive also has the added property in that it marks
  423. the aliased symbol as being a thumb function entry point, in the same
  424. way that the <code>.thumb_func</code> directive does.
  425. </p>
  426. <a name="index-_002etlsdescseq-directive_002c-ARM"></a>
  427. </dd>
  428. <dt><code>.tlsdescseq <var>tls-variable</var></code></dt>
  429. <dd><p>This directive is used to annotate parts of an inlined TLS descriptor
  430. trampoline. Normally the trampoline is provided by the linker, and
  431. this directive is not needed.
  432. </p>
  433. <a name="index-_002eunreq-directive_002c-ARM"></a>
  434. </dd>
  435. <dt><code>.unreq <var>alias-name</var></code></dt>
  436. <dd><p>This undefines a register alias which was previously defined using the
  437. <code>req</code>, <code>dn</code> or <code>qn</code> directives. For example:
  438. </p>
  439. <div class="smallexample">
  440. <pre class="smallexample"> foo .req r0
  441. .unreq foo
  442. </pre></div>
  443. <p>An error occurs if the name is undefined. Note - this pseudo op can
  444. be used to delete builtin in register name aliases (eg &rsquo;r0&rsquo;). This
  445. should only be done if it is really necessary.
  446. </p>
  447. <a name="index-_002eunwind_005fraw-directive_002c-ARM"></a>
  448. </dd>
  449. <dt><code>.unwind_raw <var>offset</var>, <var>byte1</var>, &hellip;</code></dt>
  450. <dd><p>Insert one of more arbitrary unwind opcode bytes, which are known to adjust
  451. the stack pointer by <var>offset</var> bytes.
  452. </p>
  453. <p>For example <code>.unwind_raw 4, 0xb1, 0x01</code> is equivalent to
  454. <code>.save {r0}</code>
  455. </p>
  456. <a name="index-_002evsave-directive_002c-ARM"></a>
  457. </dd>
  458. <dt><code>.vsave <var>vfp-reglist</var></code></dt>
  459. <dd><p>Generate unwinder annotations to restore the VFP registers in <var>vfp-reglist</var>
  460. using FLDMD. Also works for VFPv3 registers
  461. that are to be restored using VLDM.
  462. The format of <var>vfp-reglist</var> is the same as the corresponding store-multiple
  463. instruction.
  464. </p>
  465. <div class="smallexample">
  466. <pre class="smallexample"><em>VFP registers</em>
  467. </pre><pre class="smallexample"> .vsave {d8, d9, d10}
  468. fstmdd sp!, {d8, d9, d10}
  469. </pre><pre class="smallexample"><em>VFPv3 registers</em>
  470. </pre><pre class="smallexample"> .vsave {d15, d16, d17}
  471. vstm sp!, {d15, d16, d17}
  472. </pre></div>
  473. <p>Since FLDMX and FSTMX are now deprecated, this directive should be
  474. used in favour of <code>.save</code> for saving VFP registers for ARMv6 and above.
  475. </p>
  476. </dd>
  477. </dl>
  478. <hr>
  479. <div class="header">
  480. <p>
  481. Next: <a href="ARM-Opcodes.html#ARM-Opcodes" accesskey="n" rel="next">ARM Opcodes</a>, Previous: <a href="ARM-Floating-Point.html#ARM-Floating-Point" accesskey="p" rel="previous">ARM Floating Point</a>, Up: <a href="ARM_002dDependent.html#ARM_002dDependent" accesskey="u" rel="up">ARM-Dependent</a> &nbsp; [<a href="index.html#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="AS-Index.html#AS-Index" title="Index" rel="index">Index</a>]</p>
  482. </div>
  483. </body>
  484. </html>