binutils: drop *.texi* hunks from xtensa trampolines patches
Rebuilding as.info with makeinfo version 5.2 results in a build error, even with pristine binutils source. Dropping hunks that change *.texi* files avoids documentation rebuild. Reported-by: Vincent Stehlé <vincent.stehle@freescale.com> Signed-off-by: Max Filippov <jcmvbkbc@gmail.com> Signed-off-by: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
This commit is contained in:
parent
7439694833
commit
c09b2bfaea
@ -37,8 +37,6 @@ Changes to Changelog files are dropped.
|
||||
|
||||
gas/config/tc-xtensa.c | 558 +++++++++++++++++++++++++++++++++-
|
||||
gas/config/tc-xtensa.h | 5 +
|
||||
gas/doc/as.texinfo | 1 +
|
||||
gas/doc/c-xtensa.texi | 92 ++++++
|
||||
gas/frags.c | 15 +
|
||||
gas/frags.h | 3 +
|
||||
gas/testsuite/gas/xtensa/all.exp | 1 +
|
||||
@ -727,135 +725,6 @@ index 0bf1240..4672bc6 100644
|
||||
RELAX_NONE
|
||||
};
|
||||
|
||||
diff --git a/gas/doc/as.texinfo b/gas/doc/as.texinfo
|
||||
index 5c8b000..dc97175 100644
|
||||
--- a/gas/doc/as.texinfo
|
||||
+++ b/gas/doc/as.texinfo
|
||||
@@ -543,6 +543,7 @@ gcc(1), ld(1), and the Info entries for @file{binutils} and @file{ld}.
|
||||
[@b{--[no-]target-align}] [@b{--[no-]longcalls}]
|
||||
[@b{--[no-]transform}]
|
||||
[@b{--rename-section} @var{oldname}=@var{newname}]
|
||||
+ [@b{--[no-]trampolines}]
|
||||
@end ifset
|
||||
|
||||
@ifset Z80
|
||||
diff --git a/gas/doc/c-xtensa.texi b/gas/doc/c-xtensa.texi
|
||||
index 406e635..e763e36 100644
|
||||
--- a/gas/doc/c-xtensa.texi
|
||||
+++ b/gas/doc/c-xtensa.texi
|
||||
@@ -91,6 +91,16 @@ instruction operands to be errors.
|
||||
@kindex --rename-section
|
||||
Rename the @var{oldname} section to @var{newname}. This option can be used
|
||||
multiple times to rename multiple sections.
|
||||
+
|
||||
+@item --trampolines | --no-trampolines
|
||||
+@kindex --trampolines
|
||||
+@kindex --no-trampolines
|
||||
+Enable or disable transformation of jump instructions to allow jumps
|
||||
+across a greater range of addresses. @xref{Xtensa Jump Relaxation,
|
||||
+,Jump Trampolines}. This option should be used when jump targets can
|
||||
+potentially be out of range. In the absence of such jumps this option
|
||||
+does not affect code size or performance. The default is
|
||||
+@samp{--trampolines}.
|
||||
@end table
|
||||
|
||||
@c man end
|
||||
@@ -311,6 +321,7 @@ fields.
|
||||
@menu
|
||||
* Xtensa Branch Relaxation:: Relaxation of Branches.
|
||||
* Xtensa Call Relaxation:: Relaxation of Function Calls.
|
||||
+* Xtensa Jump Relaxation:: Relaxation of Jumps.
|
||||
* Xtensa Immediate Relaxation:: Relaxation of other Immediate Fields.
|
||||
@end menu
|
||||
|
||||
@@ -398,6 +409,87 @@ and some of the calls are out of range, function call relaxation can be
|
||||
enabled using the @samp{--longcalls} command-line option or the
|
||||
@code{longcalls} directive (@pxref{Longcalls Directive, ,longcalls}).
|
||||
|
||||
+@node Xtensa Jump Relaxation
|
||||
+@subsection Jump Relaxation
|
||||
+@cindex relaxation of jump instructions
|
||||
+@cindex jump instructions, relaxation
|
||||
+
|
||||
+Jump instruction may require relaxation because the Xtensa jump instruction
|
||||
+(@code{J}) provide a PC-relative offset of only 128 Kbytes in either
|
||||
+direction. One option is to use jump long (@code{J.L}) instruction, which
|
||||
+depending on jump distance may be assembled as jump (@code{J}) or indirect
|
||||
+jump (@code{JX}). However it needs a free register. When there's no spare
|
||||
+register it is possible to plant intermediate jump sites (trampolines)
|
||||
+between the jump instruction and its target. These sites may be located in
|
||||
+areas unreachable by normal code execution flow, in that case they only
|
||||
+contain intermediate jumps, or they may be inserted in the middle of code
|
||||
+block, in which case there's an additional jump from the beginning of the
|
||||
+trampoline to the instruction past its end. So, for example:
|
||||
+
|
||||
+@smallexample
|
||||
+@group
|
||||
+ j 1f
|
||||
+ ...
|
||||
+ retw
|
||||
+ ...
|
||||
+ mov a10, a2
|
||||
+ call8 func
|
||||
+ ...
|
||||
+1:
|
||||
+ ...
|
||||
+@end group
|
||||
+@end smallexample
|
||||
+
|
||||
+might be relaxed to:
|
||||
+
|
||||
+@smallexample
|
||||
+@group
|
||||
+ j .L0_TR_1
|
||||
+ ...
|
||||
+ retw
|
||||
+.L0_TR_1:
|
||||
+ j 1f
|
||||
+ ...
|
||||
+ mov a10, a2
|
||||
+ call8 func
|
||||
+ ...
|
||||
+1:
|
||||
+ ...
|
||||
+@end group
|
||||
+@end smallexample
|
||||
+
|
||||
+or to:
|
||||
+
|
||||
+@smallexample
|
||||
+@group
|
||||
+ j .L0_TR_1
|
||||
+ ...
|
||||
+ retw
|
||||
+ ...
|
||||
+ mov a10, a2
|
||||
+ j .L0_TR_0
|
||||
+.L0_TR_1:
|
||||
+ j 1f
|
||||
+.L0_TR_0:
|
||||
+ call8 func
|
||||
+ ...
|
||||
+1:
|
||||
+ ...
|
||||
+@end group
|
||||
+@end smallexample
|
||||
+
|
||||
+The Xtensa assempler uses trampolines with jump around only when it cannot
|
||||
+find suitable unreachable trampoline. There may be multiple trampolines
|
||||
+between the jump instruction and its target.
|
||||
+
|
||||
+This relaxation does not apply to jumps to undefined symbols, assuming they
|
||||
+will reach their targets once resolved.
|
||||
+
|
||||
+Jump relaxation is enabled by default because it does not affect code size
|
||||
+or performance while the code itself is small. This relaxation may be
|
||||
+disabled completely with @samp{--no-trampolines} or @samp{--no-transform}
|
||||
+command-line options (@pxref{Xtensa Options, ,Command Line Options}).
|
||||
+
|
||||
@node Xtensa Immediate Relaxation
|
||||
@subsection Other Immediate Field Relaxation
|
||||
@cindex immediate fields, relaxation
|
||||
diff --git a/gas/frags.c b/gas/frags.c
|
||||
index 5f68480..e14099d 100644
|
||||
--- a/gas/frags.c
|
||||
|
@ -37,8 +37,6 @@ Changes to Changelog files are dropped.
|
||||
|
||||
gas/config/tc-xtensa.c | 558 +++++++++++++++++++++++++++++++++-
|
||||
gas/config/tc-xtensa.h | 5 +
|
||||
gas/doc/as.texinfo | 1 +
|
||||
gas/doc/c-xtensa.texi | 92 ++++++
|
||||
gas/frags.c | 15 +
|
||||
gas/frags.h | 3 +
|
||||
gas/testsuite/gas/xtensa/all.exp | 1 +
|
||||
@ -727,135 +725,6 @@ index 0bf1240..4672bc6 100644
|
||||
RELAX_NONE
|
||||
};
|
||||
|
||||
diff --git a/gas/doc/as.texinfo b/gas/doc/as.texinfo
|
||||
index 5c8b000..dc97175 100644
|
||||
--- a/gas/doc/as.texinfo
|
||||
+++ b/gas/doc/as.texinfo
|
||||
@@ -543,6 +543,7 @@ gcc(1), ld(1), and the Info entries for @file{binutils} and @file{ld}.
|
||||
[@b{--[no-]target-align}] [@b{--[no-]longcalls}]
|
||||
[@b{--[no-]transform}]
|
||||
[@b{--rename-section} @var{oldname}=@var{newname}]
|
||||
+ [@b{--[no-]trampolines}]
|
||||
@end ifset
|
||||
|
||||
@ifset Z80
|
||||
diff --git a/gas/doc/c-xtensa.texi b/gas/doc/c-xtensa.texi
|
||||
index 406e635..e763e36 100644
|
||||
--- a/gas/doc/c-xtensa.texi
|
||||
+++ b/gas/doc/c-xtensa.texi
|
||||
@@ -91,6 +91,16 @@ instruction operands to be errors.
|
||||
@kindex --rename-section
|
||||
Rename the @var{oldname} section to @var{newname}. This option can be used
|
||||
multiple times to rename multiple sections.
|
||||
+
|
||||
+@item --trampolines | --no-trampolines
|
||||
+@kindex --trampolines
|
||||
+@kindex --no-trampolines
|
||||
+Enable or disable transformation of jump instructions to allow jumps
|
||||
+across a greater range of addresses. @xref{Xtensa Jump Relaxation,
|
||||
+,Jump Trampolines}. This option should be used when jump targets can
|
||||
+potentially be out of range. In the absence of such jumps this option
|
||||
+does not affect code size or performance. The default is
|
||||
+@samp{--trampolines}.
|
||||
@end table
|
||||
|
||||
@c man end
|
||||
@@ -311,6 +321,7 @@ fields.
|
||||
@menu
|
||||
* Xtensa Branch Relaxation:: Relaxation of Branches.
|
||||
* Xtensa Call Relaxation:: Relaxation of Function Calls.
|
||||
+* Xtensa Jump Relaxation:: Relaxation of Jumps.
|
||||
* Xtensa Immediate Relaxation:: Relaxation of other Immediate Fields.
|
||||
@end menu
|
||||
|
||||
@@ -398,6 +409,87 @@ and some of the calls are out of range, function call relaxation can be
|
||||
enabled using the @samp{--longcalls} command-line option or the
|
||||
@code{longcalls} directive (@pxref{Longcalls Directive, ,longcalls}).
|
||||
|
||||
+@node Xtensa Jump Relaxation
|
||||
+@subsection Jump Relaxation
|
||||
+@cindex relaxation of jump instructions
|
||||
+@cindex jump instructions, relaxation
|
||||
+
|
||||
+Jump instruction may require relaxation because the Xtensa jump instruction
|
||||
+(@code{J}) provide a PC-relative offset of only 128 Kbytes in either
|
||||
+direction. One option is to use jump long (@code{J.L}) instruction, which
|
||||
+depending on jump distance may be assembled as jump (@code{J}) or indirect
|
||||
+jump (@code{JX}). However it needs a free register. When there's no spare
|
||||
+register it is possible to plant intermediate jump sites (trampolines)
|
||||
+between the jump instruction and its target. These sites may be located in
|
||||
+areas unreachable by normal code execution flow, in that case they only
|
||||
+contain intermediate jumps, or they may be inserted in the middle of code
|
||||
+block, in which case there's an additional jump from the beginning of the
|
||||
+trampoline to the instruction past its end. So, for example:
|
||||
+
|
||||
+@smallexample
|
||||
+@group
|
||||
+ j 1f
|
||||
+ ...
|
||||
+ retw
|
||||
+ ...
|
||||
+ mov a10, a2
|
||||
+ call8 func
|
||||
+ ...
|
||||
+1:
|
||||
+ ...
|
||||
+@end group
|
||||
+@end smallexample
|
||||
+
|
||||
+might be relaxed to:
|
||||
+
|
||||
+@smallexample
|
||||
+@group
|
||||
+ j .L0_TR_1
|
||||
+ ...
|
||||
+ retw
|
||||
+.L0_TR_1:
|
||||
+ j 1f
|
||||
+ ...
|
||||
+ mov a10, a2
|
||||
+ call8 func
|
||||
+ ...
|
||||
+1:
|
||||
+ ...
|
||||
+@end group
|
||||
+@end smallexample
|
||||
+
|
||||
+or to:
|
||||
+
|
||||
+@smallexample
|
||||
+@group
|
||||
+ j .L0_TR_1
|
||||
+ ...
|
||||
+ retw
|
||||
+ ...
|
||||
+ mov a10, a2
|
||||
+ j .L0_TR_0
|
||||
+.L0_TR_1:
|
||||
+ j 1f
|
||||
+.L0_TR_0:
|
||||
+ call8 func
|
||||
+ ...
|
||||
+1:
|
||||
+ ...
|
||||
+@end group
|
||||
+@end smallexample
|
||||
+
|
||||
+The Xtensa assempler uses trampolines with jump around only when it cannot
|
||||
+find suitable unreachable trampoline. There may be multiple trampolines
|
||||
+between the jump instruction and its target.
|
||||
+
|
||||
+This relaxation does not apply to jumps to undefined symbols, assuming they
|
||||
+will reach their targets once resolved.
|
||||
+
|
||||
+Jump relaxation is enabled by default because it does not affect code size
|
||||
+or performance while the code itself is small. This relaxation may be
|
||||
+disabled completely with @samp{--no-trampolines} or @samp{--no-transform}
|
||||
+command-line options (@pxref{Xtensa Options, ,Command Line Options}).
|
||||
+
|
||||
@node Xtensa Immediate Relaxation
|
||||
@subsection Other Immediate Field Relaxation
|
||||
@cindex immediate fields, relaxation
|
||||
diff --git a/gas/frags.c b/gas/frags.c
|
||||
index 5f68480..e14099d 100644
|
||||
--- a/gas/frags.c
|
||||
|
@ -37,8 +37,6 @@ Changes to Changelog files are dropped.
|
||||
|
||||
gas/config/tc-xtensa.c | 558 +++++++++++++++++++++++++++++++++-
|
||||
gas/config/tc-xtensa.h | 5 +
|
||||
gas/doc/as.texinfo | 1 +
|
||||
gas/doc/c-xtensa.texi | 92 ++++++
|
||||
gas/frags.c | 15 +
|
||||
gas/frags.h | 3 +
|
||||
gas/testsuite/gas/xtensa/all.exp | 1 +
|
||||
@ -727,135 +725,6 @@ index 0bf1240..4672bc6 100644
|
||||
RELAX_NONE
|
||||
};
|
||||
|
||||
diff --git a/gas/doc/as.texinfo b/gas/doc/as.texinfo
|
||||
index 5c8b000..dc97175 100644
|
||||
--- a/gas/doc/as.texinfo
|
||||
+++ b/gas/doc/as.texinfo
|
||||
@@ -543,6 +543,7 @@ gcc(1), ld(1), and the Info entries for @file{binutils} and @file{ld}.
|
||||
[@b{--[no-]target-align}] [@b{--[no-]longcalls}]
|
||||
[@b{--[no-]transform}]
|
||||
[@b{--rename-section} @var{oldname}=@var{newname}]
|
||||
+ [@b{--[no-]trampolines}]
|
||||
@end ifset
|
||||
|
||||
@ifset Z80
|
||||
diff --git a/gas/doc/c-xtensa.texi b/gas/doc/c-xtensa.texi
|
||||
index 406e635..e763e36 100644
|
||||
--- a/gas/doc/c-xtensa.texi
|
||||
+++ b/gas/doc/c-xtensa.texi
|
||||
@@ -91,6 +91,16 @@ instruction operands to be errors.
|
||||
@kindex --rename-section
|
||||
Rename the @var{oldname} section to @var{newname}. This option can be used
|
||||
multiple times to rename multiple sections.
|
||||
+
|
||||
+@item --trampolines | --no-trampolines
|
||||
+@kindex --trampolines
|
||||
+@kindex --no-trampolines
|
||||
+Enable or disable transformation of jump instructions to allow jumps
|
||||
+across a greater range of addresses. @xref{Xtensa Jump Relaxation,
|
||||
+,Jump Trampolines}. This option should be used when jump targets can
|
||||
+potentially be out of range. In the absence of such jumps this option
|
||||
+does not affect code size or performance. The default is
|
||||
+@samp{--trampolines}.
|
||||
@end table
|
||||
|
||||
@c man end
|
||||
@@ -311,6 +321,7 @@ fields.
|
||||
@menu
|
||||
* Xtensa Branch Relaxation:: Relaxation of Branches.
|
||||
* Xtensa Call Relaxation:: Relaxation of Function Calls.
|
||||
+* Xtensa Jump Relaxation:: Relaxation of Jumps.
|
||||
* Xtensa Immediate Relaxation:: Relaxation of other Immediate Fields.
|
||||
@end menu
|
||||
|
||||
@@ -398,6 +409,87 @@ and some of the calls are out of range, function call relaxation can be
|
||||
enabled using the @samp{--longcalls} command-line option or the
|
||||
@code{longcalls} directive (@pxref{Longcalls Directive, ,longcalls}).
|
||||
|
||||
+@node Xtensa Jump Relaxation
|
||||
+@subsection Jump Relaxation
|
||||
+@cindex relaxation of jump instructions
|
||||
+@cindex jump instructions, relaxation
|
||||
+
|
||||
+Jump instruction may require relaxation because the Xtensa jump instruction
|
||||
+(@code{J}) provide a PC-relative offset of only 128 Kbytes in either
|
||||
+direction. One option is to use jump long (@code{J.L}) instruction, which
|
||||
+depending on jump distance may be assembled as jump (@code{J}) or indirect
|
||||
+jump (@code{JX}). However it needs a free register. When there's no spare
|
||||
+register it is possible to plant intermediate jump sites (trampolines)
|
||||
+between the jump instruction and its target. These sites may be located in
|
||||
+areas unreachable by normal code execution flow, in that case they only
|
||||
+contain intermediate jumps, or they may be inserted in the middle of code
|
||||
+block, in which case there's an additional jump from the beginning of the
|
||||
+trampoline to the instruction past its end. So, for example:
|
||||
+
|
||||
+@smallexample
|
||||
+@group
|
||||
+ j 1f
|
||||
+ ...
|
||||
+ retw
|
||||
+ ...
|
||||
+ mov a10, a2
|
||||
+ call8 func
|
||||
+ ...
|
||||
+1:
|
||||
+ ...
|
||||
+@end group
|
||||
+@end smallexample
|
||||
+
|
||||
+might be relaxed to:
|
||||
+
|
||||
+@smallexample
|
||||
+@group
|
||||
+ j .L0_TR_1
|
||||
+ ...
|
||||
+ retw
|
||||
+.L0_TR_1:
|
||||
+ j 1f
|
||||
+ ...
|
||||
+ mov a10, a2
|
||||
+ call8 func
|
||||
+ ...
|
||||
+1:
|
||||
+ ...
|
||||
+@end group
|
||||
+@end smallexample
|
||||
+
|
||||
+or to:
|
||||
+
|
||||
+@smallexample
|
||||
+@group
|
||||
+ j .L0_TR_1
|
||||
+ ...
|
||||
+ retw
|
||||
+ ...
|
||||
+ mov a10, a2
|
||||
+ j .L0_TR_0
|
||||
+.L0_TR_1:
|
||||
+ j 1f
|
||||
+.L0_TR_0:
|
||||
+ call8 func
|
||||
+ ...
|
||||
+1:
|
||||
+ ...
|
||||
+@end group
|
||||
+@end smallexample
|
||||
+
|
||||
+The Xtensa assempler uses trampolines with jump around only when it cannot
|
||||
+find suitable unreachable trampoline. There may be multiple trampolines
|
||||
+between the jump instruction and its target.
|
||||
+
|
||||
+This relaxation does not apply to jumps to undefined symbols, assuming they
|
||||
+will reach their targets once resolved.
|
||||
+
|
||||
+Jump relaxation is enabled by default because it does not affect code size
|
||||
+or performance while the code itself is small. This relaxation may be
|
||||
+disabled completely with @samp{--no-trampolines} or @samp{--no-transform}
|
||||
+command-line options (@pxref{Xtensa Options, ,Command Line Options}).
|
||||
+
|
||||
@node Xtensa Immediate Relaxation
|
||||
@subsection Other Immediate Field Relaxation
|
||||
@cindex immediate fields, relaxation
|
||||
diff --git a/gas/frags.c b/gas/frags.c
|
||||
index 5f68480..e14099d 100644
|
||||
--- a/gas/frags.c
|
||||
|
@ -37,8 +37,6 @@ Changes to Changelog files are dropped.
|
||||
|
||||
gas/config/tc-xtensa.c | 558 +++++++++++++++++++++++++++++++++-
|
||||
gas/config/tc-xtensa.h | 5 +
|
||||
gas/doc/as.texinfo | 1 +
|
||||
gas/doc/c-xtensa.texi | 92 ++++++
|
||||
gas/frags.c | 15 +
|
||||
gas/frags.h | 3 +
|
||||
gas/testsuite/gas/xtensa/all.exp | 1 +
|
||||
@ -727,135 +725,6 @@ index 0bf1240..4672bc6 100644
|
||||
RELAX_NONE
|
||||
};
|
||||
|
||||
diff --git a/gas/doc/as.texinfo b/gas/doc/as.texinfo
|
||||
index 5c8b000..dc97175 100644
|
||||
--- a/gas/doc/as.texinfo
|
||||
+++ b/gas/doc/as.texinfo
|
||||
@@ -543,6 +543,7 @@ gcc(1), ld(1), and the Info entries for @file{binutils} and @file{ld}.
|
||||
[@b{--[no-]target-align}] [@b{--[no-]longcalls}]
|
||||
[@b{--[no-]transform}]
|
||||
[@b{--rename-section} @var{oldname}=@var{newname}]
|
||||
+ [@b{--[no-]trampolines}]
|
||||
@end ifset
|
||||
|
||||
@ifset Z80
|
||||
diff --git a/gas/doc/c-xtensa.texi b/gas/doc/c-xtensa.texi
|
||||
index 406e635..e763e36 100644
|
||||
--- a/gas/doc/c-xtensa.texi
|
||||
+++ b/gas/doc/c-xtensa.texi
|
||||
@@ -91,6 +91,16 @@ instruction operands to be errors.
|
||||
@kindex --rename-section
|
||||
Rename the @var{oldname} section to @var{newname}. This option can be used
|
||||
multiple times to rename multiple sections.
|
||||
+
|
||||
+@item --trampolines | --no-trampolines
|
||||
+@kindex --trampolines
|
||||
+@kindex --no-trampolines
|
||||
+Enable or disable transformation of jump instructions to allow jumps
|
||||
+across a greater range of addresses. @xref{Xtensa Jump Relaxation,
|
||||
+,Jump Trampolines}. This option should be used when jump targets can
|
||||
+potentially be out of range. In the absence of such jumps this option
|
||||
+does not affect code size or performance. The default is
|
||||
+@samp{--trampolines}.
|
||||
@end table
|
||||
|
||||
@c man end
|
||||
@@ -311,6 +321,7 @@ fields.
|
||||
@menu
|
||||
* Xtensa Branch Relaxation:: Relaxation of Branches.
|
||||
* Xtensa Call Relaxation:: Relaxation of Function Calls.
|
||||
+* Xtensa Jump Relaxation:: Relaxation of Jumps.
|
||||
* Xtensa Immediate Relaxation:: Relaxation of other Immediate Fields.
|
||||
@end menu
|
||||
|
||||
@@ -398,6 +409,87 @@ and some of the calls are out of range, function call relaxation can be
|
||||
enabled using the @samp{--longcalls} command-line option or the
|
||||
@code{longcalls} directive (@pxref{Longcalls Directive, ,longcalls}).
|
||||
|
||||
+@node Xtensa Jump Relaxation
|
||||
+@subsection Jump Relaxation
|
||||
+@cindex relaxation of jump instructions
|
||||
+@cindex jump instructions, relaxation
|
||||
+
|
||||
+Jump instruction may require relaxation because the Xtensa jump instruction
|
||||
+(@code{J}) provide a PC-relative offset of only 128 Kbytes in either
|
||||
+direction. One option is to use jump long (@code{J.L}) instruction, which
|
||||
+depending on jump distance may be assembled as jump (@code{J}) or indirect
|
||||
+jump (@code{JX}). However it needs a free register. When there's no spare
|
||||
+register it is possible to plant intermediate jump sites (trampolines)
|
||||
+between the jump instruction and its target. These sites may be located in
|
||||
+areas unreachable by normal code execution flow, in that case they only
|
||||
+contain intermediate jumps, or they may be inserted in the middle of code
|
||||
+block, in which case there's an additional jump from the beginning of the
|
||||
+trampoline to the instruction past its end. So, for example:
|
||||
+
|
||||
+@smallexample
|
||||
+@group
|
||||
+ j 1f
|
||||
+ ...
|
||||
+ retw
|
||||
+ ...
|
||||
+ mov a10, a2
|
||||
+ call8 func
|
||||
+ ...
|
||||
+1:
|
||||
+ ...
|
||||
+@end group
|
||||
+@end smallexample
|
||||
+
|
||||
+might be relaxed to:
|
||||
+
|
||||
+@smallexample
|
||||
+@group
|
||||
+ j .L0_TR_1
|
||||
+ ...
|
||||
+ retw
|
||||
+.L0_TR_1:
|
||||
+ j 1f
|
||||
+ ...
|
||||
+ mov a10, a2
|
||||
+ call8 func
|
||||
+ ...
|
||||
+1:
|
||||
+ ...
|
||||
+@end group
|
||||
+@end smallexample
|
||||
+
|
||||
+or to:
|
||||
+
|
||||
+@smallexample
|
||||
+@group
|
||||
+ j .L0_TR_1
|
||||
+ ...
|
||||
+ retw
|
||||
+ ...
|
||||
+ mov a10, a2
|
||||
+ j .L0_TR_0
|
||||
+.L0_TR_1:
|
||||
+ j 1f
|
||||
+.L0_TR_0:
|
||||
+ call8 func
|
||||
+ ...
|
||||
+1:
|
||||
+ ...
|
||||
+@end group
|
||||
+@end smallexample
|
||||
+
|
||||
+The Xtensa assempler uses trampolines with jump around only when it cannot
|
||||
+find suitable unreachable trampoline. There may be multiple trampolines
|
||||
+between the jump instruction and its target.
|
||||
+
|
||||
+This relaxation does not apply to jumps to undefined symbols, assuming they
|
||||
+will reach their targets once resolved.
|
||||
+
|
||||
+Jump relaxation is enabled by default because it does not affect code size
|
||||
+or performance while the code itself is small. This relaxation may be
|
||||
+disabled completely with @samp{--no-trampolines} or @samp{--no-transform}
|
||||
+command-line options (@pxref{Xtensa Options, ,Command Line Options}).
|
||||
+
|
||||
@node Xtensa Immediate Relaxation
|
||||
@subsection Other Immediate Field Relaxation
|
||||
@cindex immediate fields, relaxation
|
||||
diff --git a/gas/frags.c b/gas/frags.c
|
||||
index 5f68480..e14099d 100644
|
||||
--- a/gas/frags.c
|
||||
|
Loading…
Reference in New Issue
Block a user