1 // RUN: %clang_cc1 -E -dM -triple=x86_64-none-none  %s -o - \
2 // RUN:   | FileCheck %s -strict-whitespace
3 
4 // RUN: %clang_cc1 -E -dM -triple=x86_64-none-none -target-feature -sse \
5 // RUN:   %s -o - | FileCheck %s -check-prefix=EXT -strict-whitespace
6 
7 // RUN: %clang_cc1 -E -dM -triple=arm64e-apple-ios -target-feature -sse \
8 // RUN:   %s -o - | FileCheck %s  -strict-whitespace
9 
10 // RUN: %clang_cc1 -E -dM -triple=arm64e-apple-ios -target-feature +sse \
11 // RUN:   %s -o - | FileCheck %s  -strict-whitespace
12 
13 // RUN: %clang_cc1 -E -dM -triple=arm64_32-apple-ios  %s -o - \
14 // RUN:   | FileCheck %s  -strict-whitespace
15 
16 // RUN: %clang_cc1 -E -dM -triple=arm64_32-apple-ios -target-feature -sse \
17 // RUN:   %s -o - | FileCheck %s  -strict-whitespace
18 
19 // RUN: %clang_cc1 -E -dM -triple i386-pc-windows -target-cpu pentium4 %s -o - \
20 // RUN:   | FileCheck %s  -strict-whitespace
21 
22 // RUN: %clang_cc1 -E -dM -triple i386-pc-windows -target-cpu pentium4 \
23 // RUN:   -target-feature -sse %s -o - | FileCheck -check-prefix=EXT %s \
24 // RUN:   -strict-whitespace
25 
26 #ifdef __FLT_EVAL_METHOD__
27 #if __FLT_EVAL_METHOD__ == 3
28 #define __GLIBC_FLT_EVAL_METHOD 2
29 #else
30 #define __GLIBC_FLT_EVAL_METHOD __FLT_EVAL_METHOD__
31 #endif
32 #elif defined __x86_64__
33 #define __GLIBC_FLT_EVAL_METHOD 0
34 #else
35 #define __GLIBC_FLT_EVAL_METHOD 2
36 #endif
37 
38 #if __GLIBC_FLT_EVAL_METHOD == 0 || __GLIBC_FLT_EVAL_METHOD == 16
39 #define Name "One"
40 #elif __GLIBC_FLT_EVAL_METHOD == 1
41 #define Name "Two"
42 #elif __GLIBC_FLT_EVAL_METHOD == 2
43 #define Name "Three"
44 #elif __GLIBC_FLT_EVAL_METHOD == 32
45 #define Name "Four"
46 #elif __GLIBC_FLT_EVAL_METHOD == 33
47 #define Name "Five"
48 #elif __GLIBC_FLT_EVAL_METHOD == 64
49 #define Name "Six"
50 #elif __GLIBC_FLT_EVAL_METHOD == 65
51 #define Name "Seven"
52 #elif __GLIBC_FLT_EVAL_METHOD == 128
53 #define Name "Eight"
54 #elif __GLIBC_FLT_EVAL_METHOD == 129
55 #define Name "Nine"
56 #else
57 #error "Unknown __GLIBC_FLT_EVAL_METHOD"
58 #endif
59 
60 int foo() {
61   // CHECK: #define Name "One"
62   // EXT: #define Name "Three"
63   return Name;
64 }
65 
66 #pragma fp eval_method(double)
67 
68 #if __FLT_EVAL_METHOD__ == 3
69 #define Val "Unset"
70 #elif __FLT_EVAL_METHOD__ == 0
71 #define Val "val0"
72 #elif __FLT_EVAL_METHOD__ == 1
73 #define Val "val1"
74 #elif __FLT_EVAL_METHOD__ == 2
75 #define Val "val2"
76 #endif
77 
78 int goo() {
79   // CHECK: #define Val "val0"
80   // EXT: #define Val "val2"
81   return Val;
82 }
83