rendered paste body--- /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; };