I was playing around with gcc this morning, and looking at the assembler
code produced by the 64-bit Ubuntu. Obviously all the "float" data types is
not going to perform any magic, but I thought I would see what switches
might make it work.

Well after looking at many options, none of them worked. The compiler more
often than not converted between doubles and floats willy-nilly.

Not a big deal on a GUI app, and all that float stuff was, I assume, to
benefit the ARM firmware, where it probably does the right thing, as there
are no doubles.

Anyway, one last test, I added "-m32 -mfpmath=387" and that required me to
install "libc6-dev-i386" which I could have saved time by just booting up
my 32-bit virtual Ubuntu :-)

But anyway, it did fill the directory with 32-bit applications. I don't
know if there are any advantages to running a 32-bit App on a 64-bit
machine though.

What I also looked at was to see if the optimizer would optimize out a
double multiply in sine.c. Alas, it does not.

in "hs_pitch_refinement" and "estimate_amplitudes"  there's loops that do
two multiplies where it could do only one:

    Wo = TWO_PI/p;

    /* Sum harmonic magnitudes */
    for(m=1; m<=model->L; m++) {
        b = (int)(m*Wo*one_on_r + 0.5);     <---- two mult
        E += Sw[b].real*Sw[b].real + Sw[b].imag*Sw[b].imag;
    }

and

    one_on_r = 1.0/r;

    for(m=1; m<=model->L; m++) {
       den = 0.0;
       am = (int)((m - 0.5)*model->Wo*one_on_r + 0.5);<---  two mult
       bm = (int)((m + 0.5)*model->Wo*one_on_r + 0.5);<---  two mult

I changed mine to:

    Wo = TAU / p;
    tmp = Wo * one_on_r;

    /* Sum harmonic magnitudes */
    for (m = 1; m <= model->L; m++) {
        b = (int) (m * tmp + 0.5f);   <---- one mult
        E += Sw[b].real * Sw[b].real + Sw[b].imag * Sw[b].imag;
    }

and

    one_on_r = model->Wo * (1.0/r);

    for (m = 1; m <= model->L; m++) {
        den = 0.0;
        am = (int) ((m - 0.5f) * one_on_r + 0.5f);<--- one mult
        bm = (int) ((m + 0.5f) * one_on_r + 0.5f);<--- one mult

That's all I know...
------------------------------------------------------------------------------
_______________________________________________
Freetel-codec2 mailing list
Freetel-codec2@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/freetel-codec2

Reply via email to