3
3
#include <immintrin.h>
4
4
5
5
// Our travis-ci machines don't support AVX2 so we conditionally compile those bits out
6
+ // Additionally, rust std::arch removed MMX support, so we conditionally compile
7
+ // out uses of __m64 and MMX intrinsics pending an alternative translation
6
8
7
9
typedef struct {
10
+ #ifdef MMX
8
11
__m64 a ;
12
+ #endif
9
13
__m128 b ;
10
14
__m128d c ;
11
15
__m256 d ;
@@ -14,7 +18,9 @@ typedef struct {
14
18
#ifdef __AVX2__
15
19
__m256i i , j , k ;
16
20
#endif
21
+ #ifdef MMX
17
22
__m64 l ;
23
+ #endif
18
24
__m128i m ;
19
25
#ifdef __AVX2__
20
26
__m256i n , p , q ;
@@ -44,21 +50,27 @@ void zero_init_all(void) {
44
50
__m128i d ;
45
51
__m256d e ;
46
52
__m256i f ;
53
+ #ifdef MMX
47
54
__m64 g ;
55
+ #endif
48
56
}
49
57
50
58
ShuffleVectors call_all (void ) {
51
59
__m128 a = _mm_setr_ps (7.8 , 5.6 , 3.4 , 1.2 );
52
60
__m128d b = _mm_set1_pd (4.13 );
61
+ #ifdef MMX
53
62
__m64 c = _mm_set_pi32 (1 , 2 );
63
+ #endif
54
64
__m256 d = _mm256_set1_ps (45.2 );
55
65
__m256d e = _mm256_set_pd (1.1 , 2.2 , 3.3 , 4.4 );
56
66
__m128i f = _mm_set1_epi8 (123 );
57
67
__m256i g = _mm256_set_epi32 (14 , 18 , 22 , 33 , -11 , -3 , 8 , 300 );
58
68
59
69
ShuffleVectors sv = {
70
+ #ifdef MMX
60
71
// Actual Builtin:
61
72
_mm_shuffle_pi16 (c , _MM_SHUFFLE (0 , 1 , 2 , 3 )),
73
+ #endif
62
74
63
75
// Super builtins(in clang 6, but actual in 7):
64
76
_mm_shuffle_ps (a , a , _MM_SHUFFLE (3 , 2 , 1 , 0 )),
@@ -75,7 +87,9 @@ ShuffleVectors call_all(void) {
75
87
_mm256_shufflelo_epi16 (g , _MM_SHUFFLE (2 , 3 , 2 , 3 )),
76
88
#endif
77
89
// Functions:
90
+ #ifdef MMX
78
91
_mm_shuffle_pi8 (c , c ),
92
+ #endif
79
93
_mm_shuffle_epi8 (f , f ),
80
94
#ifdef __AVX2__
81
95
_mm256_shuffle_epi8 (g , g ),
@@ -91,28 +105,36 @@ ShuffleVectors call_all(void) {
91
105
ShuffleVectors call_all_used (void ) {
92
106
__m128 aa = _mm_setr_ps (1.2 , 3.4 , 5.6 , 7.8 );
93
107
__m128d bb = _mm_set1_pd (3.14 );
108
+ #ifdef MMX
94
109
__m64 cc = _mm_set_pi32 (1 , 2 );
110
+ #endif
95
111
__m256 dd = _mm256_set1_ps (3.34 );
96
112
__m256d ee = _mm256_set_pd (4.4 , 3.3 , 2.2 , 1.1 );
97
113
__m128i ff = _mm_set1_epi8 (13 );
98
114
__m256i gg = _mm256_set_epi32 (-12 , 33 , 44 , 100 , -44 , 42 , -33 , -100 );
99
115
116
+ #ifdef MMX
100
117
__m64 a ;
118
+ #endif
101
119
__m128 b ;
102
120
__m128d c ;
103
121
__m256 d ;
104
122
__m256d e ;
105
123
__m128i f , g , h , o ;
106
124
__m256i i , j , k ;
125
+ #ifdef MMX
107
126
__m64 l ;
127
+ #endif
108
128
__m128i m ;
109
129
__m256i n ;
110
130
__m256i p ;
111
131
__m256i q ;
112
132
__m128i r ;
113
133
134
+ #ifdef MMX
114
135
// Actual Builtin:
115
136
a = _mm_shuffle_pi16 (cc , _MM_SHUFFLE (0 , 1 , 2 , 3 ));
137
+ #endif
116
138
117
139
// Super builtins(in clang 6, but actual in 7):
118
140
b = _mm_shuffle_ps (aa , aa , _MM_SHUFFLE (3 , 2 , 1 , 0 ));
@@ -130,7 +152,9 @@ ShuffleVectors call_all_used(void) {
130
152
o = _mm_slli_si128 (g , 2 );
131
153
132
154
// Functions:
155
+ #ifdef MMX
133
156
l = _mm_shuffle_pi8 (cc , cc );
157
+ #endif
134
158
m = _mm_shuffle_epi8 (ff , ff );
135
159
#ifdef __AVX2__
136
160
n = _mm256_shuffle_epi8 (gg , gg );
@@ -140,12 +164,18 @@ ShuffleVectors call_all_used(void) {
140
164
r = _mm_alignr_epi8 (ff , ff , 2 );
141
165
142
166
ShuffleVectors sv = {
143
- a , b , c , d , e , f , g , h , o ,
167
+ #ifdef MMX
168
+ a ,
169
+ #endif
170
+ b , c , d , e , f , g , h , o ,
144
171
145
172
#ifdef __AVX2__
146
173
i , j , k ,
147
174
#endif
148
- l , m ,
175
+ #ifdef MMX
176
+ l ,
177
+ #endif
178
+ m ,
149
179
150
180
#ifdef __AVX2__
151
181
n , p , q ,
0 commit comments