ARM-Directives.html 21 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508
  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-2017 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.2, 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="prev" 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="prev">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-_002e2byte-directive_002c-ARM"></a>
  70. <a name="index-_002e4byte-directive_002c-ARM"></a>
  71. <a name="index-_002e8byte-directive_002c-ARM"></a>
  72. </dd>
  73. <dt><code>.2byte <var>expression</var> [, <var>expression</var>]*</code></dt>
  74. <dt><code>.4byte <var>expression</var> [, <var>expression</var>]*</code></dt>
  75. <dt><code>.8byte <var>expression</var> [, <var>expression</var>]*</code></dt>
  76. <dd><p>These directives write 2, 4 or 8 byte values to the output section.
  77. </p>
  78. <a name="index-_002ealign-directive_002c-ARM"></a>
  79. </dd>
  80. <dt><code>.align <var>expression</var> [, <var>expression</var>]</code></dt>
  81. <dd><p>This is the generic <var>.align</var> directive. For the ARM however if the
  82. first argument is zero (ie no alignment is needed) the assembler will
  83. behave as if the argument had been 2 (ie pad to the next four byte
  84. boundary). This is for compatibility with ARM&rsquo;s own assembler.
  85. </p>
  86. <a name="index-_002earch-directive_002c-ARM"></a>
  87. </dd>
  88. <dt><code>.arch <var>name</var></code></dt>
  89. <dd><p>Select the target architecture. Valid values for <var>name</var> are the same as
  90. for the <samp>-march</samp> commandline option.
  91. </p>
  92. <p>Specifying <code>.arch</code> clears any previously selected architecture
  93. extensions.
  94. </p>
  95. <a name="index-_002earch_005fextension-directive_002c-ARM"></a>
  96. </dd>
  97. <dt><code>.arch_extension <var>name</var></code></dt>
  98. <dd><p>Add or remove an architecture extension to the target architecture. Valid
  99. values for <var>name</var> are the same as those accepted as architectural
  100. extensions by the <samp>-mcpu</samp> commandline option.
  101. </p>
  102. <p><code>.arch_extension</code> may be used multiple times to add or remove extensions
  103. incrementally to the architecture being compiled for.
  104. </p>
  105. <a name="index-_002earm-directive_002c-ARM"></a>
  106. </dd>
  107. <dt><code>.arm</code></dt>
  108. <dd><p>This performs the same action as <var>.code 32</var>.
  109. </p>
  110. <a name="index-_002ebss-directive_002c-ARM"></a>
  111. </dd>
  112. <dt><code>.bss</code></dt>
  113. <dd><p>This directive switches to the <code>.bss</code> section.
  114. </p>
  115. <a name="index-_002ecantunwind-directive_002c-ARM"></a>
  116. </dd>
  117. <dt><code>.cantunwind</code></dt>
  118. <dd><p>Prevents unwinding through the current function. No personality routine
  119. or exception table data is required or permitted.
  120. </p>
  121. <a name="index-_002ecode-directive_002c-ARM"></a>
  122. </dd>
  123. <dt><code>.code <code>[16|32]</code></code></dt>
  124. <dd><p>This directive selects the instruction set being generated. The value 16
  125. selects Thumb, with the value 32 selecting ARM.
  126. </p>
  127. <a name="index-_002ecpu-directive_002c-ARM"></a>
  128. </dd>
  129. <dt><code>.cpu <var>name</var></code></dt>
  130. <dd><p>Select the target processor. Valid values for <var>name</var> are the same as
  131. for the <samp>-mcpu</samp> commandline option.
  132. </p>
  133. <p>Specifying <code>.cpu</code> clears any previously selected architecture
  134. extensions.
  135. </p>
  136. <a name="index-_002edn-and-_002eqn-directives_002c-ARM"></a>
  137. </dd>
  138. <dt><code><var>name</var> .dn <var>register name</var> [<var>.type</var>] [[<var>index</var>]]</code></dt>
  139. <dt><code><var>name</var> .qn <var>register name</var> [<var>.type</var>] [[<var>index</var>]]</code></dt>
  140. <dd>
  141. <p>The <code>dn</code> and <code>qn</code> directives are used to create typed
  142. and/or indexed register aliases for use in Advanced SIMD Extension
  143. (Neon) instructions. The former should be used to create aliases
  144. of double-precision registers, and the latter to create aliases of
  145. quad-precision registers.
  146. </p>
  147. <p>If these directives are used to create typed aliases, those aliases can
  148. be used in Neon instructions instead of writing types after the mnemonic
  149. or after each operand. For example:
  150. </p>
  151. <div class="smallexample">
  152. <pre class="smallexample"> x .dn d2.f32
  153. y .dn d3.f32
  154. z .dn d4.f32[1]
  155. vmul x,y,z
  156. </pre></div>
  157. <p>This is equivalent to writing the following:
  158. </p>
  159. <div class="smallexample">
  160. <pre class="smallexample"> vmul.f32 d2,d3,d4[1]
  161. </pre></div>
  162. <p>Aliases created using <code>dn</code> or <code>qn</code> can be destroyed using
  163. <code>unreq</code>.
  164. </p>
  165. <a name="index-_002eeabi_005fattribute-directive_002c-ARM"></a>
  166. </dd>
  167. <dt><code>.eabi_attribute <var>tag</var>, <var>value</var></code></dt>
  168. <dd><p>Set the EABI object attribute <var>tag</var> to <var>value</var>.
  169. </p>
  170. <p>The <var>tag</var> is either an attribute number, or one of the following:
  171. <code>Tag_CPU_raw_name</code>, <code>Tag_CPU_name</code>, <code>Tag_CPU_arch</code>,
  172. <code>Tag_CPU_arch_profile</code>, <code>Tag_ARM_ISA_use</code>,
  173. <code>Tag_THUMB_ISA_use</code>, <code>Tag_FP_arch</code>, <code>Tag_WMMX_arch</code>,
  174. <code>Tag_Advanced_SIMD_arch</code>, <code>Tag_PCS_config</code>,
  175. <code>Tag_ABI_PCS_R9_use</code>, <code>Tag_ABI_PCS_RW_data</code>,
  176. <code>Tag_ABI_PCS_RO_data</code>, <code>Tag_ABI_PCS_GOT_use</code>,
  177. <code>Tag_ABI_PCS_wchar_t</code>, <code>Tag_ABI_FP_rounding</code>,
  178. <code>Tag_ABI_FP_denormal</code>, <code>Tag_ABI_FP_exceptions</code>,
  179. <code>Tag_ABI_FP_user_exceptions</code>, <code>Tag_ABI_FP_number_model</code>,
  180. <code>Tag_ABI_align_needed</code>, <code>Tag_ABI_align_preserved</code>,
  181. <code>Tag_ABI_enum_size</code>, <code>Tag_ABI_HardFP_use</code>,
  182. <code>Tag_ABI_VFP_args</code>, <code>Tag_ABI_WMMX_args</code>,
  183. <code>Tag_ABI_optimization_goals</code>, <code>Tag_ABI_FP_optimization_goals</code>,
  184. <code>Tag_compatibility</code>, <code>Tag_CPU_unaligned_access</code>,
  185. <code>Tag_FP_HP_extension</code>, <code>Tag_ABI_FP_16bit_format</code>,
  186. <code>Tag_MPextension_use</code>, <code>Tag_DIV_use</code>,
  187. <code>Tag_nodefaults</code>, <code>Tag_also_compatible_with</code>,
  188. <code>Tag_conformance</code>, <code>Tag_T2EE_use</code>,
  189. <code>Tag_Virtualization_use</code>
  190. </p>
  191. <p>The <var>value</var> is either a <code>number</code>, <code>&quot;string&quot;</code>, or
  192. <code>number, &quot;string&quot;</code> depending on the tag.
  193. </p>
  194. <p>Note - the following legacy values are also accepted by <var>tag</var>:
  195. <code>Tag_VFP_arch</code>, <code>Tag_ABI_align8_needed</code>,
  196. <code>Tag_ABI_align8_preserved</code>, <code>Tag_VFP_HP_extension</code>,
  197. </p>
  198. <a name="index-_002eeven-directive_002c-ARM"></a>
  199. </dd>
  200. <dt><code>.even</code></dt>
  201. <dd><p>This directive aligns to an even-numbered address.
  202. </p>
  203. <a name="index-_002eextend-directive_002c-ARM"></a>
  204. <a name="index-_002eldouble-directive_002c-ARM"></a>
  205. </dd>
  206. <dt><code>.extend <var>expression</var> [, <var>expression</var>]*</code></dt>
  207. <dt><code>.ldouble <var>expression</var> [, <var>expression</var>]*</code></dt>
  208. <dd><p>These directives write 12byte long double floating-point values to the
  209. output section. These are not compatible with current ARM processors
  210. or ABIs.
  211. </p>
  212. <a name="arm_005ffnend"></a><a name="index-_002efnend-directive_002c-ARM"></a>
  213. </dd>
  214. <dt><code>.fnend</code></dt>
  215. <dd><p>Marks the end of a function with an unwind table entry. The unwind index
  216. table entry is created when this directive is processed.
  217. </p>
  218. <p>If no personality routine has been specified then standard personality
  219. routine 0 or 1 will be used, depending on the number of unwind opcodes
  220. required.
  221. </p>
  222. <a name="arm_005ffnstart"></a><a name="index-_002efnstart-directive_002c-ARM"></a>
  223. </dd>
  224. <dt><code>.fnstart</code></dt>
  225. <dd><p>Marks the start of a function with an unwind table entry.
  226. </p>
  227. <a name="index-_002eforce_005fthumb-directive_002c-ARM"></a>
  228. </dd>
  229. <dt><code>.force_thumb</code></dt>
  230. <dd><p>This directive forces the selection of Thumb instructions, even if the
  231. target processor does not support those instructions
  232. </p>
  233. <a name="index-_002efpu-directive_002c-ARM"></a>
  234. </dd>
  235. <dt><code>.fpu <var>name</var></code></dt>
  236. <dd><p>Select the floating-point unit to assemble for. Valid values for <var>name</var>
  237. are the same as for the <samp>-mfpu</samp> commandline option.
  238. </p>
  239. <a name="index-_002ehandlerdata-directive_002c-ARM"></a>
  240. </dd>
  241. <dt><code>.handlerdata</code></dt>
  242. <dd><p>Marks the end of the current function, and the start of the exception table
  243. entry for that function. Anything between this directive and the
  244. <code>.fnend</code> directive will be added to the exception table entry.
  245. </p>
  246. <p>Must be preceded by a <code>.personality</code> or <code>.personalityindex</code>
  247. directive.
  248. </p>
  249. <a name="index-_002einst-directive_002c-ARM"></a>
  250. </dd>
  251. <dt><code>.inst <var>opcode</var> [ , &hellip; ]</code></dt>
  252. <dt><code>.inst.n <var>opcode</var> [ , &hellip; ]</code></dt>
  253. <dt><code>.inst.w <var>opcode</var> [ , &hellip; ]</code></dt>
  254. <dd><p>Generates the instruction corresponding to the numerical value <var>opcode</var>.
  255. <code>.inst.n</code> and <code>.inst.w</code> allow the Thumb instruction size to be
  256. specified explicitly, overriding the normal encoding rules.
  257. </p>
  258. </dd>
  259. <dt><code>.ldouble <var>expression</var> [, <var>expression</var>]*</code></dt>
  260. <dd><p>See <code>.extend</code>.
  261. </p>
  262. <a name="index-_002eltorg-directive_002c-ARM"></a>
  263. </dd>
  264. <dt><code>.ltorg</code></dt>
  265. <dd><p>This directive causes the current contents of the literal pool to be
  266. dumped into the current section (which is assumed to be the .text
  267. section) at the current location (aligned to a word boundary).
  268. <code>GAS</code> maintains a separate literal pool for each section and each
  269. sub-section. The <code>.ltorg</code> directive will only affect the literal
  270. pool of the current section and sub-section. At the end of assembly
  271. all remaining, un-empty literal pools will automatically be dumped.
  272. </p>
  273. <p>Note - older versions of <code>GAS</code> would dump the current literal
  274. pool any time a section change occurred. This is no longer done, since
  275. it prevents accurate control of the placement of literal pools.
  276. </p>
  277. <a name="index-_002emovsp-directive_002c-ARM"></a>
  278. </dd>
  279. <dt><code>.movsp <var>reg</var> [, #<var>offset</var>]</code></dt>
  280. <dd><p>Tell the unwinder that <var>reg</var> contains an offset from the current
  281. stack pointer. If <var>offset</var> is not specified then it is assumed to be
  282. zero.
  283. </p>
  284. <a name="index-_002eobject_005farch-directive_002c-ARM"></a>
  285. </dd>
  286. <dt><code>.object_arch <var>name</var></code></dt>
  287. <dd><p>Override the architecture recorded in the EABI object attribute section.
  288. Valid values for <var>name</var> are the same as for the <code>.arch</code> directive.
  289. Typically this is useful when code uses runtime detection of CPU features.
  290. </p>
  291. <a name="index-_002epacked-directive_002c-ARM"></a>
  292. </dd>
  293. <dt><code>.packed <var>expression</var> [, <var>expression</var>]*</code></dt>
  294. <dd><p>This directive writes 12-byte packed floating-point values to the
  295. output section. These are not compatible with current ARM processors
  296. or ABIs.
  297. </p>
  298. <a name="arm_005fpad"></a><a name="index-_002epad-directive_002c-ARM"></a>
  299. </dd>
  300. <dt><code>.pad #<var>count</var></code></dt>
  301. <dd><p>Generate unwinder annotations for a stack adjustment of <var>count</var> bytes.
  302. A positive value indicates the function prologue allocated stack space by
  303. decrementing the stack pointer.
  304. </p>
  305. <a name="index-_002epersonality-directive_002c-ARM"></a>
  306. </dd>
  307. <dt><code>.personality <var>name</var></code></dt>
  308. <dd><p>Sets the personality routine for the current function to <var>name</var>.
  309. </p>
  310. <a name="index-_002epersonalityindex-directive_002c-ARM"></a>
  311. </dd>
  312. <dt><code>.personalityindex <var>index</var></code></dt>
  313. <dd><p>Sets the personality routine for the current function to the EABI standard
  314. routine number <var>index</var>
  315. </p>
  316. <a name="index-_002epool-directive_002c-ARM"></a>
  317. </dd>
  318. <dt><code>.pool</code></dt>
  319. <dd><p>This is a synonym for .ltorg.
  320. </p>
  321. <a name="index-_002ereq-directive_002c-ARM"></a>
  322. </dd>
  323. <dt><code><var>name</var> .req <var>register name</var></code></dt>
  324. <dd><p>This creates an alias for <var>register name</var> called <var>name</var>. For
  325. example:
  326. </p>
  327. <div class="smallexample">
  328. <pre class="smallexample"> foo .req r0
  329. </pre></div>
  330. <a name="arm_005fsave"></a><a name="index-_002esave-directive_002c-ARM"></a>
  331. </dd>
  332. <dt><code>.save <var>reglist</var></code></dt>
  333. <dd><p>Generate unwinder annotations to restore the registers in <var>reglist</var>.
  334. The format of <var>reglist</var> is the same as the corresponding store-multiple
  335. instruction.
  336. </p>
  337. <div class="smallexample">
  338. <pre class="smallexample"><em>core registers</em>
  339. </pre><pre class="smallexample"> .save {r4, r5, r6, lr}
  340. stmfd sp!, {r4, r5, r6, lr}
  341. </pre><pre class="smallexample"><em>FPA registers</em>
  342. </pre><pre class="smallexample"> .save f4, 2
  343. sfmfd f4, 2, [sp]!
  344. </pre><pre class="smallexample"><em>VFP registers</em>
  345. </pre><pre class="smallexample"> .save {d8, d9, d10}
  346. fstmdx sp!, {d8, d9, d10}
  347. </pre><pre class="smallexample"><em>iWMMXt registers</em>
  348. </pre><pre class="smallexample"> .save {wr10, wr11}
  349. wstrd wr11, [sp, #-8]!
  350. wstrd wr10, [sp, #-8]!
  351. or
  352. .save wr11
  353. wstrd wr11, [sp, #-8]!
  354. .save wr10
  355. wstrd wr10, [sp, #-8]!
  356. </pre></div>
  357. <a name="arm_005fsetfp"></a><a name="index-_002esetfp-directive_002c-ARM"></a>
  358. </dd>
  359. <dt><code>.setfp <var>fpreg</var>, <var>spreg</var> [, #<var>offset</var>]</code></dt>
  360. <dd><p>Make all unwinder annotations relative to a frame pointer. Without this
  361. the unwinder will use offsets from the stack pointer.
  362. </p>
  363. <p>The syntax of this directive is the same as the <code>add</code> or <code>mov</code>
  364. instruction used to set the frame pointer. <var>spreg</var> must be either
  365. <code>sp</code> or mentioned in a previous <code>.movsp</code> directive.
  366. </p>
  367. <div class="smallexample">
  368. <pre class="smallexample">.movsp ip
  369. mov ip, sp
  370. &hellip;
  371. .setfp fp, ip, #4
  372. add fp, ip, #4
  373. </pre></div>
  374. <a name="index-_002esecrel32-directive_002c-ARM"></a>
  375. </dd>
  376. <dt><code>.secrel32 <var>expression</var> [, <var>expression</var>]*</code></dt>
  377. <dd><p>This directive emits relocations that evaluate to the section-relative
  378. offset of each expression&rsquo;s symbol. This directive is only supported
  379. for PE targets.
  380. </p>
  381. <a name="index-_002esyntax-directive_002c-ARM"></a>
  382. </dd>
  383. <dt><code>.syntax [<code>unified</code> | <code>divided</code>]</code></dt>
  384. <dd><p>This directive sets the Instruction Set Syntax as described in the
  385. <a href="ARM_002dInstruction_002dSet.html#ARM_002dInstruction_002dSet">ARM-Instruction-Set</a> section.
  386. </p>
  387. <a name="index-_002ethumb-directive_002c-ARM"></a>
  388. </dd>
  389. <dt><code>.thumb</code></dt>
  390. <dd><p>This performs the same action as <var>.code 16</var>.
  391. </p>
  392. <a name="index-_002ethumb_005ffunc-directive_002c-ARM"></a>
  393. </dd>
  394. <dt><code>.thumb_func</code></dt>
  395. <dd><p>This directive specifies that the following symbol is the name of a
  396. Thumb encoded function. This information is necessary in order to allow
  397. the assembler and linker to generate correct code for interworking
  398. between Arm and Thumb instructions and should be used even if
  399. interworking is not going to be performed. The presence of this
  400. directive also implies <code>.thumb</code>
  401. </p>
  402. <p>This directive is not neccessary when generating EABI objects. On these
  403. targets the encoding is implicit when generating Thumb code.
  404. </p>
  405. <a name="index-_002ethumb_005fset-directive_002c-ARM"></a>
  406. </dd>
  407. <dt><code>.thumb_set</code></dt>
  408. <dd><p>This performs the equivalent of a <code>.set</code> directive in that it
  409. creates a symbol which is an alias for another symbol (possibly not yet
  410. defined). This directive also has the added property in that it marks
  411. the aliased symbol as being a thumb function entry point, in the same
  412. way that the <code>.thumb_func</code> directive does.
  413. </p>
  414. <a name="index-_002etlsdescseq-directive_002c-ARM"></a>
  415. </dd>
  416. <dt><code>.tlsdescseq <var>tls-variable</var></code></dt>
  417. <dd><p>This directive is used to annotate parts of an inlined TLS descriptor
  418. trampoline. Normally the trampoline is provided by the linker, and
  419. this directive is not needed.
  420. </p>
  421. <a name="index-_002eunreq-directive_002c-ARM"></a>
  422. </dd>
  423. <dt><code>.unreq <var>alias-name</var></code></dt>
  424. <dd><p>This undefines a register alias which was previously defined using the
  425. <code>req</code>, <code>dn</code> or <code>qn</code> directives. For example:
  426. </p>
  427. <div class="smallexample">
  428. <pre class="smallexample"> foo .req r0
  429. .unreq foo
  430. </pre></div>
  431. <p>An error occurs if the name is undefined. Note - this pseudo op can
  432. be used to delete builtin in register name aliases (eg &rsquo;r0&rsquo;). This
  433. should only be done if it is really necessary.
  434. </p>
  435. <a name="index-_002eunwind_005fraw-directive_002c-ARM"></a>
  436. </dd>
  437. <dt><code>.unwind_raw <var>offset</var>, <var>byte1</var>, &hellip;</code></dt>
  438. <dd><p>Insert one of more arbitary unwind opcode bytes, which are known to adjust
  439. the stack pointer by <var>offset</var> bytes.
  440. </p>
  441. <p>For example <code>.unwind_raw 4, 0xb1, 0x01</code> is equivalent to
  442. <code>.save {r0}</code>
  443. </p>
  444. <a name="index-_002evsave-directive_002c-ARM"></a>
  445. </dd>
  446. <dt><code>.vsave <var>vfp-reglist</var></code></dt>
  447. <dd><p>Generate unwinder annotations to restore the VFP registers in <var>vfp-reglist</var>
  448. using FLDMD. Also works for VFPv3 registers
  449. that are to be restored using VLDM.
  450. The format of <var>vfp-reglist</var> is the same as the corresponding store-multiple
  451. instruction.
  452. </p>
  453. <div class="smallexample">
  454. <pre class="smallexample"><em>VFP registers</em>
  455. </pre><pre class="smallexample"> .vsave {d8, d9, d10}
  456. fstmdd sp!, {d8, d9, d10}
  457. </pre><pre class="smallexample"><em>VFPv3 registers</em>
  458. </pre><pre class="smallexample"> .vsave {d15, d16, d17}
  459. vstm sp!, {d15, d16, d17}
  460. </pre></div>
  461. <p>Since FLDMX and FSTMX are now deprecated, this directive should be
  462. used in favour of <code>.save</code> for saving VFP registers for ARMv6 and above.
  463. </p>
  464. </dd>
  465. </dl>
  466. <hr>
  467. <div class="header">
  468. <p>
  469. 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="prev">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>
  470. </div>
  471. </body>
  472. </html>