On 09/27/2012 08:24 AM, Jakub Jelinek wrote: > Hi! > > As discussed in the PR, the only way how to request a vector float/double > logical operation in C/C++ code without intrinsics is by casting to integer > vectors temporarily, but we then generate v?p{and,or,xor} instead of *p[sd]. > > The following patch changes that if either both of the operands of > vector integer and/or/xor are SUBREGs of the same vector float/double mode, > or one is SUBREG and another one is CONST_VECTOR. > > Bootstrapped/regtested on x86_64-linux and i686-linux, ok for trunk? > > 2012-09-27 Jakub Jelinek <ja...@redhat.com> > > PR target/54716 > * config/i386/predicates.md (nonimmediate_or_const_vector_operand): > New predicate. > * config/i386/i386.c (ix86_expand_vector_logical_operator): New > function. > * config/i386/i386-protos.h (ix86_expand_vector_logical_operator): New > prototype. > * config/i386/sse.md (<code><mode>3 VI logic): Use it. > > * gcc.target/i386/xorps-sse2.c: Remove xfails.
Ok. r~