From: James Zern Date: Thu, 20 Dec 2012 22:46:55 +0000 (-0800) Subject: add emmintrin_compat.h for builds with gcc < 4 X-Git-Tag: v1.3.0~1217^2~2^2 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=9dab3ce624db1d48f231f0ecb16e01d63ae287c5;p=libvpx add emmintrin_compat.h for builds with gcc < 4 Change-Id: If7822e6fcd0d3568b934032322b19ba3e401df26 --- diff --git a/vp8/encoder/x86/denoising_sse2.c b/vp8/encoder/x86/denoising_sse2.c index 87cccaa66..cceb8263f 100644 --- a/vp8/encoder/x86/denoising_sse2.c +++ b/vp8/encoder/x86/denoising_sse2.c @@ -15,6 +15,7 @@ #include "vp8_rtcd.h" #include +#include "vpx_ports/emmintrin_compat.h" union sum_union { __m128i v; diff --git a/vp9/common/x86/vp9_filter_sse2.c b/vp9/common/x86/vp9_filter_sse2.c index 09f8de384..8e02ac197 100644 --- a/vp9/common/x86/vp9_filter_sse2.c +++ b/vp9/common/x86/vp9_filter_sse2.c @@ -11,6 +11,7 @@ #include // for alignment checks #include // SSE2 #include "vp9/common/vp9_filter.h" +#include "vpx_ports/emmintrin_compat.h" #include "vpx_ports/mem.h" // for DECLARE_ALIGNED #include "vp9_rtcd.h" diff --git a/vp9/common/x86/vp9_loopfilter_x86.c b/vp9/common/x86/vp9_loopfilter_x86.c index 54e6b9d74..61b1c77da 100644 --- a/vp9/common/x86/vp9_loopfilter_x86.c +++ b/vp9/common/x86/vp9_loopfilter_x86.c @@ -11,6 +11,7 @@ #include // SSE2 #include "vpx_config.h" #include "vp9/common/vp9_loopfilter.h" +#include "vpx_ports/emmintrin_compat.h" prototype_loopfilter(vp9_loop_filter_vertical_edge_mmx); prototype_loopfilter(vp9_loop_filter_horizontal_edge_mmx); diff --git a/vp9/common/x86/vp9_sadmxn_x86.c b/vp9/common/x86/vp9_sadmxn_x86.c index 0b783ccea..3072d6df8 100644 --- a/vp9/common/x86/vp9_sadmxn_x86.c +++ b/vp9/common/x86/vp9_sadmxn_x86.c @@ -12,6 +12,7 @@ #include "./vpx_config.h" #include "./vp9_rtcd.h" #include "vpx/vpx_integer.h" +#include "vpx_ports/emmintrin_compat.h" #if HAVE_SSE2 unsigned int vp9_sad16x3_sse2( diff --git a/vpx_ports/emmintrin_compat.h b/vpx_ports/emmintrin_compat.h new file mode 100644 index 000000000..782d603af --- /dev/null +++ b/vpx_ports/emmintrin_compat.h @@ -0,0 +1,55 @@ +/* + * Copyright (c) 2012 The WebM project authors. All Rights Reserved. + * + * Use of this source code is governed by a BSD-style license + * that can be found in the LICENSE file in the root of the source + * tree. An additional intellectual property rights grant can be found + * in the file PATENTS. All contributing project authors may + * be found in the AUTHORS file in the root of the source tree. + */ + +#ifndef VPX_PORTS_EMMINTRIN_COMPAT_H +#define VPX_PORTS_EMMINTRIN_COMPAT_H + +#if defined(__GNUC__) && __GNUC__ < 4 +/* From emmintrin.h (gcc 4.5.3) */ +/* Casts between various SP, DP, INT vector types. Note that these do no + conversion of values, they just change the type. */ +extern __inline __m128 __attribute__((__gnu_inline__, __always_inline__, __artificial__)) +_mm_castpd_ps(__m128d __A) +{ + return (__m128) __A; +} + +extern __inline __m128i __attribute__((__gnu_inline__, __always_inline__, __artificial__)) +_mm_castpd_si128(__m128d __A) +{ + return (__m128i) __A; +} + +extern __inline __m128d __attribute__((__gnu_inline__, __always_inline__, __artificial__)) +_mm_castps_pd(__m128 __A) +{ + return (__m128d) __A; +} + +extern __inline __m128i __attribute__((__gnu_inline__, __always_inline__, __artificial__)) +_mm_castps_si128(__m128 __A) +{ + return (__m128i) __A; +} + +extern __inline __m128 __attribute__((__gnu_inline__, __always_inline__, __artificial__)) +_mm_castsi128_ps(__m128i __A) +{ + return (__m128) __A; +} + +extern __inline __m128d __attribute__((__gnu_inline__, __always_inline__, __artificial__)) +_mm_castsi128_pd(__m128i __A) +{ + return (__m128d) __A; +} +#endif + +#endif