]> git.ipfire.org Git - thirdparty/gcc.git/blame - libcilkrts/include/cilktools/cilkscreen.h
[Patch AArch64] Fixup floating point division with -march=armv8-a+nosimd
[thirdparty/gcc.git] / libcilkrts / include / cilktools / cilkscreen.h
CommitLineData
4710dd51 1/* cilkscreen.h -*-C++-*-
2 *
3 *************************************************************************
4 *
0657c20f 5 * Copyright (C) 2010-2016, Intel Corporation
4710dd51 6 * All rights reserved.
7 *
4710dd51 8 * Redistribution and use in source and binary forms, with or without
9 * modification, are permitted provided that the following conditions
10 * are met:
11 *
12 * * Redistributions of source code must retain the above copyright
13 * notice, this list of conditions and the following disclaimer.
14 * * Redistributions in binary form must reproduce the above copyright
15 * notice, this list of conditions and the following disclaimer in
16 * the documentation and/or other materials provided with the
17 * distribution.
18 * * Neither the name of Intel Corporation nor the names of its
19 * contributors may be used to endorse or promote products derived
20 * from this software without specific prior written permission.
21 *
4710dd51 22 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
23 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
24 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
25 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
26 * HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
27 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
28 * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
29 * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
30 * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
31 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY
32 * WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
33 * POSSIBILITY OF SUCH DAMAGE.
0657c20f 34 *
35 * *********************************************************************
36 *
37 * PLEASE NOTE: This file is a downstream copy of a file mainitained in
38 * a repository at cilkplus.org. Changes made to this file that are not
39 * submitted through the contribution process detailed at
40 * http://www.cilkplus.org/submit-cilk-contribution will be lost the next
41 * time that a new version is released. Changes only submitted to the
42 * GNU compiler collection or posted to the git repository at
43 * https://bitbucket.org/intelcilkruntime/intel-cilk-runtime.git are
44 * not tracked.
45 *
46 * We welcome your contributions to this open source project. Thank you
47 * for your assistance in helping us improve Cilk Plus.
4710dd51 48 *
49 **************************************************************************/
50
51#ifndef INCLUDED_CILKSCREEN_H
52#define INCLUDED_CILKSCREEN_H
53
54#include <cilk/cilk_api.h>
55
56/*
57 * Cilkscreen "functions". These macros generate metadata in your application
58 * to notify Cilkscreen of program state changes
59 */
60
61#if ! defined(CILK_STUB) && defined(__INTEL_COMPILER)
62# define __cilkscreen_metacall(annotation,expr) \
63 __notify_zc_intrinsic((char *)annotation, expr)
64#else
65# define __cilkscreen_metacall(annotation,expr) ((void)annotation, (void)(expr))
66#endif
67
68/* Call once when a user thread enters a spawning function */
69#define __cilkscreen_enable_instrumentation() \
70 __cilkscreen_metacall("cilkscreen_enable_instrumentation", 0)
71
72/* Call once when a user thread exits a spawning function */
73#define __cilkscreen_disable_instrumentation() \
74 __cilkscreen_metacall("cilkscreen_disable_instrumentation", 0)
75
76/* Call to temporarily disable cilkscreen instrumentation */
77#define __cilkscreen_enable_checking() \
78 __cilkscreen_metacall("cilkscreen_enable_checking", 0)
79
80/* Call to re-enable temporarily-disabled cilkscreen instrumentation */
81#define __cilkscreen_disable_checking() \
82 __cilkscreen_metacall("cilkscreen_disable_checking", 0)
83
84/* Inform cilkscreen that memory from begin to end can be reused without
85 * causing races (e.g., for memory that comes from a memory allocator) */
86#define __cilkscreen_clean(begin, end) \
87 do { \
88 void *__data[2] = { (begin), (end) }; \
89 __cilkscreen_metacall("cilkscreen_clean", &__data); \
90 } while(0)
91
92/* Inform cilkscreen that a lock is being acquired.
93 * If the lock type is not a handle, then the caller should take its address
94 * and pass the pointer to the lock. Otherwise, the caller should pass the
95 * lock handle directly.
96 */
97#define __cilkscreen_acquire_lock(lock) \
98 __cilkscreen_metacall("cilkscreen_acquire_lock", (lock))
99
100#define __cilkscreen_release_lock(lock) \
101 __cilkscreen_metacall("cilkscreen_release_lock", (lock))
102
103/*
104 * Metacall data
105 *
106 * A metacall is a way to pass data to a function implemented by a tool.
107 * Metacalls are always instrumented when the tool is loaded.
108 */
109
110// Tool code for Cilkscreen
111#define METACALL_TOOL_CILKSCREEN 1
112
113// Metacall codes implemented by Cilkscreen
114#define CS_METACALL_PUTS 0 // Write string to the Cilkscreen log
115
116#define __cilkscreen_puts(text) \
117 __cilkrts_metacall(METACALL_TOOL_CILKSCREEN, CS_METACALL_PUTS, (void *)(const char *)text)
118
119#endif /* defined(INCLUDED_CILKSCREEN_H) */