]>
Commit | Line | Data |
---|---|---|
a945c346 | 1 | /* Copyright (C) 2007-2024 Free Software Foundation, Inc. |
21efb4d4 HJ |
2 | |
3 | This file is part of GCC. | |
4 | ||
5 | GCC is free software; you can redistribute it and/or modify | |
6 | it under the terms of the GNU General Public License as published by | |
748086b7 | 7 | the Free Software Foundation; either version 3, or (at your option) |
21efb4d4 HJ |
8 | any later version. |
9 | ||
10 | GCC is distributed in the hope that it will be useful, | |
11 | but WITHOUT ANY WARRANTY; without even the implied warranty of | |
12 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
13 | GNU General Public License for more details. | |
14 | ||
748086b7 JJ |
15 | Under Section 7 of GPL version 3, you are granted additional |
16 | permissions described in the GCC Runtime Library Exception, version | |
17 | 3.1, as published by the Free Software Foundation. | |
21efb4d4 | 18 | |
748086b7 JJ |
19 | You should have received a copy of the GNU General Public License and |
20 | a copy of the GCC Runtime Library Exception along with this program; | |
21 | see the files COPYING3 and COPYING.RUNTIME respectively. If not, see | |
22 | <http://www.gnu.org/licenses/>. */ | |
21efb4d4 HJ |
23 | |
24 | /* Implemented from the specification included in the AMD Programmers | |
25 | Manual Update, version 2.x */ | |
26 | ||
27 | #ifndef _AMMINTRIN_H_INCLUDED | |
28 | #define _AMMINTRIN_H_INCLUDED | |
29 | ||
21efb4d4 HJ |
30 | /* We need definitions from the SSE3, SSE2 and SSE header files*/ |
31 | #include <pmmintrin.h> | |
32 | ||
97db2bf7 ST |
33 | #ifndef __SSE4A__ |
34 | #pragma GCC push_options | |
35 | #pragma GCC target("sse4a") | |
36 | #define __DISABLE_SSE4A__ | |
37 | #endif /* __SSE4A__ */ | |
38 | ||
1359ef39 | 39 | extern __inline void __attribute__((__gnu_inline__, __always_inline__, __artificial__)) |
21efb4d4 HJ |
40 | _mm_stream_sd (double * __P, __m128d __Y) |
41 | { | |
42 | __builtin_ia32_movntsd (__P, (__v2df) __Y); | |
43 | } | |
44 | ||
1359ef39 | 45 | extern __inline void __attribute__((__gnu_inline__, __always_inline__, __artificial__)) |
21efb4d4 HJ |
46 | _mm_stream_ss (float * __P, __m128 __Y) |
47 | { | |
48 | __builtin_ia32_movntss (__P, (__v4sf) __Y); | |
49 | } | |
50 | ||
1359ef39 | 51 | extern __inline __m128i __attribute__((__gnu_inline__, __always_inline__, __artificial__)) |
21efb4d4 HJ |
52 | _mm_extract_si64 (__m128i __X, __m128i __Y) |
53 | { | |
54 | return (__m128i) __builtin_ia32_extrq ((__v2di) __X, (__v16qi) __Y); | |
55 | } | |
56 | ||
8ec3e357 | 57 | #ifdef __OPTIMIZE__ |
1359ef39 | 58 | extern __inline __m128i __attribute__((__gnu_inline__, __always_inline__, __artificial__)) |
46fb8f6b UB |
59 | _mm_extracti_si64 (__m128i __X, unsigned const int __I, unsigned const int __L) |
60 | { | |
61 | return (__m128i) __builtin_ia32_extrqi ((__v2di) __X, __I, __L); | |
62 | } | |
32fe15ec | 63 | #else |
bfcd7233 UB |
64 | #define _mm_extracti_si64(X, I, L) \ |
65 | ((__m128i) __builtin_ia32_extrqi ((__v2di)(__m128i)(X), \ | |
66 | (unsigned int)(I), (unsigned int)(L))) | |
32fe15ec | 67 | #endif |
21efb4d4 | 68 | |
1359ef39 | 69 | extern __inline __m128i __attribute__((__gnu_inline__, __always_inline__, __artificial__)) |
21efb4d4 HJ |
70 | _mm_insert_si64 (__m128i __X,__m128i __Y) |
71 | { | |
72 | return (__m128i) __builtin_ia32_insertq ((__v2di)__X, (__v2di)__Y); | |
73 | } | |
74 | ||
8ec3e357 | 75 | #ifdef __OPTIMIZE__ |
1359ef39 | 76 | extern __inline __m128i __attribute__((__gnu_inline__, __always_inline__, __artificial__)) |
46fb8f6b UB |
77 | _mm_inserti_si64(__m128i __X, __m128i __Y, unsigned const int __I, unsigned const int __L) |
78 | { | |
79 | return (__m128i) __builtin_ia32_insertqi ((__v2di)__X, (__v2di)__Y, __I, __L); | |
80 | } | |
32fe15ec | 81 | #else |
bfcd7233 UB |
82 | #define _mm_inserti_si64(X, Y, I, L) \ |
83 | ((__m128i) __builtin_ia32_insertqi ((__v2di)(__m128i)(X), \ | |
84 | (__v2di)(__m128i)(Y), \ | |
85 | (unsigned int)(I), (unsigned int)(L))) | |
32fe15ec | 86 | #endif |
21efb4d4 | 87 | |
97db2bf7 ST |
88 | #ifdef __DISABLE_SSE4A__ |
89 | #undef __DISABLE_SSE4A__ | |
90 | #pragma GCC pop_options | |
91 | #endif /* __DISABLE_SSE4A__ */ | |
21efb4d4 HJ |
92 | |
93 | #endif /* _AMMINTRIN_H_INCLUDED */ |