[Bug target/56586] New: ARM vfpv3: Not using FPU (vsqrt op) for sqrt() / sqrtf()

egnor at google dot com gcc-bugzilla@gcc.gnu.org
Sun Mar 10 06:08:00 GMT 2013


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=56586

             Bug #: 56586
           Summary: ARM vfpv3: Not using FPU (vsqrt op) for sqrt() /
                    sqrtf()
    Classification: Unclassified
           Product: gcc
           Version: 4.7.2
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: target
        AssignedTo: unassigned@gcc.gnu.org
        ReportedBy: egnor@google.com


I have gcc built for armeb-unknown-eabi-gcc, using --with-fpu=vfpv3-d16.  (I'm
using a Cortex R4-based T.I. TMS570 chip, but I expect this would happen with
any ARM vfpv3 target.)

When I compile code that uses sqrt() or sqrtf(), it emits a call to those
functions, which are defined in libg.  Those functions compute the square root
in software.

Expected behavior is to use the available vsqrt.f32 or vsqrt.f64 opcodes, which
calculate a lovely square root very quickly.

(Sample code available, but it's trivial: "double foo(double x) { return
sqrt(x); }".)

I see a patch to improve vsqrt handing for AArch64
(http://gcc.gnu.org/ml/gcc-patches/2013-01/msg00411.html) but I don't think
that would apply to the 32-bit ARM chips I'm using.

gcc -v output:
=====
Using built-in specs.
COLLECT_GCC=./third_party/car/embedded/toolchains/gcc_tms570/bin/armeb-unknown-eabi-gcc
COLLECT_LTO_WRAPPER=/google/src/cloud/egnor/control/google3/third_party/car/embedded/toolchains/gcc_tms570/bin/../libexec/gcc/armeb-unknown-eabi/4.7.2/lto-wrapper
Target: armeb-unknown-eabi
Configured with: ../gcc-4.7.2/configure
--prefix=/usr/local/google/armeb/toolchain --build=x86_64-cross-linux-gnu
--target=armeb-unknown-eabi --host=x86_64-cross-linux-gnu
--with-sysroot=/usr/local/google/armeb/sysroot --with-newlib
--with-headers=../newlib-1.19.0/newlib/libc/include --disable-nls
--enable-languages=c,c++ --enable-c99 --enable-long-long
--with-mpfr=/usr/local/google/armeb/toolchain
--with-gmp=/usr/local/google/armeb/toolchain
--with-mpc=/usr/local/google/armeb/toolchain --disable-multilib
--with-abi=aapcs --with-arch=armv7-r --with-mode=thumb --with-float=hard
--with-fpu=vfpv3-d16 --disable-threads --disable-shared --disable-libgomp
--disable-libmudflap --disable-libssp
Thread model: single
gcc version 4.7.2 (GCC) 
======



More information about the Gcc-bugs mailing list