Home | History | Annotate | Download | only in Preprocessor
      1 // RUN: %clang -target armv8a-none-linux-gnu -x c -E -dM %s -o - | FileCheck -match-full-lines --check-prefix=CHECK-V8A %s
      2 // CHECK-V8A: #define __ARMEL__ 1
      3 // CHECK-V8A: #define __ARM_ARCH 8
      4 // CHECK-V8A: #define __ARM_ARCH_8A__ 1
      5 // CHECK-V8A: #define __ARM_FEATURE_CRC32 1
      6 // CHECK-V8A: #define __ARM_FEATURE_DIRECTED_ROUNDING 1
      7 // CHECK-V8A: #define __ARM_FEATURE_NUMERIC_MAXMIN 1
      8 // CHECK-V8A: #define __ARM_FP 0xE
      9 // CHECK-V8A: #define __ARM_FP16_ARGS 1
     10 // CHECK-V8A: #define __ARM_FP16_FORMAT_IEEE 1
     11 
     12 // RUN: %clang -target armv7a-none-linux-gnu -x c -E -dM %s -o - | FileCheck -match-full-lines --check-prefix=CHECK-V7 %s
     13 // CHECK-V7: #define __ARMEL__ 1
     14 // CHECK-V7: #define __ARM_ARCH 7
     15 // CHECK-V7: #define __ARM_ARCH_7A__ 1
     16 // CHECK-V7-NOT: __ARM_FEATURE_CRC32
     17 // CHECK-V7-NOT: __ARM_FEATURE_NUMERIC_MAXMIN
     18 // CHECK-V7-NOT: __ARM_FEATURE_DIRECTED_ROUNDING
     19 // CHECK-V7: #define __ARM_FP 0xC
     20 
     21 // RUN: %clang -target x86_64-apple-macosx10.10 -arch armv7s -x c -E -dM %s -o - | FileCheck -match-full-lines --check-prefix=CHECK-V7S %s
     22 // CHECK-V7S: #define __ARMEL__ 1
     23 // CHECK-V7S: #define __ARM_ARCH 7
     24 // CHECK-V7S: #define __ARM_ARCH_7S__ 1
     25 // CHECK-V7S-NOT: __ARM_FEATURE_CRC32
     26 // CHECK-V7S-NOT: __ARM_FEATURE_NUMERIC_MAXMIN
     27 // CHECK-V7S-NOT: __ARM_FEATURE_DIRECTED_ROUNDING
     28 // CHECK-V7S: #define __ARM_FP 0xE
     29 
     30 // RUN: %clang -target armv8a -mfloat-abi=hard -x c -E -dM %s | FileCheck -match-full-lines --check-prefix=CHECK-V8-BAREHF %s
     31 // CHECK-V8-BAREHF: #define __ARMEL__ 1
     32 // CHECK-V8-BAREHF: #define __ARM_ARCH 8
     33 // CHECK-V8-BAREHF: #define __ARM_ARCH_8A__ 1
     34 // CHECK-V8-BAREHF: #define __ARM_FEATURE_CRC32 1
     35 // CHECK-V8-BAREHF: #define __ARM_FEATURE_DIRECTED_ROUNDING 1
     36 // CHECK-V8-BAREHF: #define __ARM_FEATURE_NUMERIC_MAXMIN 1
     37 // CHECK-V8-BAREHP: #define __ARM_FP 0xE
     38 // CHECK-V8-BAREHF: #define __ARM_NEON__ 1
     39 // CHECK-V8-BAREHF: #define __ARM_PCS_VFP 1
     40 // CHECK-V8-BAREHF: #define __VFP_FP__ 1
     41 
     42 // RUN: %clang -target armv8a -mfloat-abi=hard -mfpu=fp-armv8 -x c -E -dM %s | FileCheck -match-full-lines --check-prefix=CHECK-V8-BAREHF-FP %s
     43 // CHECK-V8-BAREHF-FP-NOT: __ARM_NEON__ 1
     44 // CHECK-V8-BAREHP-FP: #define __ARM_FP 0xE
     45 // CHECK-V8-BAREHF-FP: #define __VFP_FP__ 1
     46 
     47 // RUN: %clang -target armv8a -mfloat-abi=hard -mfpu=neon-fp-armv8 -x c -E -dM %s | FileCheck -match-full-lines --check-prefix=CHECK-V8-BAREHF-NEON-FP %s
     48 // RUN: %clang -target armv8a -mfloat-abi=hard -mfpu=crypto-neon-fp-armv8 -x c -E -dM %s | FileCheck -match-full-lines --check-prefix=CHECK-V8-BAREHF-NEON-FP %s
     49 // CHECK-V8-BAREHP-NEON-FP: #define __ARM_FP 0xE
     50 // CHECK-V8-BAREHF-NEON-FP: #define __ARM_NEON__ 1
     51 // CHECK-V8-BAREHF-NEON-FP: #define __VFP_FP__ 1
     52 
     53 // RUN: %clang -target armv8a -mnocrc -x c -E -dM %s | FileCheck -match-full-lines --check-prefix=CHECK-V8-NOCRC %s
     54 // CHECK-V8-NOCRC-NOT: __ARM_FEATURE_CRC32 1
     55 
     56 // Check that -mhwdiv works properly for armv8/thumbv8 (enabled by default).
     57 
     58 // RUN: %clang -target armv8 -x c -E -dM %s -o - | FileCheck -match-full-lines --check-prefix=V8 %s
     59 // RUN: %clang -target armv8 -mthumb -x c -E -dM %s -o - | FileCheck -match-full-lines --check-prefix=V8 %s
     60 // RUN: %clang -target armv8-eabi -x c -E -dM %s -o - | FileCheck -match-full-lines --check-prefix=V8 %s
     61 // RUN: %clang -target armv8-eabi -mthumb -x c -E -dM %s -o - | FileCheck -match-full-lines --check-prefix=V8 %s
     62 // V8:#define __ARM_ARCH_EXT_IDIV__ 1
     63 
     64 // RUN: %clang -target armv8 -mhwdiv=none -x c -E -dM %s -o - | FileCheck -match-full-lines --check-prefix=NOHWDIV-V8 %s
     65 // RUN: %clang -target armv8 -mthumb -mhwdiv=none -x c -E -dM %s -o - | FileCheck -match-full-lines --check-prefix=NOHWDIV-V8 %s
     66 // RUN: %clang -target armv8 -mhwdiv=thumb -x c -E -dM %s -o - | FileCheck -match-full-lines --check-prefix=NOHWDIV-V8 %s
     67 // RUN: %clang -target armv8 -mthumb -mhwdiv=arm -x c -E -dM %s -o - | FileCheck -match-full-lines --check-prefix=NOHWDIV-V8 %s
     68 // NOHWDIV-V8-NOT:#define __ARM_ARCH_EXT_IDIV__
     69 
     70 // RUN: %clang -target armv8a -x c -E -dM %s -o - | FileCheck -match-full-lines --check-prefix=V8A %s
     71 // RUN: %clang -target armv8a -mthumb -x c -E -dM %s -o - | FileCheck -match-full-lines --check-prefix=V8A %s
     72 // RUN: %clang -target armv8a-eabi -x c -E -dM %s -o - | FileCheck -match-full-lines --check-prefix=V8A %s
     73 // RUN: %clang -target armv8a-eabi -x c -E -dM %s -o - | FileCheck -match-full-lines --check-prefix=V8A %s
     74 // V8A:#define __ARM_ARCH_EXT_IDIV__ 1
     75 // V8A:#define __ARM_FP 0xE
     76 
     77 // RUN: %clang -target armv8m.base-none-linux-gnu -x c -E -dM %s -o - | FileCheck -match-full-lines --check-prefix=V8M_BASELINE %s
     78 // V8M_BASELINE: #define __ARM_ARCH 8
     79 // V8M_BASELINE: #define __ARM_ARCH_8M_BASE__ 1
     80 // V8M_BASELINE: #define __ARM_ARCH_EXT_IDIV__ 1
     81 // V8M_BASELINE-NOT: __ARM_ARCH_ISA_ARM
     82 // V8M_BASELINE: #define __ARM_ARCH_ISA_THUMB 1
     83 // V8M_BASELINE: #define __ARM_ARCH_PROFILE 'M'
     84 // V8M_BASELINE-NOT: __ARM_FEATURE_CRC32
     85 // V8M_BASELINE-NOT: __ARM_FEATURE_DSP
     86 // V8M_BASELINE-NOT: __ARM_FP 0x{{.*}}
     87 // V8M_BASELINE-NOT: __GCC_HAVE_SYNC_COMPARE_AND_SWAP_1
     88 
     89 // RUN: %clang -target armv8m.main-none-linux-gnu -x c -E -dM %s -o - | FileCheck -match-full-lines --check-prefix=V8M_MAINLINE %s
     90 // V8M_MAINLINE: #define __ARM_ARCH 8
     91 // V8M_MAINLINE: #define __ARM_ARCH_8M_MAIN__ 1
     92 // V8M_MAINLINE: #define __ARM_ARCH_EXT_IDIV__ 1
     93 // V8M_MAINLINE-NOT: __ARM_ARCH_ISA_ARM
     94 // V8M_MAINLINE: #define __ARM_ARCH_ISA_THUMB 2
     95 // V8M_MAINLINE: #define __ARM_ARCH_PROFILE 'M'
     96 // V8M_MAINLINE-NOT: __ARM_FEATURE_CRC32
     97 // V8M_MAINLINE-NOT: __ARM_FEATURE_DSP
     98 // V8M_MAINLINE: #define __ARM_FP 0xE
     99 // V8M_MAINLINE: #define __GCC_HAVE_SYNC_COMPARE_AND_SWAP_1 1
    100 
    101 // RUN: %clang -target arm-none-linux-gnu -march=armv8-m.main+dsp -x c -E -dM %s -o - | FileCheck -match-full-lines --check-prefix=V8M_MAINLINE_DSP %s
    102 // V8M_MAINLINE_DSP: #define __ARM_ARCH 8
    103 // V8M_MAINLINE_DSP: #define __ARM_ARCH_8M_MAIN__ 1
    104 // V8M_MAINLINE_DSP: #define __ARM_ARCH_EXT_IDIV__ 1
    105 // V8M_MAINLINE_DSP-NOT: __ARM_ARCH_ISA_ARM
    106 // V8M_MAINLINE_DSP: #define __ARM_ARCH_ISA_THUMB 2
    107 // V8M_MAINLINE_DSP: #define __ARM_ARCH_PROFILE 'M'
    108 // V8M_MAINLINE_DSP-NOT: __ARM_FEATURE_CRC32
    109 // V8M_MAINLINE_DSP: #define __ARM_FEATURE_DSP 1
    110 // V8M_MAINLINE_DSP: #define __ARM_FP 0xE
    111 // V8M_MAINLINE_DSP: #define __GCC_HAVE_SYNC_COMPARE_AND_SWAP_1 1
    112 
    113 // RUN: %clang -target arm-none-linux-gnu -x c -E -dM %s -o - | FileCheck -match-full-lines --check-prefix=CHECK-DEFS %s
    114 // CHECK-DEFS:#define __ARM_PCS 1
    115 // CHECK-DEFS:#define __ARM_SIZEOF_MINIMAL_ENUM 4
    116 // CHECK-DEFS:#define __ARM_SIZEOF_WCHAR_T 4
    117 
    118 // RUN: %clang -target arm-none-linux-gnu -fno-math-errno -fno-signed-zeros\
    119 // RUN:        -fno-trapping-math -fassociative-math -freciprocal-math\
    120 // RUN:        -x c -E -dM %s -o - | FileCheck -match-full-lines --check-prefix=CHECK-FASTMATH %s
    121 // RUN: %clang -target arm-none-linux-gnu -ffast-math -x c -E -dM %s -o -\
    122 // RUN:        | FileCheck -match-full-lines --check-prefix=CHECK-FASTMATH %s
    123 // CHECK-FASTMATH: #define __ARM_FP_FAST 1
    124 
    125 // RUN: %clang -target arm-none-linux-gnu -fshort-wchar -x c -E -dM %s -o - | FileCheck -match-full-lines --check-prefix=CHECK-SHORTWCHAR %s
    126 // CHECK-SHORTWCHAR:#define __ARM_SIZEOF_WCHAR_T 2
    127 
    128 // RUN: %clang -target arm-none-linux-gnu -fshort-enums -x c -E -dM %s -o - | FileCheck -match-full-lines --check-prefix=CHECK-SHORTENUMS %s
    129 // CHECK-SHORTENUMS:#define __ARM_SIZEOF_MINIMAL_ENUM 1
    130 
    131 // Test that -mhwdiv has the right effect for a target CPU which has hwdiv enabled by default.
    132 // RUN: %clang -target armv7 -mcpu=cortex-a15 -x c -E -dM %s -o - | FileCheck -match-full-lines --check-prefix=HWDIV %s
    133 // RUN: %clang -target armv7 -mthumb -mcpu=cortex-a15 -x c -E -dM %s -o - | FileCheck -match-full-lines --check-prefix=HWDIV %s
    134 // RUN: %clang -target armv7 -mcpu=cortex-a15 -mhwdiv=arm -x c -E -dM %s -o - | FileCheck -match-full-lines --check-prefix=HWDIV %s
    135 // RUN: %clang -target armv7 -mthumb -mcpu=cortex-a15 -mhwdiv=thumb -x c -E -dM %s -o - | FileCheck -match-full-lines --check-prefix=HWDIV %s
    136 // HWDIV:#define __ARM_ARCH_EXT_IDIV__ 1
    137 
    138 // RUN: %clang -target arm -mcpu=cortex-a15 -mhwdiv=thumb -x c -E -dM %s -o - | FileCheck -match-full-lines --check-prefix=NOHWDIV %s
    139 // RUN: %clang -target arm -mthumb -mcpu=cortex-a15 -mhwdiv=arm -x c -E -dM %s -o - | FileCheck -match-full-lines --check-prefix=NOHWDIV %s
    140 // RUN: %clang -target arm -mcpu=cortex-a15 -mhwdiv=none -x c -E -dM %s -o - | FileCheck -match-full-lines --check-prefix=NOHWDIV %s
    141 // RUN: %clang -target arm -mthumb -mcpu=cortex-a15 -mhwdiv=none -x c -E -dM %s -o - | FileCheck -match-full-lines --check-prefix=NOHWDIV %s
    142 // NOHWDIV-NOT:#define __ARM_ARCH_EXT_IDIV__
    143 
    144 
    145 // Check that -mfpu works properly for Cortex-A7 (enabled by default).
    146 // RUN: %clang -target armv7-none-linux-gnueabi -mcpu=cortex-a7 -x c -E -dM %s -o - | FileCheck -match-full-lines --check-prefix=DEFAULTFPU-A7 %s
    147 // RUN: %clang -target armv7-none-linux-gnueabi -mthumb -mcpu=cortex-a7 -x c -E -dM %s -o - | FileCheck -match-full-lines --check-prefix=DEFAULTFPU-A7 %s
    148 // DEFAULTFPU-A7:#define __ARM_FP 0xE
    149 // DEFAULTFPU-A7:#define __ARM_NEON__ 1
    150 // DEFAULTFPU-A7:#define __ARM_VFPV4__ 1
    151 
    152 // RUN: %clang -target armv7-none-linux-gnueabi -mcpu=cortex-a7 -mfpu=none -x c -E -dM %s -o - | FileCheck -match-full-lines --check-prefix=FPUNONE-A7 %s
    153 // RUN: %clang -target armv7-none-linux-gnueabi -mthumb -mcpu=cortex-a7 -mfpu=none -x c -E -dM %s -o - | FileCheck -match-full-lines --check-prefix=FPUNONE-A7 %s
    154 // FPUNONE-A7-NOT:#define __ARM_FP 0x{{.*}}
    155 // FPUNONE-A7-NOT:#define __ARM_NEON__ 1
    156 // FPUNONE-A7-NOT:#define __ARM_VFPV4__ 1
    157 
    158 // RUN: %clang -target armv7-none-linux-gnueabi -mcpu=cortex-a7 -mfpu=vfp4 -x c -E -dM %s -o - | FileCheck -match-full-lines --check-prefix=NONEON-A7 %s
    159 // RUN: %clang -target armv7-none-linux-gnueabi -mthumb -mcpu=cortex-a7 -mfpu=vfp4 -x c -E -dM %s -o - | FileCheck -match-full-lines --check-prefix=NONEON-A7 %s
    160 // NONEON-A7:#define __ARM_FP 0xE
    161 // NONEON-A7-NOT:#define __ARM_NEON__ 1
    162 // NONEON-A7:#define __ARM_VFPV4__ 1
    163 
    164 // Check that -mfpu works properly for Cortex-A5 (enabled by default).
    165 // RUN: %clang -target armv7-none-linux-gnueabi -mcpu=cortex-a5 -x c -E -dM %s -o - | FileCheck -match-full-lines --check-prefix=DEFAULTFPU-A5 %s
    166 // RUN: %clang -target armv7-none-linux-gnueabi -mthumb -mcpu=cortex-a5 -x c -E -dM %s -o - | FileCheck -match-full-lines --check-prefix=DEFAULTFPU-A5 %s
    167 // DEFAULTFPU-A5:#define __ARM_FP 0xE
    168 // DEFAULTFPU-A5:#define __ARM_NEON__ 1
    169 // DEFAULTFPU-A5:#define __ARM_VFPV4__ 1
    170 
    171 // RUN: %clang -target armv7-none-linux-gnueabi -mcpu=cortex-a5 -mfpu=none -x c -E -dM %s -o - | FileCheck -match-full-lines --check-prefix=FPUNONE-A5 %s
    172 // RUN: %clang -target armv7-none-linux-gnueabi -mthumb -mcpu=cortex-a5 -mfpu=none -x c -E -dM %s -o - | FileCheck -match-full-lines --check-prefix=FPUNONE-A5 %s
    173 // FPUNONE-A5-NOT:#define __ARM_FP 0x{{.*}}
    174 // FPUNONE-A5-NOT:#define __ARM_NEON__ 1
    175 // FPUNONE-A5-NOT:#define __ARM_VFPV4__ 1
    176 
    177 // RUN: %clang -target armv7-none-linux-gnueabi -mcpu=cortex-a5 -mfpu=vfp4-d16 -x c -E -dM %s -o - | FileCheck -match-full-lines --check-prefix=NONEON-A5 %s
    178 // RUN: %clang -target armv7-none-linux-gnueabi -mthumb -mcpu=cortex-a5 -mfpu=vfp4-d16 -x c -E -dM %s -o - | FileCheck -match-full-lines --check-prefix=NONEON-A5 %s
    179 // NONEON-A5:#define __ARM_FP 0xE
    180 // NONEON-A5-NOT:#define __ARM_NEON__ 1
    181 // NONEON-A5:#define __ARM_VFPV4__ 1
    182 
    183 // FIXME: add check for further predefines
    184 // Test whether predefines are as expected when targeting ep9312.
    185 // RUN: %clang -target armv4t -mcpu=ep9312 -x c -E -dM %s -o - | FileCheck -match-full-lines --check-prefix=A4T %s
    186 // A4T-NOT:#define __ARM_FEATURE_DSP
    187 // A4T-NOT:#define __ARM_FP 0x{{.*}}
    188 
    189 // Test whether predefines are as expected when targeting arm10tdmi.
    190 // RUN: %clang -target armv5 -mcpu=arm10tdmi -x c -E -dM %s -o - | FileCheck -match-full-lines --check-prefix=A5T %s
    191 // A5T-NOT:#define __ARM_FEATURE_DSP
    192 // A5T-NOT:#define __ARM_FP 0x{{.*}}
    193 
    194 // Test whether predefines are as expected when targeting cortex-a5.
    195 // RUN: %clang -target armv7 -mcpu=cortex-a5 -x c -E -dM %s -o - | FileCheck -match-full-lines --check-prefix=A5 %s
    196 // RUN: %clang -target armv7 -mthumb -mcpu=cortex-a5 -x c -E -dM %s -o - | FileCheck -match-full-lines --check-prefix=A5 %s
    197 // A5:#define __ARM_ARCH 7
    198 // A5:#define __ARM_ARCH_7A__ 1
    199 // A5-NOT:#define __ARM_ARCH_EXT_IDIV__
    200 // A5:#define __ARM_ARCH_PROFILE 'A'
    201 // A5-NOT: #define __ARM_FEATURE_DIRECTED_ROUNDING
    202 // A5:#define __ARM_FEATURE_DSP 1
    203 // A5-NOT: #define __ARM_FEATURE_NUMERIC_MAXMIN
    204 // A5:#define __ARM_FP 0xE
    205 
    206 // Test whether predefines are as expected when targeting cortex-a7.
    207 // RUN: %clang -target armv7k -mcpu=cortex-a7 -x c -E -dM %s -o - | FileCheck -match-full-lines --check-prefix=A7 %s
    208 // RUN: %clang -target armv7k -mthumb -mcpu=cortex-a7 -x c -E -dM %s -o - | FileCheck -match-full-lines --check-prefix=A7 %s
    209 // A7:#define __ARM_ARCH 7
    210 // A7:#define __ARM_ARCH_EXT_IDIV__ 1
    211 // A7:#define __ARM_ARCH_PROFILE 'A'
    212 // A7:#define __ARM_FEATURE_DSP 1
    213 // A7:#define __ARM_FP 0xE
    214 
    215 // Test whether predefines are as expected when targeting cortex-a7.
    216 // RUN: %clang -target x86_64-apple-darwin -arch armv7k -x c -E -dM %s -o - | FileCheck -match-full-lines --check-prefix=ARMV7K %s
    217 // ARMV7K:#define __ARM_ARCH 7
    218 // ARMV7K:#define __ARM_ARCH_EXT_IDIV__ 1
    219 // ARMV7K:#define __ARM_ARCH_PROFILE 'A'
    220 // ARMV7K:#define __ARM_DWARF_EH__ 1
    221 // ARMV7K:#define __ARM_FEATURE_DSP 1
    222 // ARMV7K:#define __ARM_FP 0xE
    223 // ARMV7K:#define __ARM_PCS_VFP 1
    224 
    225 
    226 // Test whether predefines are as expected when targeting cortex-a8.
    227 // RUN: %clang -target armv7 -mcpu=cortex-a8 -x c -E -dM %s -o - | FileCheck -match-full-lines --check-prefix=A8 %s
    228 // RUN: %clang -target armv7 -mthumb -mcpu=cortex-a8 -x c -E -dM %s -o - | FileCheck -match-full-lines --check-prefix=A8 %s
    229 // A8-NOT:#define __ARM_ARCH_EXT_IDIV__
    230 // A8:#define __ARM_FEATURE_DSP 1
    231 // A8:#define __ARM_FP 0xC
    232 
    233 // Test whether predefines are as expected when targeting cortex-a9.
    234 // RUN: %clang -target armv7 -mcpu=cortex-a9 -x c -E -dM %s -o - | FileCheck -match-full-lines --check-prefix=A9 %s
    235 // RUN: %clang -target armv7 -mthumb -mcpu=cortex-a9 -x c -E -dM %s -o - | FileCheck -match-full-lines --check-prefix=A9 %s
    236 // A9-NOT:#define __ARM_ARCH_EXT_IDIV__
    237 // A9:#define __ARM_FEATURE_DSP 1
    238 // A9:#define __ARM_FP 0xE
    239 
    240 
    241 // Check that -mfpu works properly for Cortex-A12 (enabled by default).
    242 // RUN: %clang -target armv7-none-linux-gnueabi -mcpu=cortex-a12 -x c -E -dM %s -o - | FileCheck -match-full-lines --check-prefix=DEFAULTFPU-A12 %s
    243 // RUN: %clang -target armv7-none-linux-gnueabi -mthumb -mcpu=cortex-a12 -x c -E -dM %s -o - | FileCheck -match-full-lines --check-prefix=DEFAULTFPU-A12 %s
    244 // DEFAULTFPU-A12:#define __ARM_FP 0xE
    245 // DEFAULTFPU-A12:#define __ARM_NEON__ 1
    246 // DEFAULTFPU-A12:#define __ARM_VFPV4__ 1
    247 
    248 // RUN: %clang -target armv7-none-linux-gnueabi -mcpu=cortex-a12 -mfpu=none -x c -E -dM %s -o - | FileCheck -match-full-lines --check-prefix=FPUNONE-A12 %s
    249 // RUN: %clang -target armv7-none-linux-gnueabi -mthumb -mcpu=cortex-a12 -mfpu=none -x c -E -dM %s -o - | FileCheck -match-full-lines --check-prefix=FPUNONE-A12 %s
    250 // FPUNONE-A12-NOT:#define __ARM_FP 0x{{.*}}
    251 // FPUNONE-A12-NOT:#define __ARM_NEON__ 1
    252 // FPUNONE-A12-NOT:#define __ARM_VFPV4__ 1
    253 
    254 // Test whether predefines are as expected when targeting cortex-a12.
    255 // RUN: %clang -target armv7 -mcpu=cortex-a12 -x c -E -dM %s -o - | FileCheck -match-full-lines --check-prefix=A12 %s
    256 // RUN: %clang -target armv7 -mthumb -mcpu=cortex-a12 -x c -E -dM %s -o - | FileCheck -match-full-lines --check-prefix=A12 %s
    257 // A12:#define __ARM_ARCH 7
    258 // A12:#define __ARM_ARCH_7A__ 1
    259 // A12:#define __ARM_ARCH_EXT_IDIV__ 1
    260 // A12:#define __ARM_ARCH_PROFILE 'A'
    261 // A12:#define __ARM_FEATURE_DSP 1
    262 // A12:#define __ARM_FP 0xE
    263 
    264 // Test whether predefines are as expected when targeting cortex-a15.
    265 // RUN: %clang -target armv7 -mcpu=cortex-a15 -x c -E -dM %s -o - | FileCheck -match-full-lines --check-prefix=A15 %s
    266 // RUN: %clang -target armv7 -mthumb -mcpu=cortex-a15 -x c -E -dM %s -o - | FileCheck -match-full-lines --check-prefix=A15 %s
    267 // A15:#define __ARM_ARCH_EXT_IDIV__ 1
    268 // A15:#define __ARM_FEATURE_DSP 1
    269 // A15:#define __ARM_FP 0xE
    270 
    271 // Check that -mfpu works properly for Cortex-A17 (enabled by default).
    272 // RUN: %clang -target armv7-none-linux-gnueabi -mcpu=cortex-a17 -x c -E -dM %s -o - | FileCheck -match-full-lines --check-prefix=DEFAULTFPU-A17 %s
    273 // RUN: %clang -target armv7-none-linux-gnueabi -mthumb -mcpu=cortex-a17 -x c -E -dM %s -o - | FileCheck -match-full-lines --check-prefix=DEFAULTFPU-A17 %s
    274 // DEFAULTFPU-A17:#define __ARM_FP 0xE
    275 // DEFAULTFPU-A17:#define __ARM_NEON__ 1
    276 // DEFAULTFPU-A17:#define __ARM_VFPV4__ 1
    277 
    278 // RUN: %clang -target armv7-none-linux-gnueabi -mcpu=cortex-a17 -mfpu=none -x c -E -dM %s -o - | FileCheck -match-full-lines --check-prefix=FPUNONE-A17 %s
    279 // RUN: %clang -target armv7-none-linux-gnueabi -mthumb -mcpu=cortex-a17 -mfpu=none -x c -E -dM %s -o - | FileCheck -match-full-lines --check-prefix=FPUNONE-A17 %s
    280 // FPUNONE-A17-NOT:#define __ARM_FP 0x{{.*}}
    281 // FPUNONE-A17-NOT:#define __ARM_NEON__ 1
    282 // FPUNONE-A17-NOT:#define __ARM_VFPV4__ 1
    283 
    284 // Test whether predefines are as expected when targeting cortex-a17.
    285 // RUN: %clang -target armv7 -mcpu=cortex-a17 -x c -E -dM %s -o - | FileCheck -match-full-lines --check-prefix=A17 %s
    286 // RUN: %clang -target armv7 -mthumb -mcpu=cortex-a17 -x c -E -dM %s -o - | FileCheck -match-full-lines --check-prefix=A17 %s
    287 // A17:#define __ARM_ARCH 7
    288 // A17:#define __ARM_ARCH_7A__ 1
    289 // A17:#define __ARM_ARCH_EXT_IDIV__ 1
    290 // A17:#define __ARM_ARCH_PROFILE 'A'
    291 // A17:#define __ARM_FEATURE_DSP 1
    292 // A17:#define __ARM_FP 0xE
    293 
    294 // Test whether predefines are as expected when targeting swift.
    295 // RUN: %clang -target armv7s -mcpu=swift -x c -E -dM %s -o - | FileCheck -match-full-lines --check-prefix=SWIFT %s
    296 // RUN: %clang -target armv7s -mthumb -mcpu=swift -x c -E -dM %s -o - | FileCheck -match-full-lines --check-prefix=SWIFT %s
    297 // SWIFT:#define __ARM_ARCH_EXT_IDIV__ 1
    298 // SWIFT:#define __ARM_FEATURE_DSP 1
    299 // SWIFT:#define __ARM_FP 0xE
    300 
    301 // Test whether predefines are as expected when targeting ARMv8-A Cortex implementations
    302 // RUN: %clang -target armv8 -mcpu=cortex-a32 -x c -E -dM %s -o - | FileCheck -match-full-lines --check-prefix=ARMV8 %s
    303 // RUN: %clang -target armv8 -mthumb -mcpu=cortex-a32 -x c -E -dM %s -o - | FileCheck -match-full-lines --check-prefix=ARMV8 %s
    304 // RUN: %clang -target armv8 -mcpu=cortex-a35 -x c -E -dM %s -o - | FileCheck -match-full-lines --check-prefix=ARMV8 %s
    305 // RUN: %clang -target armv8 -mthumb -mcpu=cortex-a35 -x c -E -dM %s -o - | FileCheck -match-full-lines --check-prefix=ARMV8 %s
    306 // RUN: %clang -target armv8 -mcpu=cortex-a53 -x c -E -dM %s -o - | FileCheck -match-full-lines --check-prefix=ARMV8 %s
    307 // RUN: %clang -target armv8 -mthumb -mcpu=cortex-a53 -x c -E -dM %s -o - | FileCheck -match-full-lines --check-prefix=ARMV8 %s
    308 // RUN: %clang -target armv8 -mcpu=cortex-a57 -x c -E -dM %s -o - | FileCheck -match-full-lines --check-prefix=ARMV8 %s
    309 // RUN: %clang -target armv8 -mthumb -mcpu=cortex-a57 -x c -E -dM %s -o - | FileCheck -match-full-lines --check-prefix=ARMV8 %s
    310 // RUN: %clang -target armv8 -mcpu=cortex-a72 -x c -E -dM %s -o - | FileCheck -match-full-lines --check-prefix=ARMV8 %s
    311 // RUN: %clang -target armv8 -mthumb -mcpu=cortex-a72 -x c -E -dM %s -o - | FileCheck -match-full-lines --check-prefix=ARMV8 %s
    312 // RUN: %clang -target armv8 -mcpu=cortex-a73 -x c -E -dM %s -o - | FileCheck -match-full-lines --check-prefix=ARMV8 %s
    313 // RUN: %clang -target armv8 -mthumb -mcpu=cortex-a73 -x c -E -dM %s -o - | FileCheck -match-full-lines --check-prefix=ARMV8 %s
    314 // ARMV8:#define __ARM_ARCH_EXT_IDIV__ 1
    315 // ARMV8:#define __ARM_FEATURE_DSP 1
    316 // ARMV8:#define __ARM_FP 0xE
    317 
    318 // Test whether predefines are as expected when targeting cortex-r4.
    319 // RUN: %clang -target armv7 -mcpu=cortex-r4 -x c -E -dM %s -o - | FileCheck -match-full-lines --check-prefix=R4-ARM %s
    320 // R4-ARM-NOT:#define __ARM_ARCH_EXT_IDIV__
    321 // R4-ARM:#define __ARM_FEATURE_DSP 1
    322 // R4-ARM-NOT:#define __ARM_FP 0x{{.*}}
    323 
    324 // RUN: %clang -target armv7 -mthumb -mcpu=cortex-r4 -x c -E -dM %s -o - | FileCheck -match-full-lines --check-prefix=R4-THUMB %s
    325 // R4-THUMB:#define __ARM_ARCH_EXT_IDIV__ 1
    326 // R4-THUMB:#define __ARM_FEATURE_DSP 1
    327 // R4-THUMB-NOT:#define __ARM_FP 0x{{.*}}
    328 
    329 // Test whether predefines are as expected when targeting cortex-r4f.
    330 // RUN: %clang -target armv7 -mcpu=cortex-r4f -x c -E -dM %s -o - | FileCheck -match-full-lines --check-prefix=R4F-ARM %s
    331 // R4F-ARM-NOT:#define __ARM_ARCH_EXT_IDIV__
    332 // R4F-ARM:#define __ARM_FEATURE_DSP 1
    333 // R4F-ARM:#define __ARM_FP 0xC
    334 
    335 // RUN: %clang -target armv7 -mthumb -mcpu=cortex-r4f -x c -E -dM %s -o - | FileCheck -match-full-lines --check-prefix=R4F-THUMB %s
    336 // R4F-THUMB:#define __ARM_ARCH_EXT_IDIV__ 1
    337 // R4F-THUMB:#define __ARM_FEATURE_DSP 1
    338 // R4F-THUMB:#define __ARM_FP 0xC
    339 
    340 // Test whether predefines are as expected when targeting cortex-r5.
    341 // RUN: %clang -target armv7 -mcpu=cortex-r5 -x c -E -dM %s -o - | FileCheck -match-full-lines --check-prefix=R5 %s
    342 // RUN: %clang -target armv7 -mthumb -mcpu=cortex-r5 -x c -E -dM %s -o - | FileCheck -match-full-lines --check-prefix=R5 %s
    343 // R5:#define __ARM_ARCH_EXT_IDIV__ 1
    344 // R5:#define __ARM_FEATURE_DSP 1
    345 // R5:#define __ARM_FP 0xC
    346 
    347 // Test whether predefines are as expected when targeting cortex-r7 and cortex-r8.
    348 // RUN: %clang -target armv7 -mcpu=cortex-r7 -x c -E -dM %s -o - | FileCheck -match-full-lines --check-prefix=R7-R8 %s
    349 // RUN: %clang -target armv7 -mthumb -mcpu=cortex-r7 -x c -E -dM %s -o - | FileCheck -match-full-lines --check-prefix=R7-R8 %s
    350 // RUN: %clang -target armv7 -mcpu=cortex-r8 -x c -E -dM %s -o - | FileCheck -match-full-lines --check-prefix=R7-R8 %s
    351 // RUN: %clang -target armv7 -mthumb -mcpu=cortex-r8 -x c -E -dM %s -o - | FileCheck -match-full-lines --check-prefix=R7-R8 %s
    352 // R7-R8:#define __ARM_ARCH_EXT_IDIV__ 1
    353 // R7-R8:#define __ARM_FEATURE_DSP 1
    354 // R7-R8:#define __ARM_FP 0xE
    355 
    356 // Test whether predefines are as expected when targeting cortex-m0.
    357 // RUN: %clang -target armv7 -mthumb -mcpu=cortex-m0 -x c -E -dM %s -o - | FileCheck -match-full-lines --check-prefix=M0-THUMB %s
    358 // RUN: %clang -target armv7 -mthumb -mcpu=cortex-m0plus -x c -E -dM %s -o - | FileCheck -match-full-lines --check-prefix=M0-THUMB %s
    359 // RUN: %clang -target armv7 -mthumb -mcpu=cortex-m1 -x c -E -dM %s -o - | FileCheck -match-full-lines --check-prefix=M0-THUMB %s
    360 // RUN: %clang -target armv7 -mthumb -mcpu=sc000 -x c -E -dM %s -o - | FileCheck -match-full-lines --check-prefix=M0-THUMB %s
    361 // M0-THUMB-NOT:#define __ARM_ARCH_EXT_IDIV__
    362 // M0-THUMB-NOT:#define __ARM_FEATURE_DSP
    363 // M0-THUMB-NOT:#define __ARM_FP 0x{{.*}}
    364 
    365 // Test whether predefines are as expected when targeting cortex-m3.
    366 // RUN: %clang -target armv7 -mthumb -mcpu=cortex-m3 -x c -E -dM %s -o - | FileCheck -match-full-lines --check-prefix=M3-THUMB %s
    367 // RUN: %clang -target armv7 -mthumb -mcpu=sc300 -x c -E -dM %s -o - | FileCheck -match-full-lines --check-prefix=M3-THUMB %s
    368 // M3-THUMB:#define __ARM_ARCH_EXT_IDIV__ 1
    369 // M3-THUMB-NOT:#define __ARM_FEATURE_DSP
    370 // M3-THUMB-NOT:#define __ARM_FP 0x{{.*}}
    371 
    372 // Test whether predefines are as expected when targeting cortex-m4.
    373 // RUN: %clang -target armv7 -mthumb -mcpu=cortex-m4 -x c -E -dM %s -o - | FileCheck -match-full-lines --check-prefix=M4-THUMB %s
    374 // M4-THUMB:#define __ARM_ARCH_EXT_IDIV__ 1
    375 // M4-THUMB:#define __ARM_FEATURE_DSP 1
    376 // M4-THUMB:#define __ARM_FP 0x6
    377 
    378 // Test whether predefines are as expected when targeting cortex-m7.
    379 // RUN: %clang -target armv7 -mthumb -mcpu=cortex-m7 -x c -E -dM %s -o - | FileCheck -match-full-lines --check-prefix=M7-THUMB %s
    380 // M7-THUMB:#define __ARM_ARCH_EXT_IDIV__ 1
    381 // M7-THUMB:#define __ARM_FEATURE_DSP 1
    382 // M7-THUMB:#define __ARM_FP 0xE
    383 
    384 // Test whether predefines are as expected when targeting krait.
    385 // RUN: %clang -target armv7 -mcpu=krait -x c -E -dM %s -o - | FileCheck -match-full-lines --check-prefix=KRAIT %s
    386 // RUN: %clang -target armv7 -mthumb -mcpu=krait -x c -E -dM %s -o - | FileCheck -match-full-lines --check-prefix=KRAIT %s
    387 // KRAIT:#define __ARM_ARCH_EXT_IDIV__ 1
    388 // KRAIT:#define __ARM_FEATURE_DSP 1
    389 // KRAIT:#define  __ARM_VFPV4__ 1
    390 
    391 // RUN: %clang -target armv8.1a-none-none-eabi -x c -E -dM %s -o - | FileCheck -match-full-lines --check-prefix=CHECK-V81A %s
    392 // CHECK-V81A: #define __ARM_ARCH 8
    393 // CHECK-V81A: #define __ARM_ARCH_8_1A__ 1
    394 // CHECK-V81A: #define __ARM_ARCH_PROFILE 'A'
    395 // CHECK-V81A: #define __ARM_FEATURE_QRDMX 1
    396 // CHECK-V81A: #define __ARM_FP 0xE
    397 
    398 // RUN: %clang -target armv8.2a-none-none-eabi -x c -E -dM %s -o - | FileCheck -match-full-lines --check-prefix=CHECK-V82A %s
    399 // CHECK-V82A: #define __ARM_ARCH 8
    400 // CHECK-V82A: #define __ARM_ARCH_8_2A__ 1
    401 // CHECK-V82A: #define __ARM_ARCH_PROFILE 'A'
    402 // CHECK-V82A: #define __ARM_FP 0xE
    403