> > In libm.so, I took sinf() -a very often used function, absolutely
> > necessary for any trig stuff- and tried to actually find the differences
> > using
> >
> > objdump:
> >...
> >
> > Do the math, there are 6 more vmov instructions (all between rX and sX
> > registers) in the softfp versions. Ok, if one gives a stall of 20 cycles,
> > how many cycles do we lose in sinf() alone?
> 
> Depends how the function is called. Worst case we loose 17 cycles, best
> case we should be ~10 cycles faster.

A simple benchmark confirms this hypothesis.
softfp is actually faster in many cases.

Paul

#include <math.h>
#define N 100
float x[N], y[N];
void __attribute__((noinline)) foo(void)
{
  int i;

  for (i = 0; i < N; i++)
    {
      // uncomment one of these.
      //x[i] = sinf(y[i]); // hard 15% slower 
      //x[i] = sinf(y[i]) + 1.0; // hard 5% slower
      //x[i] = sinf(y[i] + 1.0); // hard 0.5% slower
      //x[i] = sinf(y[i] + 1.0) + 1.0; // softfp 2.5% slower
    }

}

int main()
{
  int i;
  for (i = 0; i < N; i++)
    y[i] = i / (float) N;
  for (i = 0; i < 100000; i++)
    foo();
  return 0;
}



-- 
To UNSUBSCRIBE, email to debian-arm-requ...@lists.debian.org
with a subject of "unsubscribe". Trouble? Contact listmas...@lists.debian.org
Archive: http://lists.debian.org/201007152229.28361.p...@codesourcery.com

Reply via email to