blob: 1df03db6d07fd187ce2b35d87a2ddd0ec8077658 [file] [log] [blame]
Sam Parkerdf7c6ef2017-01-18 13:52:12 +00001#include "llvm/Support/ARMAttributeParser.h"
Chandler Carruth9a67b072017-06-06 11:06:56 +00002#include "llvm/Support/ARMBuildAttributes.h"
Sam Parkerdf7c6ef2017-01-18 13:52:12 +00003#include "llvm/Support/LEB128.h"
4#include "gtest/gtest.h"
5#include <string>
6
7using namespace llvm;
8
9struct AttributeSection {
10 unsigned Tag;
11 unsigned Value;
12
13 AttributeSection(unsigned tag, unsigned value) : Tag(tag), Value(value) { }
14
15 void write(raw_ostream &OS) {
16 OS.flush();
17 // length = length + "aeabi\0" + TagFile + ByteSize + Tag + Value;
18 // length = 17 bytes
19
20 OS << 'A' << (uint8_t)17 << (uint8_t)0 << (uint8_t)0 << (uint8_t)0;
21 OS << "aeabi" << '\0';
22 OS << (uint8_t)1 << (uint8_t)7 << (uint8_t)0 << (uint8_t)0 << (uint8_t)0;
23 OS << (uint8_t)Tag << (uint8_t)Value;
24
25 }
26};
27
28bool testBuildAttr(unsigned Tag, unsigned Value,
Sam Parker0085af62017-02-01 12:58:57 +000029 unsigned ExpectedTag, unsigned ExpectedValue) {
Sam Parkerdf7c6ef2017-01-18 13:52:12 +000030 std::string buffer;
31 raw_string_ostream OS(buffer);
32 AttributeSection Section(Tag, Value);
33 Section.write(OS);
Sam Parker0085af62017-02-01 12:58:57 +000034 ArrayRef<uint8_t> Bytes(
35 reinterpret_cast<const uint8_t*>(OS.str().c_str()), OS.str().size());
Sam Parkerdf7c6ef2017-01-18 13:52:12 +000036
37 ARMAttributeParser Parser;
38 Parser.Parse(Bytes, true);
39
40 return (Parser.hasAttribute(ExpectedTag) &&
41 Parser.getAttributeValue(ExpectedTag) == ExpectedValue);
42}
43
44bool testTagString(unsigned Tag, const char *name) {
45 return ARMBuildAttrs::AttrTypeAsString(Tag).str() == name;
46}
47
48TEST(CPUArchBuildAttr, testBuildAttr) {
49 EXPECT_TRUE(testTagString(6, "Tag_CPU_arch"));
50
51 EXPECT_TRUE(testBuildAttr(6, 0, ARMBuildAttrs::CPU_arch,
52 ARMBuildAttrs::Pre_v4));
53 EXPECT_TRUE(testBuildAttr(6, 1, ARMBuildAttrs::CPU_arch,
54 ARMBuildAttrs::v4));
55 EXPECT_TRUE(testBuildAttr(6, 2, ARMBuildAttrs::CPU_arch,
56 ARMBuildAttrs::v4T));
57 EXPECT_TRUE(testBuildAttr(6, 3, ARMBuildAttrs::CPU_arch,
58 ARMBuildAttrs::v5T));
59 EXPECT_TRUE(testBuildAttr(6, 4, ARMBuildAttrs::CPU_arch,
60 ARMBuildAttrs::v5TE));
61 EXPECT_TRUE(testBuildAttr(6, 5, ARMBuildAttrs::CPU_arch,
62 ARMBuildAttrs::v5TEJ));
63 EXPECT_TRUE(testBuildAttr(6, 6, ARMBuildAttrs::CPU_arch,
64 ARMBuildAttrs::v6));
65 EXPECT_TRUE(testBuildAttr(6, 7, ARMBuildAttrs::CPU_arch,
66 ARMBuildAttrs::v6KZ));
67 EXPECT_TRUE(testBuildAttr(6, 8, ARMBuildAttrs::CPU_arch,
68 ARMBuildAttrs::v6T2));
69 EXPECT_TRUE(testBuildAttr(6, 9, ARMBuildAttrs::CPU_arch,
70 ARMBuildAttrs::v6K));
71 EXPECT_TRUE(testBuildAttr(6, 10, ARMBuildAttrs::CPU_arch,
72 ARMBuildAttrs::v7));
73 EXPECT_TRUE(testBuildAttr(6, 11, ARMBuildAttrs::CPU_arch,
74 ARMBuildAttrs::v6_M));
75 EXPECT_TRUE(testBuildAttr(6, 12, ARMBuildAttrs::CPU_arch,
76 ARMBuildAttrs::v6S_M));
77 EXPECT_TRUE(testBuildAttr(6, 13, ARMBuildAttrs::CPU_arch,
78 ARMBuildAttrs::v7E_M));
79}
80
81TEST(CPUArchProfileBuildAttr, testBuildAttr) {
82 EXPECT_TRUE(testTagString(7, "Tag_CPU_arch_profile"));
83 EXPECT_TRUE(testBuildAttr(7, 'A', ARMBuildAttrs::CPU_arch_profile,
84 ARMBuildAttrs::ApplicationProfile));
85 EXPECT_TRUE(testBuildAttr(7, 'R', ARMBuildAttrs::CPU_arch_profile,
86 ARMBuildAttrs::RealTimeProfile));
87 EXPECT_TRUE(testBuildAttr(7, 'M', ARMBuildAttrs::CPU_arch_profile,
88 ARMBuildAttrs::MicroControllerProfile));
89 EXPECT_TRUE(testBuildAttr(7, 'S', ARMBuildAttrs::CPU_arch_profile,
90 ARMBuildAttrs::SystemProfile));
91}
92
93TEST(ARMISABuildAttr, testBuildAttr) {
94 EXPECT_TRUE(testTagString(8, "Tag_ARM_ISA_use"));
95 EXPECT_TRUE(testBuildAttr(8, 0, ARMBuildAttrs::ARM_ISA_use,
96 ARMBuildAttrs::Not_Allowed));
97 EXPECT_TRUE(testBuildAttr(8, 1, ARMBuildAttrs::ARM_ISA_use,
98 ARMBuildAttrs::Allowed));
99}
100
101TEST(ThumbISABuildAttr, testBuildAttr) {
102 EXPECT_TRUE(testTagString(9, "Tag_THUMB_ISA_use"));
103 EXPECT_TRUE(testBuildAttr(9, 0, ARMBuildAttrs::THUMB_ISA_use,
104 ARMBuildAttrs::Not_Allowed));
105 EXPECT_TRUE(testBuildAttr(9, 1, ARMBuildAttrs::THUMB_ISA_use,
106 ARMBuildAttrs::Allowed));
107}
108
109TEST(FPArchBuildAttr, testBuildAttr) {
110 EXPECT_TRUE(testTagString(10, "Tag_FP_arch"));
111 EXPECT_TRUE(testBuildAttr(10, 0, ARMBuildAttrs::FP_arch,
112 ARMBuildAttrs::Not_Allowed));
113 EXPECT_TRUE(testBuildAttr(10, 1, ARMBuildAttrs::FP_arch,
114 ARMBuildAttrs::Allowed));
115 EXPECT_TRUE(testBuildAttr(10, 2, ARMBuildAttrs::FP_arch,
116 ARMBuildAttrs::AllowFPv2));
117 EXPECT_TRUE(testBuildAttr(10, 3, ARMBuildAttrs::FP_arch,
118 ARMBuildAttrs::AllowFPv3A));
119 EXPECT_TRUE(testBuildAttr(10, 4, ARMBuildAttrs::FP_arch,
120 ARMBuildAttrs::AllowFPv3B));
121 EXPECT_TRUE(testBuildAttr(10, 5, ARMBuildAttrs::FP_arch,
122 ARMBuildAttrs::AllowFPv4A));
123 EXPECT_TRUE(testBuildAttr(10, 6, ARMBuildAttrs::FP_arch,
124 ARMBuildAttrs::AllowFPv4B));
125 EXPECT_TRUE(testBuildAttr(10, 7, ARMBuildAttrs::FP_arch,
126 ARMBuildAttrs::AllowFPARMv8A));
127 EXPECT_TRUE(testBuildAttr(10, 8, ARMBuildAttrs::FP_arch,
128 ARMBuildAttrs::AllowFPARMv8B));
129}
130
131TEST(WMMXBuildAttr, testBuildAttr) {
132 EXPECT_TRUE(testTagString(11, "Tag_WMMX_arch"));
133 EXPECT_TRUE(testBuildAttr(11, 0, ARMBuildAttrs::WMMX_arch,
134 ARMBuildAttrs::Not_Allowed));
135 EXPECT_TRUE(testBuildAttr(11, 1, ARMBuildAttrs::WMMX_arch,
136 ARMBuildAttrs::AllowWMMXv1));
137 EXPECT_TRUE(testBuildAttr(11, 2, ARMBuildAttrs::WMMX_arch,
138 ARMBuildAttrs::AllowWMMXv2));
139}
140
141TEST(SIMDBuildAttr, testBuildAttr) {
142 EXPECT_TRUE(testTagString(12, "Tag_Advanced_SIMD_arch"));
143 EXPECT_TRUE(testBuildAttr(12, 0, ARMBuildAttrs::Advanced_SIMD_arch,
144 ARMBuildAttrs::Not_Allowed));
145 EXPECT_TRUE(testBuildAttr(12, 1, ARMBuildAttrs::Advanced_SIMD_arch,
146 ARMBuildAttrs::AllowNeon));
147 EXPECT_TRUE(testBuildAttr(12, 2, ARMBuildAttrs::Advanced_SIMD_arch,
148 ARMBuildAttrs::AllowNeon2));
149 EXPECT_TRUE(testBuildAttr(12, 3, ARMBuildAttrs::Advanced_SIMD_arch,
150 ARMBuildAttrs::AllowNeonARMv8));
151 EXPECT_TRUE(testBuildAttr(12, 4, ARMBuildAttrs::Advanced_SIMD_arch,
152 ARMBuildAttrs::AllowNeonARMv8_1a));
153}
154
155TEST(FPHPBuildAttr, testBuildAttr) {
156 EXPECT_TRUE(testTagString(36, "Tag_FP_HP_extension"));
157 EXPECT_TRUE(testBuildAttr(36, 0, ARMBuildAttrs::FP_HP_extension,
158 ARMBuildAttrs::Not_Allowed));
159 EXPECT_TRUE(testBuildAttr(36, 1, ARMBuildAttrs::FP_HP_extension,
160 ARMBuildAttrs::AllowHPFP));
161}
162
163TEST(CPUAlignBuildAttr, testBuildAttr) {
164 EXPECT_TRUE(testTagString(34, "Tag_CPU_unaligned_access"));
165 EXPECT_TRUE(testBuildAttr(34, 0, ARMBuildAttrs::CPU_unaligned_access,
166 ARMBuildAttrs::Not_Allowed));
167 EXPECT_TRUE(testBuildAttr(34, 1, ARMBuildAttrs::CPU_unaligned_access,
168 ARMBuildAttrs::Allowed));
169}
170
171TEST(T2EEBuildAttr, testBuildAttr) {
172 EXPECT_TRUE(testTagString(66, "Tag_T2EE_use"));
173 EXPECT_TRUE(testBuildAttr(66, 0, ARMBuildAttrs::T2EE_use,
174 ARMBuildAttrs::Not_Allowed));
175 EXPECT_TRUE(testBuildAttr(66, 1, ARMBuildAttrs::T2EE_use,
176 ARMBuildAttrs::Allowed));
177}
178
179TEST(VirtualizationBuildAttr, testBuildAttr) {
180 EXPECT_TRUE(testTagString(68, "Tag_Virtualization_use"));
181 EXPECT_TRUE(testBuildAttr(68, 0, ARMBuildAttrs::Virtualization_use,
182 ARMBuildAttrs::Not_Allowed));
183 EXPECT_TRUE(testBuildAttr(68, 1, ARMBuildAttrs::Virtualization_use,
184 ARMBuildAttrs::AllowTZ));
185 EXPECT_TRUE(testBuildAttr(68, 2, ARMBuildAttrs::Virtualization_use,
186 ARMBuildAttrs::AllowVirtualization));
187 EXPECT_TRUE(testBuildAttr(68, 3, ARMBuildAttrs::Virtualization_use,
188 ARMBuildAttrs::AllowTZVirtualization));
189}
190
191TEST(MPBuildAttr, testBuildAttr) {
192 EXPECT_TRUE(testTagString(42, "Tag_MPextension_use"));
193 EXPECT_TRUE(testBuildAttr(42, 0, ARMBuildAttrs::MPextension_use,
194 ARMBuildAttrs::Not_Allowed));
195 EXPECT_TRUE(testBuildAttr(42, 1, ARMBuildAttrs::MPextension_use,
196 ARMBuildAttrs::AllowMP));
197}
198
199TEST(DivBuildAttr, testBuildAttr) {
200 EXPECT_TRUE(testTagString(44, "Tag_DIV_use"));
201 EXPECT_TRUE(testBuildAttr(44, 0, ARMBuildAttrs::DIV_use,
202 ARMBuildAttrs::AllowDIVIfExists));
203 EXPECT_TRUE(testBuildAttr(44, 1, ARMBuildAttrs::DIV_use,
204 ARMBuildAttrs::DisallowDIV));
205 EXPECT_TRUE(testBuildAttr(44, 2, ARMBuildAttrs::DIV_use,
206 ARMBuildAttrs::AllowDIVExt));
207}
208
209TEST(PCS_ConfigBuildAttr, testBuildAttr) {
210 EXPECT_TRUE(testTagString(13, "Tag_PCS_config"));
211 EXPECT_TRUE(testBuildAttr(13, 0, ARMBuildAttrs::PCS_config, 0));
212 EXPECT_TRUE(testBuildAttr(13, 1, ARMBuildAttrs::PCS_config, 1));
213 EXPECT_TRUE(testBuildAttr(13, 2, ARMBuildAttrs::PCS_config, 2));
214 EXPECT_TRUE(testBuildAttr(13, 3, ARMBuildAttrs::PCS_config, 3));
215 EXPECT_TRUE(testBuildAttr(13, 4, ARMBuildAttrs::PCS_config, 4));
216 EXPECT_TRUE(testBuildAttr(13, 5, ARMBuildAttrs::PCS_config, 5));
217 EXPECT_TRUE(testBuildAttr(13, 6, ARMBuildAttrs::PCS_config, 6));
218 EXPECT_TRUE(testBuildAttr(13, 7, ARMBuildAttrs::PCS_config, 7));
219}
220
221TEST(PCS_R9BuildAttr, testBuildAttr) {
222 EXPECT_TRUE(testTagString(14, "Tag_ABI_PCS_R9_use"));
223 EXPECT_TRUE(testBuildAttr(14, 0, ARMBuildAttrs::ABI_PCS_R9_use,
224 ARMBuildAttrs::R9IsGPR));
225 EXPECT_TRUE(testBuildAttr(14, 1, ARMBuildAttrs::ABI_PCS_R9_use,
226 ARMBuildAttrs::R9IsSB));
227 EXPECT_TRUE(testBuildAttr(14, 2, ARMBuildAttrs::ABI_PCS_R9_use,
228 ARMBuildAttrs::R9IsTLSPointer));
229 EXPECT_TRUE(testBuildAttr(14, 3, ARMBuildAttrs::ABI_PCS_R9_use,
230 ARMBuildAttrs::R9Reserved));
231}
232
233TEST(PCS_RWBuildAttr, testBuildAttr) {
234 EXPECT_TRUE(testTagString(15, "Tag_ABI_PCS_RW_data"));
235 EXPECT_TRUE(testBuildAttr(15, 0, ARMBuildAttrs::ABI_PCS_RW_data,
236 ARMBuildAttrs::Not_Allowed));
237 EXPECT_TRUE(testBuildAttr(15, 1, ARMBuildAttrs::ABI_PCS_RW_data,
238 ARMBuildAttrs::AddressRWPCRel));
239 EXPECT_TRUE(testBuildAttr(15, 2, ARMBuildAttrs::ABI_PCS_RW_data,
240 ARMBuildAttrs::AddressRWSBRel));
241 EXPECT_TRUE(testBuildAttr(15, 3, ARMBuildAttrs::ABI_PCS_RW_data,
242 ARMBuildAttrs::AddressRWNone));
243}
244
245TEST(PCS_ROBuildAttr, testBuildAttr) {
246 EXPECT_TRUE(testTagString(16, "Tag_ABI_PCS_RO_data"));
247 EXPECT_TRUE(testBuildAttr(16, 0, ARMBuildAttrs::ABI_PCS_RO_data,
248 ARMBuildAttrs::Not_Allowed));
249 EXPECT_TRUE(testBuildAttr(16, 1, ARMBuildAttrs::ABI_PCS_RO_data,
250 ARMBuildAttrs::AddressROPCRel));
251 EXPECT_TRUE(testBuildAttr(16, 2, ARMBuildAttrs::ABI_PCS_RO_data,
252 ARMBuildAttrs::AddressRONone));
253}
254
255TEST(PCS_GOTBuildAttr, testBuildAttr) {
256 EXPECT_TRUE(testTagString(17, "Tag_ABI_PCS_GOT_use"));
257 EXPECT_TRUE(testBuildAttr(17, 0, ARMBuildAttrs::ABI_PCS_GOT_use,
258 ARMBuildAttrs::Not_Allowed));
259 EXPECT_TRUE(testBuildAttr(17, 1, ARMBuildAttrs::ABI_PCS_GOT_use,
260 ARMBuildAttrs::AddressDirect));
261 EXPECT_TRUE(testBuildAttr(17, 2, ARMBuildAttrs::ABI_PCS_GOT_use,
262 ARMBuildAttrs::AddressGOT));
263}
264
265TEST(PCS_WCharBuildAttr, testBuildAttr) {
266 EXPECT_TRUE(testTagString(18, "Tag_ABI_PCS_wchar_t"));
267 EXPECT_TRUE(testBuildAttr(18, 0, ARMBuildAttrs::ABI_PCS_wchar_t,
268 ARMBuildAttrs::WCharProhibited));
269 EXPECT_TRUE(testBuildAttr(18, 2, ARMBuildAttrs::ABI_PCS_wchar_t,
270 ARMBuildAttrs::WCharWidth2Bytes));
271 EXPECT_TRUE(testBuildAttr(18, 4, ARMBuildAttrs::ABI_PCS_wchar_t,
272 ARMBuildAttrs::WCharWidth4Bytes));
273}
274
275TEST(EnumSizeBuildAttr, testBuildAttr) {
276 EXPECT_TRUE(testTagString(26, "Tag_ABI_enum_size"));
277 EXPECT_TRUE(testBuildAttr(26, 0, ARMBuildAttrs::ABI_enum_size,
278 ARMBuildAttrs::EnumProhibited));
279 EXPECT_TRUE(testBuildAttr(26, 1, ARMBuildAttrs::ABI_enum_size,
280 ARMBuildAttrs::EnumSmallest));
281 EXPECT_TRUE(testBuildAttr(26, 2, ARMBuildAttrs::ABI_enum_size,
282 ARMBuildAttrs::Enum32Bit));
283 EXPECT_TRUE(testBuildAttr(26, 3, ARMBuildAttrs::ABI_enum_size,
284 ARMBuildAttrs::Enum32BitABI));
285}
286
287TEST(AlignNeededBuildAttr, testBuildAttr) {
288 EXPECT_TRUE(testTagString(24, "Tag_ABI_align_needed"));
289 EXPECT_TRUE(testBuildAttr(24, 0, ARMBuildAttrs::ABI_align_needed,
290 ARMBuildAttrs::Not_Allowed));
291 EXPECT_TRUE(testBuildAttr(24, 1, ARMBuildAttrs::ABI_align_needed,
292 ARMBuildAttrs::Align8Byte));
293 EXPECT_TRUE(testBuildAttr(24, 2, ARMBuildAttrs::ABI_align_needed,
294 ARMBuildAttrs::Align4Byte));
295 EXPECT_TRUE(testBuildAttr(24, 3, ARMBuildAttrs::ABI_align_needed,
296 ARMBuildAttrs::AlignReserved));
297}
298
299TEST(AlignPreservedBuildAttr, testBuildAttr) {
300 EXPECT_TRUE(testTagString(25, "Tag_ABI_align_preserved"));
301 EXPECT_TRUE(testBuildAttr(25, 0, ARMBuildAttrs::ABI_align_preserved,
302 ARMBuildAttrs::AlignNotPreserved));
303 EXPECT_TRUE(testBuildAttr(25, 1, ARMBuildAttrs::ABI_align_preserved,
304 ARMBuildAttrs::AlignPreserve8Byte));
305 EXPECT_TRUE(testBuildAttr(25, 2, ARMBuildAttrs::ABI_align_preserved,
306 ARMBuildAttrs::AlignPreserveAll));
307 EXPECT_TRUE(testBuildAttr(25, 3, ARMBuildAttrs::ABI_align_preserved,
308 ARMBuildAttrs::AlignReserved));
309}
310
311TEST(FPRoundingBuildAttr, testBuildAttr) {
312 EXPECT_TRUE(testTagString(19, "Tag_ABI_FP_rounding"));
313 EXPECT_TRUE(testBuildAttr(19, 0, ARMBuildAttrs::ABI_FP_rounding, 0));
314 EXPECT_TRUE(testBuildAttr(19, 1, ARMBuildAttrs::ABI_FP_rounding, 1));
315}
316
317TEST(FPDenormalBuildAttr, testBuildAttr) {
318 EXPECT_TRUE(testTagString(20, "Tag_ABI_FP_denormal"));
319 EXPECT_TRUE(testBuildAttr(20, 0, ARMBuildAttrs::ABI_FP_denormal,
320 ARMBuildAttrs::PositiveZero));
321 EXPECT_TRUE(testBuildAttr(20, 1, ARMBuildAttrs::ABI_FP_denormal,
322 ARMBuildAttrs::IEEEDenormals));
323 EXPECT_TRUE(testBuildAttr(20, 2, ARMBuildAttrs::ABI_FP_denormal,
324 ARMBuildAttrs::PreserveFPSign));
325}
326
327TEST(FPExceptionsBuildAttr, testBuildAttr) {
328 EXPECT_TRUE(testTagString(21, "Tag_ABI_FP_exceptions"));
329 EXPECT_TRUE(testBuildAttr(21, 0, ARMBuildAttrs::ABI_FP_exceptions, 0));
330 EXPECT_TRUE(testBuildAttr(21, 1, ARMBuildAttrs::ABI_FP_exceptions, 1));
331}
332
333TEST(FPUserExceptionsBuildAttr, testBuildAttr) {
334 EXPECT_TRUE(testTagString(22, "Tag_ABI_FP_user_exceptions"));
335 EXPECT_TRUE(testBuildAttr(22, 0, ARMBuildAttrs::ABI_FP_user_exceptions, 0));
336 EXPECT_TRUE(testBuildAttr(22, 1, ARMBuildAttrs::ABI_FP_user_exceptions, 1));
337}
338
339TEST(FPNumberModelBuildAttr, testBuildAttr) {
340 EXPECT_TRUE(testTagString(23, "Tag_ABI_FP_number_model"));
341 EXPECT_TRUE(testBuildAttr(23, 0, ARMBuildAttrs::ABI_FP_number_model,
342 ARMBuildAttrs::Not_Allowed));
343 EXPECT_TRUE(testBuildAttr(23, 1, ARMBuildAttrs::ABI_FP_number_model,
344 ARMBuildAttrs::AllowIEEENormal));
345 EXPECT_TRUE(testBuildAttr(23, 2, ARMBuildAttrs::ABI_FP_number_model,
346 ARMBuildAttrs::AllowRTABI));
347 EXPECT_TRUE(testBuildAttr(23, 3, ARMBuildAttrs::ABI_FP_number_model,
348 ARMBuildAttrs::AllowIEEE754));
349}
350
351TEST(FP16BuildAttr, testBuildAttr) {
352 EXPECT_TRUE(testTagString(38, "Tag_ABI_FP_16bit_format"));
353 EXPECT_TRUE(testBuildAttr(38, 0, ARMBuildAttrs::ABI_FP_16bit_format,
354 ARMBuildAttrs::Not_Allowed));
355 EXPECT_TRUE(testBuildAttr(38, 1, ARMBuildAttrs::ABI_FP_16bit_format,
356 ARMBuildAttrs::FP16FormatIEEE));
357 EXPECT_TRUE(testBuildAttr(38, 2, ARMBuildAttrs::ABI_FP_16bit_format,
358 ARMBuildAttrs::FP16VFP3));
359}
360
361TEST(HardFPBuildAttr, testBuildAttr) {
362 EXPECT_TRUE(testTagString(27, "Tag_ABI_HardFP_use"));
363 EXPECT_TRUE(testBuildAttr(27, 0, ARMBuildAttrs::ABI_HardFP_use,
364 ARMBuildAttrs::HardFPImplied));
365 EXPECT_TRUE(testBuildAttr(27, 1, ARMBuildAttrs::ABI_HardFP_use,
366 ARMBuildAttrs::HardFPSinglePrecision));
367 EXPECT_TRUE(testBuildAttr(27, 2, ARMBuildAttrs::ABI_HardFP_use, 2));
368}
369
370TEST(VFPArgsBuildAttr, testBuildAttr) {
371 EXPECT_TRUE(testTagString(28, "Tag_ABI_VFP_args"));
372 EXPECT_TRUE(testBuildAttr(28, 0, ARMBuildAttrs::ABI_VFP_args,
373 ARMBuildAttrs::BaseAAPCS));
374 EXPECT_TRUE(testBuildAttr(28, 1, ARMBuildAttrs::ABI_VFP_args,
375 ARMBuildAttrs::HardFPAAPCS));
376 EXPECT_TRUE(testBuildAttr(28, 2, ARMBuildAttrs::ABI_VFP_args, 2));
377 EXPECT_TRUE(testBuildAttr(28, 3, ARMBuildAttrs::ABI_VFP_args, 3));
378}
379
380TEST(WMMXArgsBuildAttr, testBuildAttr) {
381 EXPECT_TRUE(testTagString(29, "Tag_ABI_WMMX_args"));
382 EXPECT_TRUE(testBuildAttr(29, 0, ARMBuildAttrs::ABI_WMMX_args, 0));
383 EXPECT_TRUE(testBuildAttr(29, 1, ARMBuildAttrs::ABI_WMMX_args, 1));
384 EXPECT_TRUE(testBuildAttr(29, 2, ARMBuildAttrs::ABI_WMMX_args, 2));
385}