i386: Implement 4-byte vector support [PR100637]
authorUros Bizjak <ubizjak@gmail.com>
Tue, 18 May 2021 15:25:54 +0000 (17:25 +0200)
committerUros Bizjak <ubizjak@gmail.com>
Tue, 18 May 2021 15:27:37 +0000 (17:27 +0200)
commit46ca31d65092e5afcef292f807fcf14c5363280d
treebf4070431fa8bed5ef42d23e03cf3fb97d6e8d50
parent7d3711a5a58674bd17b19bcf4e3f2edd60ba76c1
i386: Implement 4-byte vector support [PR100637]

Add infrastructure, logic and arithmetic support for 4-byte vectors.
These can be used with SSE2 targets, where movd instructions from/to
XMM registers are available.  x86_64 ABI passes 4-byte vectors in
integer registers, so also add logic operations with integer registers.

2021-05-18  Uroš Bizjak  <ubizjak@gmail.com>

gcc/
PR target/100637
* config/i386/i386.h (VALID_SSE2_REG_MODE):
Add V4QI and V2HI modes.
(VALID_INT_MODE_P): Ditto.
* config/i386/mmx.md (VI_32): New mode iterator.
(mmxvecsize): Handle V4QI and V2HI.
(Yv_Yw): Ditto.
(mov<VI_32:mode>): New expander.
(*mov<mode>_internal): New insn pattern.
(movmisalign<VI_32:mode>): New expander.
(neg<VI_32:mode>): New expander.
(<plusminus:insn><VI_32:mode>3): New expander.
(*<plusminus:insn><VI_32:mode>3): New insn pattern.
(mulv2hi3): New expander.
(*mulv2hi3): New insn pattern.
(one_cmpl<VI_32:mode>2): New expander.
(*andnot<VI_32:mode>3): New insn pattern.
(<any_logic:code><VI_32:mode>3): New expander.
(*<any_logic:code><VI_32:mode>3): New insn pattern.

gcc/testsuite/

PR target/100637
* gcc.target/i386/pr100637-1b.c: New test.
* gcc.target/i386/pr100637-1w.c: Ditto.

* gcc.target/i386/pr92658-avx2-2.c: Do not XFAIL scan for pmovsxbq.
* gcc.target/i386/pr92658-avx2.c: Do not XFAIL scan for pmovzxbq.
* gcc.target/i386/pr92658-avx512vl.c: Do not XFAIL scan for vpmovdb.
* gcc.target/i386/pr92658-sse4-2.c: Do not XFAIL scan for
pmovsxbd and pmovsxwq.
* gcc.target/i386/pr92658-sse4.c: Do not XFAIL scan for
pmovzxbd and pmovzxwq.
gcc/config/i386/i386.h
gcc/config/i386/mmx.md
gcc/testsuite/gcc.target/i386/pr100637-1b.c [new file with mode: 0644]
gcc/testsuite/gcc.target/i386/pr100637-1w.c [new file with mode: 0644]
gcc/testsuite/gcc.target/i386/pr92658-avx2-2.c
gcc/testsuite/gcc.target/i386/pr92658-avx2.c
gcc/testsuite/gcc.target/i386/pr92658-avx512vl.c
gcc/testsuite/gcc.target/i386/pr92658-sse4-2.c
gcc/testsuite/gcc.target/i386/pr92658-sse4.c