This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: [PATCH, ARM] Improve 64 bit division performance


Ping?

Ramana mentioned at Linaro Connect that this should be tested on more platforms.

I've now checked this on qemu with no regressions on trunk for:
arm-unknown-linux-gnueabihf v7-A: ARM and Thumb-2
arm-unknown-linux-gnueabi v4t, v5t, v6: ARM

OK for trunk?

Archive link: http://gcc.gnu.org/ml/gcc-patches/2014-02/msg01611.html

On 27 February 2014 16:38, Charles Baylis <charles.baylis@linaro.org> wrote:
> [resending as text/plain]
>
> Hi
>
> These patches optimise 64 bit division by removing the use of the
> __gnu_[u]ldivmod_helper functions and hence avoiding the redundant
> calculation of the remainder in those functions.
>
> Bootstrapped, tested and checked for arm-unknown-linux-gnueabihf.
>
> Benchmarked on Chromebook and Raspberry Pi using attached divbench3.c.
> Loop1 varies the divisor and loop2 varies the dividend.
>
> Chromebook:
>
> before:
> loop1 unsigned:         3.474419
> loop2 unsigned:         6.564871
> loop1 signed:           4.127967
> loop2 signed:           6.071490
>
> after:
> loop1 unsigned:         2.781364
> loop2 unsigned:         6.166478
> loop1 signed:           2.800974
> loop2 signed:           6.129588
>
> Raspberry pi:
> before
> loop1 unsigned:        28.881753
> loop2 unsigned:        19.876385
> loop1 signed:          32.074941
> loop2 signed:          20.594860
>
> after:
> loop1 unsigned:        24.893846
> loop2 unsigned:        19.537562
> loop1 signed:          25.334509
> loop2 signed:          19.615088
>
> Any comments? OK for stage 1?
>
>
> Patch 1:
>
> 2014-02-27  Charles Baylis  <charles.baylis@linaro.org>
>
>         * config/arm/bpabi.S (__aeabi_uldivmod): Perform division using call
>         to __udivmoddi4.
>
>
> Patch 2:
>
> 2014-02-27  Charles Baylis  <charles.baylis@linaro.org>
>
>         * config/arm/bpabi.S (__aeabi_ldivmod): Perform signed division via
>         call to __udivmoddi4 and fixing up for negative operands.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]