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.

Xtensa-Automatic-Alignment.html 6.1KB

3 yıl önce
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125
  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>Xtensa Automatic Alignment (Using as)</title>
  16. <meta name="description" content="Xtensa Automatic Alignment (Using as)">
  17. <meta name="keywords" content="Xtensa Automatic Alignment (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="Xtensa-Optimizations.html#Xtensa-Optimizations" rel="up" title="Xtensa Optimizations">
  25. <link href="Xtensa-Relaxation.html#Xtensa-Relaxation" rel="next" title="Xtensa Relaxation">
  26. <link href="Density-Instructions.html#Density-Instructions" rel="prev" title="Density Instructions">
  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="Xtensa-Automatic-Alignment"></a>
  57. <div class="header">
  58. <p>
  59. Previous: <a href="Density-Instructions.html#Density-Instructions" accesskey="p" rel="prev">Density Instructions</a>, Up: <a href="Xtensa-Optimizations.html#Xtensa-Optimizations" accesskey="u" rel="up">Xtensa Optimizations</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="Automatic-Instruction-Alignment"></a>
  63. <h4 class="subsubsection">9.55.3.2 Automatic Instruction Alignment</h4>
  64. <a name="index-alignment-of-LOOP-instructions"></a>
  65. <a name="index-alignment-of-branch-targets"></a>
  66. <a name="index-LOOP-instructions_002c-alignment"></a>
  67. <a name="index-branch-target-alignment"></a>
  68. <p>The Xtensa assembler will automatically align certain instructions, both
  69. to optimize performance and to satisfy architectural requirements.
  70. </p>
  71. <p>As an optimization to improve performance, the assembler attempts to
  72. align branch targets so they do not cross instruction fetch boundaries.
  73. (Xtensa processors can be configured with either 32-bit or 64-bit
  74. instruction fetch widths.) An
  75. instruction immediately following a call is treated as a branch target
  76. in this context, because it will be the target of a return from the
  77. call. This alignment has the potential to reduce branch penalties at
  78. some expense in code size.
  79. This optimization is enabled by default. You can disable it with the
  80. &lsquo;<samp>--no-target-align</samp>&rsquo; command-line option (see <a href="Xtensa-Options.html#Xtensa-Options">Command-line Options</a>).
  81. </p>
  82. <p>The target alignment optimization is done without adding instructions
  83. that could increase the execution time of the program. If there are
  84. density instructions in the code preceding a target, the assembler can
  85. change the target alignment by widening some of those instructions to
  86. the equivalent 24-bit instructions. Extra bytes of padding can be
  87. inserted immediately following unconditional jump and return
  88. instructions.
  89. This approach is usually successful in aligning many, but not all,
  90. branch targets.
  91. </p>
  92. <p>The <code>LOOP</code> family of instructions must be aligned such that the
  93. first instruction in the loop body does not cross an instruction fetch
  94. boundary (e.g., with a 32-bit fetch width, a <code>LOOP</code> instruction
  95. must be on either a 1 or 2 mod 4 byte boundary). The assembler knows
  96. about this restriction and inserts the minimal number of 2 or 3 byte
  97. no-op instructions to satisfy it. When no-op instructions are added,
  98. any label immediately preceding the original loop will be moved in order
  99. to refer to the loop instruction, not the newly generated no-op
  100. instruction. To preserve binary compatibility across processors with
  101. different fetch widths, the assembler conservatively assumes a 32-bit
  102. fetch width when aligning <code>LOOP</code> instructions (except if the first
  103. instruction in the loop is a 64-bit instruction).
  104. </p>
  105. <p>Previous versions of the assembler automatically aligned <code>ENTRY</code>
  106. instructions to 4-byte boundaries, but that alignment is now the
  107. programmer&rsquo;s responsibility.
  108. </p>
  109. <hr>
  110. <div class="header">
  111. <p>
  112. Previous: <a href="Density-Instructions.html#Density-Instructions" accesskey="p" rel="prev">Density Instructions</a>, Up: <a href="Xtensa-Optimizations.html#Xtensa-Optimizations" accesskey="u" rel="up">Xtensa Optimizations</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>
  113. </div>
  114. </body>
  115. </html>