--- /home/thresh/sisyphus/chroot/usr/src/RPM/BUILD/vlc-0.8.6c/modules/video_chroma/fpicdpic.o 2007-06-16 23:46:22 +0400 +++ /home/thresh/sisyphus/chroot/usr/src/RPM/BUILD/vlc-0.8.6c/modules/video_chroma/withoutfpicdpic.o 2007-06-16 23:46:41 +0400 @@ -7904,42 +7904,854 @@ { uint8_t *p_buffer; int *p_offset; +# 53 "i420_rgb.h" +}; +# 62 "i420_rgb.h" +void I420_RGB16__0_8_6 ( vout_thread_t *, picture_t *, picture_t * ); +void I420_RGB32__0_8_6 ( vout_thread_t *, picture_t *, picture_t * ); +# 34 "i420_rgb16.c" 2 - void *p_base; - uint8_t *p_rgb8; - uint16_t *p_rgb16; - uint32_t *p_rgb32; +# 1 "/usr/lib/gcc/i586-alt-linux/4.1.1/include/mmintrin.h" 1 3 4 +# 37 "/usr/lib/gcc/i586-alt-linux/4.1.1/include/mmintrin.h" 3 4 +typedef int __m64 __attribute__ ((__vector_size__ (8))); +typedef int __v2si __attribute__ ((__vector_size__ (8))); +typedef short __v4hi __attribute__ ((__vector_size__ (8))); +typedef char __v8qi __attribute__ ((__vector_size__ (8))); - uint16_t p_rgb_r[256]; - uint16_t p_rgb_g[256]; - uint16_t p_rgb_b[256]; +static __inline void __attribute__((__always_inline__)) +_mm_empty (void) +{ + __builtin_ia32_emms (); +} -}; +static __inline void __attribute__((__always_inline__)) +_m_empty (void) +{ + _mm_empty (); +} + + +static __inline __m64 __attribute__((__always_inline__)) +_mm_cvtsi32_si64 (int __i) +{ + return (__m64) __builtin_ia32_vec_init_v2si (__i, 0); +} + +static __inline __m64 __attribute__((__always_inline__)) +_m_from_int (int __i) +{ + return _mm_cvtsi32_si64 (__i); +} +# 101 "/usr/lib/gcc/i586-alt-linux/4.1.1/include/mmintrin.h" 3 4 +static __inline int __attribute__((__always_inline__)) +_mm_cvtsi64_si32 (__m64 __i) +{ + return __builtin_ia32_vec_ext_v2si ((__v2si)__i, 0); +} + +static __inline int __attribute__((__always_inline__)) +_m_to_int (__m64 __i) +{ + return _mm_cvtsi64_si32 (__i); +} +# 140 "/usr/lib/gcc/i586-alt-linux/4.1.1/include/mmintrin.h" 3 4 +static __inline __m64 __attribute__((__always_inline__)) +_mm_packs_pi16 (__m64 __m1, __m64 __m2) +{ + return (__m64) __builtin_ia32_packsswb ((__v4hi)__m1, (__v4hi)__m2); +} +static __inline __m64 __attribute__((__always_inline__)) +_m_packsswb (__m64 __m1, __m64 __m2) +{ + return _mm_packs_pi16 (__m1, __m2); +} -void I420_RGB8__0_8_6 ( vout_thread_t *, picture_t *, picture_t * ); -void I420_RGB16_dither__0_8_6 ( vout_thread_t *, picture_t *, picture_t * ); +static __inline __m64 __attribute__((__always_inline__)) +_mm_packs_pi32 (__m64 __m1, __m64 __m2) +{ + return (__m64) __builtin_ia32_packssdw ((__v2si)__m1, (__v2si)__m2); +} -void I420_RGB16__0_8_6 ( vout_thread_t *, picture_t *, picture_t * ); -void I420_RGB32__0_8_6 ( vout_thread_t *, picture_t *, picture_t * ); -# 34 "i420_rgb16.c" 2 +static __inline __m64 __attribute__((__always_inline__)) +_m_packssdw (__m64 __m1, __m64 __m2) +{ + return _mm_packs_pi32 (__m1, __m2); +} + + + + +static __inline __m64 __attribute__((__always_inline__)) +_mm_packs_pu16 (__m64 __m1, __m64 __m2) +{ + return (__m64) __builtin_ia32_packuswb ((__v4hi)__m1, (__v4hi)__m2); +} + +static __inline __m64 __attribute__((__always_inline__)) +_m_packuswb (__m64 __m1, __m64 __m2) +{ + return _mm_packs_pu16 (__m1, __m2); +} + + + +static __inline __m64 __attribute__((__always_inline__)) +_mm_unpackhi_pi8 (__m64 __m1, __m64 __m2) +{ + return (__m64) __builtin_ia32_punpckhbw ((__v8qi)__m1, (__v8qi)__m2); +} + +static __inline __m64 __attribute__((__always_inline__)) +_m_punpckhbw (__m64 __m1, __m64 __m2) +{ + return _mm_unpackhi_pi8 (__m1, __m2); +} + + + +static __inline __m64 __attribute__((__always_inline__)) +_mm_unpackhi_pi16 (__m64 __m1, __m64 __m2) +{ + return (__m64) __builtin_ia32_punpckhwd ((__v4hi)__m1, (__v4hi)__m2); +} + +static __inline __m64 __attribute__((__always_inline__)) +_m_punpckhwd (__m64 __m1, __m64 __m2) +{ + return _mm_unpackhi_pi16 (__m1, __m2); +} + + + +static __inline __m64 __attribute__((__always_inline__)) +_mm_unpackhi_pi32 (__m64 __m1, __m64 __m2) +{ + return (__m64) __builtin_ia32_punpckhdq ((__v2si)__m1, (__v2si)__m2); +} + +static __inline __m64 __attribute__((__always_inline__)) +_m_punpckhdq (__m64 __m1, __m64 __m2) +{ + return _mm_unpackhi_pi32 (__m1, __m2); +} + + + +static __inline __m64 __attribute__((__always_inline__)) +_mm_unpacklo_pi8 (__m64 __m1, __m64 __m2) +{ + return (__m64) __builtin_ia32_punpcklbw ((__v8qi)__m1, (__v8qi)__m2); +} + +static __inline __m64 __attribute__((__always_inline__)) +_m_punpcklbw (__m64 __m1, __m64 __m2) +{ + return _mm_unpacklo_pi8 (__m1, __m2); +} + + + +static __inline __m64 __attribute__((__always_inline__)) +_mm_unpacklo_pi16 (__m64 __m1, __m64 __m2) +{ + return (__m64) __builtin_ia32_punpcklwd ((__v4hi)__m1, (__v4hi)__m2); +} + +static __inline __m64 __attribute__((__always_inline__)) +_m_punpcklwd (__m64 __m1, __m64 __m2) +{ + return _mm_unpacklo_pi16 (__m1, __m2); +} + + + +static __inline __m64 __attribute__((__always_inline__)) +_mm_unpacklo_pi32 (__m64 __m1, __m64 __m2) +{ + return (__m64) __builtin_ia32_punpckldq ((__v2si)__m1, (__v2si)__m2); +} + +static __inline __m64 __attribute__((__always_inline__)) +_m_punpckldq (__m64 __m1, __m64 __m2) +{ + return _mm_unpacklo_pi32 (__m1, __m2); +} + + +static __inline __m64 __attribute__((__always_inline__)) +_mm_add_pi8 (__m64 __m1, __m64 __m2) +{ + return (__m64) __builtin_ia32_paddb ((__v8qi)__m1, (__v8qi)__m2); +} + +static __inline __m64 __attribute__((__always_inline__)) +_m_paddb (__m64 __m1, __m64 __m2) +{ + return _mm_add_pi8 (__m1, __m2); +} + + +static __inline __m64 __attribute__((__always_inline__)) +_mm_add_pi16 (__m64 __m1, __m64 __m2) +{ + return (__m64) __builtin_ia32_paddw ((__v4hi)__m1, (__v4hi)__m2); +} + +static __inline __m64 __attribute__((__always_inline__)) +_m_paddw (__m64 __m1, __m64 __m2) +{ + return _mm_add_pi16 (__m1, __m2); +} + + +static __inline __m64 __attribute__((__always_inline__)) +_mm_add_pi32 (__m64 __m1, __m64 __m2) +{ + return (__m64) __builtin_ia32_paddd ((__v2si)__m1, (__v2si)__m2); +} + +static __inline __m64 __attribute__((__always_inline__)) +_m_paddd (__m64 __m1, __m64 __m2) +{ + return _mm_add_pi32 (__m1, __m2); +} + + +static __inline __m64 __attribute__((__always_inline__)) +_mm_add_si64 (__m64 __m1, __m64 __m2) +{ + return (__m64) __builtin_ia32_paddq ((long long)__m1, (long long)__m2); +} + + + +static __inline __m64 __attribute__((__always_inline__)) +_mm_adds_pi8 (__m64 __m1, __m64 __m2) +{ + return (__m64) __builtin_ia32_paddsb ((__v8qi)__m1, (__v8qi)__m2); +} + +static __inline __m64 __attribute__((__always_inline__)) +_m_paddsb (__m64 __m1, __m64 __m2) +{ + return _mm_adds_pi8 (__m1, __m2); +} + + + +static __inline __m64 __attribute__((__always_inline__)) +_mm_adds_pi16 (__m64 __m1, __m64 __m2) +{ + return (__m64) __builtin_ia32_paddsw ((__v4hi)__m1, (__v4hi)__m2); +} + +static __inline __m64 __attribute__((__always_inline__)) +_m_paddsw (__m64 __m1, __m64 __m2) +{ + return _mm_adds_pi16 (__m1, __m2); +} + + + +static __inline __m64 __attribute__((__always_inline__)) +_mm_adds_pu8 (__m64 __m1, __m64 __m2) +{ + return (__m64) __builtin_ia32_paddusb ((__v8qi)__m1, (__v8qi)__m2); +} + +static __inline __m64 __attribute__((__always_inline__)) +_m_paddusb (__m64 __m1, __m64 __m2) +{ + return _mm_adds_pu8 (__m1, __m2); +} + + + +static __inline __m64 __attribute__((__always_inline__)) +_mm_adds_pu16 (__m64 __m1, __m64 __m2) +{ + return (__m64) __builtin_ia32_paddusw ((__v4hi)__m1, (__v4hi)__m2); +} + +static __inline __m64 __attribute__((__always_inline__)) +_m_paddusw (__m64 __m1, __m64 __m2) +{ + return _mm_adds_pu16 (__m1, __m2); +} + + +static __inline __m64 __attribute__((__always_inline__)) +_mm_sub_pi8 (__m64 __m1, __m64 __m2) +{ + return (__m64) __builtin_ia32_psubb ((__v8qi)__m1, (__v8qi)__m2); +} + +static __inline __m64 __attribute__((__always_inline__)) +_m_psubb (__m64 __m1, __m64 __m2) +{ + return _mm_sub_pi8 (__m1, __m2); +} + + +static __inline __m64 __attribute__((__always_inline__)) +_mm_sub_pi16 (__m64 __m1, __m64 __m2) +{ + return (__m64) __builtin_ia32_psubw ((__v4hi)__m1, (__v4hi)__m2); +} + +static __inline __m64 __attribute__((__always_inline__)) +_m_psubw (__m64 __m1, __m64 __m2) +{ + return _mm_sub_pi16 (__m1, __m2); +} + + +static __inline __m64 __attribute__((__always_inline__)) +_mm_sub_pi32 (__m64 __m1, __m64 __m2) +{ + return (__m64) __builtin_ia32_psubd ((__v2si)__m1, (__v2si)__m2); +} + +static __inline __m64 __attribute__((__always_inline__)) +_m_psubd (__m64 __m1, __m64 __m2) +{ + return _mm_sub_pi32 (__m1, __m2); +} + + +static __inline __m64 __attribute__((__always_inline__)) +_mm_sub_si64 (__m64 __m1, __m64 __m2) +{ + return (__m64) __builtin_ia32_psubq ((long long)__m1, (long long)__m2); +} + + + +static __inline __m64 __attribute__((__always_inline__)) +_mm_subs_pi8 (__m64 __m1, __m64 __m2) +{ + return (__m64) __builtin_ia32_psubsb ((__v8qi)__m1, (__v8qi)__m2); +} + +static __inline __m64 __attribute__((__always_inline__)) +_m_psubsb (__m64 __m1, __m64 __m2) +{ + return _mm_subs_pi8 (__m1, __m2); +} + + + +static __inline __m64 __attribute__((__always_inline__)) +_mm_subs_pi16 (__m64 __m1, __m64 __m2) +{ + return (__m64) __builtin_ia32_psubsw ((__v4hi)__m1, (__v4hi)__m2); +} + +static __inline __m64 __attribute__((__always_inline__)) +_m_psubsw (__m64 __m1, __m64 __m2) +{ + return _mm_subs_pi16 (__m1, __m2); +} + + + +static __inline __m64 __attribute__((__always_inline__)) +_mm_subs_pu8 (__m64 __m1, __m64 __m2) +{ + return (__m64) __builtin_ia32_psubusb ((__v8qi)__m1, (__v8qi)__m2); +} + +static __inline __m64 __attribute__((__always_inline__)) +_m_psubusb (__m64 __m1, __m64 __m2) +{ + return _mm_subs_pu8 (__m1, __m2); +} + + + +static __inline __m64 __attribute__((__always_inline__)) +_mm_subs_pu16 (__m64 __m1, __m64 __m2) +{ + return (__m64) __builtin_ia32_psubusw ((__v4hi)__m1, (__v4hi)__m2); +} + +static __inline __m64 __attribute__((__always_inline__)) +_m_psubusw (__m64 __m1, __m64 __m2) +{ + return _mm_subs_pu16 (__m1, __m2); +} + + + + +static __inline __m64 __attribute__((__always_inline__)) +_mm_madd_pi16 (__m64 __m1, __m64 __m2) +{ + return (__m64) __builtin_ia32_pmaddwd ((__v4hi)__m1, (__v4hi)__m2); +} + +static __inline __m64 __attribute__((__always_inline__)) +_m_pmaddwd (__m64 __m1, __m64 __m2) +{ + return _mm_madd_pi16 (__m1, __m2); +} + + + +static __inline __m64 __attribute__((__always_inline__)) +_mm_mulhi_pi16 (__m64 __m1, __m64 __m2) +{ + return (__m64) __builtin_ia32_pmulhw ((__v4hi)__m1, (__v4hi)__m2); +} + +static __inline __m64 __attribute__((__always_inline__)) +_m_pmulhw (__m64 __m1, __m64 __m2) +{ + return _mm_mulhi_pi16 (__m1, __m2); +} + + + +static __inline __m64 __attribute__((__always_inline__)) +_mm_mullo_pi16 (__m64 __m1, __m64 __m2) +{ + return (__m64) __builtin_ia32_pmullw ((__v4hi)__m1, (__v4hi)__m2); +} + +static __inline __m64 __attribute__((__always_inline__)) +_m_pmullw (__m64 __m1, __m64 __m2) +{ + return _mm_mullo_pi16 (__m1, __m2); +} + + +static __inline __m64 __attribute__((__always_inline__)) +_mm_sll_pi16 (__m64 __m, __m64 __count) +{ + return (__m64) __builtin_ia32_psllw ((__v4hi)__m, (long long)__count); +} + +static __inline __m64 __attribute__((__always_inline__)) +_m_psllw (__m64 __m, __m64 __count) +{ + return _mm_sll_pi16 (__m, __count); +} + +static __inline __m64 __attribute__((__always_inline__)) +_mm_slli_pi16 (__m64 __m, int __count) +{ + return (__m64) __builtin_ia32_psllw ((__v4hi)__m, __count); +} + +static __inline __m64 __attribute__((__always_inline__)) +_m_psllwi (__m64 __m, int __count) +{ + return _mm_slli_pi16 (__m, __count); +} + + +static __inline __m64 __attribute__((__always_inline__)) +_mm_sll_pi32 (__m64 __m, __m64 __count) +{ + return (__m64) __builtin_ia32_pslld ((__v2si)__m, (long long)__count); +} + +static __inline __m64 __attribute__((__always_inline__)) +_m_pslld (__m64 __m, __m64 __count) +{ + return _mm_sll_pi32 (__m, __count); +} + +static __inline __m64 __attribute__((__always_inline__)) +_mm_slli_pi32 (__m64 __m, int __count) +{ + return (__m64) __builtin_ia32_pslld ((__v2si)__m, __count); +} + +static __inline __m64 __attribute__((__always_inline__)) +_m_pslldi (__m64 __m, int __count) +{ + return _mm_slli_pi32 (__m, __count); +} + + +static __inline __m64 __attribute__((__always_inline__)) +_mm_sll_si64 (__m64 __m, __m64 __count) +{ + return (__m64) __builtin_ia32_psllq ((long long)__m, (long long)__count); +} + +static __inline __m64 __attribute__((__always_inline__)) +_m_psllq (__m64 __m, __m64 __count) +{ + return _mm_sll_si64 (__m, __count); +} + +static __inline __m64 __attribute__((__always_inline__)) +_mm_slli_si64 (__m64 __m, int __count) +{ + return (__m64) __builtin_ia32_psllq ((long long)__m, (long long)__count); +} + +static __inline __m64 __attribute__((__always_inline__)) +_m_psllqi (__m64 __m, int __count) +{ + return _mm_slli_si64 (__m, __count); +} + + +static __inline __m64 __attribute__((__always_inline__)) +_mm_sra_pi16 (__m64 __m, __m64 __count) +{ + return (__m64) __builtin_ia32_psraw ((__v4hi)__m, (long long)__count); +} -# 1 "i420_rgb_c.h" 1 -# 36 "i420_rgb16.c" 2 +static __inline __m64 __attribute__((__always_inline__)) +_m_psraw (__m64 __m, __m64 __count) +{ + return _mm_sra_pi16 (__m, __count); +} +static __inline __m64 __attribute__((__always_inline__)) +_mm_srai_pi16 (__m64 __m, int __count) +{ + return (__m64) __builtin_ia32_psraw ((__v4hi)__m, __count); +} +static __inline __m64 __attribute__((__always_inline__)) +_m_psrawi (__m64 __m, int __count) +{ + return _mm_srai_pi16 (__m, __count); +} +static __inline __m64 __attribute__((__always_inline__)) +_mm_sra_pi32 (__m64 __m, __m64 __count) +{ + return (__m64) __builtin_ia32_psrad ((__v2si)__m, (long long)__count); +} +static __inline __m64 __attribute__((__always_inline__)) +_m_psrad (__m64 __m, __m64 __count) +{ + return _mm_sra_pi32 (__m, __count); +} + +static __inline __m64 __attribute__((__always_inline__)) +_mm_srai_pi32 (__m64 __m, int __count) +{ + return (__m64) __builtin_ia32_psrad ((__v2si)__m, __count); +} + +static __inline __m64 __attribute__((__always_inline__)) +_m_psradi (__m64 __m, int __count) +{ + return _mm_srai_pi32 (__m, __count); +} + + +static __inline __m64 __attribute__((__always_inline__)) +_mm_srl_pi16 (__m64 __m, __m64 __count) +{ + return (__m64) __builtin_ia32_psrlw ((__v4hi)__m, (long long)__count); +} + +static __inline __m64 __attribute__((__always_inline__)) +_m_psrlw (__m64 __m, __m64 __count) +{ + return _mm_srl_pi16 (__m, __count); +} + +static __inline __m64 __attribute__((__always_inline__)) +_mm_srli_pi16 (__m64 __m, int __count) +{ + return (__m64) __builtin_ia32_psrlw ((__v4hi)__m, __count); +} + +static __inline __m64 __attribute__((__always_inline__)) +_m_psrlwi (__m64 __m, int __count) +{ + return _mm_srli_pi16 (__m, __count); +} + + +static __inline __m64 __attribute__((__always_inline__)) +_mm_srl_pi32 (__m64 __m, __m64 __count) +{ + return (__m64) __builtin_ia32_psrld ((__v2si)__m, (long long)__count); +} + +static __inline __m64 __attribute__((__always_inline__)) +_m_psrld (__m64 __m, __m64 __count) +{ + return _mm_srl_pi32 (__m, __count); +} + +static __inline __m64 __attribute__((__always_inline__)) +_mm_srli_pi32 (__m64 __m, int __count) +{ + return (__m64) __builtin_ia32_psrld ((__v2si)__m, __count); +} + +static __inline __m64 __attribute__((__always_inline__)) +_m_psrldi (__m64 __m, int __count) +{ + return _mm_srli_pi32 (__m, __count); +} + + +static __inline __m64 __attribute__((__always_inline__)) +_mm_srl_si64 (__m64 __m, __m64 __count) +{ + return (__m64) __builtin_ia32_psrlq ((long long)__m, (long long)__count); +} + +static __inline __m64 __attribute__((__always_inline__)) +_m_psrlq (__m64 __m, __m64 __count) +{ + return _mm_srl_si64 (__m, __count); +} + +static __inline __m64 __attribute__((__always_inline__)) +_mm_srli_si64 (__m64 __m, int __count) +{ + return (__m64) __builtin_ia32_psrlq ((long long)__m, (long long)__count); +} + +static __inline __m64 __attribute__((__always_inline__)) +_m_psrlqi (__m64 __m, int __count) +{ + return _mm_srli_si64 (__m, __count); +} + + +static __inline __m64 __attribute__((__always_inline__)) +_mm_and_si64 (__m64 __m1, __m64 __m2) +{ + return __builtin_ia32_pand (__m1, __m2); +} + +static __inline __m64 __attribute__((__always_inline__)) +_m_pand (__m64 __m1, __m64 __m2) +{ + return _mm_and_si64 (__m1, __m2); +} + + + +static __inline __m64 __attribute__((__always_inline__)) +_mm_andnot_si64 (__m64 __m1, __m64 __m2) +{ + return __builtin_ia32_pandn (__m1, __m2); +} + +static __inline __m64 __attribute__((__always_inline__)) +_m_pandn (__m64 __m1, __m64 __m2) +{ + return _mm_andnot_si64 (__m1, __m2); +} + + +static __inline __m64 __attribute__((__always_inline__)) +_mm_or_si64 (__m64 __m1, __m64 __m2) +{ + return __builtin_ia32_por (__m1, __m2); +} + +static __inline __m64 __attribute__((__always_inline__)) +_m_por (__m64 __m1, __m64 __m2) +{ + return _mm_or_si64 (__m1, __m2); +} + + +static __inline __m64 __attribute__((__always_inline__)) +_mm_xor_si64 (__m64 __m1, __m64 __m2) +{ + return __builtin_ia32_pxor (__m1, __m2); +} + +static __inline __m64 __attribute__((__always_inline__)) +_m_pxor (__m64 __m1, __m64 __m2) +{ + return _mm_xor_si64 (__m1, __m2); +} + + + +static __inline __m64 __attribute__((__always_inline__)) +_mm_cmpeq_pi8 (__m64 __m1, __m64 __m2) +{ + return (__m64) __builtin_ia32_pcmpeqb ((__v8qi)__m1, (__v8qi)__m2); +} + +static __inline __m64 __attribute__((__always_inline__)) +_m_pcmpeqb (__m64 __m1, __m64 __m2) +{ + return _mm_cmpeq_pi8 (__m1, __m2); +} + +static __inline __m64 __attribute__((__always_inline__)) +_mm_cmpgt_pi8 (__m64 __m1, __m64 __m2) +{ + return (__m64) __builtin_ia32_pcmpgtb ((__v8qi)__m1, (__v8qi)__m2); +} + +static __inline __m64 __attribute__((__always_inline__)) +_m_pcmpgtb (__m64 __m1, __m64 __m2) +{ + return _mm_cmpgt_pi8 (__m1, __m2); +} + + + +static __inline __m64 __attribute__((__always_inline__)) +_mm_cmpeq_pi16 (__m64 __m1, __m64 __m2) +{ + return (__m64) __builtin_ia32_pcmpeqw ((__v4hi)__m1, (__v4hi)__m2); +} + +static __inline __m64 __attribute__((__always_inline__)) +_m_pcmpeqw (__m64 __m1, __m64 __m2) +{ + return _mm_cmpeq_pi16 (__m1, __m2); +} + +static __inline __m64 __attribute__((__always_inline__)) +_mm_cmpgt_pi16 (__m64 __m1, __m64 __m2) +{ + return (__m64) __builtin_ia32_pcmpgtw ((__v4hi)__m1, (__v4hi)__m2); +} + +static __inline __m64 __attribute__((__always_inline__)) +_m_pcmpgtw (__m64 __m1, __m64 __m2) +{ + return _mm_cmpgt_pi16 (__m1, __m2); +} + + + +static __inline __m64 __attribute__((__always_inline__)) +_mm_cmpeq_pi32 (__m64 __m1, __m64 __m2) +{ + return (__m64) __builtin_ia32_pcmpeqd ((__v2si)__m1, (__v2si)__m2); +} + +static __inline __m64 __attribute__((__always_inline__)) +_m_pcmpeqd (__m64 __m1, __m64 __m2) +{ + return _mm_cmpeq_pi32 (__m1, __m2); +} + +static __inline __m64 __attribute__((__always_inline__)) +_mm_cmpgt_pi32 (__m64 __m1, __m64 __m2) +{ + return (__m64) __builtin_ia32_pcmpgtd ((__v2si)__m1, (__v2si)__m2); +} + +static __inline __m64 __attribute__((__always_inline__)) +_m_pcmpgtd (__m64 __m1, __m64 __m2) +{ + return _mm_cmpgt_pi32 (__m1, __m2); +} + + +static __inline __m64 __attribute__((__always_inline__)) +_mm_setzero_si64 (void) +{ + return (__m64)0LL; +} + + +static __inline __m64 __attribute__((__always_inline__)) +_mm_set_pi32 (int __i1, int __i0) +{ + return (__m64) __builtin_ia32_vec_init_v2si (__i0, __i1); +} + + +static __inline __m64 __attribute__((__always_inline__)) +_mm_set_pi16 (short __w3, short __w2, short __w1, short __w0) +{ + return (__m64) __builtin_ia32_vec_init_v4hi (__w0, __w1, __w2, __w3); +} + + +static __inline __m64 __attribute__((__always_inline__)) +_mm_set_pi8 (char __b7, char __b6, char __b5, char __b4, + char __b3, char __b2, char __b1, char __b0) +{ + return (__m64) __builtin_ia32_vec_init_v8qi (__b0, __b1, __b2, __b3, + __b4, __b5, __b6, __b7); +} + + +static __inline __m64 __attribute__((__always_inline__)) +_mm_setr_pi32 (int __i0, int __i1) +{ + return _mm_set_pi32 (__i1, __i0); +} + +static __inline __m64 __attribute__((__always_inline__)) +_mm_setr_pi16 (short __w0, short __w1, short __w2, short __w3) +{ + return _mm_set_pi16 (__w3, __w2, __w1, __w0); +} + +static __inline __m64 __attribute__((__always_inline__)) +_mm_setr_pi8 (char __b0, char __b1, char __b2, char __b3, + char __b4, char __b5, char __b6, char __b7) +{ + return _mm_set_pi8 (__b7, __b6, __b5, __b4, __b3, __b2, __b1, __b0); +} + + +static __inline __m64 __attribute__((__always_inline__)) +_mm_set1_pi32 (int __i) +{ + return _mm_set_pi32 (__i, __i); +} + + +static __inline __m64 __attribute__((__always_inline__)) +_mm_set1_pi16 (short __w) +{ + return _mm_set_pi16 (__w, __w, __w, __w); +} + + +static __inline __m64 __attribute__((__always_inline__)) +_mm_set1_pi8 (char __b) +{ + return _mm_set_pi8 (__b, __b, __b, __b, __b, __b, __b, __b); +} +# 39 "i420_rgb16.c" 2 + +# 1 "i420_rgb_mmx.h" 1 +# 34 "i420_rgb_mmx.h" +static const uint64_t mmx_80w __asm__ ("mmx_80w") __attribute__((used)) = 0x0080008000800080ULL; +static const uint64_t mmx_10w __asm__ ("mmx_10w") __attribute__((used)) = 0x1010101010101010ULL; +static const uint64_t mmx_00ffw __asm__ ("mmx_00ffw") __attribute__((used)) = 0x00ff00ff00ff00ffULL; +static const uint64_t mmx_Y_coeff __asm__ ("mmx_Y_coeff") __attribute__((used)) = 0x253f253f253f253fULL; + +static const uint64_t mmx_U_green __asm__ ("mmx_U_green") __attribute__((used)) = 0xf37df37df37df37dULL; +static const uint64_t mmx_U_blue __asm__ ("mmx_U_blue") __attribute__((used)) = 0x4093409340934093ULL; +static const uint64_t mmx_V_red __asm__ ("mmx_V_red") __attribute__((used)) = 0x3312331233123312ULL; +static const uint64_t mmx_V_green __asm__ ("mmx_V_green") __attribute__((used)) = 0xe5fce5fce5fce5fcULL; + +static const uint64_t mmx_mask_f8 __asm__ ("mmx_mask_f8") __attribute__((used)) = 0xf8f8f8f8f8f8f8f8ULL; +static const uint64_t mmx_mask_fc __asm__ ("mmx_mask_fc") __attribute__((used)) = 0xfcfcfcfcfcfcfcfcULL; +# 41 "i420_rgb16.c" 2 static void SetOffset( int, int, int, int, vlc_bool_t *, @@ -7963,14 +8775,7 @@ int i_scale_count; int i_chroma_width = p_vout->render.i_width / 2; uint16_t * p_pic_start; - - int i_uval, i_vval; - int i_red, i_green, i_blue; - uint16_t * p_yuv = p_vout->chroma.p_sys->p_rgb16; - uint16_t * p_ybase; - - - +# 231 "i420_rgb16.c" uint16_t * p_buffer_start = (uint16_t*)p_vout->chroma.p_sys->p_buffer; uint16_t * p_buffer; @@ -8010,16 +8815,49 @@ { p_pic_start = p_pic; p_buffer = b_hscale ? p_buffer_start : p_pic; +# 280 "i420_rgb16.c" + if( p_vout->output.i_rmask == 0x7c00 ) + { + for ( i_x = p_vout->render.i_width / 8; i_x--; ) + { - for ( i_x = p_vout->render.i_width / 8; i_x--; ) + __m64 mm0, mm1, mm2, mm3, mm4, mm5, mm6, mm7; + uint64_t tmp64; + tmp64 = *(uint32_t *)p_u; mm0 = (__m64)tmp64; tmp64 = *(uint32_t *)p_v; mm1 = (__m64)tmp64; mm4 = (__m64)(uint64_t)0; mm6 = (__m64)*(uint64_t *)p_y; + mm0 = _mm_unpacklo_pi8(mm0, mm4); mm1 = _mm_unpacklo_pi8(mm1, mm4); mm0 = _mm_subs_pi16(mm0, (__m64)mmx_80w); mm1 = _mm_subs_pi16(mm1, (__m64)mmx_80w); mm0 = _mm_slli_pi16(mm0, 3); mm1 = _mm_slli_pi16(mm1, 3); mm2 = mm0; mm3 = mm1; mm2 = _mm_mulhi_pi16(mm2, (__m64)mmx_U_green); mm3 = _mm_mulhi_pi16(mm3, (__m64)mmx_V_green); mm0 = _mm_mulhi_pi16(mm0, (__m64)mmx_U_blue); mm1 = _mm_mulhi_pi16(mm1, (__m64)mmx_V_red); mm2 = _mm_adds_pi16(mm2, mm3); mm6 = _mm_subs_pu8(mm6, (__m64)mmx_10w); mm7 = mm6; mm6 = _mm_and_si64(mm6, (__m64)mmx_00ffw); mm7 = _mm_srli_pi16(mm7, 8); mm6 = _mm_slli_pi16(mm6, 3); mm7 = _mm_slli_pi16(mm7, 3); mm6 = _mm_mulhi_pi16(mm6, (__m64)mmx_Y_coeff); mm7 = _mm_mulhi_pi16(mm7, (__m64)mmx_Y_coeff); + mm3 = mm0; mm4 = mm1; mm5 = mm2; mm0 = _mm_adds_pi16(mm0, mm6); mm3 = _mm_adds_pi16(mm3, mm7); mm1 = _mm_adds_pi16(mm1, mm6); mm4 = _mm_adds_pi16(mm4, mm7); mm2 = _mm_adds_pi16(mm2, mm6); mm5 = _mm_adds_pi16(mm5, mm7); mm0 = _mm_packs_pu16(mm0, mm0); mm1 = _mm_packs_pu16(mm1, mm1); mm2 = _mm_packs_pu16(mm2, mm2); mm3 = _mm_packs_pu16(mm3, mm3); mm4 = _mm_packs_pu16(mm4, mm4); mm5 = _mm_packs_pu16(mm5, mm5); mm0 = _mm_unpacklo_pi8(mm0, mm3); mm1 = _mm_unpacklo_pi8(mm1, mm4); mm2 = _mm_unpacklo_pi8(mm2, mm5); + mm0 = _mm_and_si64(mm0, (__m64)mmx_mask_f8); mm0 = _mm_srli_pi16(mm0, 3); mm2 = _mm_and_si64(mm2, (__m64)mmx_mask_f8); mm1 = _mm_and_si64(mm1, (__m64)mmx_mask_f8); mm1 = _mm_srli_pi16(mm1, 1); mm4 = (__m64)(uint64_t)0; mm5 = mm0; mm7 = mm2; mm2 = _mm_unpacklo_pi8(mm2, mm4); mm0 = _mm_unpacklo_pi8(mm0, mm1); mm2 = _mm_slli_pi16(mm2, 2); mm0 = _mm_or_si64(mm0, mm2); tmp64 = *(uint64_t *)(p_y + 8); mm6 = (__m64)tmp64; *(uint64_t *)p_buffer = (uint64_t)mm0; mm7 = _mm_unpackhi_pi8(mm7, mm4); mm5 = _mm_unpackhi_pi8(mm5, mm1); mm7 = _mm_slli_pi16(mm7, 2); tmp64 = (uint64_t)*(uint32_t *)(p_u + 4); mm0 = (__m64)tmp64; mm5 = _mm_or_si64(mm5, mm7); tmp64 = (uint64_t)*(uint32_t *)(p_v + 4); mm1 = (__m64)tmp64; *(uint64_t *)(p_buffer + 4) = (uint64_t)mm5; +# 303 "i420_rgb16.c" + p_y += 8; + p_u += 4; + p_v += 4; + p_buffer += 8; + } + } + else { - i_uval = *p_u++; i_vval = *p_v++; i_red = (((int)(1.596 * (1<<20) / 1.164)) * i_vval) >> 20; i_green = (((int)(-0.391 * (1<<20) / 1.164)) * i_uval + ((int)(-0.813 * (1<<20) / 1.164)) * i_vval) >> 20; i_blue = (((int)(2.018 * (1<<20) / 1.164)) * i_uval) >> 20; p_ybase = p_yuv + *p_y++; *p_buffer++ = p_ybase[1501 -((((int)(1.596 * (1<<20) / 1.164))*128)>>20) + i_red] | p_ybase[135 -(((((int)(-0.391 * (1<<20) / 1.164))+((int)(-0.813 * (1<<20) / 1.164)))*128)>>20) + i_green ] | p_ybase[818 -((((int)(2.018 * (1<<20) / 1.164))*128)>>20) + i_blue];; p_ybase = p_yuv + *p_y++; *p_buffer++ = p_ybase[1501 -((((int)(1.596 * (1<<20) / 1.164))*128)>>20) + i_red] | p_ybase[135 -(((((int)(-0.391 * (1<<20) / 1.164))+((int)(-0.813 * (1<<20) / 1.164)))*128)>>20) + i_green ] | p_ybase[818 -((((int)(2.018 * (1<<20) / 1.164))*128)>>20) + i_blue];; - i_uval = *p_u++; i_vval = *p_v++; i_red = (((int)(1.596 * (1<<20) / 1.164)) * i_vval) >> 20; i_green = (((int)(-0.391 * (1<<20) / 1.164)) * i_uval + ((int)(-0.813 * (1<<20) / 1.164)) * i_vval) >> 20; i_blue = (((int)(2.018 * (1<<20) / 1.164)) * i_uval) >> 20; p_ybase = p_yuv + *p_y++; *p_buffer++ = p_ybase[1501 -((((int)(1.596 * (1<<20) / 1.164))*128)>>20) + i_red] | p_ybase[135 -(((((int)(-0.391 * (1<<20) / 1.164))+((int)(-0.813 * (1<<20) / 1.164)))*128)>>20) + i_green ] | p_ybase[818 -((((int)(2.018 * (1<<20) / 1.164))*128)>>20) + i_blue];; p_ybase = p_yuv + *p_y++; *p_buffer++ = p_ybase[1501 -((((int)(1.596 * (1<<20) / 1.164))*128)>>20) + i_red] | p_ybase[135 -(((((int)(-0.391 * (1<<20) / 1.164))+((int)(-0.813 * (1<<20) / 1.164)))*128)>>20) + i_green ] | p_ybase[818 -((((int)(2.018 * (1<<20) / 1.164))*128)>>20) + i_blue];; - i_uval = *p_u++; i_vval = *p_v++; i_red = (((int)(1.596 * (1<<20) / 1.164)) * i_vval) >> 20; i_green = (((int)(-0.391 * (1<<20) / 1.164)) * i_uval + ((int)(-0.813 * (1<<20) / 1.164)) * i_vval) >> 20; i_blue = (((int)(2.018 * (1<<20) / 1.164)) * i_uval) >> 20; p_ybase = p_yuv + *p_y++; *p_buffer++ = p_ybase[1501 -((((int)(1.596 * (1<<20) / 1.164))*128)>>20) + i_red] | p_ybase[135 -(((((int)(-0.391 * (1<<20) / 1.164))+((int)(-0.813 * (1<<20) / 1.164)))*128)>>20) + i_green ] | p_ybase[818 -((((int)(2.018 * (1<<20) / 1.164))*128)>>20) + i_blue];; p_ybase = p_yuv + *p_y++; *p_buffer++ = p_ybase[1501 -((((int)(1.596 * (1<<20) / 1.164))*128)>>20) + i_red] | p_ybase[135 -(((((int)(-0.391 * (1<<20) / 1.164))+((int)(-0.813 * (1<<20) / 1.164)))*128)>>20) + i_green ] | p_ybase[818 -((((int)(2.018 * (1<<20) / 1.164))*128)>>20) + i_blue];; - i_uval = *p_u++; i_vval = *p_v++; i_red = (((int)(1.596 * (1<<20) / 1.164)) * i_vval) >> 20; i_green = (((int)(-0.391 * (1<<20) / 1.164)) * i_uval + ((int)(-0.813 * (1<<20) / 1.164)) * i_vval) >> 20; i_blue = (((int)(2.018 * (1<<20) / 1.164)) * i_uval) >> 20; p_ybase = p_yuv + *p_y++; *p_buffer++ = p_ybase[1501 -((((int)(1.596 * (1<<20) / 1.164))*128)>>20) + i_red] | p_ybase[135 -(((((int)(-0.391 * (1<<20) / 1.164))+((int)(-0.813 * (1<<20) / 1.164)))*128)>>20) + i_green ] | p_ybase[818 -((((int)(2.018 * (1<<20) / 1.164))*128)>>20) + i_blue];; p_ybase = p_yuv + *p_y++; *p_buffer++ = p_ybase[1501 -((((int)(1.596 * (1<<20) / 1.164))*128)>>20) + i_red] | p_ybase[135 -(((((int)(-0.391 * (1<<20) / 1.164))+((int)(-0.813 * (1<<20) / 1.164)))*128)>>20) + i_green ] | p_ybase[818 -((((int)(2.018 * (1<<20) / 1.164))*128)>>20) + i_blue];; + + for ( i_x = p_vout->render.i_width / 8; i_x--; ) + { + + __m64 mm0, mm1, mm2, mm3, mm4, mm5, mm6, mm7; + uint64_t tmp64; + tmp64 = *(uint32_t *)p_u; mm0 = (__m64)tmp64; tmp64 = *(uint32_t *)p_v; mm1 = (__m64)tmp64; mm4 = (__m64)(uint64_t)0; mm6 = (__m64)*(uint64_t *)p_y; + mm0 = _mm_unpacklo_pi8(mm0, mm4); mm1 = _mm_unpacklo_pi8(mm1, mm4); mm0 = _mm_subs_pi16(mm0, (__m64)mmx_80w); mm1 = _mm_subs_pi16(mm1, (__m64)mmx_80w); mm0 = _mm_slli_pi16(mm0, 3); mm1 = _mm_slli_pi16(mm1, 3); mm2 = mm0; mm3 = mm1; mm2 = _mm_mulhi_pi16(mm2, (__m64)mmx_U_green); mm3 = _mm_mulhi_pi16(mm3, (__m64)mmx_V_green); mm0 = _mm_mulhi_pi16(mm0, (__m64)mmx_U_blue); mm1 = _mm_mulhi_pi16(mm1, (__m64)mmx_V_red); mm2 = _mm_adds_pi16(mm2, mm3); mm6 = _mm_subs_pu8(mm6, (__m64)mmx_10w); mm7 = mm6; mm6 = _mm_and_si64(mm6, (__m64)mmx_00ffw); mm7 = _mm_srli_pi16(mm7, 8); mm6 = _mm_slli_pi16(mm6, 3); mm7 = _mm_slli_pi16(mm7, 3); mm6 = _mm_mulhi_pi16(mm6, (__m64)mmx_Y_coeff); mm7 = _mm_mulhi_pi16(mm7, (__m64)mmx_Y_coeff); + mm3 = mm0; mm4 = mm1; mm5 = mm2; mm0 = _mm_adds_pi16(mm0, mm6); mm3 = _mm_adds_pi16(mm3, mm7); mm1 = _mm_adds_pi16(mm1, mm6); mm4 = _mm_adds_pi16(mm4, mm7); mm2 = _mm_adds_pi16(mm2, mm6); mm5 = _mm_adds_pi16(mm5, mm7); mm0 = _mm_packs_pu16(mm0, mm0); mm1 = _mm_packs_pu16(mm1, mm1); mm2 = _mm_packs_pu16(mm2, mm2); mm3 = _mm_packs_pu16(mm3, mm3); mm4 = _mm_packs_pu16(mm4, mm4); mm5 = _mm_packs_pu16(mm5, mm5); mm0 = _mm_unpacklo_pi8(mm0, mm3); mm1 = _mm_unpacklo_pi8(mm1, mm4); mm2 = _mm_unpacklo_pi8(mm2, mm5); + mm0 = _mm_and_si64(mm0, (__m64)mmx_mask_f8); mm2 = _mm_and_si64(mm2, (__m64)mmx_mask_fc); mm1 = _mm_and_si64(mm1, (__m64)mmx_mask_f8); mm0 = _mm_srli_pi16(mm0, 3); mm4 = (__m64)(uint64_t)0; mm5 = mm0; mm7 = mm2; mm2 = _mm_unpacklo_pi8(mm2, mm4); mm0 = _mm_unpacklo_pi8(mm0, mm1); mm2 = _mm_slli_pi16(mm2, 3); mm0 = _mm_or_si64(mm0, mm2); tmp64 = *(uint64_t *)(p_y + 8); mm6 = (__m64)tmp64; *(uint64_t *)p_buffer = (uint64_t)mm0; mm7 = _mm_unpackhi_pi8(mm7, mm4); mm5 = _mm_unpackhi_pi8(mm5, mm1); mm7 = _mm_slli_pi16(mm7, 3); tmp64 = (uint64_t)*(uint32_t *)(p_u + 4); mm0 = (__m64)tmp64; mm5 = _mm_or_si64(mm5, mm7); tmp64 = (uint64_t)*(uint32_t *)(p_v + 4); mm1 = (__m64)tmp64; *(uint64_t *)(p_buffer + 4) = (uint64_t)mm5; +# 332 "i420_rgb16.c" + p_y += 8; + p_u += 4; + p_v += 4; + p_buffer += 8; + } } -# 342 "i420_rgb16.c" + + + + if( i_rewind ) { p_y -= i_rewind; @@ -8027,11 +8865,49 @@ p_v -= i_rewind >> 1; p_buffer -= i_rewind; - i_uval = *p_u++; i_vval = *p_v++; i_red = (((int)(1.596 * (1<<20) / 1.164)) * i_vval) >> 20; i_green = (((int)(-0.391 * (1<<20) / 1.164)) * i_uval + ((int)(-0.813 * (1<<20) / 1.164)) * i_vval) >> 20; i_blue = (((int)(2.018 * (1<<20) / 1.164)) * i_uval) >> 20; p_ybase = p_yuv + *p_y++; *p_buffer++ = p_ybase[1501 -((((int)(1.596 * (1<<20) / 1.164))*128)>>20) + i_red] | p_ybase[135 -(((((int)(-0.391 * (1<<20) / 1.164))+((int)(-0.813 * (1<<20) / 1.164)))*128)>>20) + i_green ] | p_ybase[818 -((((int)(2.018 * (1<<20) / 1.164))*128)>>20) + i_blue];; p_ybase = p_yuv + *p_y++; *p_buffer++ = p_ybase[1501 -((((int)(1.596 * (1<<20) / 1.164))*128)>>20) + i_red] | p_ybase[135 -(((((int)(-0.391 * (1<<20) / 1.164))+((int)(-0.813 * (1<<20) / 1.164)))*128)>>20) + i_green ] | p_ybase[818 -((((int)(2.018 * (1<<20) / 1.164))*128)>>20) + i_blue];; - i_uval = *p_u++; i_vval = *p_v++; i_red = (((int)(1.596 * (1<<20) / 1.164)) * i_vval) >> 20; i_green = (((int)(-0.391 * (1<<20) / 1.164)) * i_uval + ((int)(-0.813 * (1<<20) / 1.164)) * i_vval) >> 20; i_blue = (((int)(2.018 * (1<<20) / 1.164)) * i_uval) >> 20; p_ybase = p_yuv + *p_y++; *p_buffer++ = p_ybase[1501 -((((int)(1.596 * (1<<20) / 1.164))*128)>>20) + i_red] | p_ybase[135 -(((((int)(-0.391 * (1<<20) / 1.164))+((int)(-0.813 * (1<<20) / 1.164)))*128)>>20) + i_green ] | p_ybase[818 -((((int)(2.018 * (1<<20) / 1.164))*128)>>20) + i_blue];; p_ybase = p_yuv + *p_y++; *p_buffer++ = p_ybase[1501 -((((int)(1.596 * (1<<20) / 1.164))*128)>>20) + i_red] | p_ybase[135 -(((((int)(-0.391 * (1<<20) / 1.164))+((int)(-0.813 * (1<<20) / 1.164)))*128)>>20) + i_green ] | p_ybase[818 -((((int)(2.018 * (1<<20) / 1.164))*128)>>20) + i_blue];; - i_uval = *p_u++; i_vval = *p_v++; i_red = (((int)(1.596 * (1<<20) / 1.164)) * i_vval) >> 20; i_green = (((int)(-0.391 * (1<<20) / 1.164)) * i_uval + ((int)(-0.813 * (1<<20) / 1.164)) * i_vval) >> 20; i_blue = (((int)(2.018 * (1<<20) / 1.164)) * i_uval) >> 20; p_ybase = p_yuv + *p_y++; *p_buffer++ = p_ybase[1501 -((((int)(1.596 * (1<<20) / 1.164))*128)>>20) + i_red] | p_ybase[135 -(((((int)(-0.391 * (1<<20) / 1.164))+((int)(-0.813 * (1<<20) / 1.164)))*128)>>20) + i_green ] | p_ybase[818 -((((int)(2.018 * (1<<20) / 1.164))*128)>>20) + i_blue];; p_ybase = p_yuv + *p_y++; *p_buffer++ = p_ybase[1501 -((((int)(1.596 * (1<<20) / 1.164))*128)>>20) + i_red] | p_ybase[135 -(((((int)(-0.391 * (1<<20) / 1.164))+((int)(-0.813 * (1<<20) / 1.164)))*128)>>20) + i_green ] | p_ybase[818 -((((int)(2.018 * (1<<20) / 1.164))*128)>>20) + i_blue];; - i_uval = *p_u++; i_vval = *p_v++; i_red = (((int)(1.596 * (1<<20) / 1.164)) * i_vval) >> 20; i_green = (((int)(-0.391 * (1<<20) / 1.164)) * i_uval + ((int)(-0.813 * (1<<20) / 1.164)) * i_vval) >> 20; i_blue = (((int)(2.018 * (1<<20) / 1.164)) * i_uval) >> 20; p_ybase = p_yuv + *p_y++; *p_buffer++ = p_ybase[1501 -((((int)(1.596 * (1<<20) / 1.164))*128)>>20) + i_red] | p_ybase[135 -(((((int)(-0.391 * (1<<20) / 1.164))+((int)(-0.813 * (1<<20) / 1.164)))*128)>>20) + i_green ] | p_ybase[818 -((((int)(2.018 * (1<<20) / 1.164))*128)>>20) + i_blue];; p_ybase = p_yuv + *p_y++; *p_buffer++ = p_ybase[1501 -((((int)(1.596 * (1<<20) / 1.164))*128)>>20) + i_red] | p_ybase[135 -(((((int)(-0.391 * (1<<20) / 1.164))+((int)(-0.813 * (1<<20) / 1.164)))*128)>>20) + i_green ] | p_ybase[818 -((((int)(2.018 * (1<<20) / 1.164))*128)>>20) + i_blue];; -# 399 "i420_rgb16.c" + + + + + + + __m64 mm0, mm1, mm2, mm3, mm4, mm5, mm6, mm7; + uint64_t tmp64; + tmp64 = *(uint32_t *)p_u; mm0 = (__m64)tmp64; tmp64 = *(uint32_t *)p_v; mm1 = (__m64)tmp64; mm4 = (__m64)(uint64_t)0; mm6 = (__m64)*(uint64_t *)p_y; + + + + + + if( p_vout->output.i_rmask == 0x7c00 ) + { + + + mm0 = _mm_unpacklo_pi8(mm0, mm4); mm1 = _mm_unpacklo_pi8(mm1, mm4); mm0 = _mm_subs_pi16(mm0, (__m64)mmx_80w); mm1 = _mm_subs_pi16(mm1, (__m64)mmx_80w); mm0 = _mm_slli_pi16(mm0, 3); mm1 = _mm_slli_pi16(mm1, 3); mm2 = mm0; mm3 = mm1; mm2 = _mm_mulhi_pi16(mm2, (__m64)mmx_U_green); mm3 = _mm_mulhi_pi16(mm3, (__m64)mmx_V_green); mm0 = _mm_mulhi_pi16(mm0, (__m64)mmx_U_blue); mm1 = _mm_mulhi_pi16(mm1, (__m64)mmx_V_red); mm2 = _mm_adds_pi16(mm2, mm3); mm6 = _mm_subs_pu8(mm6, (__m64)mmx_10w); mm7 = mm6; mm6 = _mm_and_si64(mm6, (__m64)mmx_00ffw); mm7 = _mm_srli_pi16(mm7, 8); mm6 = _mm_slli_pi16(mm6, 3); mm7 = _mm_slli_pi16(mm7, 3); mm6 = _mm_mulhi_pi16(mm6, (__m64)mmx_Y_coeff); mm7 = _mm_mulhi_pi16(mm7, (__m64)mmx_Y_coeff); + mm3 = mm0; mm4 = mm1; mm5 = mm2; mm0 = _mm_adds_pi16(mm0, mm6); mm3 = _mm_adds_pi16(mm3, mm7); mm1 = _mm_adds_pi16(mm1, mm6); mm4 = _mm_adds_pi16(mm4, mm7); mm2 = _mm_adds_pi16(mm2, mm6); mm5 = _mm_adds_pi16(mm5, mm7); mm0 = _mm_packs_pu16(mm0, mm0); mm1 = _mm_packs_pu16(mm1, mm1); mm2 = _mm_packs_pu16(mm2, mm2); mm3 = _mm_packs_pu16(mm3, mm3); mm4 = _mm_packs_pu16(mm4, mm4); mm5 = _mm_packs_pu16(mm5, mm5); mm0 = _mm_unpacklo_pi8(mm0, mm3); mm1 = _mm_unpacklo_pi8(mm1, mm4); mm2 = _mm_unpacklo_pi8(mm2, mm5); + mm0 = _mm_and_si64(mm0, (__m64)mmx_mask_f8); mm0 = _mm_srli_pi16(mm0, 3); mm2 = _mm_and_si64(mm2, (__m64)mmx_mask_f8); mm1 = _mm_and_si64(mm1, (__m64)mmx_mask_f8); mm1 = _mm_srli_pi16(mm1, 1); mm4 = (__m64)(uint64_t)0; mm5 = mm0; mm7 = mm2; mm2 = _mm_unpacklo_pi8(mm2, mm4); mm0 = _mm_unpacklo_pi8(mm0, mm1); mm2 = _mm_slli_pi16(mm2, 2); mm0 = _mm_or_si64(mm0, mm2); tmp64 = *(uint64_t *)(p_y + 8); mm6 = (__m64)tmp64; *(uint64_t *)p_buffer = (uint64_t)mm0; mm7 = _mm_unpackhi_pi8(mm7, mm4); mm5 = _mm_unpackhi_pi8(mm5, mm1); mm7 = _mm_slli_pi16(mm7, 2); tmp64 = (uint64_t)*(uint32_t *)(p_u + 4); mm0 = (__m64)tmp64; mm5 = _mm_or_si64(mm5, mm7); tmp64 = (uint64_t)*(uint32_t *)(p_v + 4); mm1 = (__m64)tmp64; *(uint64_t *)(p_buffer + 4) = (uint64_t)mm5; + + + + + + + + } + else + { + + mm0 = _mm_unpacklo_pi8(mm0, mm4); mm1 = _mm_unpacklo_pi8(mm1, mm4); mm0 = _mm_subs_pi16(mm0, (__m64)mmx_80w); mm1 = _mm_subs_pi16(mm1, (__m64)mmx_80w); mm0 = _mm_slli_pi16(mm0, 3); mm1 = _mm_slli_pi16(mm1, 3); mm2 = mm0; mm3 = mm1; mm2 = _mm_mulhi_pi16(mm2, (__m64)mmx_U_green); mm3 = _mm_mulhi_pi16(mm3, (__m64)mmx_V_green); mm0 = _mm_mulhi_pi16(mm0, (__m64)mmx_U_blue); mm1 = _mm_mulhi_pi16(mm1, (__m64)mmx_V_red); mm2 = _mm_adds_pi16(mm2, mm3); mm6 = _mm_subs_pu8(mm6, (__m64)mmx_10w); mm7 = mm6; mm6 = _mm_and_si64(mm6, (__m64)mmx_00ffw); mm7 = _mm_srli_pi16(mm7, 8); mm6 = _mm_slli_pi16(mm6, 3); mm7 = _mm_slli_pi16(mm7, 3); mm6 = _mm_mulhi_pi16(mm6, (__m64)mmx_Y_coeff); mm7 = _mm_mulhi_pi16(mm7, (__m64)mmx_Y_coeff); + mm3 = mm0; mm4 = mm1; mm5 = mm2; mm0 = _mm_adds_pi16(mm0, mm6); mm3 = _mm_adds_pi16(mm3, mm7); mm1 = _mm_adds_pi16(mm1, mm6); mm4 = _mm_adds_pi16(mm4, mm7); mm2 = _mm_adds_pi16(mm2, mm6); mm5 = _mm_adds_pi16(mm5, mm7); mm0 = _mm_packs_pu16(mm0, mm0); mm1 = _mm_packs_pu16(mm1, mm1); mm2 = _mm_packs_pu16(mm2, mm2); mm3 = _mm_packs_pu16(mm3, mm3); mm4 = _mm_packs_pu16(mm4, mm4); mm5 = _mm_packs_pu16(mm5, mm5); mm0 = _mm_unpacklo_pi8(mm0, mm3); mm1 = _mm_unpacklo_pi8(mm1, mm4); mm2 = _mm_unpacklo_pi8(mm2, mm5); + mm0 = _mm_and_si64(mm0, (__m64)mmx_mask_f8); mm2 = _mm_and_si64(mm2, (__m64)mmx_mask_fc); mm1 = _mm_and_si64(mm1, (__m64)mmx_mask_f8); mm0 = _mm_srli_pi16(mm0, 3); mm4 = (__m64)(uint64_t)0; mm5 = mm0; mm7 = mm2; mm2 = _mm_unpacklo_pi8(mm2, mm4); mm0 = _mm_unpacklo_pi8(mm0, mm1); mm2 = _mm_slli_pi16(mm2, 3); mm0 = _mm_or_si64(mm0, mm2); tmp64 = *(uint64_t *)(p_y + 8); mm6 = (__m64)tmp64; *(uint64_t *)p_buffer = (uint64_t)mm0; mm7 = _mm_unpackhi_pi8(mm7, mm4); mm5 = _mm_unpackhi_pi8(mm5, mm1); mm7 = _mm_slli_pi16(mm7, 3); tmp64 = (uint64_t)*(uint32_t *)(p_u + 4); mm0 = (__m64)tmp64; mm5 = _mm_or_si64(mm5, mm7); tmp64 = (uint64_t)*(uint32_t *)(p_v + 4); mm1 = (__m64)tmp64; *(uint64_t *)(p_buffer + 4) = (uint64_t)mm5; +# 392 "i420_rgb16.c" + } + + p_y += 8; + p_u += 4; + p_v += 4; + p_buffer += 8; + } if( b_hscale ) { p_buffer = p_buffer_start; p_offset = p_offset_start; for( i_x = p_vout->output.i_width / 16; i_x--; ) { *p_pic++ = *p_buffer; p_buffer += *p_offset++; *p_pic++ = *p_buffer; p_buffer += *p_offset++; *p_pic++ = *p_buffer; p_buffer += *p_offset++; *p_pic++ = *p_buffer; p_buffer += *p_offset++; *p_pic++ = *p_buffer; p_buffer += *p_offset++; *p_pic++ = *p_buffer; p_buffer += *p_offset++; *p_pic++ = *p_buffer; p_buffer += *p_offset++; *p_pic++ = *p_buffer; p_buffer += *p_offset++; *p_pic++ = *p_buffer; p_buffer += *p_offset++; *p_pic++ = *p_buffer; p_buffer += *p_offset++; *p_pic++ = *p_buffer; p_buffer += *p_offset++; *p_pic++ = *p_buffer; p_buffer += *p_offset++; *p_pic++ = *p_buffer; p_buffer += *p_offset++; *p_pic++ = *p_buffer; p_buffer += *p_offset++; *p_pic++ = *p_buffer; p_buffer += *p_offset++; *p_pic++ = *p_buffer; p_buffer += *p_offset++; } for( i_x = p_vout->output.i_width & 15; i_x--; ) { *p_pic++ = *p_buffer; p_buffer += *p_offset++; } p_pic = (void*)((uint8_t*)p_pic + i_right_margin ); } else { p_pic = (void*)((uint8_t*)p_pic + p_dest->p->i_pitch ); }; if( ((420 == 420) || (420 == 422)) && !(i_y & 0x1) ) { p_u -= i_chroma_width; p_v -= i_chroma_width; } switch( i_vscale ) { case -1: while( (i_scale_count -= p_vout->output.i_height) > 0 ) { p_y += p_vout->render.i_width; i_y++; if( (420 == 420) || (420 == 422) ) { if( i_y & 0x1 ) { p_u += i_chroma_width; p_v += i_chroma_width; } } else if( 420 == 444 ) { p_u += p_vout->render.i_width; p_v += p_vout->render.i_width; } } i_scale_count += p_vout->render.i_height; break; case 1: while( (i_scale_count -= p_vout->render.i_height) > 0 ) { p_vout->p_vlc->pf_memcpy( p_pic, p_pic_start, p_vout->output.i_width * 2 ); p_pic = (void*)((uint8_t*)p_pic + p_dest->p->i_pitch ); } i_scale_count += p_vout->output.i_height; break; }; @@ -8071,14 +8947,7 @@ int i_scale_count; int i_chroma_width = p_vout->render.i_width / 2; uint32_t * p_pic_start; - - int i_uval, i_vval; - int i_red, i_green, i_blue; - uint32_t * p_yuv = p_vout->chroma.p_sys->p_rgb32; - uint32_t * p_ybase; - - - +# 456 "i420_rgb16.c" uint32_t * p_buffer_start = (uint32_t*)p_vout->chroma.p_sys->p_buffer; uint32_t * p_buffer; @@ -8122,11 +8991,24 @@ for ( i_x = p_vout->render.i_width / 8; i_x--; ) { - i_uval = *p_u++; i_vval = *p_v++; i_red = (((int)(1.596 * (1<<20) / 1.164)) * i_vval) >> 20; i_green = (((int)(-0.391 * (1<<20) / 1.164)) * i_uval + ((int)(-0.813 * (1<<20) / 1.164)) * i_vval) >> 20; i_blue = (((int)(2.018 * (1<<20) / 1.164)) * i_uval) >> 20; p_ybase = p_yuv + *p_y++; *p_buffer++ = p_ybase[1501 -((((int)(1.596 * (1<<20) / 1.164))*128)>>20) + i_red] | p_ybase[135 -(((((int)(-0.391 * (1<<20) / 1.164))+((int)(-0.813 * (1<<20) / 1.164)))*128)>>20) + i_green ] | p_ybase[818 -((((int)(2.018 * (1<<20) / 1.164))*128)>>20) + i_blue];; p_ybase = p_yuv + *p_y++; *p_buffer++ = p_ybase[1501 -((((int)(1.596 * (1<<20) / 1.164))*128)>>20) + i_red] | p_ybase[135 -(((((int)(-0.391 * (1<<20) / 1.164))+((int)(-0.813 * (1<<20) / 1.164)))*128)>>20) + i_green ] | p_ybase[818 -((((int)(2.018 * (1<<20) / 1.164))*128)>>20) + i_blue];; - i_uval = *p_u++; i_vval = *p_v++; i_red = (((int)(1.596 * (1<<20) / 1.164)) * i_vval) >> 20; i_green = (((int)(-0.391 * (1<<20) / 1.164)) * i_uval + ((int)(-0.813 * (1<<20) / 1.164)) * i_vval) >> 20; i_blue = (((int)(2.018 * (1<<20) / 1.164)) * i_uval) >> 20; p_ybase = p_yuv + *p_y++; *p_buffer++ = p_ybase[1501 -((((int)(1.596 * (1<<20) / 1.164))*128)>>20) + i_red] | p_ybase[135 -(((((int)(-0.391 * (1<<20) / 1.164))+((int)(-0.813 * (1<<20) / 1.164)))*128)>>20) + i_green ] | p_ybase[818 -((((int)(2.018 * (1<<20) / 1.164))*128)>>20) + i_blue];; p_ybase = p_yuv + *p_y++; *p_buffer++ = p_ybase[1501 -((((int)(1.596 * (1<<20) / 1.164))*128)>>20) + i_red] | p_ybase[135 -(((((int)(-0.391 * (1<<20) / 1.164))+((int)(-0.813 * (1<<20) / 1.164)))*128)>>20) + i_green ] | p_ybase[818 -((((int)(2.018 * (1<<20) / 1.164))*128)>>20) + i_blue];; - i_uval = *p_u++; i_vval = *p_v++; i_red = (((int)(1.596 * (1<<20) / 1.164)) * i_vval) >> 20; i_green = (((int)(-0.391 * (1<<20) / 1.164)) * i_uval + ((int)(-0.813 * (1<<20) / 1.164)) * i_vval) >> 20; i_blue = (((int)(2.018 * (1<<20) / 1.164)) * i_uval) >> 20; p_ybase = p_yuv + *p_y++; *p_buffer++ = p_ybase[1501 -((((int)(1.596 * (1<<20) / 1.164))*128)>>20) + i_red] | p_ybase[135 -(((((int)(-0.391 * (1<<20) / 1.164))+((int)(-0.813 * (1<<20) / 1.164)))*128)>>20) + i_green ] | p_ybase[818 -((((int)(2.018 * (1<<20) / 1.164))*128)>>20) + i_blue];; p_ybase = p_yuv + *p_y++; *p_buffer++ = p_ybase[1501 -((((int)(1.596 * (1<<20) / 1.164))*128)>>20) + i_red] | p_ybase[135 -(((((int)(-0.391 * (1<<20) / 1.164))+((int)(-0.813 * (1<<20) / 1.164)))*128)>>20) + i_green ] | p_ybase[818 -((((int)(2.018 * (1<<20) / 1.164))*128)>>20) + i_blue];; - i_uval = *p_u++; i_vval = *p_v++; i_red = (((int)(1.596 * (1<<20) / 1.164)) * i_vval) >> 20; i_green = (((int)(-0.391 * (1<<20) / 1.164)) * i_uval + ((int)(-0.813 * (1<<20) / 1.164)) * i_vval) >> 20; i_blue = (((int)(2.018 * (1<<20) / 1.164)) * i_uval) >> 20; p_ybase = p_yuv + *p_y++; *p_buffer++ = p_ybase[1501 -((((int)(1.596 * (1<<20) / 1.164))*128)>>20) + i_red] | p_ybase[135 -(((((int)(-0.391 * (1<<20) / 1.164))+((int)(-0.813 * (1<<20) / 1.164)))*128)>>20) + i_green ] | p_ybase[818 -((((int)(2.018 * (1<<20) / 1.164))*128)>>20) + i_blue];; p_ybase = p_yuv + *p_y++; *p_buffer++ = p_ybase[1501 -((((int)(1.596 * (1<<20) / 1.164))*128)>>20) + i_red] | p_ybase[135 -(((((int)(-0.391 * (1<<20) / 1.164))+((int)(-0.813 * (1<<20) / 1.164)))*128)>>20) + i_green ] | p_ybase[818 -((((int)(2.018 * (1<<20) / 1.164))*128)>>20) + i_blue];; -# 527 "i420_rgb16.c" + + + + + + + __m64 mm0, mm1, mm2, mm3, mm4, mm5, mm6, mm7; + uint64_t tmp64; + tmp64 = *(uint32_t *)p_u; mm0 = (__m64)tmp64; *(uint16_t *)p_buffer = 0; tmp64 = *(uint32_t *)p_v; mm1 = (__m64)tmp64; mm4 = (__m64)(uint64_t)0; mm6 = (__m64)*(uint64_t *)p_y; + mm0 = _mm_unpacklo_pi8(mm0, mm4); mm1 = _mm_unpacklo_pi8(mm1, mm4); mm0 = _mm_subs_pi16(mm0, (__m64)mmx_80w); mm1 = _mm_subs_pi16(mm1, (__m64)mmx_80w); mm0 = _mm_slli_pi16(mm0, 3); mm1 = _mm_slli_pi16(mm1, 3); mm2 = mm0; mm3 = mm1; mm2 = _mm_mulhi_pi16(mm2, (__m64)mmx_U_green); mm3 = _mm_mulhi_pi16(mm3, (__m64)mmx_V_green); mm0 = _mm_mulhi_pi16(mm0, (__m64)mmx_U_blue); mm1 = _mm_mulhi_pi16(mm1, (__m64)mmx_V_red); mm2 = _mm_adds_pi16(mm2, mm3); mm6 = _mm_subs_pu8(mm6, (__m64)mmx_10w); mm7 = mm6; mm6 = _mm_and_si64(mm6, (__m64)mmx_00ffw); mm7 = _mm_srli_pi16(mm7, 8); mm6 = _mm_slli_pi16(mm6, 3); mm7 = _mm_slli_pi16(mm7, 3); mm6 = _mm_mulhi_pi16(mm6, (__m64)mmx_Y_coeff); mm7 = _mm_mulhi_pi16(mm7, (__m64)mmx_Y_coeff); + mm3 = mm0; mm4 = mm1; mm5 = mm2; mm0 = _mm_adds_pi16(mm0, mm6); mm3 = _mm_adds_pi16(mm3, mm7); mm1 = _mm_adds_pi16(mm1, mm6); mm4 = _mm_adds_pi16(mm4, mm7); mm2 = _mm_adds_pi16(mm2, mm6); mm5 = _mm_adds_pi16(mm5, mm7); mm0 = _mm_packs_pu16(mm0, mm0); mm1 = _mm_packs_pu16(mm1, mm1); mm2 = _mm_packs_pu16(mm2, mm2); mm3 = _mm_packs_pu16(mm3, mm3); mm4 = _mm_packs_pu16(mm4, mm4); mm5 = _mm_packs_pu16(mm5, mm5); mm0 = _mm_unpacklo_pi8(mm0, mm3); mm1 = _mm_unpacklo_pi8(mm1, mm4); mm2 = _mm_unpacklo_pi8(mm2, mm5); + mm3 = (__m64)(uint64_t)0; mm6 = mm0; mm7 = mm1; mm4 = mm0; mm5 = mm1; mm6 = _mm_unpacklo_pi8(mm6, mm2); mm7 = _mm_unpacklo_pi8(mm7, mm3); mm6 = _mm_unpacklo_pi16(mm6, mm7); *(uint64_t *)p_buffer = (uint64_t)mm6; mm6 = mm0; mm6 = _mm_unpacklo_pi8(mm6, mm2); mm6 = _mm_unpackhi_pi16(mm6, mm7); *(uint64_t *)(p_buffer + 2) = (uint64_t)mm6; mm4 = _mm_unpackhi_pi8(mm4, mm2); mm5 = _mm_unpackhi_pi8(mm5, mm3); mm4 = _mm_unpacklo_pi16(mm4, mm5); *(uint64_t *)(p_buffer + 4) = (uint64_t)mm4; mm4 = mm0; mm4 = _mm_unpackhi_pi8(mm4, mm2); mm4 = _mm_unpackhi_pi16(mm4, mm5); *(uint64_t *)(p_buffer + 6) = (uint64_t)mm4; +# 522 "i420_rgb16.c" + p_y += 8; + p_u += 4; + p_v += 4; + p_buffer += 8; + } @@ -8138,11 +9020,24 @@ p_v -= i_rewind >> 1; p_buffer -= i_rewind; - i_uval = *p_u++; i_vval = *p_v++; i_red = (((int)(1.596 * (1<<20) / 1.164)) * i_vval) >> 20; i_green = (((int)(-0.391 * (1<<20) / 1.164)) * i_uval + ((int)(-0.813 * (1<<20) / 1.164)) * i_vval) >> 20; i_blue = (((int)(2.018 * (1<<20) / 1.164)) * i_uval) >> 20; p_ybase = p_yuv + *p_y++; *p_buffer++ = p_ybase[1501 -((((int)(1.596 * (1<<20) / 1.164))*128)>>20) + i_red] | p_ybase[135 -(((((int)(-0.391 * (1<<20) / 1.164))+((int)(-0.813 * (1<<20) / 1.164)))*128)>>20) + i_green ] | p_ybase[818 -((((int)(2.018 * (1<<20) / 1.164))*128)>>20) + i_blue];; p_ybase = p_yuv + *p_y++; *p_buffer++ = p_ybase[1501 -((((int)(1.596 * (1<<20) / 1.164))*128)>>20) + i_red] | p_ybase[135 -(((((int)(-0.391 * (1<<20) / 1.164))+((int)(-0.813 * (1<<20) / 1.164)))*128)>>20) + i_green ] | p_ybase[818 -((((int)(2.018 * (1<<20) / 1.164))*128)>>20) + i_blue];; - i_uval = *p_u++; i_vval = *p_v++; i_red = (((int)(1.596 * (1<<20) / 1.164)) * i_vval) >> 20; i_green = (((int)(-0.391 * (1<<20) / 1.164)) * i_uval + ((int)(-0.813 * (1<<20) / 1.164)) * i_vval) >> 20; i_blue = (((int)(2.018 * (1<<20) / 1.164)) * i_uval) >> 20; p_ybase = p_yuv + *p_y++; *p_buffer++ = p_ybase[1501 -((((int)(1.596 * (1<<20) / 1.164))*128)>>20) + i_red] | p_ybase[135 -(((((int)(-0.391 * (1<<20) / 1.164))+((int)(-0.813 * (1<<20) / 1.164)))*128)>>20) + i_green ] | p_ybase[818 -((((int)(2.018 * (1<<20) / 1.164))*128)>>20) + i_blue];; p_ybase = p_yuv + *p_y++; *p_buffer++ = p_ybase[1501 -((((int)(1.596 * (1<<20) / 1.164))*128)>>20) + i_red] | p_ybase[135 -(((((int)(-0.391 * (1<<20) / 1.164))+((int)(-0.813 * (1<<20) / 1.164)))*128)>>20) + i_green ] | p_ybase[818 -((((int)(2.018 * (1<<20) / 1.164))*128)>>20) + i_blue];; - i_uval = *p_u++; i_vval = *p_v++; i_red = (((int)(1.596 * (1<<20) / 1.164)) * i_vval) >> 20; i_green = (((int)(-0.391 * (1<<20) / 1.164)) * i_uval + ((int)(-0.813 * (1<<20) / 1.164)) * i_vval) >> 20; i_blue = (((int)(2.018 * (1<<20) / 1.164)) * i_uval) >> 20; p_ybase = p_yuv + *p_y++; *p_buffer++ = p_ybase[1501 -((((int)(1.596 * (1<<20) / 1.164))*128)>>20) + i_red] | p_ybase[135 -(((((int)(-0.391 * (1<<20) / 1.164))+((int)(-0.813 * (1<<20) / 1.164)))*128)>>20) + i_green ] | p_ybase[818 -((((int)(2.018 * (1<<20) / 1.164))*128)>>20) + i_blue];; p_ybase = p_yuv + *p_y++; *p_buffer++ = p_ybase[1501 -((((int)(1.596 * (1<<20) / 1.164))*128)>>20) + i_red] | p_ybase[135 -(((((int)(-0.391 * (1<<20) / 1.164))+((int)(-0.813 * (1<<20) / 1.164)))*128)>>20) + i_green ] | p_ybase[818 -((((int)(2.018 * (1<<20) / 1.164))*128)>>20) + i_blue];; - i_uval = *p_u++; i_vval = *p_v++; i_red = (((int)(1.596 * (1<<20) / 1.164)) * i_vval) >> 20; i_green = (((int)(-0.391 * (1<<20) / 1.164)) * i_uval + ((int)(-0.813 * (1<<20) / 1.164)) * i_vval) >> 20; i_blue = (((int)(2.018 * (1<<20) / 1.164)) * i_uval) >> 20; p_ybase = p_yuv + *p_y++; *p_buffer++ = p_ybase[1501 -((((int)(1.596 * (1<<20) / 1.164))*128)>>20) + i_red] | p_ybase[135 -(((((int)(-0.391 * (1<<20) / 1.164))+((int)(-0.813 * (1<<20) / 1.164)))*128)>>20) + i_green ] | p_ybase[818 -((((int)(2.018 * (1<<20) / 1.164))*128)>>20) + i_blue];; p_ybase = p_yuv + *p_y++; *p_buffer++ = p_ybase[1501 -((((int)(1.596 * (1<<20) / 1.164))*128)>>20) + i_red] | p_ybase[135 -(((((int)(-0.391 * (1<<20) / 1.164))+((int)(-0.813 * (1<<20) / 1.164)))*128)>>20) + i_green ] | p_ybase[818 -((((int)(2.018 * (1<<20) / 1.164))*128)>>20) + i_blue];; -# 566 "i420_rgb16.c" + + + + + + + __m64 mm0, mm1, mm2, mm3, mm4, mm5, mm6, mm7; + uint64_t tmp64; + tmp64 = *(uint32_t *)p_u; mm0 = (__m64)tmp64; *(uint16_t *)p_buffer = 0; tmp64 = *(uint32_t *)p_v; mm1 = (__m64)tmp64; mm4 = (__m64)(uint64_t)0; mm6 = (__m64)*(uint64_t *)p_y; + mm0 = _mm_unpacklo_pi8(mm0, mm4); mm1 = _mm_unpacklo_pi8(mm1, mm4); mm0 = _mm_subs_pi16(mm0, (__m64)mmx_80w); mm1 = _mm_subs_pi16(mm1, (__m64)mmx_80w); mm0 = _mm_slli_pi16(mm0, 3); mm1 = _mm_slli_pi16(mm1, 3); mm2 = mm0; mm3 = mm1; mm2 = _mm_mulhi_pi16(mm2, (__m64)mmx_U_green); mm3 = _mm_mulhi_pi16(mm3, (__m64)mmx_V_green); mm0 = _mm_mulhi_pi16(mm0, (__m64)mmx_U_blue); mm1 = _mm_mulhi_pi16(mm1, (__m64)mmx_V_red); mm2 = _mm_adds_pi16(mm2, mm3); mm6 = _mm_subs_pu8(mm6, (__m64)mmx_10w); mm7 = mm6; mm6 = _mm_and_si64(mm6, (__m64)mmx_00ffw); mm7 = _mm_srli_pi16(mm7, 8); mm6 = _mm_slli_pi16(mm6, 3); mm7 = _mm_slli_pi16(mm7, 3); mm6 = _mm_mulhi_pi16(mm6, (__m64)mmx_Y_coeff); mm7 = _mm_mulhi_pi16(mm7, (__m64)mmx_Y_coeff); + mm3 = mm0; mm4 = mm1; mm5 = mm2; mm0 = _mm_adds_pi16(mm0, mm6); mm3 = _mm_adds_pi16(mm3, mm7); mm1 = _mm_adds_pi16(mm1, mm6); mm4 = _mm_adds_pi16(mm4, mm7); mm2 = _mm_adds_pi16(mm2, mm6); mm5 = _mm_adds_pi16(mm5, mm7); mm0 = _mm_packs_pu16(mm0, mm0); mm1 = _mm_packs_pu16(mm1, mm1); mm2 = _mm_packs_pu16(mm2, mm2); mm3 = _mm_packs_pu16(mm3, mm3); mm4 = _mm_packs_pu16(mm4, mm4); mm5 = _mm_packs_pu16(mm5, mm5); mm0 = _mm_unpacklo_pi8(mm0, mm3); mm1 = _mm_unpacklo_pi8(mm1, mm4); mm2 = _mm_unpacklo_pi8(mm2, mm5); + mm3 = (__m64)(uint64_t)0; mm6 = mm0; mm7 = mm1; mm4 = mm0; mm5 = mm1; mm6 = _mm_unpacklo_pi8(mm6, mm2); mm7 = _mm_unpacklo_pi8(mm7, mm3); mm6 = _mm_unpacklo_pi16(mm6, mm7); *(uint64_t *)p_buffer = (uint64_t)mm6; mm6 = mm0; mm6 = _mm_unpacklo_pi8(mm6, mm2); mm6 = _mm_unpackhi_pi16(mm6, mm7); *(uint64_t *)(p_buffer + 2) = (uint64_t)mm6; mm4 = _mm_unpackhi_pi8(mm4, mm2); mm5 = _mm_unpackhi_pi8(mm5, mm3); mm4 = _mm_unpacklo_pi16(mm4, mm5); *(uint64_t *)(p_buffer + 4) = (uint64_t)mm4; mm4 = mm0; mm4 = _mm_unpackhi_pi8(mm4, mm2); mm4 = _mm_unpackhi_pi16(mm4, mm5); *(uint64_t *)(p_buffer + 6) = (uint64_t)mm4; +# 561 "i420_rgb16.c" + p_y += 8; + p_u += 4; + p_v += 4; + p_buffer += 8; + } if( b_hscale ) { p_buffer = p_buffer_start; p_offset = p_offset_start; for( i_x = p_vout->output.i_width / 16; i_x--; ) { *p_pic++ = *p_buffer; p_buffer += *p_offset++; *p_pic++ = *p_buffer; p_buffer += *p_offset++; *p_pic++ = *p_buffer; p_buffer += *p_offset++; *p_pic++ = *p_buffer; p_buffer += *p_offset++; *p_pic++ = *p_buffer; p_buffer += *p_offset++; *p_pic++ = *p_buffer; p_buffer += *p_offset++; *p_pic++ = *p_buffer; p_buffer += *p_offset++; *p_pic++ = *p_buffer; p_buffer += *p_offset++; *p_pic++ = *p_buffer; p_buffer += *p_offset++; *p_pic++ = *p_buffer; p_buffer += *p_offset++; *p_pic++ = *p_buffer; p_buffer += *p_offset++; *p_pic++ = *p_buffer; p_buffer += *p_offset++; *p_pic++ = *p_buffer; p_buffer += *p_offset++; *p_pic++ = *p_buffer; p_buffer += *p_offset++; *p_pic++ = *p_buffer; p_buffer += *p_offset++; *p_pic++ = *p_buffer; p_buffer += *p_offset++; } for( i_x = p_vout->output.i_width & 15; i_x--; ) { *p_pic++ = *p_buffer; p_buffer += *p_offset++; } p_pic = (void*)((uint8_t*)p_pic + i_right_margin ); } else { p_pic = (void*)((uint8_t*)p_pic + p_dest->p->i_pitch ); }; if( ((420 == 420) || (420 == 422)) && !(i_y & 0x1) ) { p_u -= i_chroma_width; p_v -= i_chroma_width; } switch( i_vscale ) { case -1: while( (i_scale_count -= p_vout->output.i_height) > 0 ) { p_y += p_vout->render.i_width; i_y++; if( (420 == 420) || (420 == 422) ) { if( i_y & 0x1 ) { p_u += i_chroma_width; p_v += i_chroma_width; } } else if( 420 == 444 ) { p_u += p_vout->render.i_width; p_v += p_vout->render.i_width; } } i_scale_count += p_vout->render.i_height; break; case 1: while( (i_scale_count -= p_vout->render.i_height) > 0 ) { p_vout->p_vlc->pf_memcpy( p_pic, p_pic_start, p_vout->output.i_width * 4 ); p_pic = (void*)((uint8_t*)p_pic + p_dest->p->i_pitch ); } i_scale_count += p_vout->output.i_height; break; };