[FFmpeg-devel] libavutil simd

Nigel Pearson nigel
Tue Oct 2 05:40:00 CEST 2007

> Alternatively, if there's a reliable way such as /proc/cpuinfo

OK. There are a few alternatives on OS X:

1) There is a utility instead of a file.
Not the same format, but definitely parseable:

% /usr/bin/hostinfo
Mach kernel version:
          Darwin Kernel Version 7.9.0:
Wed Mar 30 20:11:17 PST 2005; root:xnu/xnu-517.12.7.obj~1/RELEASE_PPC

Kernel configured for a single processor only.
1 processor is physically available.
Processor type: ppc7450 (PowerPC 7450)
Processor active: 0
Primary memory available: 512.00 megabytes.
Default processor set: 52 tasks, 134 threads, 1 processors
Load average: 0.16, Mach factor: 0.83

2) Generate such a file first:

system("echo -n 'processor: ' >/proc/cpuinfo");
system("machine >>/proc/cpuinfo");
    system("echo -n 'cpu family: ' >/proc/cpuinfo");
    system("arch >>/proc/cpuinfo");

3) Using the OS X Carbon compatibility library
    to ask the Gestalt Manager:

SInt32 CPU;

if (Gestalt(gestaltNativeCPUfamily, &CPU) == noErr)
     altivec = (CPU == gestaltCPUG4     ||  // G4
                CPU == gestaltCPUG47450 ||  // ,,
                CPU == gestaltCPUApollo ||  // ,,
                CPU == gestaltCPUG47447 ||  // G4 mobile
                CPU == gestaltCPU970    ||  // G5
                CPU == gestaltCPU970FX)     // ,,
     altivec = false;  // probably

None of these are really light-weight enough to be called
multiple times, though. I suspect the Amiga ones are similar.
So either a "call once" guard, or leave this as example code,
and let the calling application deal with it.

And then there is gcc sprinkling Altivec code throughout.
But that is a problem for the compiler maintainers?

Nigel Pearson, nigel at ind.tansu.com.au|"In this city I confess;
Telstra Net. Eng., Sydney, Australia | god is mammon, more is less.
Office: 9202 3900    Fax:  9261 3912 | Off like lemmings at the gun!
Mobile: 0408 664435  Home: 9792 6998 | I know better, still I run"

More information about the ffmpeg-devel mailing list