[FFmpeg-devel] [PATCH] split-radix FFT

Måns Rullgård mans
Wed Aug 6 10:31:40 CEST 2008


Loren Merritt <lorenm at u.washington.edu> writes:

> On Tue, 5 Aug 2008, M?ns Rullg?rd wrote:
>> Loren Merritt <lorenm at u.washington.edu> writes:
>>
>>> @@ -829,6 +838,7 @@ mmx2_deps="x86 mmx"
>>>  neon_deps="armv4l"
>>>  ssse3_deps="x86"
>>>  vis_deps="sparc"
>>> +yasm_deps="x86 mmx"
>>
>> What is the purpose of this?  Yasm is only used on x86, and it could
>> be used for non-mmx code.  (Side-note: should we separate mmx/sse/sse2?)
>> Either way, that line is in the wrong place; yasm is not a CPU feature.
>
> I added that because I replaced a HAVE_MMX with a HAVE_YASM, but I
> guess it's not needed.

Yes, since SIMD support is detected at runtime, it is enough check
whether the code will build.

>> What is the correct value for objformat on win64?
>
> "win64"
>
> Hmm, specifying arch separately is an alternative to including bitness
> in the objformat, so I can simplify the case too.
>
>>> @@ -1534,6 +1551,25 @@ EOF
>>>      enabled mmx2  && check_asm mmx2  '"movss %xmm0, %xmm0"'
>>>
>>>      check_asm bswap '"bswap %%eax" ::: "%eax"'
>>> +
>>> +    enable yasm
>>> +    if enabled x86_64; then
>>> +        YASMFLAGS="-DARCH_X86_64"
>>> +        enabled shared && append YASMFLAGS "-DPIC"
>>> +        case "$objformat" in
>>> +            elf) objformat="elf64";;
>>> +            macho) objformat="macho64";;
>>> +            win32) disable yasm;;
>>
>> As I said, we shouldn't break win64 (even if I don't care personally).
>
> With this line, nothing breaks, only a speed regression in mdct

I call that a form of breakage.

> codecs. Without this line, it would break until someone ports the
> calling convention macros.

Ramiro apparently has a win64 system.  Maybe he can help.

> OK, I'll try. Here's a completely untested attempt at win64.
> I have intentionally omitted the complex stack frame mandated by the
> win64 abi. I'm not entirely sure what effect this omission has, but
> Squid_80 tells me that all it should do is confuse the exception
> handler in the event of a crash.

Why, oh why, do they always make things so complicated in windows?

>> Hmm, maybe YASMFLAGS="-DARCH_$(toupper $arch) -f $objformat"
>
> done
>
>>> +    check_yasm "pabsw xmm0, xmm0" || disable yasm
>>
>> Come to think of it, isn't enough to check_cmd yasm --version?  Either
>> it's there, or it's not.
>
> Either it's there, or it's not, or it's an obsolete version. I don't
> want more variants of HAVE_SSSE3 than necessary. And if not ssse3, I'd
> still have to check if it's too old to support x86_64.

Good point.  Keep the check.  I don't know which instructions belong
to which category of mmx, mmx2 mmxext, sse, sse2, sse3, ssse3, sse4,
sse4.5, ssssse5, etc. (and I have no intention of learning it), so it
wasn't obvious to me what was being tested.

> @@ -1534,6 +1550,15 @@ EOF
>      enabled mmx2  && check_asm mmx2  '"movss %xmm0, %xmm0"'
>
>      check_asm bswap '"bswap %%eax" ::: "%eax"'
> +
> +    YASMFLAGS="-f $objformat -DARCH_$(toupper $arch)"
> +    enabled x86_64 && append YASMFLAGS "-m amd64"
> +    enabled_all x86_64 shared && append YASMFLAGS "-DPIC"
> +    case "$objformat" in
> +        elf*) enabled debug && append YASMFLAGS "-g dwarf2";;
> +        *) append YASMFLAGS "-DPREFIX";;
> +    esac

This bit could use be written a bit prettier.  I'm thinking something
like this:

    enabled     x86_64        && append YASMFLAGS "-m amd64"
    enabled_all x86_64 shared && append YASMFLAGS "-DPIC"
    case "$objformat" in
        elf*) enabled debug && append YASMFLAGS "-g dwarf2" ;;
        *)                     append YASMFLAGS "-DPREFIX"  ;;
    esac

The rest is OK.

If nobody steps up to test this on win64, I suggest we simply check it
in, and deal with any bugreports that might result.

-- 
M?ns Rullg?rd
mans at mansr.com




More information about the ffmpeg-devel mailing list