This is the mail archive of the binutils@sourceware.org mailing list for the binutils project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

V2 [PATCH 0/4] i386: Optimize for Jump Conditional Code Erratum


Microcode update for Jump Conditional Code Erratum may cause performance
loss for some workloads:

https://www.intel.com/content/www/us/en/support/articles/000055650.html

Here is the set of assembler patches to mitigate performance impact by
aligning branches within 32-byte boundary.  The impacted instructions
are:

  a. Conditional jump.
  b. Fused conditional jump.
  c. Unconditional jump.
  d. Call.
  e. Ret.
  f. Indirect jump and call.

The new -mbranches-within-32B-boundaries command-line option aligns
conditional jump, fused conditional jump and unconditional jump within
32-byte boundary.

md_generic_table_relax_frag, which allows a backend to extend relax_frag,
is added to implement this new feature.

H.J. Lu (4):
  gas: Add md_generic_table_relax_frag
  i386: Align branches within a fixed boundary
  i386: Add -mbranches-within-32B-boundaries
  i386: Add tests for -malign-branch-boundary and -malign-branch

 gas/config/tc-i386.c                          | 1018 ++++++++++++++++-
 gas/config/tc-i386.h                          |   31 +
 gas/doc/c-i386.texi                           |   37 +
 gas/doc/internals.texi                        |    5 +
 gas/testsuite/gas/i386/align-branch-1.s       |   72 ++
 gas/testsuite/gas/i386/align-branch-1a.d      |   77 ++
 gas/testsuite/gas/i386/align-branch-1b.d      |   77 ++
 gas/testsuite/gas/i386/align-branch-1c.d      |   77 ++
 gas/testsuite/gas/i386/align-branch-1d.d      |   76 ++
 gas/testsuite/gas/i386/align-branch-1e.d      |   77 ++
 gas/testsuite/gas/i386/align-branch-1f.d      |   77 ++
 gas/testsuite/gas/i386/align-branch-1g.d      |   77 ++
 gas/testsuite/gas/i386/align-branch-1h.d      |   76 ++
 gas/testsuite/gas/i386/align-branch-2.s       |   49 +
 gas/testsuite/gas/i386/align-branch-2a.d      |   55 +
 gas/testsuite/gas/i386/align-branch-2b.d      |   55 +
 gas/testsuite/gas/i386/align-branch-2c.d      |   55 +
 gas/testsuite/gas/i386/align-branch-3.d       |   33 +
 gas/testsuite/gas/i386/align-branch-3.s       |   28 +
 gas/testsuite/gas/i386/align-branch-4.s       |   30 +
 gas/testsuite/gas/i386/align-branch-4a.d      |   36 +
 gas/testsuite/gas/i386/align-branch-4b.d      |   36 +
 gas/testsuite/gas/i386/align-branch-5.d       |   36 +
 gas/testsuite/gas/i386/align-branch-5.s       |   32 +
 gas/testsuite/gas/i386/align-branch-6.d       |   22 +
 gas/testsuite/gas/i386/align-branch-6.e       |    2 +
 gas/testsuite/gas/i386/align-branch-6.s       |    7 +
 gas/testsuite/gas/i386/i386.exp               |   39 +
 .../gas/i386/x86-64-align-branch-1.s          |   70 ++
 .../gas/i386/x86-64-align-branch-1a.d         |   75 ++
 .../gas/i386/x86-64-align-branch-1b.d         |   75 ++
 .../gas/i386/x86-64-align-branch-1c.d         |   75 ++
 .../gas/i386/x86-64-align-branch-1d.d         |   74 ++
 .../gas/i386/x86-64-align-branch-1e.d         |   74 ++
 .../gas/i386/x86-64-align-branch-1f.d         |   75 ++
 .../gas/i386/x86-64-align-branch-1g.d         |   75 ++
 .../gas/i386/x86-64-align-branch-1h.d         |   74 ++
 .../gas/i386/x86-64-align-branch-2.s          |   44 +
 .../gas/i386/x86-64-align-branch-2a.d         |   50 +
 .../gas/i386/x86-64-align-branch-2b.d         |   50 +
 .../gas/i386/x86-64-align-branch-2c.d         |   50 +
 .../gas/i386/x86-64-align-branch-3.d          |   32 +
 .../gas/i386/x86-64-align-branch-3.s          |   27 +
 .../gas/i386/x86-64-align-branch-4.s          |   27 +
 .../gas/i386/x86-64-align-branch-4a.d         |   33 +
 .../gas/i386/x86-64-align-branch-4b.d         |   33 +
 .../gas/i386/x86-64-align-branch-5.d          |   37 +
 .../gas/i386/x86-64-align-branch-6.d          |   19 +
 gas/write.c                                   |    7 +-
 ld/testsuite/ld-i386/align-branch-1.d         |   25 +
 ld/testsuite/ld-i386/align-branch-1.s         |   19 +
 ld/testsuite/ld-i386/i386.exp                 |    1 +
 ld/testsuite/ld-x86-64/align-branch-1.d       |   21 +
 ld/testsuite/ld-x86-64/align-branch-1.s       |   17 +
 ld/testsuite/ld-x86-64/x86-64.exp             |    1 +
 55 files changed, 3448 insertions(+), 4 deletions(-)
 create mode 100644 gas/testsuite/gas/i386/align-branch-1.s
 create mode 100644 gas/testsuite/gas/i386/align-branch-1a.d
 create mode 100644 gas/testsuite/gas/i386/align-branch-1b.d
 create mode 100644 gas/testsuite/gas/i386/align-branch-1c.d
 create mode 100644 gas/testsuite/gas/i386/align-branch-1d.d
 create mode 100644 gas/testsuite/gas/i386/align-branch-1e.d
 create mode 100644 gas/testsuite/gas/i386/align-branch-1f.d
 create mode 100644 gas/testsuite/gas/i386/align-branch-1g.d
 create mode 100644 gas/testsuite/gas/i386/align-branch-1h.d
 create mode 100644 gas/testsuite/gas/i386/align-branch-2.s
 create mode 100644 gas/testsuite/gas/i386/align-branch-2a.d
 create mode 100644 gas/testsuite/gas/i386/align-branch-2b.d
 create mode 100644 gas/testsuite/gas/i386/align-branch-2c.d
 create mode 100644 gas/testsuite/gas/i386/align-branch-3.d
 create mode 100644 gas/testsuite/gas/i386/align-branch-3.s
 create mode 100644 gas/testsuite/gas/i386/align-branch-4.s
 create mode 100644 gas/testsuite/gas/i386/align-branch-4a.d
 create mode 100644 gas/testsuite/gas/i386/align-branch-4b.d
 create mode 100644 gas/testsuite/gas/i386/align-branch-5.d
 create mode 100644 gas/testsuite/gas/i386/align-branch-5.s
 create mode 100644 gas/testsuite/gas/i386/align-branch-6.d
 create mode 100644 gas/testsuite/gas/i386/align-branch-6.e
 create mode 100644 gas/testsuite/gas/i386/align-branch-6.s
 create mode 100644 gas/testsuite/gas/i386/x86-64-align-branch-1.s
 create mode 100644 gas/testsuite/gas/i386/x86-64-align-branch-1a.d
 create mode 100644 gas/testsuite/gas/i386/x86-64-align-branch-1b.d
 create mode 100644 gas/testsuite/gas/i386/x86-64-align-branch-1c.d
 create mode 100644 gas/testsuite/gas/i386/x86-64-align-branch-1d.d
 create mode 100644 gas/testsuite/gas/i386/x86-64-align-branch-1e.d
 create mode 100644 gas/testsuite/gas/i386/x86-64-align-branch-1f.d
 create mode 100644 gas/testsuite/gas/i386/x86-64-align-branch-1g.d
 create mode 100644 gas/testsuite/gas/i386/x86-64-align-branch-1h.d
 create mode 100644 gas/testsuite/gas/i386/x86-64-align-branch-2.s
 create mode 100644 gas/testsuite/gas/i386/x86-64-align-branch-2a.d
 create mode 100644 gas/testsuite/gas/i386/x86-64-align-branch-2b.d
 create mode 100644 gas/testsuite/gas/i386/x86-64-align-branch-2c.d
 create mode 100644 gas/testsuite/gas/i386/x86-64-align-branch-3.d
 create mode 100644 gas/testsuite/gas/i386/x86-64-align-branch-3.s
 create mode 100644 gas/testsuite/gas/i386/x86-64-align-branch-4.s
 create mode 100644 gas/testsuite/gas/i386/x86-64-align-branch-4a.d
 create mode 100644 gas/testsuite/gas/i386/x86-64-align-branch-4b.d
 create mode 100644 gas/testsuite/gas/i386/x86-64-align-branch-5.d
 create mode 100644 gas/testsuite/gas/i386/x86-64-align-branch-6.d
 create mode 100644 ld/testsuite/ld-i386/align-branch-1.d
 create mode 100644 ld/testsuite/ld-i386/align-branch-1.s
 create mode 100644 ld/testsuite/ld-x86-64/align-branch-1.d
 create mode 100644 ld/testsuite/ld-x86-64/align-branch-1.s

-- 
2.21.0


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]