From patchwork Tue Dec 2 16:19:15 2014 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andrew Senkevich X-Patchwork-Id: 416907 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org 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 4F9311402BA for ; Wed, 3 Dec 2014 03:19:58 +1100 (AEDT) DomainKey-Signature: a=rsa-sha1; c=nofws; d=sourceware.org; h=list-id :list-unsubscribe:list-subscribe:list-archive:list-post :list-help:sender:mime-version:in-reply-to:references:from:date :message-id:subject:to:cc:content-type; q=dns; s=default; b=Q+FY nBJdODSlEL+6reqiGDVWnUD4bgb57IPqwGhsTOgukZIxzOLZFgtDQem3dhSa1lb3 e+vQHfYCtlgLZDTfegTN3K+W6qmhJ1pzztfrY4mIOxgTWH0qzuYE2oor9Pjb4DG+ Og1WkY7MzqJzBhlR6cuRVXij6uZT6mR/KDm/gnE= DKIM-Signature: v=1; a=rsa-sha1; c=relaxed; d=sourceware.org; h=list-id :list-unsubscribe:list-subscribe:list-archive:list-post :list-help:sender:mime-version:in-reply-to:references:from:date :message-id:subject:to:cc:content-type; s=default; bh=DfRro+5NGp Kx/DCxQ8dvKtUVsEc=; b=WQefa+O+wmN8qi8MCBS3zphRpAEsPo8RX9mM+ubtik TRkts5IzK6E/cKJQUIpkAyn38VZZKU15Eqz0W9ldg+m+I7WtDZgHMqycDuvUIEsq ecBAMjihu0tDnNp8C7NIIj/QjeqBHSIKCfUOMPvddsjP68k/RHje8iuR5xojO8eq 4= Received: (qmail 14848 invoked by alias); 2 Dec 2014 16:19:52 -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 14839 invoked by uid 89); 2 Dec 2014 16:19:51 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-1.8 required=5.0 tests=AWL, BAYES_00, FREEMAIL_FROM, RCVD_IN_DNSWL_LOW, SPF_PASS autolearn=ham version=3.3.2 X-HELO: mail-la0-f52.google.com X-Received: by 10.112.198.1 with SMTP id iy1mr35617lbc.13.1417537186236; Tue, 02 Dec 2014 08:19:46 -0800 (PST) MIME-Version: 1.0 In-Reply-To: References: From: Andrew Senkevich Date: Tue, 2 Dec 2014 20:19:15 +0400 Message-ID: Subject: Re: [PATCH 3/N] [x86_64] Vectorized math functions To: Joseph Myers Cc: libc-alpha 2014-11-26 19:53 GMT+03:00 Joseph Myers : > On Mon, 24 Nov 2014, Andrew Senkevich wrote: > >> @@ -113,9 +113,10 @@ ulps-file = $(firstword $(wildcard >> $(sysdirs:%=%/libm-test-ulps))) >> $(addprefix $(objpfx), $(libm-tests-generated)): $(objpfx)libm-test.stmp >> >> $(objpfx)libm-test.stmp: $(ulps-file) libm-test.inc gen-libm-test.pl \ >> - auto-libm-test-out >> + gen-libm-have-vector-test.sh auto-libm-test-out >> $(make-target-directory) >> $(PERL) gen-libm-test.pl -u $< -o "$(objpfx)" >> + $(BASH) gen-libm-have-vector-test.sh > $(objpfx)libm-have-vector-test.h > > I don't see anything bash-specific in this script, so $(SHELL) seems more > appropriate. > >> +# Generate series of definitions used for vector math functions tests. >> +print_defs() >> +{ >> + echo "#if defined TEST_VECTOR_$1 && TEST_VECTOR_$1" >> + echo "# define HAVE_VECTOR_$1 1" >> + echo "# define ${1}_VEC_SUFF WRAPPER_NAME($1)" > > Space before '(' in call to WRAPPER_NAME. > >> + echo "#else" >> + echo "# define HAVE_VECTOR_$1 0" >> + echo "# define ${1}_VEC_SUFF $1" >> + echo "#endif" >> + echo > > I think more explanation is needed in a comment about where the > TEST_VECTOR_* macros, and WRAPPER_NAME, come from. Fixed. ChangeLog 2014-12-02 Andrew Senkevich * math/gen-libm-have-vector-test.sh: Script generates series of macros for conditions in testing functions. * math/Makefile: Added call of libm-have-vector-test.sh. * math/libm-test.inc (HAVE_VECTOR): New macros. Is it OK? --- WBR, Andrew diff --git a/math/Makefile b/math/Makefile index 866bc0f..73d299d 100644 --- a/math/Makefile +++ b/math/Makefile @@ -102,7 +102,7 @@ libm-tests = test-float test-double $(test-longdouble-$(long-double-fcts)) \ libm-tests.o = $(addsuffix .o,$(libm-tests)) tests += $(libm-tests) -libm-tests-generated = libm-test-ulps.h libm-test.c +libm-tests-generated = libm-test-ulps.h libm-have-vector-test.h libm-test.c generated += $(libm-tests-generated) libm-test.stmp # This is needed for dependencies @@ -113,9 +113,10 @@ ulps-file = $(firstword $(wildcard $(sysdirs:%=%/libm-test-ulps))) $(addprefix $(objpfx), $(libm-tests-generated)): $(objpfx)libm-test.stmp $(objpfx)libm-test.stmp: $(ulps-file) libm-test.inc gen-libm-test.pl \ - auto-libm-test-out + gen-libm-have-vector-test.sh auto-libm-test-out $(make-target-directory) $(PERL) gen-libm-test.pl -u $< -o "$(objpfx)" + $(SHELL) gen-libm-have-vector-test.sh > $(objpfx)libm-have-vector-test.h @echo > $@ $(objpfx)test-float.o: $(objpfx)libm-test.stmp diff --git a/math/gen-libm-have-vector-test.sh b/math/gen-libm-have-vector-test.sh new file mode 100644 index 0000000..ef06f4a --- /dev/null +++ b/math/gen-libm-have-vector-test.sh @@ -0,0 +1,47 @@ +#!/bin/sh +# Copyright (C) 1999-2014 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 +# . + +# Generate series of definitions used for vector math functions tests. +# TEST_VECTOR_* and WRAPPER_NAME are defined in vector math functions tests. +# *_VEC_SUFF is used in individual tests, as result of FUNC_TEST unfolding +# to avoid warnings / errors about undeclared functions. +print_defs() +{ + echo "#if defined TEST_VECTOR_$1 && TEST_VECTOR_$1" + echo "# define HAVE_VECTOR_$1 1" + echo "# define ${1}_VEC_SUFF WRAPPER_NAME ($1)" + echo "#else" + echo "# define HAVE_VECTOR_$1 0" + echo "# define ${1}_VEC_SUFF $1" + echo "#endif" + echo +} + +for func in $(grep ALL_RM_TEST libm-test.inc | grep -v define | sed -r "s/.*\(//; s/,.*//"); do + print_defs ${func} + print_defs ${func}f + print_defs ${func}l +done + +# When all functions will use ALL_RM_TEST instead of using START directly, +# this code can be removed. +for func in $(grep 'START.*;$' libm-test.inc | sed -r "s/.*\(//; s/,.*//"); do + print_defs ${func} + print_defs ${func}f + print_defs ${func}l +done diff --git a/math/libm-test.inc b/math/libm-test.inc index bcedc1e..8caafe1 100644 --- a/math/libm-test.inc +++ b/math/libm-test.inc @@ -1698,11 +1698,16 @@ struct test_fFF_11_data #define STR_CONCAT(a, b, c) __STRING (a##b##c) #define STR_CON3(a, b, c) STR_CONCAT (a, b, c) +/* This generated header defines series of macros started with HAVE_VECTOR_. */ +#include "libm-have-vector-test.h" + +#define HAVE_VECTOR(func) __CONCAT (HAVE_VECTOR_, func) + /* Start and end the tests for a given function. */ -#define START(FUNC, SUFF, EXACT) \ +#define START(FUN, SUFF, EXACT) \ CHECK_ARCH_EXT; \ - if (TEST_MATHVEC) return; \ - const char *this_func = STR_CON3 (FUNC, SUFF, VEC_SUFF); \ + if (TEST_MATHVEC && !HAVE_VECTOR (FUNC (FUN))) return; \ + const char *this_func = STR_CON3 (FUN, SUFF, VEC_SUFF); \ init_max_error (this_func, EXACT) #define END \ print_max_error (this_func)