public inbox for binutils@sourceware.org
 help / color / mirror / Atom feed
* [PATCH 0/8] [RFC] Support Intel APX EGPR
@ 2023-09-19 15:25 Cui, Lili
  2023-09-19 15:25 ` [PATCH 1/8] Support APX GPR32 with rex2 prefix Cui, Lili
                   ` (7 more replies)
  0 siblings, 8 replies; 84+ messages in thread
From: Cui, Lili @ 2023-09-19 15:25 UTC (permalink / raw)
  To: binutils; +Cc: jbeulich, hongjiu.lu

Resent for some patches larger than the threshold cannot be sent.

Intel Advanced performance extension (APX) has been released in https://www.intel.com/content/www/us/en/developer/articles/technical/advanced-performance-extensions-apx.html.
It contains several extensions such as
1. Support APX GPR32 with rex2 prefix (For MAP0 an MAP1 legacy instructions).
2. Support APX GPR32 with extend evex prefix(legacy, VEX and EVEX extend to EVEX prefix to support GPR32).
3. Support APX NDD (non-destructive destination) and it's optimized encoding.
4. Support APX Push2/Pop2
5. Support APX NF
6. Support APX JMPABS
7. Linker support for APX encoded instructions.
8. Support APX ZU
9. Support APX CCMP and CTEST

Here is an introduction to the implementation of the first two patches in Binutils

1. APX uses the REX2 prefix to support EGPR for map0 and map1 of legacy instructions. Only adding the No_egpr flag to the instructions (legacy map0/map1) don't support EGPR (unsupported instructions are less). For map2/map3(legacy), VEX and EVEX, we use gi386-gen.c to add No_egpr.

2. we created new entries in i386-opc.tbl for instructions promoted from the legacy space and VEX.
   The extended EVEX prefix is based on the current 4-byte EVEX prefix with the semantics of several payload bits re-defined.
     EVEX extension of legacy instructions:
       All promoted legacy instructions are placed in EVEX map 4, which is
       currently reserved.
     EVEX extension of EVEX instructions:
       All existing EVEX instructions are extended by APX using the extended
       EVEX prefix, so that they can access all 32 GPRs.
     EVEX extension of VEX instructions:
       Promoting a VEX instruction into the EVEX space does not change the map
       id, the opcode, or the operand encoding of the VEX instruction.

To do list: 
1. For REX2, All opcodes listed map0 0x4*/0x7*/0xa* and map0 0x3*/0x8* are reserved under REX2 and triggers #UD when prefixed with REX2. It should be belong to first rex2 patch, I will creat another patch to add it.
2. Support APX ZU   -- In progress
3. Support APX CCMP and CTEST -- In progress 4. We haven’t disabled EGPR for 3DNOW instructions. We can disable them if AMD guys requires. 

This RFC focused on EGPR implementation in binutils. It may still have potential issues or bugs and requires futher optimization. Any comments are very appreciated.

Cui, Lili (3):
  Support APX GPR32 with extend evex prefix
  Add tests for APX GPR32 with extend evex prefix
  Support APX NF

Hu, Lin1 (2):
  Support APX NDD optimized encoding.
  Support APX JMPABS

Mo, Zewei (1):
  Support APX Push2/Pop2

konglin1 (2):
  Support APX GPR32 with rex2 prefix
  Support APX NDD

 gas/NEWS                                      |    3 +
 gas/config/tc-i386.c                          |  455 ++++-
 gas/doc/c-i386.texi                           |    3 +-
 gas/testsuite/gas/i386/apx-jmpabs-inval.l     |    3 +
 gas/testsuite/gas/i386/apx-jmpabs-inval.s     |    6 +
 gas/testsuite/gas/i386/apx-mov-inval.l        |    2 +
 gas/testsuite/gas/i386/apx-push2pop2-inval.l  |    5 +
 gas/testsuite/gas/i386/apx-push2pop2-inval.s  |    9 +
 gas/testsuite/gas/i386/i386.exp               |    2 +
 .../i386/ilp32/x86-64-opcode-inval-intel.d    |    4 +-
 .../gas/i386/ilp32/x86-64-opcode-inval.d      |    4 +-
 .../gas/i386/x86-64-apx-egpr-inval.l          |  212 +++
 .../gas/i386/x86-64-apx-egpr-inval.s          |  210 +++
 .../gas/i386/x86-64-apx-egpr-promote-inval.l  |   17 +
 .../gas/i386/x86-64-apx-egpr-promote-inval.s  |   18 +
 gas/testsuite/gas/i386/x86-64-apx-evex-egpr.d |   22 +
 gas/testsuite/gas/i386/x86-64-apx-evex-egpr.s |   25 +
 .../gas/i386/x86-64-apx-evex-promoted-intel.d |  740 +++++++++
 .../gas/i386/x86-64-apx-evex-promoted.d       |  740 +++++++++
 .../gas/i386/x86-64-apx-evex-promoted.s       | 1464 +++++++++++++++++
 .../gas/i386/x86-64-apx-jmpabs-intel.d        |   14 +
 .../gas/i386/x86-64-apx-jmpabs-inval.d        |   55 +
 .../gas/i386/x86-64-apx-jmpabs-inval.s        |   18 +
 gas/testsuite/gas/i386/x86-64-apx-jmpabs.d    |   14 +
 gas/testsuite/gas/i386/x86-64-apx-jmpabs.s    |   10 +
 gas/testsuite/gas/i386/x86-64-apx-mov-inval.l |    2 +
 gas/testsuite/gas/i386/x86-64-apx-mov-inval.s |    5 +
 .../gas/i386/x86-64-apx-ndd-optimize.d        |  120 ++
 .../gas/i386/x86-64-apx-ndd-optimize.s        |  115 ++
 gas/testsuite/gas/i386/x86-64-apx-ndd.d       |  165 ++
 gas/testsuite/gas/i386/x86-64-apx-ndd.s       |  156 ++
 gas/testsuite/gas/i386/x86-64-apx-nf-intel.d  |  633 +++++++
 gas/testsuite/gas/i386/x86-64-apx-nf.d        |  633 +++++++
 gas/testsuite/gas/i386/x86-64-apx-nf.s        | 1256 ++++++++++++++
 .../i386/x86-64-apx-push2pop2-decode-inval.d  |   29 +
 .../i386/x86-64-apx-push2pop2-decode-inval.s  |   19 +
 .../gas/i386/x86-64-apx-push2pop2-intel.d     |   42 +
 .../gas/i386/x86-64-apx-push2pop2-inval.l     |    9 +
 .../gas/i386/x86-64-apx-push2pop2-inval.s     |   13 +
 gas/testsuite/gas/i386/x86-64-apx-push2pop2.d |   42 +
 gas/testsuite/gas/i386/x86-64-apx-push2pop2.s |   39 +
 .../gas/i386/x86-64-apx-rex2-inval.d          |   29 +
 .../gas/i386/x86-64-apx-rex2-inval.s          |   25 +
 gas/testsuite/gas/i386/x86-64-apx-rex2.d      |  148 ++
 gas/testsuite/gas/i386/x86-64-apx-rex2.s      |  175 ++
 gas/testsuite/gas/i386/x86-64-evex.d          |    2 +-
 gas/testsuite/gas/i386/x86-64-inval-movbe.l   |   31 +-
 gas/testsuite/gas/i386/x86-64-inval-movbe.s   |    1 +
 gas/testsuite/gas/i386/x86-64-inval-pseudo.l  |   12 +
 gas/testsuite/gas/i386/x86-64-inval-pseudo.s  |    8 +
 .../gas/i386/x86-64-opcode-inval-intel.d      |    4 +-
 gas/testsuite/gas/i386/x86-64-opcode-inval.d  |    4 +-
 gas/testsuite/gas/i386/x86-64-pseudos.d       |   62 +
 gas/testsuite/gas/i386/x86-64-pseudos.s       |   64 +
 gas/testsuite/gas/i386/x86-64.exp             |   19 +
 include/opcode/i386.h                         |    2 +
 opcodes/i386-dis-evex-len.h                   |   20 +
 opcodes/i386-dis-evex-mod.h                   |   60 +
 opcodes/i386-dis-evex-prefix.h                |   91 +
 opcodes/i386-dis-evex-reg.h                   |  155 ++
 opcodes/i386-dis-evex-w.h                     |   10 +
 opcodes/i386-dis-evex-x86.h                   |  150 ++
 opcodes/i386-dis-evex.h                       |  638 ++++++-
 opcodes/i386-dis.c                            |  437 ++++-
 opcodes/i386-gen.c                            |   14 +
 opcodes/i386-opc.h                            |   26 +-
 opcodes/i386-opc.tbl                          |  271 ++-
 opcodes/i386-reg.tbl                          |   64 +
 68 files changed, 9692 insertions(+), 163 deletions(-)
 create mode 100644 gas/testsuite/gas/i386/apx-jmpabs-inval.l
 create mode 100644 gas/testsuite/gas/i386/apx-jmpabs-inval.s
 create mode 100644 gas/testsuite/gas/i386/apx-mov-inval.l
 create mode 100644 gas/testsuite/gas/i386/apx-push2pop2-inval.l
 create mode 100644 gas/testsuite/gas/i386/apx-push2pop2-inval.s
 create mode 100644 gas/testsuite/gas/i386/x86-64-apx-egpr-inval.l
 create mode 100644 gas/testsuite/gas/i386/x86-64-apx-egpr-inval.s
 create mode 100644 gas/testsuite/gas/i386/x86-64-apx-egpr-promote-inval.l
 create mode 100644 gas/testsuite/gas/i386/x86-64-apx-egpr-promote-inval.s
 create mode 100644 gas/testsuite/gas/i386/x86-64-apx-evex-egpr.d
 create mode 100644 gas/testsuite/gas/i386/x86-64-apx-evex-egpr.s
 create mode 100644 gas/testsuite/gas/i386/x86-64-apx-evex-promoted-intel.d
 create mode 100644 gas/testsuite/gas/i386/x86-64-apx-evex-promoted.d
 create mode 100644 gas/testsuite/gas/i386/x86-64-apx-evex-promoted.s
 create mode 100644 gas/testsuite/gas/i386/x86-64-apx-jmpabs-intel.d
 create mode 100644 gas/testsuite/gas/i386/x86-64-apx-jmpabs-inval.d
 create mode 100644 gas/testsuite/gas/i386/x86-64-apx-jmpabs-inval.s
 create mode 100644 gas/testsuite/gas/i386/x86-64-apx-jmpabs.d
 create mode 100644 gas/testsuite/gas/i386/x86-64-apx-jmpabs.s
 create mode 100644 gas/testsuite/gas/i386/x86-64-apx-mov-inval.l
 create mode 100644 gas/testsuite/gas/i386/x86-64-apx-mov-inval.s
 create mode 100644 gas/testsuite/gas/i386/x86-64-apx-ndd-optimize.d
 create mode 100644 gas/testsuite/gas/i386/x86-64-apx-ndd-optimize.s
 create mode 100644 gas/testsuite/gas/i386/x86-64-apx-ndd.d
 create mode 100644 gas/testsuite/gas/i386/x86-64-apx-ndd.s
 create mode 100644 gas/testsuite/gas/i386/x86-64-apx-nf-intel.d
 create mode 100644 gas/testsuite/gas/i386/x86-64-apx-nf.d
 create mode 100644 gas/testsuite/gas/i386/x86-64-apx-nf.s
 create mode 100644 gas/testsuite/gas/i386/x86-64-apx-push2pop2-decode-inval.d
 create mode 100644 gas/testsuite/gas/i386/x86-64-apx-push2pop2-decode-inval.s
 create mode 100644 gas/testsuite/gas/i386/x86-64-apx-push2pop2-intel.d
 create mode 100644 gas/testsuite/gas/i386/x86-64-apx-push2pop2-inval.l
 create mode 100644 gas/testsuite/gas/i386/x86-64-apx-push2pop2-inval.s
 create mode 100644 gas/testsuite/gas/i386/x86-64-apx-push2pop2.d
 create mode 100644 gas/testsuite/gas/i386/x86-64-apx-push2pop2.s
 create mode 100644 gas/testsuite/gas/i386/x86-64-apx-rex2-inval.d
 create mode 100644 gas/testsuite/gas/i386/x86-64-apx-rex2-inval.s
 create mode 100644 gas/testsuite/gas/i386/x86-64-apx-rex2.d
 create mode 100644 gas/testsuite/gas/i386/x86-64-apx-rex2.s
 create mode 100644 opcodes/i386-dis-evex-x86.h

-- 
2.25.1


^ permalink raw reply	[flat|nested] 84+ messages in thread

end of thread, other threads:[~2023-12-12  3:00 UTC | newest]

Thread overview: 84+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2023-09-19 15:25 [PATCH 0/8] [RFC] Support Intel APX EGPR Cui, Lili
2023-09-19 15:25 ` [PATCH 1/8] Support APX GPR32 with rex2 prefix Cui, Lili
2023-09-21 15:27   ` Jan Beulich
2023-09-27 15:57     ` Cui, Lili
2023-09-21 15:51   ` Jan Beulich
2023-09-27 15:59     ` Cui, Lili
2023-09-28  8:02       ` Jan Beulich
2023-10-07  3:27         ` Cui, Lili
2023-09-19 15:25 ` [PATCH 2/8] Support APX GPR32 with extend evex prefix Cui, Lili
2023-09-22 10:12   ` Jan Beulich
2023-10-17 15:48     ` Cui, Lili
2023-10-18  6:40       ` Jan Beulich
2023-10-18 10:44         ` Cui, Lili
2023-10-18 10:50           ` Jan Beulich
2023-09-22 10:50   ` Jan Beulich
2023-10-17 15:50     ` Cui, Lili
2023-10-17 16:11       ` Jan Beulich
2023-10-18  2:02         ` Cui, Lili
2023-10-18  6:10           ` Jan Beulich
2023-09-25  6:03   ` Jan Beulich
2023-10-17 15:52     ` Cui, Lili
2023-10-17 16:12       ` Jan Beulich
2023-10-18  6:31         ` Cui, Lili
2023-10-18  6:47           ` Jan Beulich
2023-10-18  7:52             ` Cui, Lili
2023-10-18  8:21               ` Jan Beulich
2023-10-18 11:30                 ` Cui, Lili
2023-10-19 11:58                   ` Cui, Lili
2023-10-19 15:24                     ` Jan Beulich
2023-10-19 16:38                       ` Cui, Lili
2023-10-20  6:25                         ` Jan Beulich
2023-10-22 14:33                           ` Cui, Lili
2023-09-19 15:25 ` [PATCH 3/8] Add tests for " Cui, Lili
2023-09-27 13:11   ` Jan Beulich
2023-10-17 15:53     ` FW: " Cui, Lili
2023-10-17 16:19       ` Jan Beulich
2023-10-18  2:32         ` Cui, Lili
2023-10-18  6:05           ` Jan Beulich
2023-10-18  7:16             ` Cui, Lili
2023-10-18  8:05               ` Jan Beulich
2023-10-18 11:26                 ` Cui, Lili
2023-10-18 12:06                   ` Jan Beulich
2023-10-25 16:03                     ` Cui, Lili
2023-09-27 13:19   ` Jan Beulich
2023-09-19 15:25 ` [PATCH 4/8] Support APX NDD Cui, Lili
2023-09-27 14:44   ` Jan Beulich
2023-10-22 14:05     ` Cui, Lili
2023-10-23  7:12       ` Jan Beulich
2023-10-25  8:10         ` Cui, Lili
2023-10-25  8:47           ` Jan Beulich
2023-10-25 15:49             ` Cui, Lili
2023-10-25 15:59               ` Jan Beulich
2023-09-28  7:57   ` Jan Beulich
2023-10-22 14:57     ` Cui, Lili
2023-10-24 11:39     ` Cui, Lili
2023-10-24 11:58       ` Jan Beulich
2023-10-25 15:29         ` Cui, Lili
2023-09-19 15:25 ` [PATCH 5/8] Support APX NDD optimized encoding Cui, Lili
2023-09-28  9:29   ` Jan Beulich
2023-10-23  2:57     ` Hu, Lin1
2023-10-23  7:23       ` Jan Beulich
2023-10-23  7:50         ` Hu, Lin1
2023-10-23  8:15           ` Jan Beulich
2023-10-24  1:40             ` Hu, Lin1
2023-10-24  6:03               ` Jan Beulich
2023-10-24  6:08                 ` Hu, Lin1
2023-10-23  3:07     ` [PATCH-V2] " Hu, Lin1
2023-10-23  3:30     ` [PATCH 5/8] [v2] " Hu, Lin1
2023-10-23  7:26       ` Jan Beulich
2023-09-19 15:25 ` [PATCH 6/8] Support APX Push2/Pop2 Cui, Lili
2023-09-28 11:37   ` Jan Beulich
2023-10-30 15:21     ` Cui, Lili
2023-10-30 15:31       ` Jan Beulich
2023-11-20 13:05         ` Cui, Lili
2023-09-19 15:25 ` [PATCH 7/8] Support APX NF Cui, Lili
2023-09-25  6:07   ` Jan Beulich
2023-09-28 12:42   ` Jan Beulich
2023-11-02 10:15     ` Cui, Lili
2023-11-02 10:23       ` Jan Beulich
2023-11-02 10:46         ` Cui, Lili
2023-12-12  2:59           ` H.J. Lu
2023-09-19 15:25 ` [PATCH 8/8] Support APX JMPABS Cui, Lili
2023-09-28 13:11   ` Jan Beulich
2023-11-02  2:32     ` Hu, Lin1

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).