From patchwork Fri Aug 2 20:11:20 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Julian Brown X-Patchwork-Id: 1141374 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=pass (mailfrom) smtp.mailfrom=gcc.gnu.org (client-ip=209.132.180.131; helo=sourceware.org; envelope-from=gcc-patches-return-506137-incoming=patchwork.ozlabs.org@gcc.gnu.org; receiver=) Authentication-Results: ozlabs.org; dmarc=none (p=none dis=none) header.from=codesourcery.com Authentication-Results: ozlabs.org; dkim=pass (1024-bit key; unprotected) header.d=gcc.gnu.org header.i=@gcc.gnu.org header.b="OsMWB8zE"; dkim-atps=neutral Received: from sourceware.org (server1.sourceware.org [209.132.180.131]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 460dcH5VwXz9s00 for ; Sat, 3 Aug 2019 06:12:15 +1000 (AEST) DomainKey-Signature: a=rsa-sha1; c=nofws; d=gcc.gnu.org; h=list-id :list-unsubscribe:list-archive:list-post:list-help:sender:from :to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding:content-type; q=dns; s= default; b=TYq7JjrgkeMly9QzC6JOMya/rAdVw12AT2g6TWQr4l7fBULGgxPU5 a3tUSqwZtpYQGCm1unMk+SCXreEOIjUqLrjZs+5Jn9mHMifIXtVgjV8ECr/8D9l7 xdelFDUPAy7Wcv5fWOwymBFfbLnDjm7hNg/nYJpiUvEgTtUDjd+zzA= DKIM-Signature: v=1; a=rsa-sha1; c=relaxed; d=gcc.gnu.org; h=list-id :list-unsubscribe:list-archive:list-post:list-help:sender:from :to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding:content-type; s=default; bh=cFn4QlQddV7nxGgvBj4/pvneVAY=; b=OsMWB8zEoBlGzzkJ/vcSL0Ec8Ugb RVeAnQOetSvpCFyphrFeQCQP1/cXo1Y9Pm2hmtBGqrr1MwFQxeE4Ht88QSe2Vr0f oi2uIt7f7jaSKrgqDUAk0m5+gAqpAbE2fsLjxNSW36PTbZlkxwxfpiOCfvDqhyoU MRneO2sNAh1i4qM= Received: (qmail 130320 invoked by alias); 2 Aug 2019 20:11:45 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Id: List-Unsubscribe: List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 130259 invoked by uid 89); 2 Aug 2019 20:11:45 -0000 Authentication-Results: sourceware.org; auth=none X-Spam-SWARE-Status: No, score=-19.1 required=5.0 tests=AWL, BAYES_00, GIT_PATCH_0, GIT_PATCH_1, GIT_PATCH_2, GIT_PATCH_3, KAM_SHORT, RCVD_IN_DNSWL_NONE, SPF_PASS autolearn=ham version=3.3.1 spammy=201906, 2019-06, 3.1 X-HELO: relay1.mentorg.com Received: from relay1.mentorg.com (HELO relay1.mentorg.com) (192.94.38.131) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with ESMTP; Fri, 02 Aug 2019 20:11:42 +0000 Received: from nat-ies.mentorg.com ([192.94.31.2] helo=SVR-IES-MBX-04.mgc.mentorg.com) by relay1.mentorg.com with esmtps (TLSv1.2:ECDHE-RSA-AES256-SHA384:256) id 1htdts-00018P-N9 from Julian_Brown@mentor.com ; Fri, 02 Aug 2019 13:11:40 -0700 Received: from build5-trusty-cs.sje.mentorg.com (147.34.91.1) by SVR-IES-MBX-04.mgc.mentorg.com (139.181.222.4) with Microsoft SMTP Server (TLS) id 15.0.1320.4; Fri, 2 Aug 2019 21:11:36 +0100 From: Julian Brown To: CC: Andrew Stubbs , Jakub Jelinek Subject: [PATCH 2/8] [og9] Create GCN-specific gthreads Date: Fri, 2 Aug 2019 13:11:20 -0700 Message-ID: <4fe682c033fa85d6e5d2cb44b6f778abd4577a44.1564776080.git.julian@codesourcery.com> In-Reply-To: References: MIME-Version: 1.0 X-IsSubscribed: yes This is a backport to the og9 branch of the patch posted to mainline here: https://gcc.gnu.org/ml/gcc-patches/2019-06/msg00442.html 2019-06-25 Kwok Cheung Yeung Andrew Stubbs Backport from mainline: gcc/ * config.gcc (thread_file): Set to gcn for AMD GCN. * config/gcn/gcn.c (gcn_emutls_var_init): New function. (TARGET_EMUTLS_VAR_INIT): New hook. config/ * gthr.m4 (GCC_AC_THREAD_HEADER): Add case for gcn. libgcc/ * configure: Regenerate. * config/gcn/gthr-gcn.h: New. --- config/ChangeLog.openacc | 7 ++ config/gthr.m4 | 1 + gcc/ChangeLog.openacc | 9 ++ gcc/config.gcc | 1 + gcc/config/gcn/gcn.c | 12 +++ libgcc/ChangeLog.openacc | 8 ++ libgcc/config/gcn/gthr-gcn.h | 163 +++++++++++++++++++++++++++++++++++ libgcc/configure | 1 + 8 files changed, 202 insertions(+) create mode 100644 config/ChangeLog.openacc create mode 100644 libgcc/ChangeLog.openacc create mode 100644 libgcc/config/gcn/gthr-gcn.h diff --git a/config/ChangeLog.openacc b/config/ChangeLog.openacc new file mode 100644 index 00000000000..0a4142d747c --- /dev/null +++ b/config/ChangeLog.openacc @@ -0,0 +1,7 @@ +2019-06-25 Kwok Cheung Yeung + Andrew Stubbs + + Backport from mainline: + + * gthr.m4 (GCC_AC_THREAD_HEADER): Add case for gcn. + diff --git a/config/gthr.m4 b/config/gthr.m4 index 7b29f1f3327..4b937306ad0 100644 --- a/config/gthr.m4 +++ b/config/gthr.m4 @@ -13,6 +13,7 @@ AC_DEFUN([GCC_AC_THREAD_HEADER], case $1 in aix) thread_header=config/rs6000/gthr-aix.h ;; dce) thread_header=config/pa/gthr-dce.h ;; + gcn) thread_header=config/gcn/gthr-gcn.h ;; lynx) thread_header=config/gthr-lynx.h ;; mipssde) thread_header=config/mips/gthr-mipssde.h ;; posix) thread_header=gthr-posix.h ;; diff --git a/gcc/ChangeLog.openacc b/gcc/ChangeLog.openacc index e573f621fdd..9e1e9315923 100644 --- a/gcc/ChangeLog.openacc +++ b/gcc/ChangeLog.openacc @@ -1,3 +1,12 @@ +2019-06-25 Kwok Cheung Yeung + Andrew Stubbs + + Backport from mainline: + + * config.gcc (thread_file): Set to gcn for AMD GCN. + * config/gcn/gcn.c (gcn_emutls_var_init): New function. + (TARGET_EMUTLS_VAR_INIT): New hook. + 2019-05-22 Kwok Cheung Yeung Andrew Stubbs diff --git a/gcc/config.gcc b/gcc/config.gcc index 6dc016cab51..aff3bfad3d1 100644 --- a/gcc/config.gcc +++ b/gcc/config.gcc @@ -1431,6 +1431,7 @@ amdgcn-*-amdhsa) fi # Force .init_array support. gcc_cv_initfini_array=yes + thread_file=gcn ;; moxie-*-elf) gas=yes diff --git a/gcc/config/gcn/gcn.c b/gcc/config/gcn/gcn.c index 54c37990d9c..9f73fc8161a 100644 --- a/gcc/config/gcn/gcn.c +++ b/gcc/config/gcn/gcn.c @@ -3159,6 +3159,16 @@ gcn_valid_cvt_p (machine_mode from, machine_mode to, enum gcn_cvt_t op) || (to == DFmode && (from == SImode || from == SFmode))); } +/* Implement TARGET_EMUTLS_VAR_INIT. + + Disable emutls (gthr-gcn.h does not support it, yet). */ + +tree +gcn_emutls_var_init (tree, tree decl, tree) +{ + sorry_at (DECL_SOURCE_LOCATION (decl), "TLS is not implemented for GCN."); +} + /* }}} */ /* {{{ Costs. */ @@ -6003,6 +6013,8 @@ print_operand (FILE *file, rtx x, int code) #define TARGET_CONSTANT_ALIGNMENT gcn_constant_alignment #undef TARGET_DEBUG_UNWIND_INFO #define TARGET_DEBUG_UNWIND_INFO gcn_debug_unwind_info +#undef TARGET_EMUTLS_VAR_INIT +#define TARGET_EMUTLS_VAR_INIT gcn_emutls_var_init #undef TARGET_EXPAND_BUILTIN #define TARGET_EXPAND_BUILTIN gcn_expand_builtin #undef TARGET_FUNCTION_ARG diff --git a/libgcc/ChangeLog.openacc b/libgcc/ChangeLog.openacc new file mode 100644 index 00000000000..1aaa7178df9 --- /dev/null +++ b/libgcc/ChangeLog.openacc @@ -0,0 +1,8 @@ +2019-06-25 Kwok Cheung Yeung + Andrew Stubbs + + Backport from mainline: + + * configure: Regenerate. + * config/gcn/gthr-gcn.h: New. + diff --git a/libgcc/config/gcn/gthr-gcn.h b/libgcc/config/gcn/gthr-gcn.h new file mode 100644 index 00000000000..4227b515f01 --- /dev/null +++ b/libgcc/config/gcn/gthr-gcn.h @@ -0,0 +1,163 @@ +/* Threads compatibility routines for libgcc2 and libobjc. */ +/* Compile this one with gcc. */ +/* Copyright (C) 2019 Free Software Foundation, Inc. + +This file is part of GCC. + +GCC is free software; you can redistribute it and/or modify it under +the terms of the GNU General Public License as published by the Free +Software Foundation; either version 3, or (at your option) any later +version. + +GCC is distributed in the hope that it will be useful, but WITHOUT ANY +WARRANTY; without even the implied warranty of MERCHANTABILITY or +FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +for more details. + +Under Section 7 of GPL version 3, you are granted additional +permissions described in the GCC Runtime Library Exception, version +3.1, as published by the Free Software Foundation. + +You should have received a copy of the GNU General Public License and +a copy of the GCC Runtime Library Exception along with this program; +see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +. */ + +/* AMD GCN does not support dynamic creation of threads. There may be many + hardware threads, but they're all created simultaneously at launch time. + + This implementation is intended to provide mutexes for libgfortran, etc. + It is not intended to provide a TLS implementation at this time, + although that may be added later if needed. + + __gthread_active_p returns "1" to ensure that mutexes are used, and that + programs attempting to use emutls will fail with the appropriate abort. + It is expected that the TLS tests will fail. */ + +#ifndef GCC_GTHR_GCN_H +#define GCC_GTHR_GCN_H + +#define __GTHREADS 1 + +#ifdef __cplusplus +extern "C" { +#endif + +#ifdef _LIBOBJC +#error "Objective C is not supported on AMD GCN" +#else + +static inline int +__gthread_active_p (void) +{ + return 1; +} + +typedef int __gthread_key_t; +typedef int __gthread_once_t; +typedef int __gthread_mutex_t; +typedef int __gthread_recursive_mutex_t; + +#define __GTHREAD_ONCE_INIT 0 +#define __GTHREAD_MUTEX_INIT 0 +#define __GTHREAD_RECURSIVE_MUTEX_INIT 0 + +static inline int +__gthread_once (__gthread_once_t *__once __attribute__((unused)), + void (*__func) (void) __attribute__((unused))) +{ + return 0; +} + +static inline int +__gthread_key_create (__gthread_key_t *__key __attribute__((unused)), + void (*__dtor) (void *) __attribute__((unused))) +{ + /* Operation is not supported. */ + return -1; +} + +static inline int +__gthread_key_delete (__gthread_key_t __key __attribute__ ((__unused__))) +{ + /* Operation is not supported. */ + return -1; +} + +static inline void * +__gthread_getspecific (__gthread_key_t __key __attribute__((unused))) +{ + return NULL; +} + +static inline int +__gthread_setspecific (__gthread_key_t __key __attribute__((unused)), + const void *__ptr __attribute__((unused))) +{ + /* Operation is not supported. */ + return -1; +} + +static inline int +__gthread_mutex_destroy (__gthread_mutex_t *__mutex __attribute__((unused))) +{ + return 0; +} + +static inline int +__gthread_recursive_mutex_destroy (__gthread_recursive_mutex_t *__mutex __attribute__((unused))) +{ + return 0; +} + + +static inline int +__gthread_mutex_lock (__gthread_mutex_t *__mutex) +{ + while (__sync_lock_test_and_set (__mutex, 1)) + asm volatile ("s_sleep\t1" ::: "memory"); + + return 0; +} + +static inline int +__gthread_mutex_trylock (__gthread_mutex_t *__mutex) +{ + return __sync_lock_test_and_set (__mutex, 1); +} + +static inline int +__gthread_mutex_unlock (__gthread_mutex_t *__mutex) +{ + __sync_lock_release (__mutex); + + return 0; +} + +static inline int +__gthread_recursive_mutex_lock (__gthread_recursive_mutex_t *__mutex __attribute__((unused))) +{ + /* Operation is not supported. */ + return -1; +} + +static inline int +__gthread_recursive_mutex_trylock (__gthread_recursive_mutex_t *__mutex __attribute__((unused))) +{ + /* Operation is not supported. */ + return -1; +} + +static inline int +__gthread_recursive_mutex_unlock (__gthread_recursive_mutex_t *__mutex __attribute__((unused))) +{ + /* Operation is not supported. */ + return -1; +} +#endif /* _LIBOBJC */ + +#ifdef __cplusplus +} +#endif + +#endif /* ! GCC_GTHR_GCN_H */ diff --git a/libgcc/configure b/libgcc/configure index 36dbbc1f699..1cf34087ae4 100644 --- a/libgcc/configure +++ b/libgcc/configure @@ -5542,6 +5542,7 @@ tm_file="${tm_file_}" case $target_thread_file in aix) thread_header=config/rs6000/gthr-aix.h ;; dce) thread_header=config/pa/gthr-dce.h ;; + gcn) thread_header=config/gcn/gthr-gcn.h ;; lynx) thread_header=config/gthr-lynx.h ;; mipssde) thread_header=config/mips/gthr-mipssde.h ;; posix) thread_header=gthr-posix.h ;;