@Helle:
Toller Code, wirklich klasse.
Weist du auch wie man auf die neueren Technologien prüfen kann? (VT-x, VT-i, AMD-V, SSE4.1, SSE4.2)
Code: Alles auswählen
Procedure Support_InstructionSetExtensionCheck()
!pushfd
!pop eax
!mov edx,eax
!xor edx,$200000
!push edx
!popfd
!pushfd
!pop edx
!push eax
!popfd
!cmp eax,edx
!jz l_iscpuid
ProcedureReturn #True
IsCPUID:
EndProcedure
Procedure Support_MMX()
!mov eax,1h
!cpuid
!test edx, $800000
!jz l_nommx
ProcedureReturn #True
NOMMX:
EndProcedure
Procedure Support_SSE()
!mov eax,1h
!cpuid
!test edx, $2000000
!jz l_nosse
ProcedureReturn #True
NOSSE:
EndProcedure
Procedure Support_SSE2()
!mov eax,1h
!cpuid
!test edx, $4000000
!jz l_nosse2
ProcedureReturn #True
NOSSE2:
EndProcedure
Procedure Support_SSE3()
!mov eax,1h
!cpuid
!test ecx, $1
!jz l_nosse3
ProcedureReturn #True
NOSSE3:
EndProcedure
Procedure Support_SSSE3()
!mov eax,1h
!cpuid
!test ecx, $200
!jz l_nossse3
ProcedureReturn #True
NOSSSE3:
EndProcedure
Procedure Support_CMOVcc()
!mov eax,1h
!cpuid
!test edx,$8000
!jz l_nocmov
ProcedureReturn #True
NOCMOV:
EndProcedure
Procedure Support_3DNow()
!mov eax,80000000h
!cpuid
!cmp eax,80000000h
!jbe l_noext
!mov eax,80000001h
!cpuid
!or eax,eax
!je l_noext
!test edx,$80000000
!jz l_noext
ProcedureReturn #True
NOEXT:
EndProcedure
Procedure Support_extended3DNow()
!mov eax,80000000h
!cpuid
!cmp eax,80000000h
!jbe l_noext2
!mov eax,80000001h
!cpuid
!or eax,eax
!je l_noext2
!test edx, $80000000
!jz l_noext2
!test edx, $40000000
!jz l_noext2
ProcedureReturn #True
NOEXT2:
EndProcedure
If Support_InstructionSetExtensionCheck() ; Check funktioniert
Debug "MMX: "+Str(Support_MMX())
Debug "SSE: "+Str(Support_SSE())
Debug "SSE2: "+Str(Support_SSE2())
Debug "SSE3: "+Str(Support_SSE3())
Debug "SSSE3: "+Str(Support_SSSE3())
Debug "CMOVcc: "+Str(Support_CMOVcc())
Debug "3DNow: "+Str(Support_3DNow())
Debug "extended3DNow: "+Str(Support_extended3DNow())
EndIf