------- 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