1 /* { dg-do compile { target i?86-*-* x86_64-*-* } } */
2 /* { dg-options "-msse4" } */
6 foo (const unsigned char *s1
, const unsigned char *s2
,
7 int bmsk
, __m128i frag2
)
10 char *p1
= (char *) s1
;
11 char *p2
= (char *) s2
;
12 __m128i frag1
, fruc
, mask
;
14 if( !p2
[0]) return (char *) s1
;
15 if( !p1
[0] ) return NULL
;
16 if( p2
[1]) frag2
= load (p2
);
18 fruc
= _mm_loadu_si128 ((__m128i
*) s1
);
19 mask
= _mm_cmpistrm(fruc
, frag2
, 0x44);
20 frag2
= _mm_blendv_epi8(frag2
, mask
, mask
);
21 frag1
= _mm_blendv_epi8(frag1
, mask
, mask
);
22 cmp_c
= _mm_cmpistrc(frag2
, frag1
, 0x0c);
23 cmp_s
= _mm_cmpistrs(frag2
, frag1
, 0x0c);
25 __asm("bsfl %[bmsk], %[len]" : [len
] "=r" (len
) : [bmsk
] "r" (bmsk
) );