1/*
2 *  Copyright (c) 2012 The WebM project authors. All Rights Reserved.
3 *
4 *  Use of this source code is governed by a BSD-style license
5 *  that can be found in the LICENSE file in the root of the source
6 *  tree. An additional intellectual property rights grant can be found
7 *  in the file PATENTS.  All contributing project authors may
8 *  be found in the AUTHORS file in the root of the source tree.
9 */
10
11#ifndef VPX_PORTS_EMMINTRIN_COMPAT_H_
12#define VPX_PORTS_EMMINTRIN_COMPAT_H_
13
14#if defined(__GNUC__) && __GNUC__ < 4
15/* From emmintrin.h (gcc 4.5.3) */
16/* Casts between various SP, DP, INT vector types.  Note that these do no
17   conversion of values, they just change the type.  */
18extern __inline __m128 __attribute__((__gnu_inline__, __always_inline__, __artificial__))
19_mm_castpd_ps(__m128d __A)
20{
21  return (__m128) __A;
22}
23
24extern __inline __m128i __attribute__((__gnu_inline__, __always_inline__, __artificial__))
25_mm_castpd_si128(__m128d __A)
26{
27  return (__m128i) __A;
28}
29
30extern __inline __m128d __attribute__((__gnu_inline__, __always_inline__, __artificial__))
31_mm_castps_pd(__m128 __A)
32{
33  return (__m128d) __A;
34}
35
36extern __inline __m128i __attribute__((__gnu_inline__, __always_inline__, __artificial__))
37_mm_castps_si128(__m128 __A)
38{
39  return (__m128i) __A;
40}
41
42extern __inline __m128 __attribute__((__gnu_inline__, __always_inline__, __artificial__))
43_mm_castsi128_ps(__m128i __A)
44{
45  return (__m128) __A;
46}
47
48extern __inline __m128d __attribute__((__gnu_inline__, __always_inline__, __artificial__))
49_mm_castsi128_pd(__m128i __A)
50{
51  return (__m128d) __A;
52}
53#endif
54
55#endif  // VPX_PORTS_EMMINTRIN_COMPAT_H_
56