1 // RUN: %clang_cc1 -E -dM -triple hexagon-unknown-elf -target-cpu hexagonv5 %s | FileCheck %s -check-prefix CHECK-V5
2 // CHECK-V5: #define __HEXAGON_ARCH__ 5
3 // CHECK-V5: #define __HEXAGON_V5__ 1
4 // CHECK-V5-NOT: #define __HVX_LENGTH__
5 // CHECK-V5-NOT: #define __HVX__ 1
6 // CHECK-V5: #define __hexagon__ 1
7 
8 // RUN: %clang_cc1 -E -dM -triple hexagon-unknown-elf -target-cpu hexagonv55 %s | FileCheck %s -check-prefix CHECK-V55
9 // CHECK-V55: #define __HEXAGON_ARCH__ 55
10 // CHECK-V55: #define __HEXAGON_V55__ 1
11 // CHECK-V55-NOT: #define __HVX_LENGTH__
12 // CHECK-V55-NOT: #define __HVX__ 1
13 // CHECK-V55: #define __hexagon__ 1
14 
15 // RUN: %clang_cc1 -E -dM -triple hexagon-unknown-elf -target-cpu hexagonv60 %s | FileCheck %s -check-prefix CHECK-V60
16 // CHECK-V60: #define __HEXAGON_ARCH__ 60
17 // CHECK-V60: #define __HEXAGON_V60__ 1
18 // CHECK-V60-NOT: #define __HVX_LENGTH__
19 // CHECK-V60-NOT: #define __HVX__ 1
20 // CHECK-V60: #define __hexagon__ 1
21 
22 // RUN: %clang_cc1 -E -dM -triple hexagon-unknown-elf -target-cpu hexagonv62 %s | FileCheck %s -check-prefix CHECK-V62
23 // CHECK-V62: #define __HEXAGON_ARCH__ 62
24 // CHECK-V62: #define __HEXAGON_V62__ 1
25 // CHECK-V62-NOT: #define __HVX_LENGTH__
26 // CHECK-V62-NOT: #define __HVX__ 1
27 // CHECK-V62: #define __hexagon__ 1
28 
29 // RUN: %clang_cc1 -E -dM -triple hexagon-unknown-elf -target-cpu hexagonv65 %s | FileCheck %s -check-prefix CHECK-V65
30 // CHECK-V65: #define __HEXAGON_ARCH__ 65
31 // CHECK-V65: #define __HEXAGON_V65__ 1
32 // CHECK-V65-NOT: #define __HVX_LENGTH__
33 // CHECK-V65-NOT: #define __HVX__ 1
34 // CHECK-V65: #define __hexagon__ 1
35 
36 // RUN: %clang_cc1 -E -dM -triple hexagon-unknown-elf -target-cpu hexagonv66 %s | FileCheck %s -check-prefix CHECK-V66
37 // CHECK-V66: #define __HEXAGON_ARCH__ 66
38 // CHECK-V66: #define __HEXAGON_V66__ 1
39 // CHECK-V66-NOT: #define __HVX_LENGTH__
40 // CHECK-V66-NOT: #define __HVX__ 1
41 // CHECK-V66: #define __hexagon__ 1
42 
43 // The HVX flags are explicitly defined by the driver.
44 // For v60,v62,v65 - 64B mode is default
45 // For v66 and future archs - 128B is default
46 // RUN: %clang_cc1 -E -dM -triple hexagon-unknown-elf -target-cpu hexagonv60 \
47 // RUN: -target-feature +hvxv60 -target-feature +hvx-length64b %s | FileCheck \
48 // RUN: %s -check-prefix CHECK-V60HVX-64B
49 // CHECK-V60HVX-64B: #define __HEXAGON_ARCH__ 60
50 // CHECK-V60HVX-64B: #define __HEXAGON_V60__ 1
51 // CHECK-V60HVX-64B-NOT: #define __HVXDBL__ 1
52 // CHECK-V60HVX-64B: #define __HVX_ARCH__ 60
53 // CHECK-V60HVX-64B: #define __HVX_LENGTH__ 64
54 // CHECK-V60HVX-64B: #define __HVX__ 1
55 // CHECK-V60HVX-64B: #define __hexagon__ 1
56 
57 // RUN: %clang_cc1 -E -dM -triple hexagon-unknown-elf -target-cpu hexagonv60 \
58 // RUN: -target-feature +hvxv60 -target-feature +hvx-length128b %s | FileCheck \
59 // RUN: %s -check-prefix CHECK-V60HVX-128B
60 // CHECK-V60HVX-128B: #define __HEXAGON_ARCH__ 60
61 // CHECK-V60HVX-128B: #define __HEXAGON_V60__ 1
62 // CHECK-V60HVX-128B: #define __HVXDBL__ 1
63 // CHECK-V60HVX-128B: #define __HVX_ARCH__ 60
64 // CHECK-V60HVX-128B: #define __HVX_LENGTH__ 128
65 // CHECK-V60HVX-128B: #define __HVX__ 1
66 // CHECK-V60HVX-128B: #define __hexagon__ 1
67 
68 // RUN: %clang_cc1 -E -dM -triple hexagon-unknown-elf -target-cpu hexagonv66 \
69 // RUN: -target-feature +hvxv66 -target-feature +hvx-length64b %s | FileCheck \
70 // RUN: %s -check-prefix CHECK-V66HVX-64B
71 // CHECK-V66HVX-64B: #define __HEXAGON_ARCH__ 66
72 // CHECK-V66HVX-64B: #define __HEXAGON_V66__ 1
73 // CHECK-V66HVX-64B-NOT: #define __HVXDBL__ 1
74 // CHECK-V66HVX-64B: #define __HVX_ARCH__ 66
75 // CHECK-V66HVX-64B: #define __HVX_LENGTH__ 64
76 // CHECK-V66HVX-64B: #define __HVX__ 1
77 // CHECK-V66HVX-64B: #define __hexagon__ 1
78 
79 // RUN: %clang_cc1 -E -dM -triple hexagon-unknown-elf -target-cpu hexagonv66 \
80 // RUN: -target-feature +hvxv66 -target-feature +hvx-length128b %s | FileCheck \
81 // RUN: %s -check-prefix CHECK-V66HVX-128B
82 // CHECK-V66HVX-128B: #define __HEXAGON_ARCH__ 66
83 // CHECK-V66HVX-128B: #define __HEXAGON_V66__ 1
84 // CHECK-V66HVX-128B: #define __HVXDBL__ 1
85 // CHECK-V66HVX-128B: #define __HVX_ARCH__ 66
86 // CHECK-V66HVX-128B: #define __HVX_LENGTH__ 128
87 // CHECK-V66HVX-128B: #define __HVX__ 1
88 // CHECK-V66HVX-128B: #define __hexagon__ 1
89 
90 // RUN: %clang_cc1 -E -dM -triple hexagon-unknown-elf -target-cpu hexagonv67 \
91 // RUN: -target-feature +hvxv67 -target-feature +hvx-length128b %s | FileCheck \
92 // RUN: %s -check-prefix CHECK-V67HVX-128B
93 // CHECK-V67HVX-128B: #define __HEXAGON_ARCH__ 67
94 // CHECK-V67HVX-128B: #define __HEXAGON_V67__ 1
95 // CHECK-V67HVX-128B: #define __HVX_ARCH__ 67
96 // CHECK-V67HVX-128B: #define __HVX_LENGTH__ 128
97 // CHECK-V67HVX-128B: #define __HVX__ 1
98 // CHECK-V67HVX-128B: #define __hexagon__ 1
99 
100 // RUN: %clang_cc1 -E -dM -triple hexagon-unknown-elf -target-cpu hexagonv67 \
101 // RUN: -target-feature +hvxv67 -target-feature +hvx-length128b %s | FileCheck \
102 // RUN: %s -check-prefix CHECK-ELF
103 // CHECK-ELF: #define __ELF__ 1
104 
105 // RUN: %clang_cc1 -E -dM -triple hexagon-unknown-linux-musl \
106 // RUN: -target-cpu hexagonv67 -target-feature +hvxv67 \
107 // RUN: -target-feature +hvx-length128b %s | FileCheck \
108 // RUN: %s -check-prefix CHECK-LINUX
109 // CHECK-LINUX: #define __gnu_linux__ 1
110 // CHECK-LINUX: #define __linux 1
111 // CHECK-LINUX: #define __linux__ 1
112 // CHECK-LINUX: #define __unix 1
113 // CHECK-LINUX: #define __unix__ 1
114 // CHECK-LINUX: #define linux 1
115 // CHECK-LINUX: #define unix 1
116 
117 // RUN: %clang_cc1 -E -dM -triple hexagon-unknown-linux-musl \
118 // RUN: -target-cpu hexagonv67 -target-feature +hvxv67 \
119 // RUN: -target-feature +hvx-length128b %s | FileCheck \
120 // RUN: %s -check-prefix CHECK-ATOMIC
121 // CHECK-ATOMIC: #define __CLANG_ATOMIC_BOOL_LOCK_FREE 2
122 // CHECK-ATOMIC: #define __CLANG_ATOMIC_CHAR16_T_LOCK_FREE 2
123 // CHECK-ATOMIC: #define __CLANG_ATOMIC_CHAR32_T_LOCK_FREE 2
124 // CHECK-ATOMIC: #define __CLANG_ATOMIC_CHAR_LOCK_FREE 2
125 // CHECK-ATOMIC: #define __CLANG_ATOMIC_INT_LOCK_FREE 2
126 // CHECK-ATOMIC: #define __CLANG_ATOMIC_LLONG_LOCK_FREE 2
127 // CHECK-ATOMIC: #define __CLANG_ATOMIC_LONG_LOCK_FREE 2
128 // CHECK-ATOMIC: #define __CLANG_ATOMIC_POINTER_LOCK_FREE 2
129 // CHECK-ATOMIC: #define __CLANG_ATOMIC_SHORT_LOCK_FREE 2
130 // CHECK-ATOMIC: #define __CLANG_ATOMIC_WCHAR_T_LOCK_FREE 2
131