diff options
author | Jan Beulich <jbeulich@suse.com> | 2023-07-04 17:05:47 +0200 |
---|---|---|
committer | Jan Beulich <jbeulich@suse.com> | 2023-07-04 17:05:47 +0200 |
commit | b7bd93bc51c49c58d0e9cdddf6b4cc44bc4c76dd (patch) | |
tree | 632b15140fa5c8a3af68a87cdc35368f8f8fe9b5 /gas/config | |
parent | 151da91724c50b9c501b4b89857e675bc2dd8b52 (diff) | |
download | gdb-b7bd93bc51c49c58d0e9cdddf6b4cc44bc4c76dd.zip gdb-b7bd93bc51c49c58d0e9cdddf6b4cc44bc4c76dd.tar.gz gdb-b7bd93bc51c49c58d0e9cdddf6b4cc44bc4c76dd.tar.bz2 |
x86: optimize pre-AVX512 {,V}PCMPEQQ with identical sources
The {,V}PCMPEQD alternative is 1 byte shorter in many cases.
Diffstat (limited to 'gas/config')
-rw-r--r-- | gas/config/tc-i386.c | 17 |
1 files changed, 17 insertions, 0 deletions
diff --git a/gas/config/tc-i386.c b/gas/config/tc-i386.c index de35ee2..eb3f128 100644 --- a/gas/config/tc-i386.c +++ b/gas/config/tc-i386.c @@ -4563,6 +4563,23 @@ optimize_encoding (void) i.types[j].bitfield.disp8 = fits_in_disp8 (i.op[j].disps->X_add_number); } + else if (optimize_for_space + && i.tm.base_opcode == 0x29 + && i.tm.opcode_space == SPACE_0F38 + && i.operands == i.reg_operands + && i.op[0].regs == i.op[1].regs + && (!i.tm.opcode_modifier.vex + || !(i.op[0].regs->reg_flags & RegRex)) + && !is_evex_encoding (&i.tm)) + { + /* Optimize: -Os: + pcmpeqq %xmmN, %xmmN -> pcmpeqd %xmmN, %xmmN + vpcmpeqq %xmmN, %xmmN, %xmmM -> vpcmpeqd %xmmN, %xmmN, %xmmM (N < 8) + vpcmpeqq %ymmN, %ymmN, %ymmM -> vpcmpeqd %ymmN, %ymmN, %ymmM (N < 8) + */ + i.tm.opcode_space = SPACE_0F; + i.tm.base_opcode = 0x76; + } } /* Return non-zero for load instruction. */ |