You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

521 lines
21KB

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