1 /* OpenACC Runtime - internal declarations 2 3 Copyright (C) 2013-2018 Free Software Foundation, Inc. 4 5 Contributed by Mentor Embedded. 6 7 This file is part of the GNU Offloading and Multi Processing Library 8 (libgomp). 9 10 Libgomp is free software; you can redistribute it and/or modify it 11 under the terms of the GNU General Public License as published by 12 the Free Software Foundation; either version 3, or (at your option) 13 any later version. 14 15 Libgomp is distributed in the hope that it will be useful, but WITHOUT ANY 16 WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS 17 FOR A PARTICULAR PURPOSE. See the GNU General Public License for 18 more details. 19 20 Under Section 7 of GPL version 3, you are granted additional 21 permissions described in the GCC Runtime Library Exception, version 22 3.1, as published by the Free Software Foundation. 23 24 You should have received a copy of the GNU General Public License and 25 a copy of the GCC Runtime Library Exception along with this program; 26 see the files COPYING3 and COPYING.RUNTIME respectively. If not, see 27 <http://www.gnu.org/licenses/>. */ 28 29 /* This file contains data types and function declarations that are not 30 part of the official OpenACC user interface. There are declarations 31 in here that are part of the GNU OpenACC ABI, in that the compiler is 32 required to know about them and use them. 33 34 The convention is that the all caps prefix "GOACC" is used group items 35 that are part of the external ABI, and the lower case prefix "goacc" 36 is used group items that are completely private to the library. */ 37 38 #ifndef OACC_INT_H 39 #define OACC_INT_H 1 40 41 #include "openacc.h" 42 #include "config.h" 43 #include <stddef.h> 44 #include <stdbool.h> 45 #include <stdarg.h> 46 47 #ifdef HAVE_ATTRIBUTE_VISIBILITY 48 # pragma GCC visibility push(hidden) 49 #endif 50 51 static inline enum acc_device_t 52 acc_device_type (enum offload_target_type type) 53 { 54 return (enum acc_device_t) type; 55 } 56 57 struct goacc_thread 58 { 59 /* The base device for the current thread. */ 60 struct gomp_device_descr *base_dev; 61 62 /* The device for the current thread. */ 63 struct gomp_device_descr *dev; 64 65 struct gomp_device_descr *saved_bound_dev; 66 67 /* This is a linked list of data mapped by the "acc data" pragma, following 68 strictly push/pop semantics according to lexical scope. */ 69 struct target_mem_desc *mapped_data; 70 71 /* These structures form a list: this is the next thread in that list. */ 72 struct goacc_thread *next; 73 74 /* Target-specific data (used by plugin). */ 75 void *target_tls; 76 }; 77 78 #if defined HAVE_TLS || defined USE_EMUTLS 79 extern __thread struct goacc_thread *goacc_tls_data; 80 static inline struct goacc_thread * 81 goacc_thread (void) 82 { 83 return goacc_tls_data; 84 } 85 #else 86 extern pthread_key_t goacc_tls_key; 87 static inline struct goacc_thread * 88 goacc_thread (void) 89 { 90 return pthread_getspecific (goacc_tls_key); 91 } 92 #endif 93 94 void goacc_register (struct gomp_device_descr *) __GOACC_NOTHROW; 95 void goacc_attach_host_thread_to_device (int); 96 void goacc_runtime_initialize (void); 97 void goacc_save_and_set_bind (acc_device_t); 98 void goacc_restore_bind (void); 99 void goacc_lazy_initialize (void); 100 void goacc_host_init (void); 101 102 #ifdef HAVE_ATTRIBUTE_VISIBILITY 103 # pragma GCC visibility pop 104 #endif 105 106 #endif 107