[PATCH] Add support for __GCC_HAVE_SYNC_COMPARE_AND_SWAP_{1, 2, 4, 8} on x86.

Rafael EspĂ­ndola rafael.espindola at gmail.com
Thu Apr 4 16:42:18 PDT 2013


I checked the defines with the system gcc on fedora 17. LGTM

On 3 April 2013 20:36, Michael Spencer <bigcheesegs at gmail.com> wrote:
> Hi doug.gregor,
>
> This fixes std::thread with libstdc++.
>
> http://llvm-reviews.chandlerc.com/D621
>
> Files:
>   lib/Basic/Targets.cpp
>   test/Preprocessor/predefined-macros.c
>
> Index: lib/Basic/Targets.cpp
> ===================================================================
> --- lib/Basic/Targets.cpp
> +++ lib/Basic/Targets.cpp
> @@ -2730,6 +2730,14 @@
>    case NoMMX3DNow:
>      break;
>    }
> +
> +  if (CPU >= CK_i486) {
> +    Builder.defineMacro("__GCC_HAVE_SYNC_COMPARE_AND_SWAP_1");
> +    Builder.defineMacro("__GCC_HAVE_SYNC_COMPARE_AND_SWAP_2");
> +    Builder.defineMacro("__GCC_HAVE_SYNC_COMPARE_AND_SWAP_4");
> +  }
> +  if (CPU >= CK_i586)
> +    Builder.defineMacro("__GCC_HAVE_SYNC_COMPARE_AND_SWAP_8");
>  }
>
>  bool X86TargetInfo::hasFeature(StringRef Feature) const {
> Index: test/Preprocessor/predefined-macros.c
> ===================================================================
> --- test/Preprocessor/predefined-macros.c
> +++ test/Preprocessor/predefined-macros.c
> @@ -26,3 +26,21 @@
>  // RUN: %clang_cc1 %s -E -dM -o - \
>  // RUN:   | FileCheck %s --check-prefix=CHECK-FINITE-MATH-FLAG-UNDEFINED
>  // CHECK-FINITE-MATH-FLAG-UNDEFINED: #define __FINITE_MATH_ONLY__ 0
> +//
> +// RUN: %clang_cc1 %s -E -dM -o - -triple i686 -target-cpu i386 \
> +// RUN:   | FileCheck %s --check-prefix=CHECK-SYNC_CAS_I386
> +// CHECK-SYNC_CAS_I386-NOT: __GCC_HAVE_SYNC_COMPARE_AND_SWAP
> +//
> +// RUN: %clang_cc1 %s -E -dM -o - -triple i686 -target-cpu i486 \
> +// RUN:   | FileCheck %s --check-prefix=CHECK-SYNC_CAS_I486
> +// CHECK-SYNC_CAS_I486: __GCC_HAVE_SYNC_COMPARE_AND_SWAP_1
> +// CHECK-SYNC_CAS_I486: __GCC_HAVE_SYNC_COMPARE_AND_SWAP_2
> +// CHECK-SYNC_CAS_I486: __GCC_HAVE_SYNC_COMPARE_AND_SWAP_4
> +// CHECK-SYNC_CAS_I486-NOT: __GCC_HAVE_SYNC_COMPARE_AND_SWAP_8
> +//
> +// RUN: %clang_cc1 %s -E -dM -o - -triple i686 -target-cpu i586 \
> +// RUN:   | FileCheck %s --check-prefix=CHECK-SYNC_CAS_I586
> +// CHECK-SYNC_CAS_I586: __GCC_HAVE_SYNC_COMPARE_AND_SWAP_1
> +// CHECK-SYNC_CAS_I586: __GCC_HAVE_SYNC_COMPARE_AND_SWAP_2
> +// CHECK-SYNC_CAS_I586: __GCC_HAVE_SYNC_COMPARE_AND_SWAP_4
> +// CHECK-SYNC_CAS_I586: __GCC_HAVE_SYNC_COMPARE_AND_SWAP_8
>
> _______________________________________________
> cfe-commits mailing list
> cfe-commits at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits
>



More information about the cfe-commits mailing list