Hi!
I recently created a plug-in to detect the CPU features (MMX, SSE, AVX, etc) at runtime. Since I didn't want to re-invent the wheel, I simply created a wrapper-library around the CPU detection code from x264 and then built the NSIS plug-in on top. This was mainly created for my own needs, but I though it might be useful for others too.
Note: Some CPU features are not currently detected, such as "3DNow!", because it probably was never relevant for x264. I maybe will hack that in at a later time, if anybody still needs that nowadays. Also there are some x264-specifc flags you can simply ignore...
Wiki page:
Testing on different CPU's would be appreciated, so I have attached test app 😉
CPUFeatures plug-in
11 posts
As a matter of fact I was in need of a 3DNow CPU just two weeks ago. Thanks for sharing!
Okay, I hacked in support for 3DNow! and 3DNow!Ex. And I also added a function to get the no. of CPU cores:
(3DNow! support is completely untested, as my last AMD machine died a while ago)
(3DNow! support is completely untested, as my last AMD machine died a while ago)
Okay, I ask a friend to test the new version on his AMD and 3DNow!(Ex) detection seems to work as expected.Originally Posted by LoRd_MuldeR View PostOkay, I hacked in support for 3DNow! and 3DNow!Ex. And I also added a function to get the no. of CPU cores:
(3DNow! support is completely untested, as my last AMD machine died a while ago)
This is going to be really helpful to some people, thank you.
You're welcome.
I just added another function to check for multiple features at once. Might simplify things a bit in some situations, I think.
I just added another function to check for multiple features at once. Might simplify things a bit in some situations, I think.
If you feel crazy, you could maybe write wrapper macros for ${If} ${Supports3DNow!} or ${If} ${CPUSupports} "MMX" or something. But only if you feel crazy. :-)
Unfortunately I'm not enough crazy to understand LogicLib 😉
(I mean that I understand how to use it, actually I use it extensively, but I have not been able to follow its code)
(I mean that I understand how to use it, actually I use it extensively, but I have not been able to follow its code)
Didn't test this, but it looks ok to me.!macro _CPUSupports _a _b _t _f
!insertmacro _LOGICLIB_TEMP
push `${_b}`
CPUFeatures::CheckCPUFeature /NOUNLOAD
Pop $_LOGICLIB_TEMP
!insertmacro _= $_LOGICLIB_TEMP `yes` `${_t}` `${_f}`
!macroend
!define CPUSupports `"" _CPUSupports`
By the way, I see you're still using /NOUNLOAD. If you're still using the old plugin model, you might want to update it..
Okay, thanks! I will give that code a try. And if it works, I will commit.Originally Posted by MSG View PostDidn't test this, but it looks ok to me.!macro _CPUSupports _a _b _t _f
!insertmacro _LOGICLIB_TEMP
push `${_b}`
CPUFeatures::CheckCPUFeature /NOUNLOAD
Pop $_LOGICLIB_TEMP
!insertmacro _= $_LOGICLIB_TEMP `yes` `${_t}` `${_f}`
!macroend
!define CPUSupports `"" _CPUSupports`
Actually I think I do use the new model (with callback function), so I might be able to simply drop the /NOUNLOAD.Originally Posted by MSG View PostBy the way, I see you're still using /NOUNLOAD. If you're still using the old plugin model, you might want to update it..
Okay, I added the LogicLib support macros, as suggested.
But in the last line it must be _== instead of _=. That gave me quite a headache! 😉
New version here:
But in the last line it must be _== instead of _=. That gave me quite a headache! 😉
New version here: