[FFmpeg-devel] Input requested on floating point decomposition for AAC Main

Alex Converse alex.converse
Tue Nov 11 20:59:28 CET 2008


On Tue, Nov 11, 2008 at 5:21 AM, Jason Garrett-Glaser
<darkshikari at gmail.com> wrote:
> On Mon, Nov 10, 2008 at 10:39 PM, Alex Converse <alex.converse at gmail.com> wrote:
>> To do 16-bit floating point rounding for AAC-Main, I need a function
>> that will decompose a float into a normalized scheme and it's
>> exponent. Conveniently there exists the x87 instruction FXTRACT for
>> this very purpose.
>
> Are you sure this is a good idea?  FXTRACT takes 170 clock cycles on
> Core 2, according to Agner, making it the single slowest floating
> point operation in x86 history, perhaps competing with FBSTP.
>

Hmm, FXTRACT may be slow but it appears to not be as slow as frexpf.
On my Core2 Duo I'm getting:
40092570 dezicycles in t_fxtract, 2 runs, 0 skips
142385760 dezicycles in t_frexpf, 2 runs, 0 skips

for this test code:
float t1() {
    float j, f, g;
    START_TIMER("t_fxtract");
    for (j = 1.0f; j <= 1048576.0f; j++)
        g = fxtract(j, &f);
    STOP_TIMER("t_fxtract");
    return g;
}

float t2() {
    int i, j;
    float h;
    START_TIMER("t_frexpf");
    for (j = 1.0f; j <= 1048576.0f; j++)
        h = frexpf(j, &i);
    STOP_TIMER("t_frexpf");
    return h;
}

--Alex




More information about the ffmpeg-devel mailing list