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

Reply via email to