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
19    __attribute__((__gnu_inline__, __always_inline__, __artificial__))
20    _mm_castpd_ps(__m128d __A) {
21  return (__m128)__A;
22}
23
24extern __inline __m128i
25    __attribute__((__gnu_inline__, __always_inline__, __artificial__))
26    _mm_castpd_si128(__m128d __A) {
27  return (__m128i)__A;
28}
29
30extern __inline __m128d
31    __attribute__((__gnu_inline__, __always_inline__, __artificial__))
32    _mm_castps_pd(__m128 __A) {
33  return (__m128d)__A;
34}
35
36extern __inline __m128i
37    __attribute__((__gnu_inline__, __always_inline__, __artificial__))
38    _mm_castps_si128(__m128 __A) {
39  return (__m128i)__A;
40}
41
42extern __inline __m128
43    __attribute__((__gnu_inline__, __always_inline__, __artificial__))
44    _mm_castsi128_ps(__m128i __A) {
45  return (__m128)__A;
46}
47
48extern __inline __m128d
49    __attribute__((__gnu_inline__, __always_inline__, __artificial__))
50    _mm_castsi128_pd(__m128i __A) {
51  return (__m128d)__A;
52}
53#endif
54
55#endif  // VPX_PORTS_EMMINTRIN_COMPAT_H_
56