This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
Re: [PATCH, ARM] Improve 64 bit division performance
- From: Charles Baylis <charles dot baylis at linaro dot org>
- To: GCC Patches <gcc-patches at gcc dot gnu dot org>, Ramana Radhakrishnan <Ramana dot Radhakrishnan at arm dot com>, Richard Earnshaw <rearnsha at arm dot com>
- Date: Wed, 23 Apr 2014 12:18:41 +0100
- Subject: Re: [PATCH, ARM] Improve 64 bit division performance
- Authentication-results: sourceware.org; auth=none
- References: <CADnVucCt+c7adXBASfRkKFvYr+fdixQccegHAGsGGpu0uHmbSg at mail dot gmail dot com> <CADnVucDOc85gQyAR+G45suuCRNHjznQAzcxrg9YB1yjF+QP-Ww at mail dot gmail dot com>
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.