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 5Copyright (C) 1991-2021 Free Software Foundation, Inc. 6 7Permission is granted to copy, distribute and/or modify this document 8under the terms of the GNU Free Documentation License, Version 1.3 9or any later version published by the Free Software Foundation; 10with no Invariant Sections, with no Front-Cover Texts, and with no 11Back-Cover Texts. A copy of the license is included in the 12section entitled "GNU Free Documentation License". 13 --> 14<!-- Created by GNU Texinfo 5.1, http://www.gnu.org/software/texinfo/ --> 15<head> 16<title>Using as: Xtensa Jump Relaxation</title> 17 18<meta name="description" content="Using as: Xtensa Jump Relaxation"> 19<meta name="keywords" content="Using as: Xtensa Jump Relaxation"> 20<meta name="resource-type" content="document"> 21<meta name="distribution" content="global"> 22<meta name="Generator" content="makeinfo"> 23<meta http-equiv="Content-Type" content="text/html; charset=utf-8"> 24<link href="index.html#Top" rel="start" title="Top"> 25<link href="AS-Index.html#AS-Index" rel="index" title="AS Index"> 26<link href="index.html#SEC_Contents" rel="contents" title="Table of Contents"> 27<link href="Xtensa-Relaxation.html#Xtensa-Relaxation" rel="up" title="Xtensa Relaxation"> 28<link href="Xtensa-Immediate-Relaxation.html#Xtensa-Immediate-Relaxation" rel="next" title="Xtensa Immediate Relaxation"> 29<link href="Xtensa-Call-Relaxation.html#Xtensa-Call-Relaxation" rel="previous" title="Xtensa Call Relaxation"> 30<style type="text/css"> 31<!-- 32a.summary-letter {text-decoration: none} 33blockquote.smallquotation {font-size: smaller} 34div.display {margin-left: 3.2em} 35div.example {margin-left: 3.2em} 36div.indentedblock {margin-left: 3.2em} 37div.lisp {margin-left: 3.2em} 38div.smalldisplay {margin-left: 3.2em} 39div.smallexample {margin-left: 3.2em} 40div.smallindentedblock {margin-left: 3.2em; font-size: smaller} 41div.smalllisp {margin-left: 3.2em} 42kbd {font-style:oblique} 43pre.display {font-family: inherit} 44pre.format {font-family: inherit} 45pre.menu-comment {font-family: serif} 46pre.menu-preformatted {font-family: serif} 47pre.smalldisplay {font-family: inherit; font-size: smaller} 48pre.smallexample {font-size: smaller} 49pre.smallformat {font-family: inherit; font-size: smaller} 50pre.smalllisp {font-size: smaller} 51span.nocodebreak {white-space:nowrap} 52span.nolinebreak {white-space:nowrap} 53span.roman {font-family:serif; font-weight:normal} 54span.sansserif {font-family:sans-serif; font-weight:normal} 55ul.no-bullet {list-style: none} 56--> 57</style> 58 59 60</head> 61 62<body lang="en" bgcolor="#FFFFFF" text="#000000" link="#0000FF" vlink="#800080" alink="#FF0000"> 63<a name="Xtensa-Jump-Relaxation"></a> 64<div class="header"> 65<p> 66Next: <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="previous">Xtensa Call Relaxation</a>, Up: <a href="Xtensa-Relaxation.html#Xtensa-Relaxation" accesskey="u" rel="up">Xtensa Relaxation</a> [<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> 67</div> 68<hr> 69<a name="Jump-Relaxation"></a> 70<h4 class="subsubsection">9.55.4.3 Jump Relaxation</h4> 71<a name="index-relaxation-of-jump-instructions"></a> 72<a name="index-jump-instructions_002c-relaxation"></a> 73 74<p>Jump instruction may require relaxation because the Xtensa jump instruction 75(<code>J</code>) provide a PC-relative offset of only 128 Kbytes in either 76direction. One option is to use jump long (<code>J.L</code>) instruction, which 77depending on jump distance may be assembled as jump (<code>J</code>) or indirect 78jump (<code>JX</code>). However it needs a free register. When there’s no spare 79register it is possible to plant intermediate jump sites (trampolines) 80between the jump instruction and its target. These sites may be located in 81areas unreachable by normal code execution flow, in that case they only 82contain intermediate jumps, or they may be inserted in the middle of code 83block, in which case there’s an additional jump from the beginning of the 84trampoline to the instruction past its end. So, for example: 85</p> 86<div class="smallexample"> 87<pre class="smallexample"> j 1f 88 ... 89 retw 90 ... 91 mov a10, a2 92 call8 func 93 ... 941: 95 ... 96</pre></div> 97 98<p>might be relaxed to: 99</p> 100<div class="smallexample"> 101<pre class="smallexample"> j .L0_TR_1 102 ... 103 retw 104.L0_TR_1: 105 j 1f 106 ... 107 mov a10, a2 108 call8 func 109 ... 1101: 111 ... 112</pre></div> 113 114<p>or to: 115</p> 116<div class="smallexample"> 117<pre class="smallexample"> j .L0_TR_1 118 ... 119 retw 120 ... 121 mov a10, a2 122 j .L0_TR_0 123.L0_TR_1: 124 j 1f 125.L0_TR_0: 126 call8 func 127 ... 1281: 129 ... 130</pre></div> 131 132<p>The Xtensa assembler uses trampolines with jump around only when it cannot 133find suitable unreachable trampoline. There may be multiple trampolines 134between the jump instruction and its target. 135</p> 136<p>This relaxation does not apply to jumps to undefined symbols, assuming they 137will reach their targets once resolved. 138</p> 139<p>Jump relaxation is enabled by default because it does not affect code size 140or performance while the code itself is small. This relaxation may be 141disabled completely with ‘<samp>--no-trampolines</samp>’ or ‘<samp>--no-transform</samp>’ 142command-line options (see <a href="Xtensa-Options.html#Xtensa-Options">Command-line Options</a>). 143</p> 144<hr> 145<div class="header"> 146<p> 147Next: <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="previous">Xtensa Call Relaxation</a>, Up: <a href="Xtensa-Relaxation.html#Xtensa-Relaxation" accesskey="u" rel="up">Xtensa Relaxation</a> [<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> 148</div> 149 150 151 152</body> 153</html> 154