blob: 16176383d290de9766ddb1007d3f744020b387d7 [file] [log] [blame]
James Zern9dab3ce2012-12-20 14:46:55 -08001/*
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
James Zernd2f49402013-12-15 18:36:00 -080011#ifndef VPX_PORTS_EMMINTRIN_COMPAT_H_
12#define VPX_PORTS_EMMINTRIN_COMPAT_H_
James Zern9dab3ce2012-12-20 14:46:55 -080013
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
James Zernd2f49402013-12-15 18:36:00 -080055#endif // VPX_PORTS_EMMINTRIN_COMPAT_H_