xref: /llvm-project/clang/test/Preprocessor/flt_eval_macro.cpp (revision 2f1264260b37e9bd79737181e459ae20e10c5fea)
11592d88aSZahira Ammarguellat // RUN: %clang_cc1 -E -dM -triple=x86_64-none-none  %s -o - \
21592d88aSZahira Ammarguellat // RUN:   | FileCheck %s -strict-whitespace
31592d88aSZahira Ammarguellat 
41592d88aSZahira Ammarguellat // RUN: %clang_cc1 -E -dM -triple=x86_64-none-none -target-feature -sse \
51592d88aSZahira Ammarguellat // RUN:   %s -o - | FileCheck %s -check-prefix=EXT -strict-whitespace
61592d88aSZahira Ammarguellat 
71592d88aSZahira Ammarguellat // RUN: %clang_cc1 -E -dM -triple=arm64e-apple-ios -target-feature -sse \
81592d88aSZahira Ammarguellat // RUN:   %s -o - | FileCheck %s  -strict-whitespace
91592d88aSZahira Ammarguellat 
101592d88aSZahira Ammarguellat // RUN: %clang_cc1 -E -dM -triple=arm64e-apple-ios -target-feature +sse \
111592d88aSZahira Ammarguellat // RUN:   %s -o - | FileCheck %s  -strict-whitespace
121592d88aSZahira Ammarguellat 
131592d88aSZahira Ammarguellat // RUN: %clang_cc1 -E -dM -triple=arm64_32-apple-ios  %s -o - \
141592d88aSZahira Ammarguellat // RUN:   | FileCheck %s  -strict-whitespace
151592d88aSZahira Ammarguellat 
161592d88aSZahira Ammarguellat // RUN: %clang_cc1 -E -dM -triple=arm64_32-apple-ios -target-feature -sse \
171592d88aSZahira Ammarguellat // RUN:   %s -o - | FileCheck %s  -strict-whitespace
181592d88aSZahira Ammarguellat 
195f2cf3a2SEgor Zhdan // RUN: %clang_cc1 -E -dM -triple=x86_64-apple-macos13.0 -ffast-math \
20*2f126426SZahira Ammarguellat // RUN:   %s -o - | FileCheck %s -check-prefix=CHECK -strict-whitespace
215f2cf3a2SEgor Zhdan 
221592d88aSZahira Ammarguellat // RUN: %clang_cc1 -E -dM -triple i386-pc-windows -target-cpu pentium4 %s -o - \
231592d88aSZahira Ammarguellat // RUN:   | FileCheck %s  -strict-whitespace
241592d88aSZahira Ammarguellat 
251592d88aSZahira Ammarguellat // RUN: %clang_cc1 -E -dM -triple i386-pc-windows -target-cpu pentium4 \
261592d88aSZahira Ammarguellat // RUN:   -target-feature -sse %s -o - | FileCheck -check-prefix=EXT %s \
271592d88aSZahira Ammarguellat // RUN:   -strict-whitespace
281592d88aSZahira Ammarguellat 
291592d88aSZahira Ammarguellat #ifdef __FLT_EVAL_METHOD__
301592d88aSZahira Ammarguellat #if __FLT_EVAL_METHOD__ == 3
311592d88aSZahira Ammarguellat #define __GLIBC_FLT_EVAL_METHOD 2
321592d88aSZahira Ammarguellat #else
331592d88aSZahira Ammarguellat #define __GLIBC_FLT_EVAL_METHOD __FLT_EVAL_METHOD__
341592d88aSZahira Ammarguellat #endif
351592d88aSZahira Ammarguellat #elif defined __x86_64__
361592d88aSZahira Ammarguellat #define __GLIBC_FLT_EVAL_METHOD 0
371592d88aSZahira Ammarguellat #else
381592d88aSZahira Ammarguellat #define __GLIBC_FLT_EVAL_METHOD 2
391592d88aSZahira Ammarguellat #endif
401592d88aSZahira Ammarguellat 
415f2cf3a2SEgor Zhdan #if __GLIBC_FLT_EVAL_METHOD == -1
425f2cf3a2SEgor Zhdan #define Name "MinusOne"
435f2cf3a2SEgor Zhdan #elif __GLIBC_FLT_EVAL_METHOD == 0 || __GLIBC_FLT_EVAL_METHOD == 16
441592d88aSZahira Ammarguellat #define Name "One"
451592d88aSZahira Ammarguellat #elif __GLIBC_FLT_EVAL_METHOD == 1
461592d88aSZahira Ammarguellat #define Name "Two"
471592d88aSZahira Ammarguellat #elif __GLIBC_FLT_EVAL_METHOD == 2
481592d88aSZahira Ammarguellat #define Name "Three"
491592d88aSZahira Ammarguellat #elif __GLIBC_FLT_EVAL_METHOD == 32
501592d88aSZahira Ammarguellat #define Name "Four"
511592d88aSZahira Ammarguellat #elif __GLIBC_FLT_EVAL_METHOD == 33
521592d88aSZahira Ammarguellat #define Name "Five"
531592d88aSZahira Ammarguellat #elif __GLIBC_FLT_EVAL_METHOD == 64
541592d88aSZahira Ammarguellat #define Name "Six"
551592d88aSZahira Ammarguellat #elif __GLIBC_FLT_EVAL_METHOD == 65
561592d88aSZahira Ammarguellat #define Name "Seven"
571592d88aSZahira Ammarguellat #elif __GLIBC_FLT_EVAL_METHOD == 128
581592d88aSZahira Ammarguellat #define Name "Eight"
591592d88aSZahira Ammarguellat #elif __GLIBC_FLT_EVAL_METHOD == 129
601592d88aSZahira Ammarguellat #define Name "Nine"
611592d88aSZahira Ammarguellat #else
621592d88aSZahira Ammarguellat #error "Unknown __GLIBC_FLT_EVAL_METHOD"
631592d88aSZahira Ammarguellat #endif
641592d88aSZahira Ammarguellat 
foo()651592d88aSZahira Ammarguellat int foo() {
661592d88aSZahira Ammarguellat   // CHECK: #define Name "One"
671592d88aSZahira Ammarguellat   // EXT: #define Name "Three"
681592d88aSZahira Ammarguellat   return Name;
691592d88aSZahira Ammarguellat }
701592d88aSZahira Ammarguellat 
711592d88aSZahira Ammarguellat #pragma fp eval_method(double)
721592d88aSZahira Ammarguellat 
731592d88aSZahira Ammarguellat #if __FLT_EVAL_METHOD__ == 3
741592d88aSZahira Ammarguellat #define Val "Unset"
751592d88aSZahira Ammarguellat #elif __FLT_EVAL_METHOD__ == 0
761592d88aSZahira Ammarguellat #define Val "val0"
771592d88aSZahira Ammarguellat #elif __FLT_EVAL_METHOD__ == 1
781592d88aSZahira Ammarguellat #define Val "val1"
791592d88aSZahira Ammarguellat #elif __FLT_EVAL_METHOD__ == 2
801592d88aSZahira Ammarguellat #define Val "val2"
811592d88aSZahira Ammarguellat #endif
821592d88aSZahira Ammarguellat 
goo()831592d88aSZahira Ammarguellat int goo() {
841592d88aSZahira Ammarguellat   // CHECK: #define Val "val0"
851592d88aSZahira Ammarguellat   // EXT: #define Val "val2"
861592d88aSZahira Ammarguellat   return Val;
871592d88aSZahira Ammarguellat }
88