x86_target_features.c 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295
  1. // RUN: %clang -target i386-unknown-unknown -march=core2 -msse4 -x c -E -dM -o - %s | FileCheck --check-prefix=SSE4 %s
  2. // SSE4: #define __SSE2_MATH__ 1
  3. // SSE4: #define __SSE2__ 1
  4. // SSE4: #define __SSE3__ 1
  5. // SSE4: #define __SSE4_1__ 1
  6. // SSE4: #define __SSE4_2__ 1
  7. // SSE4: #define __SSE_MATH__ 1
  8. // SSE4: #define __SSE__ 1
  9. // SSE4: #define __SSSE3__ 1
  10. // RUN: %clang -target i386-unknown-unknown -march=core2 -msse4.1 -mno-sse4 -x c -E -dM -o - %s | FileCheck --check-prefix=NOSSE4 %s
  11. // NOSSE4-NOT: #define __SSE4_1__ 1
  12. // RUN: %clang -target i386-unknown-unknown -march=core2 -msse4 -mno-sse2 -x c -E -dM -o - %s | FileCheck --check-prefix=SSE %s
  13. // SSE-NOT: #define __SSE2_MATH__ 1
  14. // SSE-NOT: #define __SSE2__ 1
  15. // SSE-NOT: #define __SSE3__ 1
  16. // SSE-NOT: #define __SSE4_1__ 1
  17. // SSE-NOT: #define __SSE4_2__ 1
  18. // SSE: #define __SSE_MATH__ 1
  19. // SSE: #define __SSE__ 1
  20. // SSE-NOT: #define __SSSE3__ 1
  21. // RUN: %clang -target i386-unknown-unknown -march=pentium-m -x c -E -dM -o - %s | FileCheck --check-prefix=SSE2 %s
  22. // SSE2: #define __SSE2_MATH__ 1
  23. // SSE2: #define __SSE2__ 1
  24. // SSE2-NOT: #define __SSE3__ 1
  25. // SSE2-NOT: #define __SSE4_1__ 1
  26. // SSE2-NOT: #define __SSE4_2__ 1
  27. // SSE2: #define __SSE_MATH__ 1
  28. // SSE2: #define __SSE__ 1
  29. // SSE2-NOT: #define __SSSE3__ 1
  30. // RUN: %clang -target i386-unknown-unknown -march=pentium-m -mno-sse -mavx -x c -E -dM -o - %s | FileCheck --check-prefix=AVX %s
  31. // AVX: #define __AVX__ 1
  32. // AVX: #define __SSE2_MATH__ 1
  33. // AVX: #define __SSE2__ 1
  34. // AVX: #define __SSE3__ 1
  35. // AVX: #define __SSE4_1__ 1
  36. // AVX: #define __SSE4_2__ 1
  37. // AVX: #define __SSE_MATH__ 1
  38. // AVX: #define __SSE__ 1
  39. // AVX: #define __SSSE3__ 1
  40. // RUN: %clang -target i386-unknown-unknown -march=pentium-m -mxop -mno-avx -x c -E -dM -o - %s | FileCheck --check-prefix=SSE4A %s
  41. // SSE4A: #define __SSE2_MATH__ 1
  42. // SSE4A: #define __SSE2__ 1
  43. // SSE4A: #define __SSE3__ 1
  44. // SSE4A: #define __SSE4A__ 1
  45. // SSE4A: #define __SSE4_1__ 1
  46. // SSE4A: #define __SSE4_2__ 1
  47. // SSE4A: #define __SSE_MATH__ 1
  48. // SSE4A: #define __SSE__ 1
  49. // SSE4A: #define __SSSE3__ 1
  50. // RUN: %clang -target i386-unknown-unknown -march=atom -mavx512f -x c -E -dM -o - %s | FileCheck --check-prefix=AVX512F %s
  51. // AVX512F: #define __AVX2__ 1
  52. // AVX512F: #define __AVX512F__ 1
  53. // AVX512F: #define __AVX__ 1
  54. // AVX512F: #define __SSE2_MATH__ 1
  55. // AVX512F: #define __SSE2__ 1
  56. // AVX512F: #define __SSE3__ 1
  57. // AVX512F: #define __SSE4_1__ 1
  58. // AVX512F: #define __SSE4_2__ 1
  59. // AVX512F: #define __SSE_MATH__ 1
  60. // AVX512F: #define __SSE__ 1
  61. // AVX512F: #define __SSSE3__ 1
  62. // RUN: %clang -target i386-unknown-unknown -march=atom -mavx512cd -x c -E -dM -o - %s | FileCheck --check-prefix=AVX512CD %s
  63. // AVX512CD: #define __AVX2__ 1
  64. // AVX512CD: #define __AVX512CD__ 1
  65. // AVX512CD: #define __AVX512F__ 1
  66. // AVX512CD: #define __AVX__ 1
  67. // AVX512CD: #define __SSE2_MATH__ 1
  68. // AVX512CD: #define __SSE2__ 1
  69. // AVX512CD: #define __SSE3__ 1
  70. // AVX512CD: #define __SSE4_1__ 1
  71. // AVX512CD: #define __SSE4_2__ 1
  72. // AVX512CD: #define __SSE_MATH__ 1
  73. // AVX512CD: #define __SSE__ 1
  74. // AVX512CD: #define __SSSE3__ 1
  75. // RUN: %clang -target i386-unknown-unknown -march=atom -mavx512er -x c -E -dM -o - %s | FileCheck --check-prefix=AVX512ER %s
  76. // AVX512ER: #define __AVX2__ 1
  77. // AVX512ER: #define __AVX512ER__ 1
  78. // AVX512ER: #define __AVX512F__ 1
  79. // AVX512ER: #define __AVX__ 1
  80. // AVX512ER: #define __SSE2_MATH__ 1
  81. // AVX512ER: #define __SSE2__ 1
  82. // AVX512ER: #define __SSE3__ 1
  83. // AVX512ER: #define __SSE4_1__ 1
  84. // AVX512ER: #define __SSE4_2__ 1
  85. // AVX512ER: #define __SSE_MATH__ 1
  86. // AVX512ER: #define __SSE__ 1
  87. // AVX512ER: #define __SSSE3__ 1
  88. // RUN: %clang -target i386-unknown-unknown -march=atom -mavx512pf -x c -E -dM -o - %s | FileCheck --check-prefix=AVX512PF %s
  89. // AVX512PF: #define __AVX2__ 1
  90. // AVX512PF: #define __AVX512F__ 1
  91. // AVX512PF: #define __AVX512PF__ 1
  92. // AVX512PF: #define __AVX__ 1
  93. // AVX512PF: #define __SSE2_MATH__ 1
  94. // AVX512PF: #define __SSE2__ 1
  95. // AVX512PF: #define __SSE3__ 1
  96. // AVX512PF: #define __SSE4_1__ 1
  97. // AVX512PF: #define __SSE4_2__ 1
  98. // AVX512PF: #define __SSE_MATH__ 1
  99. // AVX512PF: #define __SSE__ 1
  100. // AVX512PF: #define __SSSE3__ 1
  101. // RUN: %clang -target i386-unknown-unknown -march=atom -mavx512dq -x c -E -dM -o - %s | FileCheck --check-prefix=AVX512DQ %s
  102. // AVX512DQ: #define __AVX2__ 1
  103. // AVX512DQ: #define __AVX512DQ__ 1
  104. // AVX512DQ: #define __AVX512F__ 1
  105. // AVX512DQ: #define __AVX__ 1
  106. // AVX512DQ: #define __SSE2_MATH__ 1
  107. // AVX512DQ: #define __SSE2__ 1
  108. // AVX512DQ: #define __SSE3__ 1
  109. // AVX512DQ: #define __SSE4_1__ 1
  110. // AVX512DQ: #define __SSE4_2__ 1
  111. // AVX512DQ: #define __SSE_MATH__ 1
  112. // AVX512DQ: #define __SSE__ 1
  113. // AVX512DQ: #define __SSSE3__ 1
  114. // RUN: %clang -target i386-unknown-unknown -march=atom -mavx512bw -x c -E -dM -o - %s | FileCheck --check-prefix=AVX512BW %s
  115. // AVX512BW: #define __AVX2__ 1
  116. // AVX512BW: #define __AVX512BW__ 1
  117. // AVX512BW: #define __AVX512F__ 1
  118. // AVX512BW: #define __AVX__ 1
  119. // AVX512BW: #define __SSE2_MATH__ 1
  120. // AVX512BW: #define __SSE2__ 1
  121. // AVX512BW: #define __SSE3__ 1
  122. // AVX512BW: #define __SSE4_1__ 1
  123. // AVX512BW: #define __SSE4_2__ 1
  124. // AVX512BW: #define __SSE_MATH__ 1
  125. // AVX512BW: #define __SSE__ 1
  126. // AVX512BW: #define __SSSE3__ 1
  127. // RUN: %clang -target i386-unknown-unknown -march=atom -mavx512vl -x c -E -dM -o - %s | FileCheck --check-prefix=AVX512VL %s
  128. // AVX512VL: #define __AVX2__ 1
  129. // AVX512VL: #define __AVX512F__ 1
  130. // AVX512VL: #define __AVX512VL__ 1
  131. // AVX512VL: #define __AVX__ 1
  132. // AVX512VL: #define __SSE2_MATH__ 1
  133. // AVX512VL: #define __SSE2__ 1
  134. // AVX512VL: #define __SSE3__ 1
  135. // AVX512VL: #define __SSE4_1__ 1
  136. // AVX512VL: #define __SSE4_2__ 1
  137. // AVX512VL: #define __SSE_MATH__ 1
  138. // AVX512VL: #define __SSE__ 1
  139. // AVX512VL: #define __SSSE3__ 1
  140. // RUN: %clang -target i386-unknown-unknown -march=atom -mavx512pf -mno-avx512f -x c -E -dM -o - %s | FileCheck --check-prefix=AVX512F2 %s
  141. // AVX512F2: #define __AVX2__ 1
  142. // AVX512F2-NOT: #define __AVX512F__ 1
  143. // AVX512F2-NOT: #define __AVX512PF__ 1
  144. // AVX512F2: #define __AVX__ 1
  145. // AVX512F2: #define __SSE2_MATH__ 1
  146. // AVX512F2: #define __SSE2__ 1
  147. // AVX512F2: #define __SSE3__ 1
  148. // AVX512F2: #define __SSE4_1__ 1
  149. // AVX512F2: #define __SSE4_2__ 1
  150. // AVX512F2: #define __SSE_MATH__ 1
  151. // AVX512F2: #define __SSE__ 1
  152. // AVX512F2: #define __SSSE3__ 1
  153. // RUN: %clang -target i386-unknown-unknown -march=atom -msse4.2 -x c -E -dM -o - %s | FileCheck --check-prefix=SSE42POPCNT %s
  154. // SSE42POPCNT: #define __POPCNT__ 1
  155. // RUN: %clang -target i386-unknown-unknown -march=atom -mno-popcnt -msse4.2 -x c -E -dM -o - %s | FileCheck --check-prefix=SSE42NOPOPCNT %s
  156. // SSE42NOPOPCNT-NOT: #define __POPCNT__ 1
  157. // RUN: %clang -target i386-unknown-unknown -march=atom -mpopcnt -mno-sse4.2 -x c -E -dM -o - %s | FileCheck --check-prefix=NOSSE42POPCNT %s
  158. // NOSSE42POPCNT: #define __POPCNT__ 1
  159. // RUN: %clang -target i386-unknown-unknown -march=atom -msse -x c -E -dM -o - %s | FileCheck --check-prefix=SSEMMX %s
  160. // SSEMMX: #define __MMX__ 1
  161. // RUN: %clang -target i386-unknown-unknown -march=atom -msse -mno-sse -x c -E -dM -o - %s | FileCheck --check-prefix=SSENOSSEMMX %s
  162. // SSENOSSEMMX-NOT: #define __MMX__ 1
  163. // RUN: %clang -target i386-unknown-unknown -march=atom -msse -mno-mmx -x c -E -dM -o - %s | FileCheck --check-prefix=SSENOMMX %s
  164. // SSENOMMX-NOT: #define __MMX__ 1
  165. // RUN: %clang -target i386-unknown-unknown -march=atom -mf16c -x c -E -dM -o - %s | FileCheck --check-prefix=F16C %s
  166. // F16C: #define __AVX__ 1
  167. // F16C: #define __F16C__ 1
  168. // RUN: %clang -target i386-unknown-unknown -march=atom -mf16c -mno-avx -x c -E -dM -o - %s | FileCheck --check-prefix=F16CNOAVX %s
  169. // F16CNOAVX-NOT: #define __AVX__ 1
  170. // F16CNOAVX-NOT: #define __F16C__ 1
  171. // RUN: %clang -target i386-unknown-unknown -march=pentiumpro -mpclmul -x c -E -dM -o - %s | FileCheck --check-prefix=PCLMUL %s
  172. // PCLMUL: #define __PCLMUL__ 1
  173. // PCLMUL: #define __SSE2__ 1
  174. // PCLMUL-NOT: #define __SSE3__ 1
  175. // RUN: %clang -target i386-unknown-unknown -march=pentiumpro -mpclmul -mno-sse2 -x c -E -dM -o - %s | FileCheck --check-prefix=PCLMULNOSSE2 %s
  176. // PCLMULNOSSE2-NOT: #define __PCLMUL__ 1
  177. // PCLMULNOSSE2-NOT: #define __SSE2__ 1
  178. // PCLMULNOSSE2-NOT: #define __SSE3__ 1
  179. // RUN: %clang -target i386-unknown-unknown -march=pentiumpro -maes -x c -E -dM -o - %s | FileCheck --check-prefix=AES %s
  180. // AES: #define __AES__ 1
  181. // AES: #define __SSE2__ 1
  182. // AES-NOT: #define __SSE3__ 1
  183. // RUN: %clang -target i386-unknown-unknown -march=pentiumpro -maes -mno-sse2 -x c -E -dM -o - %s | FileCheck --check-prefix=AESNOSSE2 %s
  184. // AESNOSSE2-NOT: #define __AES__ 1
  185. // AESNOSSE2-NOT: #define __SSE2__ 1
  186. // AESNOSSE2-NOT: #define __SSE3__ 1
  187. // RUN: %clang -target i386-unknown-unknown -march=pentiumpro -msha -x c -E -dM -o - %s | FileCheck --check-prefix=SHA %s
  188. // SHA: #define __SHA__ 1
  189. // SHA: #define __SSE2__ 1
  190. // SHA-NOT: #define __SSE3__ 1
  191. // RUN: %clang -target i386-unknown-unknown -march=pentiumpro -msha -mno-sha -x c -E -dM -o - %s | FileCheck --check-prefix=SHANOSHA %s
  192. // SHANOSHA-NOT: #define __SHA__ 1
  193. // SHANOSHA-NOT: #define __SSE2__ 1
  194. // RUN: %clang -target i386-unknown-unknown -march=pentiumpro -msha -mno-sse2 -x c -E -dM -o - %s | FileCheck --check-prefix=SHANOSSE2 %s
  195. // SHANOSSE2-NOT: #define __SHA__ 1
  196. // SHANOSSE2-NOT: #define __SSE2__ 1
  197. // SHANOSSE2-NOT: #define __SSE3__ 1
  198. // RUN: %clang -target i386-unknown-unknown -march=atom -mtbm -x c -E -dM -o - %s | FileCheck --check-prefix=TBM %s
  199. // TBM: #define __TBM__ 1
  200. // RUN: %clang -target i386-unknown-unknown -march=bdver2 -mno-tbm -x c -E -dM -o - %s | FileCheck --check-prefix=NOTBM %s
  201. // NOTBM-NOT: #define __TBM__ 1
  202. // RUN: %clang -target i386-unknown-unknown -march=pentiumpro -mcx16 -x c -E -dM -o - %s | FileCheck --check-prefix=MCX16 %s
  203. // MCX16: #define __GCC_HAVE_SYNC_COMPARE_AND_SWAP_16 1
  204. // RUN: %clang -target i386-unknown-unknown -march=atom -mprfchw -x c -E -dM -o - %s | FileCheck --check-prefix=PRFCHW %s
  205. // PRFCHW: #define __PRFCHW__ 1
  206. // RUN: %clang -target i386-unknown-unknown -march=btver2 -mno-prfchw -x c -E -dM -o - %s | FileCheck --check-prefix=NOPRFCHW %s
  207. // NOPRFCHW-NOT: #define __PRFCHW__ 1
  208. // RUN: %clang -target i386-unknown-unknown -march=atom -m3dnow -x c -E -dM -o - %s | FileCheck --check-prefix=3DNOWPRFCHW %s
  209. // 3DNOWPRFCHW: #define __PRFCHW__ 1
  210. // RUN: %clang -target i386-unknown-unknown -march=atom -mno-prfchw -m3dnow -x c -E -dM -o - %s | FileCheck --check-prefix=3DNOWNOPRFCHW %s
  211. // 3DNOWNOPRFCHW-NOT: #define __PRFCHW__ 1
  212. // RUN: %clang -target i386-unknown-unknown -march=atom -mprfchw -mno-3dnow -x c -E -dM -o - %s | FileCheck --check-prefix=NO3DNOWPRFCHW %s
  213. // NO3DNOWPRFCHW: #define __PRFCHW__ 1
  214. // RUN: %clang -target i386-unknown-unknown -march=atom -madx -x c -E -dM -o - %s | FileCheck --check-prefix=ADX %s
  215. // ADX: #define __ADX__ 1
  216. // RUN: %clang -target i386-unknown-unknown -march=atom -mrdseed -x c -E -dM -o - %s | FileCheck --check-prefix=RDSEED %s
  217. // RDSEED: #define __RDSEED__ 1