diff options
author | Uros Bizjak <ubizjak@gmail.com> | 2024-05-28 20:25:14 +0200 |
---|---|---|
committer | Uros Bizjak <ubizjak@gmail.com> | 2024-05-28 22:59:12 +0200 |
commit | 91d79053f2b416cb9e97d9c0c3fb5b73075289e6 (patch) | |
tree | 8ebbcc1acc93086a73d8386388587fb2b3afe729 /libcpp | |
parent | 21fc89bac61983a869c066f7377f8280a6adca49 (diff) | |
download | gcc-91d79053f2b416cb9e97d9c0c3fb5b73075289e6.zip gcc-91d79053f2b416cb9e97d9c0c3fb5b73075289e6.tar.gz gcc-91d79053f2b416cb9e97d9c0c3fb5b73075289e6.tar.bz2 |
i386: Improve access to _Atomic DImode location via XMM regs for SSE4.1 x86_32 targets
Use MOVD/PEXTRD and MOVD/PINSRD insn sequences to move DImode value
between XMM and GPR register sets for SSE4.1 x86_32 targets in order
to avoid spilling the value to stack.
The load from _Atomic location a improves from:
movq a, %xmm0
movq %xmm0, (%esp)
movl (%esp), %eax
movl 4(%esp), %edx
to:
movq a, %xmm0
movd %xmm0, %eax
pextrd $1, %xmm0, %edx
The store to _Atomic location b improves from:
movl %eax, (%esp)
movl %edx, 4(%esp)
movq (%esp), %xmm0
movq %xmm0, b
to:
movd %eax, %xmm0
pinsrd $1, %edx, %xmm0
movq %xmm0, b
gcc/ChangeLog:
* config/i386/sync.md (atomic_loaddi_fpu): Use movd/pextrd
to move DImode value from XMM to GPR for TARGET_SSE4_1.
(atomic_storedi_fpu): Use movd/pinsrd to move DImode value
from GPR to XMM for TARGET_SSE4_1.
Diffstat (limited to 'libcpp')
0 files changed, 0 insertions, 0 deletions