------- Comment #5 from pinskia at gcc dot gnu dot org 2010-03-09 19:55 ------- C testcase: #include <x86intrin.h> typedef __m64 m64; static inline m64 alpha(m64 x) { x = _mm_unpackhi_pi16(x, x); x = _mm_unpackhi_pi16(x, x); return x; } static inline m64 _byte_mul(const m64 a, const m64 b, const m64 mmx_0x0080){ m64 res = _mm_mullo_pi16(a, b); return _mm_srli_pi16(res, 8); } static inline m64 _load(unsigned x, const m64 mmx_0x0000) { return _mm_unpacklo_pi8(_mm_cvtsi32_si64(x), mmx_0x0000); } static inline unsigned _store(const m64 x, const m64 mmx_0x0000) { return _mm_cvtsi64_si32(_mm_packs_pu16(x, mmx_0x0000)); } void comp_func_solid_SourceOver(unsigned *dest, unsigned src) { const m64 mmx_0x00ff = _mm_set1_pi16(0xff); const m64 mmx_0x0080 = _mm_set1_pi16(0x80); const m64 mmx_0x0000 = _mm_setzero_si64(); m64 s = _load(src, mmx_0x0000); m64 a = _mm_xor_si64(alpha(s), mmx_0x00ff); *dest = _store(_mm_adds_pu16(s, _byte_mul(_load(*dest, mmx_0x0000), a, mmx_0x0080)), mmx_0x0000); } --- CUT --- This is a dup of bug 43304
*** This bug has been marked as a duplicate of 43304 *** -- pinskia at gcc dot gnu dot org changed: What |Removed |Added ---------------------------------------------------------------------------- Status|NEW |RESOLVED Resolution| |DUPLICATE http://gcc.gnu.org/bugzilla/show_bug.cgi?id=43308