CPUFeatures plug-in: Difference between revisions

From NSIS Wiki
Jump to navigationJump to search
Line 14: Line 14:
ShowInstDetails show
ShowInstDetails show


; Get CPU flags (this is for debugging!)
; Get CPU flags (this is for debugging!) + CPU count
Section
Section
${CPUFeatures.GetFlags} $0
${CPUFeatures.GetFlags} $0
Line 39: Line 39:


${CPUFeatures.CheckFeature} "MMX2" $0
${CPUFeatures.CheckFeature} "MMX2" $0
DetailPrint "Has MMX: $0"
DetailPrint "Has MMX2: $0"


${CPUFeatures.CheckFeature} "SSE1" $0
${CPUFeatures.CheckFeature} "SSE1" $0
Line 57: Line 57:


${CPUFeatures.CheckFeature} "AVX1" $0
${CPUFeatures.CheckFeature} "AVX1" $0
DetailPrint "Has AVX1: $0"
DetailPrint "Has AVX: $0"


${CPUFeatures.CheckFeature} "AVX2" $0
${CPUFeatures.CheckFeature} "AVX2" $0
Line 77: Line 77:
${CPUFeatures.CheckFeature} "SSE7" $0
${CPUFeatures.CheckFeature} "SSE7" $0
DetailPrint "Has SSE7: $0"
DetailPrint "Has SSE7: $0"
SectionEnd
; Check multiple features at once
; Returns only "yes", if *all* features are supported
Section
${CPUFeatures.CheckAllFeatures} "MMX1,SSE1" $0
DetailPrint "Has MMX+SSE: $0"
${CPUFeatures.CheckAllFeatures} "MMX1,3DNOW" $0
DetailPrint "Has MMX1+3DNOW: $0"
${CPUFeatures.CheckAllFeatures} "MMX1,SSE1,SSE2,SSE3,SSSE3" $0
DetailPrint "Has MMX+SSE+SSE2+SSE3+SSSE3: $0"
${CPUFeatures.CheckAllFeatures} "MMX1,SSE1,SSE2,SSE3,SSSE3,SSE4" $0
DetailPrint "Has MMX+SSE+SSE2+SSE3+SSSE3+SSE4: $0"
; Next call is supposed to fail!
${CPUFeatures.CheckAllFeatures} "MMX1,SSE1,SSE2,SSE3,SSSE3,SSE7" $0
DetailPrint "Has MMX+SSE+SSE2+SSE3+SSSE3+SSE7: $0"
SectionEnd</highlight-nsis>
SectionEnd</highlight-nsis>



Revision as of 19:09, 22 February 2013

Author: LoRd MuldeR (talk, contrib)


This very simple plug-in can detect the supported CPU features (MMX, SSE, AVX, etc) at runtime.

It is based on CPU detection code from the x264 project.

Example

How to use the CPUFeatures plug-in:

!include "CPUFeatures.nsh"
 
RequestExecutionLevel user
ShowInstDetails show
 
; Get CPU flags (this is for debugging!) + CPU count
Section
	${CPUFeatures.GetFlags} $0
	DetailPrint "CPU Flags: $0"
 
	${CPUFeatures.GetCount} $0
	DetailPrint "CPU Count: $0"
SectionEnd
 
; Get all supported features + vendor name
Section
	${CPUFeatures.GetFeatures} $0
	DetailPrint "CPU Features: $0"
 
	${CPUFeatures.GetVendor} $0
	DetailPrint "CPU Vendor: $0"
SectionEnd
 
; Check individual feature flags
; Find a list of supported feature flags in CPUFeatures.nsh!
Section
	${CPUFeatures.CheckFeature} "MMX1" $0
	DetailPrint "Has MMX: $0"
 
	${CPUFeatures.CheckFeature} "MMX2" $0
	DetailPrint "Has MMX2: $0"
 
	${CPUFeatures.CheckFeature} "SSE1" $0
	DetailPrint "Has SSE: $0"
 
	${CPUFeatures.CheckFeature} "SSE2" $0
	DetailPrint "Has SSE2: $0"
 
	${CPUFeatures.CheckFeature} "SSE3" $0
	DetailPrint "Has SSE3: $0"
 
	${CPUFeatures.CheckFeature} "SSSE3" $0
	DetailPrint "Has SSSE3: $0"
 
	${CPUFeatures.CheckFeature} "SSE4.2" $0
	DetailPrint "Has SSE4.2: $0"
 
	${CPUFeatures.CheckFeature} "AVX1" $0
	DetailPrint "Has AVX: $0"
 
	${CPUFeatures.CheckFeature} "AVX2" $0
	DetailPrint "Has AVX2: $0"
 
	${CPUFeatures.CheckFeature} "3DNOW" $0
	DetailPrint "Has 3DNOW: $0"
 
	${CPUFeatures.CheckFeature} "3DNOW_EX" $0
	DetailPrint "Has 3DNOW_EX: $0"
 
	${CPUFeatures.CheckFeature} "FMA3" $0
	DetailPrint "Has FMA3: $0"
 
	${CPUFeatures.CheckFeature} "FMA4" $0
	DetailPrint "Has FMA4: $0"
 
	; Next call is supposed to fail!
	${CPUFeatures.CheckFeature} "SSE7" $0
	DetailPrint "Has SSE7: $0"
SectionEnd
 
; Check multiple features at once
; Returns only "yes", if *all* features are supported
Section
	${CPUFeatures.CheckAllFeatures} "MMX1,SSE1" $0
	DetailPrint "Has MMX+SSE: $0"
 
	${CPUFeatures.CheckAllFeatures} "MMX1,3DNOW" $0
	DetailPrint "Has MMX1+3DNOW: $0"
 
	${CPUFeatures.CheckAllFeatures} "MMX1,SSE1,SSE2,SSE3,SSSE3" $0
	DetailPrint "Has MMX+SSE+SSE2+SSE3+SSSE3: $0"
 
	${CPUFeatures.CheckAllFeatures} "MMX1,SSE1,SSE2,SSE3,SSSE3,SSE4" $0
	DetailPrint "Has MMX+SSE+SSE2+SSE3+SSSE3+SSE4: $0"
 
	; Next call is supposed to fail!
	${CPUFeatures.CheckAllFeatures} "MMX1,SSE1,SSE2,SSE3,SSSE3,SSE7" $0
	DetailPrint "Has MMX+SSE+SSE2+SSE3+SSSE3+SSE7: $0"
SectionEnd

License

CPUFeatures plug-in for NSIS
Copyright (C) 2013 LoRd_MuldeR <mulder2@gmx.de>
Copyright (C) 2003-2013 x264 project

This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.

This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
GNU General Public License for more details.

You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA

Please see the GNU General Public License for details!

Download

Download current version:
CPUFeatures.2013-02-22.zip‎ (89 KB)

Source Code

Public Git Repository:
git://github.com/lordmulder/CPUFeaturesLib.git (Browse)

Public SVN Repository:
http://code.google.com/p/mulder/source/browse/trunk/Utils/CPUFeatures/

Support

Discussion:
http://forums.winamp.com/showthread.php?t=355951

E-Mail:
MuldeR2 (at) gmx (dot) de