From patchwork Fri Jan 18 17:35:33 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Steve Ellcey X-Patchwork-Id: 31111 Received: (qmail 11682 invoked by alias); 18 Jan 2019 17:35:45 -0000 Mailing-List: contact libc-alpha-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Unsubscribe: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: libc-alpha-owner@sourceware.org Delivered-To: mailing list libc-alpha@sourceware.org Received: (qmail 11656 invoked by uid 89); 18 Jan 2019 17:35:44 -0000 Authentication-Results: sourceware.org; auth=none X-Spam-SWARE-Status: No, score=-27.6 required=5.0 tests=BAYES_00, GIT_PATCH_0, GIT_PATCH_1, GIT_PATCH_2, GIT_PATCH_3, KAM_SHORT, RCVD_IN_DNSWL_LOW, SPF_PASS autolearn=ham version=3.3.2 spammy= X-HELO: mx0b-0016f401.pphosted.com DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=marvell.com; h=from : to : cc : subject : date : message-id : references : in-reply-to : content-type : mime-version; s=pfpt0818; bh=MlFDIlCn0BAMjRu3Sm5jl8tWdbURMfj3+TstzUuQbuE=; b=BmNPX67tNekwiaRwiEj2fxYazeEriS/ERatnGr7IMrz9kQJJLoH+yaUfXgYVs94hO9sd 8U26tDY/HIch8NNQV55LO76sfAa1dmVmLsUByczvjwEtYl/VwZFjWgUg5kKLJshyQyTg CKyGarlS6JV0Zc4O8Ry9lIapGc3T5Ljah+vYCFyUKHV8NrqCRlQfAKcV0EeDjhDLp45g F2DVfuRNJK7NKEzhpm444+Kotc+HLKmYV7zhyJgvlMUV98VKmubEFyx8xjjGA380wu0a OF715BK+zFwKbkwkyFiWRtwBK8xmxypfe8VRLz9QwxoNBn8ckSk71L+SvG0lj+IF5V9U cg== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=marvell.onmicrosoft.com; s=selector1-marvell-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=MlFDIlCn0BAMjRu3Sm5jl8tWdbURMfj3+TstzUuQbuE=; b=PogHykdFJTiXnKTled7Kd5s7+s3i1rxCopnvBsF+2L6pNUwru4FAXgCdoWzZXoK//kERll+sb6L1S3pJmSmosRx3Srm61n4nY/37DimD1O2O+cDlgTZgJWqzz5qycmCvtN+LlMYbuVsEwsfjKcDPA6QZXWfdu0+MRlkVLywIppw= From: Steve Ellcey To: "libc-alpha@sourceware.org" CC: "mliska@suse.cz" Subject: Re: Building math-vector-fortran.h in glibc Date: Fri, 18 Jan 2019 17:35:33 +0000 Message-ID: <741dcbc5a2d708c9d8a0056c9f3d635acb216330.camel@marvell.com> References: In-Reply-To: received-spf: None (protection.outlook.com: marvell.com does not designate permitted sender hosts) MIME-Version: 1.0 X-Proofpoint-Details: rule=outbound_notspam policy=outbound score=0 priorityscore=1501 malwarescore=0 suspectscore=0 phishscore=0 bulkscore=0 spamscore=0 clxscore=1015 lowpriorityscore=0 mlxscore=0 impostorscore=0 mlxlogscore=999 adultscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.0.1-1810050000 definitions=main-1901180126 Following up to my own email, here is a new version of the glibc patch to create math-vector-fortran.h. The original one put it in usr/include/math-vector-fortran.h. This one puts it in usr/include/finclude/math-vector-fortran.h so that the Fortran compiler finds it automatically. Steve Ellcey sellcey@marvell.com diff --git a/math/Makefile b/math/Makefile index 76e8eda..480f85f 100644 --- a/math/Makefile +++ b/math/Makefile @@ -30,6 +30,11 @@ headers := math.h bits/mathcalls.h bits/mathinline.h \ bits/flt-eval-method.h bits/fp-fast.h bits/fp-logb.h \ bits/long-double.h bits/mathcalls-helper-functions.h \ bits/floatn.h bits/floatn-common.h bits/mathcalls-narrow.h +ifeq ($(build-mathvec),yes) +headers += finclude/math-vector-fortran.h +generated += finclude/math-vector-fortran.h +generated-dirs += finclude +endif # FPU support code. aux := setfpucw fpu_control @@ -220,6 +225,11 @@ $(inst_libdir)/libm.a: $(common-objpfx)format.lds \ echo 'GROUP ( $(libdir)/libm-$(version).a $(libdir)/libmvec.a )' \ ) > $@.new mv -f $@.new $@ + +math_vector_header = $(wildcard $(sysdirs:%=%/bits/math-vector.h)) +$(objpfx)finclude/math-vector-fortran.h: + $(make-target-directory) + cat $(math_vector_header) | $(PYTHON) gen-fortran-math-vector.py > $(objpfx)finclude/math-vector-fortran.h endif # Rules for the test suite. diff --git a/math/gen-fortran-math-vector.py b/math/gen-fortran-math-vector.py index e69de29..0fc6c4a 100644 --- a/math/gen-fortran-math-vector.py +++ b/math/gen-fortran-math-vector.py @@ -0,0 +1,16 @@ +#!/usr/bin/env python3 + +import fileinput + +# sample declarations: +# define __DECL_SIMD_cos __DECL_SIMD_AARCH64 + +for line in fileinput.input(): + parts = [x for x in line.strip().split(' ') if x] + s = '__DECL_SIMD_' + if (len(parts) == 4 and parts[1] == 'define' + and parts[-1] == '__DECL_SIMD_AARCH64'): + fn = parts[2] + assert fn.startswith(s) + fn =fn[len(s):] + print('!GCC$ builtin (%s) attributes simd (notinbranch)' % fn) diff --git a/sysdeps/aarch64/fpu/bits/math-vector.h b/sysdeps/aarch64/fpu/bits/math-vector.h index e69de29..0b271ee 100644 --- a/sysdeps/aarch64/fpu/bits/math-vector.h +++ b/sysdeps/aarch64/fpu/bits/math-vector.h @@ -0,0 +1,75 @@ +/* Platform-specific SIMD declarations of math functions. + Copyright (C) 2018 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library 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 + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + . */ + +#ifndef _MATH_H +# error "Never include directly;\ + include instead." +#endif + +/* Get default empty definitions for simd declarations. */ +#include + +#if defined __FAST_MATH__ +# if defined _OPENMP && _OPENMP >= 201307 +/* OpenMP case. */ +# define __DECL_SIMD_AARCH64 _Pragma ("omp declare simd notinbranch") +# elif __GNUC_PREREQ (6,0) +/* W/o OpenMP use GCC 6.* __attribute__ ((__simd__)). */ +# define __DECL_SIMD_AARCH64 __attribute__ ((__simd__ ("notinbranch"))) +# endif + +# ifdef __DECL_SIMD_AARCH64 +# undef __DECL_SIMD_cos +# define __DECL_SIMD_cos __DECL_SIMD_AARCH64 +# undef __DECL_SIMD_cosf +# define __DECL_SIMD_cosf __DECL_SIMD_AARCH64 +# undef __DECL_SIMD_exp +# define __DECL_SIMD_exp __DECL_SIMD_AARCH64 +# undef __DECL_SIMD_expf +# define __DECL_SIMD_expf __DECL_SIMD_AARCH64 +# undef __DECL_SIMD_exp2 +# define __DECL_SIMD_exp2 __DECL_SIMD_AARCH64 +# undef __DECL_SIMD_exp2f +# define __DECL_SIMD_exp2f __DECL_SIMD_AARCH64 +# undef __DECL_SIMD_exp10 +# define __DECL_SIMD_exp10 __DECL_SIMD_AARCH64 +# undef __DECL_SIMD_exp10f +# define __DECL_SIMD_exp10f __DECL_SIMD_AARCH64 +# undef __DECL_SIMD_log +# define __DECL_SIMD_log __DECL_SIMD_AARCH64 +# undef __DECL_SIMD_logf +# define __DECL_SIMD_logf __DECL_SIMD_AARCH64 +# undef __DECL_SIMD_log2 +# define __DECL_SIMD_log2 __DECL_SIMD_AARCH64 +# undef __DECL_SIMD_log2f +# define __DECL_SIMD_log2f __DECL_SIMD_AARCH64 +# undef __DECL_SIMD_log10 +# define __DECL_SIMD_log10 __DECL_SIMD_AARCH64 +# undef __DECL_SIMD_log10f +# define __DECL_SIMD_log10f __DECL_SIMD_AARCH64 +# undef __DECL_SIMD_pow +# define __DECL_SIMD_pow __DECL_SIMD_AARCH64 +# undef __DECL_SIMD_powf +# define __DECL_SIMD_powf __DECL_SIMD_AARCH64 +# undef __DECL_SIMD_sin +# define __DECL_SIMD_sin __DECL_SIMD_AARCH64 +# undef __DECL_SIMD_sinf +# define __DECL_SIMD_sinf __DECL_SIMD_AARCH64 +# endif + +#endif