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-Jump-Relaxation.html 6.0KB

3 yıl önce
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152
  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 Jump Relaxation (Using as)</title>
  16. <meta name="description" content="Xtensa Jump Relaxation (Using as)">
  17. <meta name="keywords" content="Xtensa Jump Relaxation (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-Relaxation.html#Xtensa-Relaxation" rel="up" title="Xtensa Relaxation">
  25. <link href="Xtensa-Immediate-Relaxation.html#Xtensa-Immediate-Relaxation" rel="next" title="Xtensa Immediate Relaxation">
  26. <link href="Xtensa-Call-Relaxation.html#Xtensa-Call-Relaxation" rel="prev" title="Xtensa Call Relaxation">
  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-Jump-Relaxation"></a>
  57. <div class="header">
  58. <p>
  59. Next: <a href="Xtensa-Immediate-Relaxation.html#Xtensa-Immediate-Relaxation" accesskey="n" rel="next">Xtensa Immediate Relaxation</a>, Previous: <a href="Xtensa-Call-Relaxation.html#Xtensa-Call-Relaxation" accesskey="p" rel="prev">Xtensa Call Relaxation</a>, Up: <a href="Xtensa-Relaxation.html#Xtensa-Relaxation" accesskey="u" rel="up">Xtensa Relaxation</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="Jump-Relaxation"></a>
  63. <h4 class="subsubsection">9.55.4.3 Jump Relaxation</h4>
  64. <a name="index-relaxation-of-jump-instructions"></a>
  65. <a name="index-jump-instructions_002c-relaxation"></a>
  66. <p>Jump instruction may require relaxation because the Xtensa jump instruction
  67. (<code>J</code>) provide a PC-relative offset of only 128 Kbytes in either
  68. direction. One option is to use jump long (<code>J.L</code>) instruction, which
  69. depending on jump distance may be assembled as jump (<code>J</code>) or indirect
  70. jump (<code>JX</code>). However it needs a free register. When there&rsquo;s no spare
  71. register it is possible to plant intermediate jump sites (trampolines)
  72. between the jump instruction and its target. These sites may be located in
  73. areas unreachable by normal code execution flow, in that case they only
  74. contain intermediate jumps, or they may be inserted in the middle of code
  75. block, in which case there&rsquo;s an additional jump from the beginning of the
  76. trampoline to the instruction past its end. So, for example:
  77. </p>
  78. <div class="smallexample">
  79. <pre class="smallexample"> j 1f
  80. ...
  81. retw
  82. ...
  83. mov a10, a2
  84. call8 func
  85. ...
  86. 1:
  87. ...
  88. </pre></div>
  89. <p>might be relaxed to:
  90. </p>
  91. <div class="smallexample">
  92. <pre class="smallexample"> j .L0_TR_1
  93. ...
  94. retw
  95. .L0_TR_1:
  96. j 1f
  97. ...
  98. mov a10, a2
  99. call8 func
  100. ...
  101. 1:
  102. ...
  103. </pre></div>
  104. <p>or to:
  105. </p>
  106. <div class="smallexample">
  107. <pre class="smallexample"> j .L0_TR_1
  108. ...
  109. retw
  110. ...
  111. mov a10, a2
  112. j .L0_TR_0
  113. .L0_TR_1:
  114. j 1f
  115. .L0_TR_0:
  116. call8 func
  117. ...
  118. 1:
  119. ...
  120. </pre></div>
  121. <p>The Xtensa assembler uses trampolines with jump around only when it cannot
  122. find suitable unreachable trampoline. There may be multiple trampolines
  123. between the jump instruction and its target.
  124. </p>
  125. <p>This relaxation does not apply to jumps to undefined symbols, assuming they
  126. will reach their targets once resolved.
  127. </p>
  128. <p>Jump relaxation is enabled by default because it does not affect code size
  129. or performance while the code itself is small. This relaxation may be
  130. disabled completely with &lsquo;<samp>--no-trampolines</samp>&rsquo; or &lsquo;<samp>--no-transform</samp>&rsquo;
  131. command-line options (see <a href="Xtensa-Options.html#Xtensa-Options">Command-line Options</a>).
  132. </p>
  133. <hr>
  134. <div class="header">
  135. <p>
  136. Next: <a href="Xtensa-Immediate-Relaxation.html#Xtensa-Immediate-Relaxation" accesskey="n" rel="next">Xtensa Immediate Relaxation</a>, Previous: <a href="Xtensa-Call-Relaxation.html#Xtensa-Call-Relaxation" accesskey="p" rel="prev">Xtensa Call Relaxation</a>, Up: <a href="Xtensa-Relaxation.html#Xtensa-Relaxation" accesskey="u" rel="up">Xtensa Relaxation</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>
  137. </div>
  138. </body>
  139. </html>