public inbox for libc-alpha@sourceware.org
 help / color / mirror / Atom feed
From: Stefan Liebler <stli@linux.ibm.com>
To: libc-alpha@sourceware.org
Subject: Re: [PATCH 01/17] S390: Use load-fp-integer instruction for nearbyint functions.
Date: Tue, 05 Nov 2019 15:49:00 -0000	[thread overview]
Message-ID: <ee15f9ef-bb5c-293d-fd91-94f6a0ad549c@linux.ibm.com> (raw)
In-Reply-To: <fc754475-f2cd-cb07-c527-1ccc567a4868@linaro.org>

On 11/4/19 7:22 PM, Adhemerval Zanella wrote:
> 
> 
> On 04/11/2019 12:27, Stefan Liebler wrote:
>> If compiled with z196 zarch support, the load-fp-integer instruction
>> is used to implement nearbyint, nearbyintf, nearbyintl.
>> Otherwise the common-code implementation is used.
> 
>> +
>> +double
>> +__nearbyint (double x)
>> +{
>> +  double y;
>> +  /* The z196 zarch "load fp integer" (fidbra) instruction is rounding
>> +     x to the nearest integer according to current rounding mode (M3-field: 0)
>> +     where inexact exceptions are suppressed (M4-field: 4).  */
>> +  __asm__ ("fidbra %0,0,%1,4" : "=f" (y) : "f" (x));
>> +  return y;
>> +}
>> +libm_alias_double (__nearbyint, nearbyint)
> 
> At least with recent gcc __builtin_nearbyint generates the expected fidbra
> instruction for -march=z196.  I wonder if we could start to simplify some
> math symbols implementation where new architectures/extensions provide
> direct implementation by a direct mapping implemented by compiler builtins.
> 
> I would expect to:
> 
>    1. Move all sysdeps/ieee754/dbl-64/wordsize-64 to sysdeps/ieee754/dbl-64/
>       since I hardly doubt these micro-optimizations really pay off with
>       recent architectures and compiler version.
> 
>    2. Add internal macros __USE_<SYMBOL>_BUILTIN and use as:
> 
>       * sysdeps/ieee754/dbl-64/s_nearbyint.c
>       
>       [...]
>       double
>       __nearbyint (double x)
>       {
>       #if __USE_NEARBYINT_BUILTIN
>         return __builtin_nearbyint (x);
>       #else
>         /* Use generic implementation.  */
>       #endif
>       }
> 
>    3. Define the __USE_<SYMBOL>_BUILTIN for each architecture.
> 
> It would allow to simplify some architectures, aarch64 for instance.
> 

Currently the long double builtins are generating an extra not needed 
stack frame compared to the inline assembly. But this needs to be fixed 
in gcc.

E.g. if build for s390 (31bit), where the fidbra & co instructions are 
not available, the builtins generate a call to libc which would end in 
an infinite loop.  I will make some tests on s390 starting with the 
current minimum gcc 6.2 to be sure that the instructions are used.  I 
have never build glibc with other compilers like clang.  Is there a 
special need to check this behavior?

In general I can start with those functions where the builtins can be 
used on s390, but I won't move all wordsize-64 functions and adjust them 
to use the builtins with this patch series.
This means for now, I start with using builtins for nearbyint, rint, 
floor, ceil, trunc, round and copysign.

Afterwards the same can be done for the remaining functions.

I will create an own header file, e.g. 
sysdeps/generic/math-use-builtins.h in the same way as 
fix-fp-int-compare-invalid.h.
The generic version contains all USE_XYZ_BUILTIN macros defined to 0
and each architecture can provide its own file with other settings.
For each functions XYZ there will be three macros, e.g. 
USE_NEARBYINT_BUILTIN, USE_NEARBYINTF_BUILTIN, USE_NEARBYINTL_BUILTIN.
How about this?

Thanks,
Stefan

  reply	other threads:[~2019-11-05 15:49 UTC|newest]

Thread overview: 40+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2019-11-04 15:28 Stefan Liebler
2019-11-04 15:28 ` [PATCH 10/17] S390: Use convert-to-fixed instruction for lround functions Stefan Liebler
2019-12-02 14:56   ` Stefan Liebler
2019-11-04 15:28 ` [PATCH 17/17] S390: Use sysdeps/ieee754/dbl-64/wordsize-64 on s390x Stefan Liebler
2019-12-02 14:57   ` Stefan Liebler
2019-11-04 15:28 ` [PATCH 13/17] S390: Implement libc_fe* macros Stefan Liebler
2019-12-02 14:58   ` Stefan Liebler
2019-11-04 15:28 ` [PATCH 15/17] S390: Implement math-barriers math_opt_barrier and math_force_eval Stefan Liebler
2019-12-02 14:57   ` Stefan Liebler
2019-11-04 15:28 ` [PATCH 04/17] S390: Use load-fp-integer instruction for ceil functions Stefan Liebler
2019-12-02 14:56   ` Stefan Liebler
2019-11-04 15:28 ` [PATCH 05/17] S390: Use load-fp-integer instruction for trunc functions Stefan Liebler
2019-12-02 14:57   ` Stefan Liebler
2019-11-04 15:28 ` [PATCH 06/17] S390: Use load-fp-integer instruction for round functions Stefan Liebler
2019-12-02 14:58   ` Stefan Liebler
2019-11-04 15:28 ` [PATCH 03/17] S390: Use load-fp-integer instruction for floor functions Stefan Liebler
2019-12-02 14:56   ` Stefan Liebler
2019-11-04 15:28 ` [PATCH 08/17] S390: Use convert-to-fixed instruction for lrint functions Stefan Liebler
2019-12-02 14:57   ` Stefan Liebler
2019-11-04 15:28 ` [PATCH 12/17] S390: Use copy-sign instruction for copysign functions Stefan Liebler
2019-12-02 14:57   ` Stefan Liebler
2019-11-04 15:28 ` [PATCH 07/17] S390: Use load-fp-integer instruction for roundeven functions Stefan Liebler
2019-12-02 15:04   ` Stefan Liebler
2019-12-11 14:18     ` Stefan Liebler
2019-11-04 15:49 ` [PATCH 16/17] S390: Implement roundtoint and converttoint and define TOINT_INTRINSICS Stefan Liebler
2019-12-02 14:57   ` Stefan Liebler
2019-11-04 15:54 ` [PATCH 02/17] S390: Use load-fp-integer instruction for rint functions Stefan Liebler
2019-12-02 14:57   ` Stefan Liebler
2019-11-04 16:04 ` [PATCH 14/17] S390: Use libc_fe* macros in fe* functions Stefan Liebler
2019-12-02 14:56   ` Stefan Liebler
2019-11-04 16:27 ` [PATCH 11/17] S390: Use convert-to-fixed instruction for llround functions Stefan Liebler
2019-12-02 14:57   ` Stefan Liebler
2019-11-04 16:28 ` [PATCH 09/17] S390: Use convert-to-fixed instruction for llrint functions Stefan Liebler
2019-12-02 14:57   ` Stefan Liebler
2019-11-04 18:22 ` [PATCH 01/17] S390: Use load-fp-integer instruction for nearbyint functions Adhemerval Zanella
2019-11-05 15:49   ` Stefan Liebler [this message]
2019-11-05 16:48     ` Joseph Myers
2019-11-05 18:55     ` Adhemerval Zanella
2019-12-02 14:56   ` Stefan Liebler
2019-12-02 15:20     ` Adhemerval Zanella

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=ee15f9ef-bb5c-293d-fd91-94f6a0ad549c@linux.ibm.com \
    --to=stli@linux.ibm.com \
    --cc=libc-alpha@sourceware.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).