diff options
Diffstat (limited to 'libcilkrts/runtime/rts-common.h')
-rw-r--r-- | libcilkrts/runtime/rts-common.h | 132 |
1 files changed, 132 insertions, 0 deletions
diff --git a/libcilkrts/runtime/rts-common.h b/libcilkrts/runtime/rts-common.h new file mode 100644 index 00000000000..4ffde7ccb1e --- /dev/null +++ b/libcilkrts/runtime/rts-common.h @@ -0,0 +1,132 @@ +/* rts-common.h -*-C++-*- + * + ************************************************************************* + * + * @copyright + * Copyright (C) 2009-2013, Intel Corporation + * All rights reserved. + * + * @copyright + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * * Neither the name of Intel Corporation nor the names of its + * contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * @copyright + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, + * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY + * WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + **************************************************************************/ + +#ifndef INCLUDED_RTS_COMMON_DOT_H +#define INCLUDED_RTS_COMMON_DOT_H + +/* Abbreviations API functions returning different types. By using these + * abbreviations instead of using CILK_API(ret) directly, etags and other + * tools can more easily recognize function signatures. + */ +#define CILK_API_VOID CILK_API(void) +#define CILK_API_VOID_PTR CILK_API(void*) +#define CILK_API_INT CILK_API(int) +#define CILK_API_SIZET CILK_API(size_t) +#define CILK_API_TBB_RETCODE CILK_API(__cilk_tbb_retcode) +#define CILK_API_PEDIGREE CILK_API(__cilkrts_pedigree) + +/* Abbreviations ABI functions returning different types. By using these + * abbreviations instead of using CILK_ABI(ret) directly, etags and other + * tools can more easily recognize function signatures. + */ +#define CILK_ABI_VOID CILK_ABI(void) +#define CILK_ABI_WORKER_PTR CILK_ABI(__cilkrts_worker_ptr) +#define CILK_ABI_THROWS_VOID CILK_ABI_THROWS(void) + +/* documentation aid to identify portable vs. nonportable + parts of the runtime. See README for definitions. */ +#define COMMON_PORTABLE +#define COMMON_SYSDEP +#define NON_COMMON + +#if !(defined __GNUC__ || defined __ICC) +# define __builtin_expect(a_, b_) a_ +#endif + +#ifdef __cplusplus +# define cilk_nothrow throw() +#else +# define cilk_nothrow /*empty in C*/ +#endif + +#ifdef __GNUC__ +# define NORETURN void __attribute__((noreturn)) +#else +# define NORETURN void __declspec(noreturn) +#endif + +#ifdef __GNUC__ +# define NOINLINE __attribute__((noinline)) +#else +# define NOINLINE __declspec(noinline) +#endif + +#ifndef __GNUC__ +# define __attribute__(X) +#endif + +/* Microsoft CL accepts "inline" for C++, but not for C. It accepts + * __inline for both. Intel ICL accepts inline for C of /Qstd=c99 + * is set. The Cilk runtime is assumed to be compiled with /Qstd=c99 + */ +#if defined(_MSC_VER) && ! defined(__INTEL_COMPILER) +# error define inline +# define inline __inline +#endif + +/* Compilers that build the Cilk runtime are assumed to know about zero-cost + * intrinsics (__notify_intrinsic()). For those that don't, #undef the + * following definition: + */ +//#define ENABLE_NOTIFY_ZC_INTRINSIC 1 + +#if defined(__INTEL_COMPILER) +/* The notify intrinsic was introduced in ICC 12.0. */ +# if __INTEL_COMPILER <= 1200 +# undef ENABLE_NOTIFY_ZC_INTRINSIC +# endif +#elif defined(__VXWORKS__) +# undef ENABLE_NOTIFY_ZC_INTRINSIC +#elif defined(__clang__) +# if !defined(__has_extension) || !__has_extension(notify_zc_intrinsic) +# undef ENABLE_NOTIFY_ZC_INTRINSIC +# endif +#elif defined(__arm__) +// __notify_zc_intrinsic not yet supported by gcc for ARM +# undef ENABLE_NOTIFY_ZC_INTRINSIC +#endif + +// If ENABLE_NOTIFY_ZC_INTRINSIC is defined, use __notify_zc_intrisic +#ifdef ENABLE_NOTIFY_ZC_INTRINSIC +# define NOTIFY_ZC_INTRINSIC(annotation, data) \ + __notify_zc_intrinsic(annotation, data) +#else +# define NOTIFY_ZC_INTRINSIC(annotation, data) +#endif + +#endif // ! defined(INCLUDED_RTS_COMMON_DOT_H) |