- NSIS Discussion
- CPUFeatures plug-in
Archive: CPUFeatures plug-in
LoRd_MuldeR
17th February 2013 14:52 UTC
CPUFeatures plug-in
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:
http://nsis.sourceforge.net/CPUFeatures_plug-in
Testing on different CPU's would be appreciated, so I have attached test app ;)
MSG
17th February 2013 21:13 UTC
As a matter of fact I was in need of a 3DNow CPU just two weeks ago. Thanks for sharing!
LoRd_MuldeR
21st February 2013 14:29 UTC
Okay, I hacked in support for 3DNow! and 3DNow!Ex. And I also added a function to get the no. of CPU cores:
http://nsis.sourceforge.net/CPUFeatures_plug-in
(3DNow! support is completely untested, as my last AMD machine died a while ago)
LoRd_MuldeR
21st February 2013 20:16 UTC
Originally posted by LoRd_MuldeR
Okay, I hacked in support for 3DNow! and 3DNow!Ex. And I also added a function to get the no. of CPU cores:
http://nsis.sourceforge.net/CPUFeatures_plug-in
(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.
MSG
22nd February 2013 08:24 UTC
This is going to be really helpful to some people, thank you.
LoRd_MuldeR
22nd February 2013 19:42 UTC
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.
MSG
24th February 2013 18:07 UTC
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. :-)
LoRd_MuldeR
24th February 2013 18:19 UTC
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)
MSG
25th February 2013 09:06 UTC
!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`
Didn't test this, but it looks ok to me.
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..
LoRd_MuldeR
25th February 2013 13:45 UTC
Originally posted by MSG
!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`
Didn't test this, but it looks ok to me.
Okay, thanks! I will give that code a try. And if it works, I will commit.
Originally posted by MSG
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..
Actually I think I
do use the new model (with callback function), so I might be able to simply drop the /NOUNLOAD.
LoRd_MuldeR
25th February 2013 21:23 UTC
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:
http://nsis.sourceforge.net/CPUFeatures_plug-in