From patchwork Fri Jul 1 11:53:10 2016 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andrew Senkevich X-Patchwork-Id: 13548 Received: (qmail 24854 invoked by alias); 1 Jul 2016 11:53:54 -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 24841 invoked by uid 89); 1 Jul 2016 11:53:53 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-2.1 required=5.0 tests=AWL, BAYES_00, FREEMAIL_FROM, RCVD_IN_DNSWL_LOW, SPF_PASS autolearn=ham version=3.3.2 spammy=2122 X-HELO: mail-vk0-f65.google.com X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:mime-version:in-reply-to:references:from:date :message-id:subject:to:cc; bh=wCxmsLR6ZQ1qAM/5+fuy+5Fb7bcF87VzGZ04Is3e5Wo=; b=fAsWgdGJhE4WQkUcukxz/2RDxE7irzEeQ9gK+JTNRlejM8979bXETllianwBQOGGAc YOp9d9DuJ/VZ0CixUQDX1WBCQ1CjDJASv/Y9kd+OU8MCWYQlxoBp8dPzgCcXyXZ+EjEe 3PpWbdHEntb+twSsnuw727F2BbG0xN8qMD2/6ey3pvwiJ1Bql7Bl91+l7UdppmHGY6lq 1xo5289Vqho7yx7tPluP85VVIyZkamUQk7LFAQwL/7aZMWyo1rmRUIGk1Iy7TBWKGP/k MnIqOyEwVUBNQ3lUOus8QR/UlCpOR1hm0P3TFpUNw57auWQyjBe+gyUCNGqCSmjNcIY2 meJw== X-Gm-Message-State: ALyK8tKdJ7tbHQQszj/mwTvFUBkXl9FRxPuoDw41LMwPFdWsk3astZP1z8CX4cN2rovFTq/sYRhLuAdRjxT0Aw== X-Received: by 10.176.69.204 with SMTP id u70mr1092861uau.133.1467374019935; Fri, 01 Jul 2016 04:53:39 -0700 (PDT) MIME-Version: 1.0 In-Reply-To: References: <57560F10.4040907@redhat.com> From: Andrew Senkevich Date: Fri, 1 Jul 2016 14:53:10 +0300 Message-ID: Subject: Re: [PATCH x86-64][BZ #20024] Fixed vector sincos/sincosf ABI To: Joseph Myers Cc: "Carlos O'Donell" , libc-alpha 2016-07-01 1:25 GMT+03:00 Joseph Myers : > On Thu, 30 Jun 2016, Andrew Senkevich wrote: > >> 2016-06-30 16:46 GMT+03:00 Joseph Myers : >> > On Thu, 30 Jun 2016, Andrew Senkevich wrote: >> > >> >> Indeed, it can be simplified now. >> >> >> >> Is it Ok with that change for trunk as well as for 2.22 and 2.23 >> >> release branches? >> > >> > Please send the actual patch you are proposing. >> >> Here is attached. > > This one is OK. Thanks. What about a followup fix for trunk which adds "linear" versions? May be create according bugzilla bug? Proposed patch is: * sysdeps/unix/sysv/linux/x86_64/libmvec.abilist: New symbols added. * sysdeps/x86_64/fpu/Versions: New versions added. * sysdeps/x86/fpu/bits/math-vector.h: Added sincos/sincosf vector declaration with linear clause. * sysdeps/x86_64/fpu/test-double-libmvec-sincos.c: Added ABI test for vector sincos declared with linear clause. * sysdeps/x86_64/fpu/test-float-libmvec-sincosf.c: Likewise for sincosf. --- WBR, Andrew diff --git a/sysdeps/unix/sysv/linux/x86_64/libmvec.abilist b/sysdeps/unix/sysv/linux/x86_64/libmvec.abilist index 80d028a..e3e450c 100644 --- a/sysdeps/unix/sysv/linux/x86_64/libmvec.abilist +++ b/sysdeps/unix/sysv/linux/x86_64/libmvec.abilist @@ -47,3 +47,12 @@ GLIBC_2.22 _ZGVeN8v_log F GLIBC_2.22 _ZGVeN8v_sin F GLIBC_2.22 _ZGVeN8vv_pow F GLIBC_2.22 _ZGVeN8vvv_sincos F +GLIBC_2.24 GLIBC_2.24 A +GLIBC_2.24 _ZGVbN2vl8l8_sincos F +GLIBC_2.24 _ZGVbN4vl4l4_sincosf F +GLIBC_2.24 _ZGVcN4vl8l8_sincos F +GLIBC_2.24 _ZGVcN8vl4l4_sincosf F +GLIBC_2.24 _ZGVdN4vl8l8_sincos F +GLIBC_2.24 _ZGVdN8vl4l4_sincosf F +GLIBC_2.24 _ZGVeN16vl4l4_sincosf F +GLIBC_2.24 _ZGVeN8vl8l8_sincos F diff --git a/sysdeps/x86/fpu/bits/math-vector.h b/sysdeps/x86/fpu/bits/math-vector.h old mode 100644 new mode 100755 index ca43cf4..c20715b --- a/sysdeps/x86/fpu/bits/math-vector.h +++ b/sysdeps/x86/fpu/bits/math-vector.h @@ -28,9 +28,11 @@ # if defined _OPENMP && _OPENMP >= 201307 /* OpenMP case. */ # define __DECL_SIMD_x86_64 _Pragma ("omp declare simd notinbranch") +# define __DECL_SIMD_x86_64_sincos __DECL_SIMD_x86_64 _Pragma ("omp declare simd notinbranch linear (__sinx, __cosx: 1)") # elif __GNUC_PREREQ (6,0) /* W/o OpenMP use GCC 6.* __attribute__ ((__simd__)). */ # define __DECL_SIMD_x86_64 __attribute__ ((__simd__ ("notinbranch"))) +# define __DECL_SIMD_x86_64_sincos __DECL_SIMD_x86_64 # endif # ifdef __DECL_SIMD_x86_64 @@ -43,9 +45,9 @@ # undef __DECL_SIMD_sinf # define __DECL_SIMD_sinf __DECL_SIMD_x86_64 # undef __DECL_SIMD_sincos -# define __DECL_SIMD_sincos __DECL_SIMD_x86_64 +# define __DECL_SIMD_sincos __DECL_SIMD_x86_64_sincos # undef __DECL_SIMD_sincosf -# define __DECL_SIMD_sincosf __DECL_SIMD_x86_64 +# define __DECL_SIMD_sincosf __DECL_SIMD_x86_64_sincos # undef __DECL_SIMD_log # define __DECL_SIMD_log __DECL_SIMD_x86_64 # undef __DECL_SIMD_logf diff --git a/sysdeps/x86_64/fpu/Versions b/sysdeps/x86_64/fpu/Versions index 0813204..02df4b5 100644 --- a/sysdeps/x86_64/fpu/Versions +++ b/sysdeps/x86_64/fpu/Versions @@ -13,4 +13,8 @@ libmvec { _ZGVbN4vv_powf; _ZGVcN8vv_powf; _ZGVdN8vv_powf; _ZGVeN16vv_powf; _ZGVbN4vvv_sincosf; _ZGVcN8vvv_sincosf; _ZGVdN8vvv_sincosf; _ZGVeN16vvv_sincosf; } + GLIBC_2.24 { + _ZGVbN2vl8l8_sincos; _ZGVcN4vl8l8_sincos; _ZGVdN4vl8l8_sincos; _ZGVeN8vl8l8_sincos; + _ZGVbN4vl4l4_sincosf; _ZGVcN8vl4l4_sincosf; _ZGVdN8vl4l4_sincosf; _ZGVeN16vl4l4_sincosf; + } } diff --git a/sysdeps/x86_64/fpu/test-double-libmvec-sincos.c b/sysdeps/x86_64/fpu/test-double-libmvec-sincos.c index 80348a2..8fe106d 100644 --- a/sysdeps/x86_64/fpu/test-double-libmvec-sincos.c +++ b/sysdeps/x86_64/fpu/test-double-libmvec-sincos.c @@ -21,6 +21,7 @@ #define N 1000 double x[N], s[N], c[N]; +double x1[N], s1[N], c1[N]; double* s_ptrs[N]; double* c_ptrs[N]; int arch_check = 1; @@ -28,15 +29,13 @@ int arch_check = 1; static void init_arg (void) { - int i; - CHECK_ARCH_EXT; arch_check = 0; - for(i = 0; i < N; i++) + for(int i = 0; i < N; i++) { - x[i] = i / 3; + x[i] = x1[i] = i / 3; s_ptrs[i] = &s[i]; c_ptrs[i] = &c[i]; } @@ -45,16 +44,19 @@ init_arg (void) static int test_sincos_abi (void) { - int i; - - init_arg (); +#pragma omp simd + for(int i = 0; i < N; i++) + sincos (x[i], s_ptrs[i], c_ptrs[i]); - if (arch_check) - return 77; + return 0; +} +static int +test_sincos_linear_abi (void) +{ #pragma omp simd - for(i = 0; i < N; i++) - sincos (x[i], s_ptrs[i], c_ptrs[i]); + for(int i = 0; i < N; i++) + sincos (x1[i], &s1[i], &c1[i]); return 0; } @@ -62,7 +64,16 @@ test_sincos_abi (void) static int do_test (void) { - return test_sincos_abi (); + init_arg (); + + if (arch_check) + return 77; + + test_sincos_abi (); + + test_sincos_linear_abi (); + + return 0; } #define TEST_FUNCTION do_test () diff --git a/sysdeps/x86_64/fpu/test-float-libmvec-sincosf.c b/sysdeps/x86_64/fpu/test-float-libmvec-sincosf.c index 3b7aad8..fac2152 100644 --- a/sysdeps/x86_64/fpu/test-float-libmvec-sincosf.c +++ b/sysdeps/x86_64/fpu/test-float-libmvec-sincosf.c @@ -21,22 +21,21 @@ #define N 1000 float x[N], s[N], c[N]; -float *s_ptrs[N]; -float *c_ptrs[N]; +float x1[N], s1[N], c1[N]; +float* s_ptrs[N]; +float* c_ptrs[N]; int arch_check = 1; static void init_arg (void) { - int i; - CHECK_ARCH_EXT; arch_check = 0; - for(i = 0; i < N; i++) + for(int i = 0; i < N; i++) { - x[i] = i / 3; + x[i] = x1[i] = i / 3; s_ptrs[i] = &s[i]; c_ptrs[i] = &c[i]; } @@ -45,16 +44,19 @@ init_arg (void) static int test_sincosf_abi (void) { - int i; - - init_arg (); +#pragma omp simd + for(int i = 0; i < N; i++) + sincosf (x[i], s_ptrs[i], c_ptrs[i]); - if (arch_check) - return 77; + return 0; +} +static int +test_sincosf_linear_abi (void) +{ #pragma omp simd - for(i = 0; i < N; i++) - sincosf (x[i], s_ptrs[i], c_ptrs[i]); + for(int i = 0; i < N; i++) + sincosf (x1[i], &s1[i], &c1[i]); return 0; } @@ -62,7 +64,16 @@ test_sincosf_abi (void) static int do_test (void) { - return test_sincosf_abi (); + init_arg (); + + if (arch_check) + return 77; + + test_sincosf_abi (); + + test_sincosf_linear_abi (); + + return 0; } #define TEST_FUNCTION do_test ()