diff options
author | Jose E. Marchesi <jose.marchesi@oracle.com> | 2016-09-14 07:10:49 -0700 |
---|---|---|
committer | Jose E. Marchesi <jose.marchesi@oracle.com> | 2016-09-14 07:10:49 -0700 |
commit | 46a2d504dd875caf60f9be191a55c9ff676bcd5c (patch) | |
tree | 8cfbcceec843973e7f39e5b7f9d630bb1f4557c3 /gas/doc | |
parent | 5d9bbb73c1df68741048c3d0f837b50c289ea608 (diff) | |
download | gdb-46a2d504dd875caf60f9be191a55c9ff676bcd5c.zip gdb-46a2d504dd875caf60f9be191a55c9ff676bcd5c.tar.gz gdb-46a2d504dd875caf60f9be191a55c9ff676bcd5c.tar.bz2 |
gas: detect DCTI couples in sparc
Before SPARC V9 the effect of having a delayed branch instruction in the
delay slot of a conditional delayed branch was undefined.
In SPARC V9 DCTI couples are well defined.
However, starting with the UltraSPARC Architecture 2005, DCTI
couples (of all kind) are deprecated and should not be used, as they may
be slow or behave differently to what the programmer expects.
This patch adds a new command line option --dcti-couples-detect to `as',
disabled by default, that makes the assembler to warn the user if an
unpredictable DCTI couple is found. Tests and documentation are
included.
gas/ChangeLog:
2016-09-14 Jose E. Marchesi <jose.marchesi@oracle.com>
* config/tc-sparc.c (md_assemble): Detect and warning on
unpredictable DCTI couples in certain arches.
(dcti_couples_detect): New global.
(md_longopts): Add command line option -dcti-couples-detect.
(md_show_usage): Document -dcti-couples-detect.
(md_parse_option): Handle OPTION_DCTI_COUPLES_DETECT.
* testsuite/gas/sparc/sparc.exp (gas_64_check): Run
dcti-couples-v8, dcti-couples-v9 and dcti-couples-v9c tests.
* testsuite/gas/sparc/dcti-couples.s: New file.
* testsuite/gas/sparc/dcti-couples-v9c.d: Likewise.
* testsuite/gas/sparc/dcti-couples-v8.d: Likewise.
* testsuite/gas/sparc/dcti-couples-v9.d: Likewise.
* testsuite/gas/sparc/dcti-couples-v9c.l: Likewise.
* testsuite/gas/sparc/dcti-couples-v8.l: Likewise.
* doc/as.texinfo (Overview): Document --dcti-couples-detect.
* doc/c-sparc.texi (Sparc-Opts): Likewise.
Diffstat (limited to 'gas/doc')
-rw-r--r-- | gas/doc/as.texinfo | 17 | ||||
-rw-r--r-- | gas/doc/c-sparc.texi | 14 |
2 files changed, 24 insertions, 7 deletions
diff --git a/gas/doc/as.texinfo b/gas/doc/as.texinfo index d09e0d4..cdaeb6b 100644 --- a/gas/doc/as.texinfo +++ b/gas/doc/as.texinfo @@ -530,10 +530,21 @@ gcc(1), ld(1), and the Info entries for @file{binutils} and @file{ld}. @emph{Target SPARC options:} @c The order here is important. See c-sparc.texi. - [@b{-Av6}|@b{-Av7}|@b{-Av8}|@b{-Asparclet}|@b{-Asparclite} - @b{-Av8plus}|@b{-Av8plusa}|@b{-Av9}|@b{-Av9a}] - [@b{-xarch=v8plus}|@b{-xarch=v8plusa}] [@b{-bump}] + [@b{-Av6}|@b{-Av7}|@b{-Av8}|@b{-Aleon}|@b{-Asparclet}|@b{-Asparclite} + @b{-Av8plus}|@b{-Av8plusa}|@b{-Av8plusb}|@b{-Av8plusc}|@b{-Av8plusd} + @b{-Av8plusv}|@b{-Av8plusm}|@b{-Av9}|@b{-Av9a}|@b{-Av9b}|@b{-Av9c} + @b{-Av9d}|@b{-Av9e}|@b{-Av9v}|@b{-Av9m}|@b{-Asparc}|@b{-Asparcvis} + @b{-Asparcvis2}|@b{-Asparcfmaf}|@b{-Asparcima}|@b{-Asparcvis3} + @b{-Asparcvisr}|@b{-Asparc5}] + [@b{-xarch=v8plus}|@b{-xarch=v8plusa}]|@b{-xarch=v8plusb}|@b{-xarch=v8plusc} + @b{-xarch=v8plusd}|@b{-xarch=v8plusv}|@b{-xarch=v8plusm}|@b{-xarch=v9} + @b{-xarch=v9a}|@b{-xarch=v9b}|@b{-xarch=v9c}|@b{-xarch=v9d}|@b{-xarch=v9e} + @b{-xarch=v9v}|@b{-xarch=v9m}|@b{-xarch=sparc}|@b{-xarch=sparcvis} + @b{-xarch=sparcvis2}|@b{-xarch=sparcfmaf}|@b{-xarch=sparcima} + @b{-xarch=sparcvis3}|@b{-xarch=sparcvisr}|@b{-xarch=sparc5} + @b{-bump}] [@b{-32}|@b{-64}] + [@b{--enforce-aligned-data}][@b{--dcti-couples-detect}] @end ifset @ifset TIC54X diff --git a/gas/doc/c-sparc.texi b/gas/doc/c-sparc.texi index e879276..1368f7d 100644 --- a/gas/doc/c-sparc.texi +++ b/gas/doc/c-sparc.texi @@ -71,10 +71,10 @@ is explicitly requested. SPARC v9 is always incompatible with sparclite. @kindex -Asparcvis3 @kindex -Asparcvis3r @item -Av6 | -Av7 | -Av8 | -Aleon | -Asparclet | -Asparclite -@itemx -Av8plus | -Av8plusa | -Av8plusb | -Av8plusc | -Av8plusd | -Av8plusv +@itemx -Av8plus | -Av8plusa | -Av8plusb | -Av8plusc | -Av8plusd | -Av8plusv | -Av8plusm @itemx -Av9 | -Av9a | -Av9b | -Av9c | -Av9d | -Av9e | -Av9v | -Av9m @itemx -Asparc | -Asparcvis | -Asparcvis2 | -Asparcfmaf | -Asparcima -@itemx -Asparcvis3 | -Asparcvis3r +@itemx -Asparcvis3 | -Asparcvis3r | -Asparc5 Use one of the @samp{-A} options to select one of the SPARC architectures explicitly. If you select an architecture explicitly, @code{@value{AS}} reports a fatal error if it encounters an instruction @@ -137,14 +137,14 @@ and floating point unfused multiply-add instructions enabled. @samp{-Asparc5} is equivalent to @samp{-Av9m}. @item -xarch=v8plus | -xarch=v8plusa | -xarch=v8plusb | -xarch=v8plusc -@itemx -xarch=v8plusd | -xarch=v8plusv | -xarch=v9 | -xarch=v9a +@itemx -xarch=v8plusd | -xarch=v8plusv | -xarch=v8plusm | -xarch=v9 | -xarch=v9a @itemx -xarch=v9b | -xarch=v9c | -xarch=v9d | -xarch=v9e | -xarch=v9v | -xarch=v9m @itemx -xarch=sparc | -xarch=sparcvis | -xarch=sparcvis2 @itemx -xarch=sparcfmaf | -xarch=sparcima | -xarch=sparcvis3 @itemx -xarch=sparcvis3r | -xarch=sparc5 For compatibility with the SunOS v9 assembler. These options are equivalent to -Av8plus, -Av8plusa, -Av8plusb, -Av8plusc, -Av8plusd, --Av8plusv, -Av9, -Av9a, -Av9b, -Av9c, -Av9d, -Av9e, -Av9v, -Av9m, +-Av8plusv, -Av8plusm, -Av9, -Av9a, -Av9b, -Av9c, -Av9d, -Av9e, -Av9v, -Av9m, -Asparc, -Asparcvis, -Asparcvis2, -Asparcfmaf, -Asparcima, -Asparcvis3, and -Asparcvis3r, respectively. @@ -158,6 +158,12 @@ as required (except between incompatible levels). Select the word size, either 32 bits or 64 bits. These options are only available with the ELF object file format, and require that the necessary BFD support has been included. + +@item --dcti-couples-detect +Warn if a DCTI (delayed control transfer instruction) couple is found +when generating code for a variant of the SPARC architecture in which +the execution of the couple is unpredictable, or very slow. This is +disabled by default. @end table @node Sparc-Aligned-Data |