This is the mail archive of the gcc@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: Code size issues on FP-emulation on libgcc compared to LLVM's compiler_rt


On Tue, Jun 30, 2015 at 4:33 AM, Zinovy Nis <zinovy.nis@gmail.com> wrote:
> Hi.
>
>
> I'm building libgcc for a "iamcu" target (Pentium-like but with
> soft-fp emulation, the only x86 with SoftFP I know) with
> --enable-target-optspace.

Support for  i?86*-*-elfiamcu target has been checked in as of
revision 225199.

>
> It works properly but I noticed that code the size for many arithmetic
> functions is much more larger than for soft-fp emulation provided by
> LLVM's compiler_rt library.
>
> For example addsf3 (addition of 2 floats) is 0.5K in compiler_rt and 1K in gcc!
>
>
> I double-checked compiler options and they are correct: -Os.
>
>
> Is it because of
>
>    a) compiler_rt doesn't perform some checks (FP exception for example) or
>
>    b) compiler_rt is incorrect in some corner cases or
>
>    c) inefficient implementation in libgcc?
>
>
> Did anyone face with this problem?
>
> How to reproduce:
>
> First you need to build gcc for iamcu:
>
>   INSTALL=<your install dir>
>
>  TARGET=i586-intel-elfiamcu
>
>   ./configure --host=x86_64-unknown-linux-gnu --enable-target-optspace
> --target=${TARGET} --prefix=${INSTALL} --with-demangler-in-ld
> --enable-languages=c MAKEINFO=missing --disable-multilib
> --disable-libitm --disable-libatomic --disable-libssp
> --disable-libquadmath --with-newlib && make -j $(nproc) && make
> install
>
>
> libgcc
>
>   Let's get size of two float addition operation:
>
>   nm -S -t dec --defined-only
> $(INSTALL)/lib/gcc/i586-intel-elfiamcu/4.9.3/libgcc.a | grep _addsf3
>
> I get:
>
>   00000000 00001039 T __addsf3
>
>   So the size is ~1K
>
> compiler_rt
>
>   svn co http://llvm.org/svn/llvm-project/compiler-rt/trunk compiler-rt
>
>   cd compiler_rt/lib/builtins
>
>   Compile: $(INSTALL)/bin/i586-intel-elfiamcu-gcc -Os  addsf3.c -c
>
>   Check function size:  nm -S -t dec addsf3.o
>
> I get:
>
>   00000000 00000522 T __addsf3
>
>   So the size is ~0.5K.
>
> Why so large difference in libgcc and compiler_rt for the same functionality?
>

The size difference comes from soft-fp implementation, not from compiler
codegen.  Does soft-fp have higher accuracy and more features?


-- 
H.J.


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