aboutsummaryrefslogtreecommitdiff
path: root/libcpp
diff options
context:
space:
mode:
authorUros Bizjak <ubizjak@gmail.com>2024-05-28 20:25:14 +0200
committerUros Bizjak <ubizjak@gmail.com>2024-05-28 22:59:12 +0200
commit91d79053f2b416cb9e97d9c0c3fb5b73075289e6 (patch)
tree8ebbcc1acc93086a73d8386388587fb2b3afe729 /libcpp
parent21fc89bac61983a869c066f7377f8280a6adca49 (diff)
downloadgcc-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