1 | // RUN: %clang_cc1 -ffreestanding -emit-llvm-only -triple x86_64-windows-coff -fdump-record-layouts %s | FileCheck %s --check-prefix=CHECK-MS |
2 | // RUN: %clang_cc1 -ffreestanding -emit-llvm-only -triple x86_64-apple-darwin -fdump-record-layouts %s | FileCheck %s --check-prefix=CHECK-NOTMS |
3 | #include <x86intrin.h> |
4 | |
5 | #pragma pack(1) |
6 | |
7 | struct s_m64 { |
8 | int a; |
9 | __m64 b; |
10 | }; |
11 | typedef struct s_m64 m64; |
12 | |
13 | #if defined(_WIN32) |
14 | static int a1[(sizeof(m64) == 16) - 1]; |
15 | #else |
16 | static int a1[(sizeof(m64) == 12) - 1]; |
17 | #endif |
18 | |
19 | struct s_m128 { |
20 | int a; |
21 | __m128 b; |
22 | }; |
23 | typedef struct s_m128 m128; |
24 | |
25 | #if defined(_WIN32) |
26 | static int a1[(sizeof(m128) == 32) - 1]; |
27 | #else |
28 | static int a1[(sizeof(m128) == 20) - 1]; |
29 | #endif |
30 | |
31 | struct s_m128i { |
32 | int a; |
33 | __m128i b; |
34 | }; |
35 | typedef struct s_m128i m128i; |
36 | |
37 | #if defined(_WIN32) |
38 | static int a1[(sizeof(m128i) == 32) - 1]; |
39 | #else |
40 | static int a1[(sizeof(m128i) == 20) - 1]; |
41 | #endif |
42 | |
43 | struct s_m128d { |
44 | int a; |
45 | __m128d b; |
46 | }; |
47 | typedef struct s_m128d m128d; |
48 | |
49 | #if defined(_WIN32) |
50 | static int a1[(sizeof(m128d) == 32) - 1]; |
51 | #else |
52 | static int a1[(sizeof(m128d) == 20) - 1]; |
53 | #endif |
54 | |
55 | struct s_m256 { |
56 | int a; |
57 | __m256 b; |
58 | }; |
59 | typedef struct s_m256 m256; |
60 | |
61 | #if defined(_WIN32) |
62 | static int a1[(sizeof(m256) == 64) - 1]; |
63 | #else |
64 | static int a1[(sizeof(m256) == 36) - 1]; |
65 | #endif |
66 | |
67 | struct s_m256i { |
68 | int a; |
69 | __m256i b; |
70 | }; |
71 | typedef struct s_m256i m256i; |
72 | |
73 | #if defined(_WIN32) |
74 | static int a1[(sizeof(m256i) == 64) - 1]; |
75 | #else |
76 | static int a1[(sizeof(m256i) == 36) - 1]; |
77 | #endif |
78 | |
79 | struct s_m256d { |
80 | int a; |
81 | __m256d b; |
82 | }; |
83 | typedef struct s_m256d m256d; |
84 | |
85 | #if defined(_WIN32) |
86 | static int a1[(sizeof(m256d) == 64) - 1]; |
87 | #else |
88 | static int a1[(sizeof(m256d) == 36) - 1]; |
89 | #endif |
90 | |
91 | struct s_m512 { |
92 | int a; |
93 | __m512 b; |
94 | }; |
95 | typedef struct s_m512 m512; |
96 | |
97 | #if defined(_WIN32) |
98 | static int a1[(sizeof(m512) == 128) - 1]; |
99 | #else |
100 | static int a1[(sizeof(m512) == 68) - 1]; |
101 | #endif |
102 | |
103 | struct s_m512i { |
104 | int a; |
105 | __m512i b; |
106 | }; |
107 | typedef struct s_m512i m512i; |
108 | |
109 | #if defined(_WIN32) |
110 | static int a1[(sizeof(m512i) == 128) - 1]; |
111 | #else |
112 | static int a1[(sizeof(m512i) == 68) - 1]; |
113 | #endif |
114 | |
115 | struct s_m512d { |
116 | int a; |
117 | __m512d b; |
118 | }; |
119 | typedef struct s_m512d m512d; |
120 | |
121 | #if defined(_WIN32) |
122 | static int a1[(sizeof(m512d) == 128) - 1]; |
123 | #else |
124 | static int a1[(sizeof(m512d) == 68) - 1]; |
125 | #endif |
126 | |
127 | // CHECK-MS: *** Dumping AST Record Layout |
128 | // CHECK-MS: 0 | struct s_m64 |
129 | // CHECK-MS: 0 | int a |
130 | // CHECK-MS: 8 | __m64 b |
131 | // CHECK-MS: | [sizeof=16, align=8] |
132 | // CHECK-MS: *** Dumping AST Record Layout |
133 | // CHECK-MS: 0 | struct s_m128 |
134 | // CHECK-MS: 0 | int a |
135 | // CHECK-MS: 16 | __m128 b |
136 | // CHECK-MS: | [sizeof=32, align=16] |
137 | // CHECK-MS: *** Dumping AST Record Layout |
138 | // CHECK-MS: 0 | struct s_m128i |
139 | // CHECK-MS: 0 | int a |
140 | // CHECK-MS: 16 | __m128i b |
141 | // CHECK-MS: | [sizeof=32, align=16] |
142 | // CHECK-MS: *** Dumping AST Record Layout |
143 | // CHECK-MS: 0 | struct s_m128d |
144 | // CHECK-MS: 0 | int a |
145 | // CHECK-MS: 16 | __m128d b |
146 | // CHECK-MS: | [sizeof=32, align=16] |
147 | // CHECK-MS: *** Dumping AST Record Layout |
148 | // CHECK-MS: 0 | struct s_m256 |
149 | // CHECK-MS: 0 | int a |
150 | // CHECK-MS: 32 | __m256 b |
151 | // CHECK-MS: | [sizeof=64, align=32] |
152 | // CHECK-MS: *** Dumping AST Record Layout |
153 | // CHECK-MS: 0 | struct s_m256i |
154 | // CHECK-MS: 0 | int a |
155 | // CHECK-MS: 32 | __m256i b |
156 | // CHECK-MS: | [sizeof=64, align=32] |
157 | // CHECK-MS: *** Dumping AST Record Layout |
158 | // CHECK-MS: 0 | struct s_m256d |
159 | // CHECK-MS: 0 | int a |
160 | // CHECK-MS: 32 | __m256d b |
161 | // CHECK-MS: | [sizeof=64, align=32] |
162 | // CHECK-MS: *** Dumping AST Record Layout |
163 | // CHECK-MS: 0 | struct s_m512 |
164 | // CHECK-MS: 0 | int a |
165 | // CHECK-MS: 64 | __m512 b |
166 | // CHECK-MS: | [sizeof=128, align=64] |
167 | // CHECK-MS: *** Dumping AST Record Layout |
168 | // CHECK-MS: 0 | struct s_m512i |
169 | // CHECK-MS: 0 | int a |
170 | // CHECK-MS: 64 | __m512i b |
171 | // CHECK-MS: | [sizeof=128, align=64] |
172 | // CHECK-MS: *** Dumping AST Record Layout |
173 | // CHECK-MS: 0 | struct s_m512d |
174 | // CHECK-MS: 0 | int a |
175 | // CHECK-MS: 64 | __m512d b |
176 | // CHECK-MS: | [sizeof=128, align=64] |
177 | |
178 | // CHECK-NOTMS: *** Dumping AST Record Layout |
179 | // CHECK-NOTMS: 0 | struct s_m64 |
180 | // CHECK-NOTMS: 0 | int a |
181 | // CHECK-NOTMS: 4 | __m64 b |
182 | // CHECK-NOTMS: | [sizeof=12, align=1] |
183 | // CHECK-NOTMS: *** Dumping AST Record Layout |
184 | // CHECK-NOTMS: 0 | struct s_m128 |
185 | // CHECK-NOTMS: 0 | int a |
186 | // CHECK-NOTMS: 4 | __m128 b |
187 | // CHECK-NOTMS: | [sizeof=20, align=1] |
188 | // CHECK-NOTMS: *** Dumping AST Record Layout |
189 | // CHECK-NOTMS: 0 | struct s_m128i |
190 | // CHECK-NOTMS: 0 | int a |
191 | // CHECK-NOTMS: 4 | __m128i b |
192 | // CHECK-NOTMS: | [sizeof=20, align=1] |
193 | // CHECK-NOTMS: *** Dumping AST Record Layout |
194 | // CHECK-NOTMS: 0 | struct s_m128d |
195 | // CHECK-NOTMS: 0 | int a |
196 | // CHECK-NOTMS: 4 | __m128d b |
197 | // CHECK-NOTMS: | [sizeof=20, align=1] |
198 | // CHECK-NOTMS: *** Dumping AST Record Layout |
199 | // CHECK-NOTMS: 0 | struct s_m256 |
200 | // CHECK-NOTMS: 0 | int a |
201 | // CHECK-NOTMS: 4 | __m256 b |
202 | // CHECK-NOTMS: | [sizeof=36, align=1] |
203 | // CHECK-NOTMS: *** Dumping AST Record Layout |
204 | // CHECK-NOTMS: 0 | struct s_m256i |
205 | // CHECK-NOTMS: 0 | int a |
206 | // CHECK-NOTMS: 4 | __m256i b |
207 | // CHECK-NOTMS: | [sizeof=36, align=1] |
208 | // CHECK-NOTMS: *** Dumping AST Record Layout |
209 | // CHECK-NOTMS: 0 | struct s_m256d |
210 | // CHECK-NOTMS: 0 | int a |
211 | // CHECK-NOTMS: 4 | __m256d b |
212 | // CHECK-NOTMS: | [sizeof=36, align=1] |
213 | // CHECK-NOTMS: *** Dumping AST Record Layout |
214 | // CHECK-NOTMS: 0 | struct s_m512 |
215 | // CHECK-NOTMS: 0 | int a |
216 | // CHECK-NOTMS: 4 | __m512 b |
217 | // CHECK-NOTMS: | [sizeof=68, align=1] |
218 | // CHECK-NOTMS: *** Dumping AST Record Layout |
219 | // CHECK-NOTMS: 0 | struct s_m512i |
220 | // CHECK-NOTMS: 0 | int a |
221 | // CHECK-NOTMS: 4 | __m512i b |
222 | // CHECK-NOTMS: | [sizeof=68, align=1] |
223 | // CHECK-NOTMS: *** Dumping AST Record Layout |
224 | // CHECK-NOTMS: 0 | struct s_m512d |
225 | // CHECK-NOTMS: 0 | int a |
226 | // CHECK-NOTMS: 4 | __m512d b |
227 | // CHECK-NOTMS: | [sizeof=68, align=1] |
228 | |