On Jun 10, 2005, at 12:18 AM, Eric Albert wrote:
On Jun 10, 2005, at 12:01 AM, Alex Telitsine wrote:
Compiler fails on _mm_lddqu_si128, while "sysctlbyname" supports "hw.optional.sse3".
(btw, add detection of hyperthreading in "hw.*" as well). Please add SSE3 in the next XC update. Absence of SSE3 support hurts video encoding speed.
SSE3 is supported; it just isn't enabled by default as MMX, SSE, and SSE2 are. This is described on page 58 of the Universal Binary Programming Guide. If you pass -msse3 to the compiler, _mm_lddqu_si128 works. It'd probably be useful if Xcode had a check box for enabling SSE3 rather than requiring you to add -msse3 to "Other C Flags". If you'd like that, please file a bug report.
Compiler receives -msse3 (PER_ARCH_CFLAGS_i386=-msse3) :
/usr/bin/gcc-4.0 -x c -arch i386 <skipped> -msse3 <skipped>
Compiler fails:
BlockOps16_intr.c:1154: warning: implicit declaration of function '_mm_lddqu_si128'
BlockOps16_intr.c:1154: error: incompatible type for argument 1 of '_mm_avg_epu8'
Text of line 1154:
p= _mm_avg_epu8(_mm_lddqu_si128((__m128i*)a),_mm_lddqu_si128((__m128i*)b) );
All SSE2 intrinsics compiles fine in the text above. I've filed is as a bug report.
As for detecting Hyper-Threading, that's really a matter for darwin-dev rather than here, but you can determine whether it's supported by checking if hw.logicalcpu_max > hw.physicalcpu_max, and you can see if it's currently enabled by checking if hw.logicalcpu > hw.physicalcpu.
That's great. Thanks for a hint.
@