On Wed, Apr 6, 2022 at 5:56 AM Roger Sayle <ro...@nextmovesoftware.com> wrote: > > > > This simple patch allows the i386 backend to generate pandn instructions > > for V1TI mode. Currently, the testcase: > > > > typedef unsigned __int128 v1ti __attribute__ ((__vector_size__ (16))); > > v1ti andnot1(v1ti x, v1ti y) { return ~x & y; } > > > > generates with -O2 > > > > pcmpeqd %xmm2, %xmm2 > > pxor %xmm2, %xmm0 > > pand %xmm1, %xmm0 > > ret > > > > with this patch, we now generate: > > > > pandn %xmm1, %xmm0 > > ret > > > > It turns out that there are currently three (near) duplicates of the > > logic for andn/pandn/vandn/vpandn in i386/sse.md: one for floating point > > vectors (MODEF), one for integer vectors (VI) and a third for TFmode. > > Rather than introduce a fourth copy, this patch introduces a new mode > > iterator to share/reuse the TFmode define_insn to also handle V1TI. > > > > This patch has been tested on x86_64-pc-linux-gnu with make bootstrap > > and make -k check with no new failures. Ok for mainline? > Ok. > > > > > 2022-04-05 Roger Sayle <ro...@nextmovesoftware.com> > > > > gcc/ChangeLog > > * config/i386/sse.md (ANDNOT_MODE): New mode iterator for TF and V1TI. > > (*andnottf3): Replace with... > > (*andnot<mode>3): New define_insn using ANDNOT_MODE. > > > > gcc/testsuite/ChangeLog > > * gcc.target/i386/sse2-v1ti-andnot.c: New test case. > > > > > > Thanks in advance, > > Roger > > -- > > >
-- BR, Hongtao