[m-rev.] for review: workaround problems with mercury_atomic_ops and gcc -O0
Peter Wang
novalazy at gmail.com
Wed Oct 24 15:17:11 AEST 2007
On 2007-10-24, Julien Fischer <juliensf at csse.unimelb.edu.au> wrote:
>
> For review by PeterW.
>
> Estimated hours taken: 0.2
> Branches: main
>
> Avoid problems with some versions of gcc when compiling the runtime
> atomic_ops module at -O0 in non low-level .par grades.
>
> runtime/mercury_atomic_ops.[hc]:
> Implement MR_compare_and_swap_word using the builtin gcc compare
> and swap if it is available. (In particular prefer this to the
> handcoded assembler versions on x86 and x86_64.)
>
> Only include the code in these modules if MR_LL_PARALLEL_CONJ
> is defined. This helps to avoid problems with gcc in grades
> where atomic operations are not used.
>
> Julien.
>
> Index: mercury_atomic_ops.c
> ===================================================================
> RCS file:
> /home/mercury/mercury1/repository/mercury/runtime/mercury_atomic_ops.c,v
> retrieving revision 1.1
> diff -u -r1.1 mercury_atomic_ops.c
> --- mercury_atomic_ops.c 11 Oct 2007 12:18:03 -0000 1.1
> +++ mercury_atomic_ops.c 24 Oct 2007 04:55:44 -0000
> @@ -14,6 +14,8 @@
> #include "mercury_imp.h"
> #include "mercury_atomic_ops.h"
>
> +#if defined(MR_LL_PARALLEL_CON)
MR_LL_PARALLEL_CONJ
> /*---------------------------------------------------------------------------*/
> /*
> ** Provide definitions for functions declared `extern inline'.
> @@ -28,3 +30,5 @@
> MR_COMPARE_AND_SWAP_WORD_BODY;
> }
> )
> +
> +#endif /* MR_LL_PARALLEL_CONJ */
> Index: mercury_atomic_ops.h
> ===================================================================
> RCS file:
> /home/mercury/mercury1/repository/mercury/runtime/mercury_atomic_ops.h,v
> retrieving revision 1.1
> diff -u -r1.1 mercury_atomic_ops.h
> --- mercury_atomic_ops.h 11 Oct 2007 12:18:03 -0000 1.1
> +++ mercury_atomic_ops.h 24 Oct 2007 04:54:58 -0000
> @@ -16,6 +16,8 @@
>
> #include "mercury_std.h"
>
> +#if defined(MR_LL_PARALLEL_CON)
MR_LL_PARALLEL_CONJ
> @@ -82,4 +85,5 @@
> ** currently require any atomic ops.
> */
>
> +#endif /* MR_LL_PARALLEL_CONJ */
> #endif /* not MERCURY_ATOMIC_OPS_H */
What's the convention on #endif comments?
Otherwise it looks fine.
Peter
--------------------------------------------------------------------------
mercury-reviews mailing list
Post messages to: mercury-reviews at csse.unimelb.edu.au
Administrative Queries: owner-mercury-reviews at csse.unimelb.edu.au
Subscriptions: mercury-reviews-request at csse.unimelb.edu.au
--------------------------------------------------------------------------
More information about the reviews
mailing list