From: Adhemerval Zanella <adhemerval.zanella@linaro.org>
To: libc-alpha@sourceware.org
Subject: Re: [PATCH 01/17] S390: Use load-fp-integer instruction for nearbyint functions.
Date: Tue, 05 Nov 2019 18:55:00 -0000 [thread overview]
Message-ID: <4cdb552e-5b56-4e43-a33b-44ec9892cc3f@linaro.org> (raw)
In-Reply-To: <ee15f9ef-bb5c-293d-fd91-94f6a0ad549c@linux.ibm.com>
On 05/11/2019 12:49, Stefan Liebler wrote:
> 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?
I think google maintains some branches with clang support (google/grte/*),
but there is no know effort to sync these with master. So I see there is
no need to focus on non-gcc compiler for now.
>
> 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?
>
I think it is fair start, with the adjustments pointed out by Joseph.
I will check out the worksize-64 refactor to avoid duplicate the
implementations.
next prev parent reply other threads:[~2019-11-05 18:55 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 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 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: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 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 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 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 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 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 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 10/17] S390: Use convert-to-fixed instruction for lround functions Stefan Liebler
2019-12-02 14:56 ` 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
2019-11-05 16:48 ` Joseph Myers
2019-11-05 18:55 ` Adhemerval Zanella [this message]
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=4cdb552e-5b56-4e43-a33b-44ec9892cc3f@linaro.org \
--to=adhemerval.zanella@linaro.org \
--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).