Repository: lucy-clownfish Updated Branches: refs/heads/private_atomic_utils [created] 38d547a57
Make atomic utils private Project: http://git-wip-us.apache.org/repos/asf/lucy-clownfish/repo Commit: http://git-wip-us.apache.org/repos/asf/lucy-clownfish/commit/38d547a5 Tree: http://git-wip-us.apache.org/repos/asf/lucy-clownfish/tree/38d547a5 Diff: http://git-wip-us.apache.org/repos/asf/lucy-clownfish/diff/38d547a5 Branch: refs/heads/private_atomic_utils Commit: 38d547a57b322ed39c44400bd660c53c1adbc092 Parents: 5646bf0 Author: Nick Wellnhofer <[email protected]> Authored: Tue Feb 24 16:39:09 2015 +0100 Committer: Nick Wellnhofer <[email protected]> Committed: Tue Feb 24 16:41:03 2015 +0100 ---------------------------------------------------------------------- compiler/common/charmonizer.c | 6 -- compiler/common/charmonizer.main | 6 -- compiler/src/CFCBindCore.c | 24 ++--- runtime/common/charmonizer.c | 5 ++ runtime/common/charmonizer.main | 5 ++ runtime/core/Clownfish/Util/Atomic.cfh | 117 ------------------------ runtime/core/Clownfish/Util/Atomic.h | 122 ++++++++++++++++++++++++++ runtime/perl/buildlib/Clownfish/Build.pm | 2 +- 8 files changed, 139 insertions(+), 148 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/lucy-clownfish/blob/38d547a5/compiler/common/charmonizer.c ---------------------------------------------------------------------- diff --git a/compiler/common/charmonizer.c b/compiler/common/charmonizer.c index 47563a6..5aeec1a 100644 --- a/compiler/common/charmonizer.c +++ b/compiler/common/charmonizer.c @@ -7806,7 +7806,6 @@ int main(int argc, const char **argv) { chaz_BuildEnv_run(); chaz_DirManip_run(); chaz_Headers_run(); - chaz_AtomicOps_run(); chaz_FuncMacro_run(); chaz_Booleans_run(); chaz_Integers_run(); @@ -7820,11 +7819,6 @@ int main(int argc, const char **argv) { S_write_makefile(cli); } - if (chaz_HeadCheck_defines_symbol("__sync_bool_compare_and_swap", "")) { - chaz_ConfWriter_append_conf( - "#define CHY_HAS___SYNC_BOOL_COMPARE_AND_SWAP\n\n"); - } - /* Needed by cmark. */ if (chaz_HeadCheck_defines_symbol("va_copy", "#include <stdarg.h>")) { chaz_ConfWriter_append_conf("#define CHY_HAS_VA_COPY\n\n"); http://git-wip-us.apache.org/repos/asf/lucy-clownfish/blob/38d547a5/compiler/common/charmonizer.main ---------------------------------------------------------------------- diff --git a/compiler/common/charmonizer.main b/compiler/common/charmonizer.main index 74ff7b6..7ce7b14 100644 --- a/compiler/common/charmonizer.main +++ b/compiler/common/charmonizer.main @@ -63,7 +63,6 @@ int main(int argc, const char **argv) { chaz_BuildEnv_run(); chaz_DirManip_run(); chaz_Headers_run(); - chaz_AtomicOps_run(); chaz_FuncMacro_run(); chaz_Booleans_run(); chaz_Integers_run(); @@ -77,11 +76,6 @@ int main(int argc, const char **argv) { S_write_makefile(cli); } - if (chaz_HeadCheck_defines_symbol("__sync_bool_compare_and_swap", "")) { - chaz_ConfWriter_append_conf( - "#define CHY_HAS___SYNC_BOOL_COMPARE_AND_SWAP\n\n"); - } - /* Needed by cmark. */ if (chaz_HeadCheck_defines_symbol("va_copy", "#include <stdarg.h>")) { chaz_ConfWriter_append_conf("#define CHY_HAS_VA_COPY\n\n"); http://git-wip-us.apache.org/repos/asf/lucy-clownfish/blob/38d547a5/compiler/src/CFCBindCore.c ---------------------------------------------------------------------- diff --git a/compiler/src/CFCBindCore.c b/compiler/src/CFCBindCore.c index 5ad2ca2..0baf4f2 100644 --- a/compiler/src/CFCBindCore.c +++ b/compiler/src/CFCBindCore.c @@ -627,45 +627,33 @@ static char* S_charmony_feature_defines() { char *defines = CFCUtil_strdup(""); -#ifdef CHY_HAS_WINDOWS_H - defines = CFCUtil_cat(defines, "#define CFISH_HAS_WINDOWS_H\n", NULL); -#endif -#ifdef CHY_HAS_SYS_ATOMIC_H - defines = CFCUtil_cat(defines, "#define CFISH_HAS_SYS_ATOMIC_H\n", NULL); -#endif -#ifdef CHY_HAS_PTHREAD_H - defines = CFCUtil_cat(defines, "#define CFISH_HAS_PTHREAD_H\n", NULL); -#endif #ifdef CHY_LITTLE_END + // Needed by NumberUtils.cfh. defines = CFCUtil_cat(defines, "#define CFISH_LITTLE_END\n", NULL); #endif #ifdef CHY_BIG_END + // Needed by NumberUtils.cfh. defines = CFCUtil_cat(defines, "#define CFISH_BIG_END\n", NULL); #endif #ifdef CHY_HAS_FUNC_MACRO + // Needed by Err.cfh. defines = CFCUtil_cat(defines, "#define CFISH_HAS_FUNC_MACRO\n", NULL); #endif #ifdef CHY_HAS_VARIADIC_MACROS + // Needed by Err.cfh. defines = CFCUtil_cat(defines, "#define CFISH_HAS_VARIADIC_MACROS\n", NULL); #endif #ifdef CHY_HAS_ISO_VARIADIC_MACROS + // Needed by Err.cfh. defines = CFCUtil_cat(defines, "#define CFISH_HAS_ISO_VARIADIC_MACROS\n", NULL); #endif #ifdef CHY_HAS_GNUC_VARIADIC_MACROS + // Needed by Err.cfh. defines = CFCUtil_cat(defines, "#define CFISH_HAS_GNUC_VARIADIC_MACROS\n", NULL); #endif -#ifdef CHY_HAS_OSATOMIC_CAS_PTR - defines = CFCUtil_cat(defines, "#define CFISH_HAS_OSATOMIC_CAS_PTR\n", - NULL); -#endif -#ifdef CHY_HAS___SYNC_BOOL_COMPARE_AND_SWAP - defines = CFCUtil_cat(defines, - "#define CFISH_HAS___SYNC_BOOL_COMPARE_AND_SWAP\n", - NULL); -#endif return defines; } http://git-wip-us.apache.org/repos/asf/lucy-clownfish/blob/38d547a5/runtime/common/charmonizer.c ---------------------------------------------------------------------- diff --git a/runtime/common/charmonizer.c b/runtime/common/charmonizer.c index 08e5ed3..a4bcb4d 100644 --- a/runtime/common/charmonizer.c +++ b/runtime/common/charmonizer.c @@ -7877,6 +7877,10 @@ int main(int argc, const char **argv) { chaz_VariadicMacros_run(); /* Write custom postamble. */ + if (chaz_HeadCheck_defines_symbol("__sync_bool_compare_and_swap", "")) { + chaz_ConfWriter_append_conf( + "#define CHY_HAS___SYNC_BOOL_COMPARE_AND_SWAP\n\n"); + } chaz_ConfWriter_append_conf( "#ifdef CHY_HAS_SYS_TYPES_H\n" " #include <sys/types.h>\n" @@ -8074,6 +8078,7 @@ cfish_MakeFile_write(cfish_MakeFile *self) { } chaz_CFlags_add_include_dir(makefile_cflags, "."); + chaz_CFlags_add_include_dir(makefile_cflags, self->core_dir); chaz_CFlags_add_include_dir(makefile_cflags, self->host_src_dir); chaz_CFlags_add_include_dir(makefile_cflags, self->autogen_inc_dir); http://git-wip-us.apache.org/repos/asf/lucy-clownfish/blob/38d547a5/runtime/common/charmonizer.main ---------------------------------------------------------------------- diff --git a/runtime/common/charmonizer.main b/runtime/common/charmonizer.main index 9ef16dc..4ae07ff 100644 --- a/runtime/common/charmonizer.main +++ b/runtime/common/charmonizer.main @@ -134,6 +134,10 @@ int main(int argc, const char **argv) { chaz_VariadicMacros_run(); /* Write custom postamble. */ + if (chaz_HeadCheck_defines_symbol("__sync_bool_compare_and_swap", "")) { + chaz_ConfWriter_append_conf( + "#define CHY_HAS___SYNC_BOOL_COMPARE_AND_SWAP\n\n"); + } chaz_ConfWriter_append_conf( "#ifdef CHY_HAS_SYS_TYPES_H\n" " #include <sys/types.h>\n" @@ -331,6 +335,7 @@ cfish_MakeFile_write(cfish_MakeFile *self) { } chaz_CFlags_add_include_dir(makefile_cflags, "."); + chaz_CFlags_add_include_dir(makefile_cflags, self->core_dir); chaz_CFlags_add_include_dir(makefile_cflags, self->host_src_dir); chaz_CFlags_add_include_dir(makefile_cflags, self->autogen_inc_dir); http://git-wip-us.apache.org/repos/asf/lucy-clownfish/blob/38d547a5/runtime/core/Clownfish/Util/Atomic.cfh ---------------------------------------------------------------------- diff --git a/runtime/core/Clownfish/Util/Atomic.cfh b/runtime/core/Clownfish/Util/Atomic.cfh deleted file mode 100644 index 8708438..0000000 --- a/runtime/core/Clownfish/Util/Atomic.cfh +++ /dev/null @@ -1,117 +0,0 @@ -/* Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -parcel Clownfish; - -/** Provide atomic memory operations. - */ -inert class Clownfish::Util::Atomic { } - -__C__ - -/** Compare and swap a pointer. Test whether the value at `target` - * matches `old_value`. If it does, set `target` to - * `new_value` and return true. Otherwise, return false. - */ -static CFISH_INLINE bool -cfish_Atomic_cas_ptr(void *volatile *target, void *old_value, void *new_value); - -/************************** Single threaded *******************************/ -#ifdef CFISH_NOTHREADS - -static CFISH_INLINE bool -cfish_Atomic_cas_ptr(void *volatile *target, void *old_value, void *new_value) { - if (*target == old_value) { - *target = new_value; - return true; - } - else { - return false; - } -} - -/************************** Mac OS X 10.4 and later ***********************/ -#elif defined(CFISH_HAS_OSATOMIC_CAS_PTR) -#include <libkern/OSAtomic.h> - -static CFISH_INLINE bool -cfish_Atomic_cas_ptr(void *volatile *target, void *old_value, void *new_value) { - return OSAtomicCompareAndSwapPtr(old_value, new_value, target); -} - -/********************************** Windows *******************************/ -#elif defined(CFISH_HAS_WINDOWS_H) - -bool -cfish_Atomic_wrapped_cas_ptr(void *volatile *target, void *old_value, - void *new_value); - -static CFISH_INLINE bool -cfish_Atomic_cas_ptr(void *volatile *target, void *old_value, void *new_value) { - return cfish_Atomic_wrapped_cas_ptr(target, old_value, new_value); -} - -/**************************** Solaris 10 and later ************************/ -#elif defined(CFISH_HAS_SYS_ATOMIC_H) -#include <sys/atomic.h> - -static CFISH_INLINE bool -cfish_Atomic_cas_ptr(void *volatile *target, void *old_value, void *new_value) { - return atomic_cas_ptr(target, old_value, new_value) == old_value; -} - -/****************************** GCC 4.1 and later *************************/ -#elif defined(CFISH_HAS___SYNC_BOOL_COMPARE_AND_SWAP) - -static CFISH_INLINE bool -cfish_Atomic_cas_ptr(void *volatile *target, void *old_value, void *new_value) { - return __sync_bool_compare_and_swap(target, old_value, new_value); -} - -/************************ Fall back to pthread.h. **************************/ -#elif defined(CFISH_HAS_PTHREAD_H) -#include <pthread.h> - -extern pthread_mutex_t cfish_Atomic_mutex; - -static CFISH_INLINE bool -cfish_Atomic_cas_ptr(void *volatile *target, void *old_value, void *new_value) { - pthread_mutex_lock(&cfish_Atomic_mutex); - if (*target == old_value) { - *target = new_value; - pthread_mutex_unlock(&cfish_Atomic_mutex); - return true; - } - else { - pthread_mutex_unlock(&cfish_Atomic_mutex); - return false; - } -} - -/******************** No support for atomics at all. ***********************/ -#else - -#error "No support for atomic operations." - -#endif /* Big platform if-else chain. */ - -#ifdef CFISH_USE_SHORT_NAMES - #define Atomic_cas_ptr cfish_Atomic_cas_ptr -#endif - -__END_C__ - - http://git-wip-us.apache.org/repos/asf/lucy-clownfish/blob/38d547a5/runtime/core/Clownfish/Util/Atomic.h ---------------------------------------------------------------------- diff --git a/runtime/core/Clownfish/Util/Atomic.h b/runtime/core/Clownfish/Util/Atomic.h new file mode 100644 index 0000000..8b2f8e6 --- /dev/null +++ b/runtime/core/Clownfish/Util/Atomic.h @@ -0,0 +1,122 @@ +/* Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef H_CLOWNFISH_UTIL_ATOMIC +#define H_CLOWNFISH_UTIL_ATOMIC 1 + +#include "charmony.h" +#include "cfish_parcel.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/** Compare and swap a pointer. Test whether the value at `target` + * matches `old_value`. If it does, set `target` to + * `new_value` and return true. Otherwise, return false. + */ +static CFISH_INLINE bool +cfish_Atomic_cas_ptr(void *volatile *target, void *old_value, void *new_value); + +/************************** Single threaded *******************************/ +#ifdef CFISH_NOTHREADS + +static CFISH_INLINE bool +cfish_Atomic_cas_ptr(void *volatile *target, void *old_value, void *new_value) { + if (*target == old_value) { + *target = new_value; + return true; + } + else { + return false; + } +} + +/************************** Mac OS X 10.4 and later ***********************/ +#elif defined(CHY_HAS_OSATOMIC_CAS_PTR) +#include <libkern/OSAtomic.h> + +static CFISH_INLINE bool +cfish_Atomic_cas_ptr(void *volatile *target, void *old_value, void *new_value) { + return OSAtomicCompareAndSwapPtr(old_value, new_value, target); +} + +/********************************** Windows *******************************/ +#elif defined(CHY_HAS_WINDOWS_H) + +bool +cfish_Atomic_wrapped_cas_ptr(void *volatile *target, void *old_value, + void *new_value); + +static CFISH_INLINE bool +cfish_Atomic_cas_ptr(void *volatile *target, void *old_value, void *new_value) { + return cfish_Atomic_wrapped_cas_ptr(target, old_value, new_value); +} + +/**************************** Solaris 10 and later ************************/ +#elif defined(CHY_HAS_SYS_ATOMIC_H) +#include <sys/atomic.h> + +static CFISH_INLINE bool +cfish_Atomic_cas_ptr(void *volatile *target, void *old_value, void *new_value) { + return atomic_cas_ptr(target, old_value, new_value) == old_value; +} + +/****************************** GCC 4.1 and later *************************/ +#elif defined(CHY_HAS___SYNC_BOOL_COMPARE_AND_SWAP) + +static CFISH_INLINE bool +cfish_Atomic_cas_ptr(void *volatile *target, void *old_value, void *new_value) { + return __sync_bool_compare_and_swap(target, old_value, new_value); +} + +/************************ Fall back to pthread.h. **************************/ +#elif defined(CHY_HAS_PTHREAD_H) +#include <pthread.h> + +extern pthread_mutex_t cfish_Atomic_mutex; + +static CFISH_INLINE bool +cfish_Atomic_cas_ptr(void *volatile *target, void *old_value, void *new_value) { + pthread_mutex_lock(&cfish_Atomic_mutex); + if (*target == old_value) { + *target = new_value; + pthread_mutex_unlock(&cfish_Atomic_mutex); + return true; + } + else { + pthread_mutex_unlock(&cfish_Atomic_mutex); + return false; + } +} + +/******************** No support for atomics at all. ***********************/ +#else + +#error "No support for atomic operations." + +#endif /* Big platform if-else chain. */ + +#ifdef CFISH_USE_SHORT_NAMES + #define Atomic_cas_ptr cfish_Atomic_cas_ptr +#endif + +#ifdef __cplusplus +} +#endif + +#endif /* H_CLOWNFISH_UTIL_ATOMIC */ + http://git-wip-us.apache.org/repos/asf/lucy-clownfish/blob/38d547a5/runtime/perl/buildlib/Clownfish/Build.pm ---------------------------------------------------------------------- diff --git a/runtime/perl/buildlib/Clownfish/Build.pm b/runtime/perl/buildlib/Clownfish/Build.pm index b0743e2..a4d52c5 100644 --- a/runtime/perl/buildlib/Clownfish/Build.pm +++ b/runtime/perl/buildlib/Clownfish/Build.pm @@ -61,7 +61,7 @@ else { sub new { my ( $class, %args ) = @_; - $args{include_dirs} = $XS_SOURCE_DIR; + $args{include_dirs} = [ $CORE_SOURCE_DIR, $XS_SOURCE_DIR ]; $args{clownfish_params} = { autogen_header => _autogen_header(), include => [], # Don't use default includes.
