選択できるのは25トピックまでです。 トピックは、先頭が英数字で、英数字とダッシュ('-')を使用した35文字以内のものにしてください。

115 行
5.2KB

  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 Call Relaxation (Using as)</title>
  16. <meta name="description" content="Xtensa Call Relaxation (Using as)">
  17. <meta name="keywords" content="Xtensa Call 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-Jump-Relaxation.html#Xtensa-Jump-Relaxation" rel="next" title="Xtensa Jump Relaxation">
  26. <link href="Xtensa-Branch-Relaxation.html#Xtensa-Branch-Relaxation" rel="prev" title="Xtensa Branch 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-Call-Relaxation"></a>
  57. <div class="header">
  58. <p>
  59. Next: <a href="Xtensa-Jump-Relaxation.html#Xtensa-Jump-Relaxation" accesskey="n" rel="next">Xtensa Jump Relaxation</a>, Previous: <a href="Xtensa-Branch-Relaxation.html#Xtensa-Branch-Relaxation" accesskey="p" rel="prev">Xtensa Branch 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="Function-Call-Relaxation"></a>
  63. <h4 class="subsubsection">9.55.4.2 Function Call Relaxation</h4>
  64. <a name="index-relaxation-of-call-instructions"></a>
  65. <a name="index-call-instructions_002c-relaxation"></a>
  66. <p>Function calls may require relaxation because the Xtensa immediate call
  67. instructions (<code>CALL0</code>, <code>CALL4</code>, <code>CALL8</code> and
  68. <code>CALL12</code>) provide a PC-relative offset of only 512 Kbytes in either
  69. direction. For larger programs, it may be necessary to use indirect
  70. calls (<code>CALLX0</code>, <code>CALLX4</code>, <code>CALLX8</code> and <code>CALLX12</code>)
  71. where the target address is specified in a register. The Xtensa
  72. assembler can automatically relax immediate call instructions into
  73. indirect call instructions. This relaxation is done by loading the
  74. address of the called function into the callee&rsquo;s return address register
  75. and then using a <code>CALLX</code> instruction. So, for example:
  76. </p>
  77. <div class="smallexample">
  78. <pre class="smallexample"> call8 func
  79. </pre></div>
  80. <p>might be relaxed to:
  81. </p>
  82. <div class="smallexample">
  83. <pre class="smallexample"> .literal .L1, func
  84. l32r a8, .L1
  85. callx8 a8
  86. </pre></div>
  87. <p>Because the addresses of targets of function calls are not generally
  88. known until link-time, the assembler must assume the worst and relax all
  89. the calls to functions in other source files, not just those that really
  90. will be out of range. The linker can recognize calls that were
  91. unnecessarily relaxed, and it will remove the overhead introduced by the
  92. assembler for those cases where direct calls are sufficient.
  93. </p>
  94. <p>Call relaxation is disabled by default because it can have a negative
  95. effect on both code size and performance, although the linker can
  96. usually eliminate the unnecessary overhead. If a program is too large
  97. and some of the calls are out of range, function call relaxation can be
  98. enabled using the &lsquo;<samp>--longcalls</samp>&rsquo; command-line option or the
  99. <code>longcalls</code> directive (see <a href="Longcalls-Directive.html#Longcalls-Directive">longcalls</a>).
  100. </p>
  101. </body>
  102. </html>