1,5 → 1,5 |
;Addresses for bits |
|
; edx cpuid(1) |
FPU_FLAG equ 0001h ;Floating-point unit on-Chip |
VME_FLAG equ 0002h ;Virtual Mode Extension |
DE_FLAG equ 0004h ;Debugging Extension |
38,6 → 38,7 |
MON_FLAG equ 0008h ;MON -3 |
DS_CPL_FLAG equ 0010h ;DS-CPL -4 |
VMX_FLAG equ 0020h ;VMX -5 |
SMX_FLAG equ 0040h ;SMX -6 to add |
EST_FLAG equ 0080h ; EST-7 |
TM2_FLAG equ 0100h ; TM2-8 |
SSSE3_FLAG equ 0200h ;SSSE3 -9 |
44,55 → 45,44 |
CNXT_ID_FLAG equ 0400h ;CID -10 |
CX16_FLAG equ 2000h ;CX16 - 13 |
ETPRD_FLAG equ 4000h ;xTPR - 14 |
DCA_FLAG equ 40000h ;DCA - 18 |
PDCM_FLAG equ 8000h ;PDCM - 15 to add |
DCA_FLAG equ 40000h ;DCA - 18 Direct Cache Access |
SSE41_FLAG equ 80000h ;SSE41 - 19 to add |
SSE42_FLAG equ 100000h ;SSE42 - 20 to add |
x2APIC_FLAG equ 200000h ;x2APIC - 21 to add |
PPCNT_FLAG equ 800000h ;PPCNT - 23 to add |
|
|
; edx cpuid(8000_0001h) |
|
SYS_FLAG equ 0800h ;11 |
|
MP_FLAG equ 80000h ;19 |
SYS_FLAG equ 0800h ;11 - may be we already detect it as SEP_FLAG |
MP_FLAG equ 80000h ;19 ???? not found in recent guides from AMD and Intel |
NX_FLAG equ 100000h ;20 |
MMXPi_FLAG equ 400000h ;22 |
MMXn_FLAG equ 800000h ;23 |
FXSRn_FLAG equ 1000000h ;24 it is ÌÌÕ+ for Cyrix |
FFXSR_FLAG equ 2000000h ;25 |
PAGE_FLAG equ 4000000h ;26 Page1Gb to add |
TSCP_FLAG equ 8000000h ;27 |
LM_FLAG equ 20000000h ;29 EM64T |
DNo_FLAG equ 40000000h ;30 |
DN_FLAG equ 80000000h ;31 |
DNo_FLAG equ 40000000h ;30 3dNow! Ext |
DN_FLAG equ 80000000h ;31 3dNow! |
|
|
; ecx cpuid(8000_0001h) |
LAHF_FLAG equ 0001h ; LAHF 0 |
CMPL_FLAG equ 0002h ; core multi-processing legacy mode 1 |
SVM_FLAG equ 0004h ; secure virtual machine 2 |
EAS_FLAG equ 0008h ; ExtApicSpace 3 to add |
MOVCR8_FLAG equ 0010h ;AltMovCr8 4 |
ABM_FLAG equ 0020h ; ABM -5 to add |
SSE4A_FLAG equ 0040h ; SSE4A -6 to add |
MIS_FLAG equ 0080h ; MissAlignSSE -7 to add |
3DNP_FLAG equ 0100h ; 3DNowPrefetch-8 to add |
OSVW_FLAG equ 0200h ; OS visible workaround -9 to add |
SSE5_FLAG equ 0800h ;SSE5 - 11 to add |
SKINIT_FLAG equ 1000h ;SKINIT- 12 to add |
WDT_FLAG equ 2000h ;Watchdog timer - 13 to add |
|
;////////////////////////////////////////////// |
decode_sse3: ; is SS3 supported |
xor eax, eax |
inc eax |
cpuid |
test ecx, 1 |
setnz [sse3sup] |
mov eax, sse3+6 |
|
write_yes_no: |
mov dword [eax], 'no' |
jz @f |
mov dword [eax], 'yes' |
@@: |
ret |
|
show_next_bit: |
shr edx, 1 |
write_yes_no_cf: |
mov dword [eax], 'no' |
jnc @f |
mov dword [eax], 'yes' |
@@: |
ret |
|
;decoding standard features |
|
decode_standard_features: |
101,230 → 91,873 |
inc eax |
cpuid |
|
mov eax, FPU+6 |
call show_next_bit |
|
mov eax, VME+7 |
call show_next_bit |
Test0: |
test edx, FPU_FLAG |
jnz Test0e |
|
mov eax, DE+7 |
call show_next_bit |
mov dword [FPU+6], $6F6E |
jmp Test1 |
|
mov eax, PSE+8 |
call show_next_bit |
Test0e: |
mov dword [FPU+6], $736579 |
|
mov eax, TSC+6 |
call show_next_bit |
;;;;;; |
Test1: |
test edx, VME_FLAG |
jnz Test1e |
|
mov eax, MSR+7 |
call show_next_bit |
mov dword [VME+ 7], $6F6E |
jmp Test2 |
|
mov eax, PAE+7 |
call show_next_bit |
Test1e: |
mov dword [VME+ 7], $736579 |
|
mov eax, MCE+8 |
call show_next_bit |
;;;;;; |
Test2: |
test edx, DE_FLAG |
jnz Test2e |
|
mov eax, CX8+6 |
call show_next_bit |
mov dword [DE+ 7], $6F6E |
jmp Test3 |
|
mov eax, APIC+7 |
call show_next_bit |
Test2e: |
mov dword [DE+ 7], $736579 |
;;;;;; |
|
shr edx, 1 ; skip reserved bit |
Test3: |
test edx, PSE_FLAG |
jnz Test3e |
|
mov eax, SEP+8 |
call show_next_bit |
mov dword [PSE+ 8], $6F6E |
jmp Test4 |
|
mov eax, MTRR+6 |
call show_next_bit |
Test3e: |
mov dword [PSE+ 8], $736579 |
|
mov eax, PGE+7 |
call show_next_bit |
;;;; |
Test4: |
test edx, TSC_FLAG |
jnz Test4e |
|
mov eax, MCA+7 |
call show_next_bit |
mov dword [TSC+ 6], $6F6E |
jmp Test5 |
|
mov eax, CMOV+8 |
call show_next_bit |
Test4e: |
mov dword [TSC+ 6], $736579 |
|
mov eax, PAT+6 |
call show_next_bit |
;;;; |
Test5: |
test edx, MSR_FLAG |
jnz Test5e |
|
mov eax, PSE36+7 |
call show_next_bit |
mov dword [MSR+ 7], $6F6E |
jmp Test6 |
|
mov eax, PSNUM+7 |
call show_next_bit |
Test5e: |
mov dword [MSR+ 7], $736579 |
|
mov eax, CLFLUSHn+8 |
call show_next_bit |
;;;; |
Test6: |
test edx, PAE_FLAG |
jnz Test6e |
|
shr edx, 1 ; skip reserved bit |
mov dword [PAE+ 7], $6F6E |
jmp Test7 |
|
mov eax, DTS+7 |
call show_next_bit |
Test6e: |
mov dword [PAE+ 7], $736579 |
|
mov eax, ACPI+7 |
call show_next_bit |
;;;; |
Test7: |
test edx, MCE_FLAG |
jnz Test7e |
|
mov eax, MMX+8 |
call show_next_bit |
mov eax, [eax] |
mov [MMXs+7], eax |
mov dword [MCE+ 8], $6F6E |
jmp Test8 |
|
mov eax, FXSR+6 |
call show_next_bit |
Test7e: |
mov dword [MCE+ 8], $736579 |
|
mov eax, SSE+7 |
call show_next_bit |
;;;; |
Test8: |
test edx, CX8_FLAG |
jnz Test8e |
|
mov eax, SSE2+7 |
call show_next_bit |
mov dword [CX8+ 6], $6F6E |
jmp Test9 |
|
mov eax, SSn+8 |
call show_next_bit |
Test8e: |
mov dword [CX8+ 6], $736579 |
;;;; |
|
shr edx, 1 |
; mov eax, HTT+8 |
Test9: |
test edx, APIC_FLAG |
jnz Test9e |
|
mov dword [APIC+ 7], $6F6E |
jmp Test11 |
|
Test9e: |
mov dword [APIC+ 7], $736579 |
;;;;; |
|
Test11: |
test edx, SEP_FLAG |
jnz Test11e |
|
mov dword [SEP+ 8], $6F6E |
jmp Test12 |
|
Test11e: |
mov dword [SEP+ 8], $736579 |
;;;; |
|
Test12: |
test edx, MTRR_FLAG |
jnz Test12e |
|
mov dword [MTRR+ 6], $6F6E |
jmp Test13 |
|
Test12e: |
mov dword [MTRR+ 6], $736579 |
;;;; |
|
Test13: |
test edx, PGE_FLAG |
jnz Test13e |
|
mov dword [PGE+ 7], $6F6E |
jmp Test14 |
|
Test13e: |
mov dword [PGE+ 7], $736579 |
;;;;; |
|
Test14: |
test edx, MCA_FLAG |
jnz Test14e |
|
mov dword [MCA+ 7], $6F6E |
jmp Test15 |
|
Test14e: |
mov dword [MCA+ 7], $736579 |
;;;; |
|
Test15: |
test edx, CMOV_FLAG |
jnz Test15e |
|
mov dword [CMOV+ 8], $6F6E |
jmp Test16 |
|
Test15e: |
mov dword [CMOV+ 8], $736579 |
;;;; |
|
Test16: |
test edx, PAT_FLAG |
jnz Test16e |
|
mov dword [PAT+ 6], $6F6E |
jmp Test17 |
|
Test16e: |
mov dword [PAT+ 6], $736579 |
;;;; |
|
Test17: |
test edx, PSE36_FLAG |
jnz Test17e |
|
mov dword [PSE36+ 7], $6F6E |
jmp Test18 |
|
Test17e: |
mov dword [PSE36+ 7], $736579 |
;;;; |
|
Test18: |
test edx, PSNUM_FLAG |
jnz Test18e |
|
mov dword [PSNUM+ 7], $6F6E |
jmp Test19 |
|
Test18e: |
mov dword [PSNUM+ 7], $736579 |
;;;; |
|
Test19: |
test edx, CLFLUSH_FLAG |
jnz Test19e |
|
mov dword [CLFLUSHn + 8], $6F6E |
jmp Test21 |
|
Test19e: |
mov dword [CLFLUSHn + 8], $736579 |
;;;; |
|
Test21: |
test edx, DTS_FLAG |
jnz Test21e |
|
mov dword [DTS+ 7], $6F6E |
jmp Test22 |
|
Test21e: |
mov dword [DTS+ 7], $736579 |
;;;; |
|
Test22: |
test edx, ACPI_FLAG |
jnz Test22e |
|
mov dword [ACPI+ 7], $6F6E |
jmp Test23 |
|
Test22e: |
mov dword [ACPI+ 7], $736579 |
;;;;; |
|
Test23: |
test edx, MMX_FLAG |
jnz Test23e |
|
mov dword [MMX+ 8], $6F6E |
mov dword [MMXs+ 7], $6F6E |
jmp Test24 |
|
Test23e: |
mov dword [MMX+ 8], $736579 |
mov dword [MMXs+ 7], $736579 |
;;;;; |
|
Test24: |
test edx, FXSR_FLAG |
jnz Test24e |
|
mov dword [FXSR+ 6], $6F6E |
jmp Test25 |
|
Test24e: |
mov dword [FXSR+ 6], $736579 |
;;;;; |
|
Test25: |
test edx, SSE_FLAG |
jnz Test25e |
|
mov dword [SSE+ 7], $6F6E |
jmp Test26 |
|
Test25e: |
mov dword [SSE+ 7], $736579 |
|
;;;; |
Test26: |
test edx, SSE2_FLAG |
jnz Test26e |
|
mov dword [SSE2+ 7], $6F6E |
jmp Test27 |
|
Test26e: |
mov dword [SSE2+ 7], $736579 |
|
;;;; |
|
Test27: |
test edx, SS_FLAG |
jnz Test27e |
|
mov dword [SSn+ 8], $6F6E |
jmp Test29;28 |
|
Test27e: |
mov dword [SSn+ 8], $736579 |
|
;;;; |
|
;Test28: |
; test edx, HTT_FLAG |
; call write_yes_no |
;jnz Test28e |
; |
;mov dword [HTT+ 8], $6F6E |
;jmp Test29 |
; |
;Test28e: |
;mov dword [HTT+ 8], $736579 |
|
mov eax, TM+7 |
call show_next_bit |
;;;; |
|
mov eax, IA64+7 |
call show_next_bit |
Test29: |
test edx, TM_FLAG |
jnz Test29e |
|
mov eax, PBE+8 |
call show_next_bit |
mov dword [TM+ 7], $6F6E |
jmp Test30 |
|
Test29e: |
mov dword [TM+ 7], $736579 |
|
;;;; |
|
Test30: |
test edx, IA64_FLAG |
jnz Test30e |
|
mov dword [IA64+ 7], $6F6E |
jmp Test31 |
|
Test30e: |
mov dword [IA64+ 7], $736579 |
|
;;;; |
Test31: |
test edx, PBE_FLAG |
jnz Test31e |
|
mov dword [PBE+ 8], $6F6E |
jmp Standart_out |
|
Test31e: |
mov dword [PBE+ 8], $736579 |
|
Standart_out: |
|
ret |
;////////////////////////////////////////////// |
decode_sse3_5: ; is SS3-5 supported |
xor eax,eax |
inc eax |
cpuid |
test ecx, $1 ; Test bit 1 |
jnz .EX; SSE3 technology is supported |
jz .EXN |
|
;////////////////////////////////////////////// |
.EX: |
mov dword [sse3+ 6], $736579 |
mov [sse3sup], 1 |
jmp exitter |
.EXN: |
mov dword [sse3+ 6], $6F6E |
mov [sse3sup],0 |
|
exitter: |
|
|
test ecx, $80000 ; Test bit 19 |
jnz .EX1; SSE41 technology is supported |
jz .EXN1 |
|
.EX1: |
mov dword [SSE41+ 11], $736579 |
mov [sse41sup], 1 |
jmp exitter1 |
.EXN1: |
mov dword [SSE41+ 11], $6F6E |
mov [sse41sup],0 |
|
exitter1: |
|
|
test ecx, $100000 ; Test bit 20 |
jnz .EX2; SSE42 technology is supported |
jz .EXN2 |
|
.EX2: |
mov dword [SSE42+ 10], $736579 |
mov dword [SS42+ 11], $736579 |
mov [sse42sup], 1 |
jmp exitter2 |
.EXN2: |
mov dword [SSE42+ 10], $6F6E |
mov dword [SS42+ 11], $6F6E |
mov [sse42sup],0 |
|
exitter2: |
|
|
xor eax,eax |
mov eax, 80000001h |
cpuid |
test ecx, $800 ; Test bit 11 |
jnz .EX3; SS5 technology is supported |
jz .EXN3 |
|
.EX3: |
mov dword [SSE5+ 12], $736579 |
mov [sse5sup], 1 |
jmp exitter3 |
.EXN3: |
mov dword [SSE5+ 12], $6F6E |
mov [sse5sup],0 |
|
exitter3: |
|
ret |
|
|
decode_extended_features: |
; is called immediately after decode_standard_features |
; xor eax, eax |
; inc eax |
; cpuid |
|
mov eax, SS3+8 |
xor eax,eax |
inc eax |
cpuid |
Tes1: |
test ecx, SSE3_FLAG |
call write_yes_no |
jnz Tes1e |
|
mov eax, MON+8 |
mov dword [SS3+ 8], $6F6E |
jmp Tes2 |
|
Tes1e: |
mov dword [SS3+ 8], $736579 |
|
|
Tes2: |
test ecx, MON_FLAG |
call write_yes_no |
jnz Tes2e |
|
mov eax, DS_CPL+8 |
mov dword [MON+ 8], $6F6E |
jmp Tes3 |
|
Tes2e: |
mov dword [MON+ 8], $736579 |
|
|
Tes3: |
test ecx, DS_CPL_FLAG |
call write_yes_no |
jnz Tes3e |
|
mov eax, EST+8 |
mov dword [DS_CPL+ 8], $6F6E |
jmp Tes4 |
|
Tes3e: |
mov dword [DS_CPL+ 8], $736579 |
|
Tes4: |
test ecx, EST_FLAG |
call write_yes_no |
jnz Tes4e |
|
mov eax, TM2+8 |
mov dword [EST+ 8], $6F6E |
jmp Tes5 |
|
Tes4e: |
mov dword [EST+ 8], $736579 |
|
|
Tes5: |
test ecx, TM2_FLAG |
call write_yes_no |
jnz Tes5e |
|
mov eax, CNXT_ID+12 |
mov dword [TM2+ 8], $6F6E |
jmp Tes6 |
|
Tes5e: |
mov dword [TM2+ 8], $736579 |
|
|
Tes6: |
test ecx, CNXT_ID_FLAG |
call write_yes_no |
jnz Tes6e |
|
mov eax, CX16+12 |
mov dword [CNXT_ID+ 12], $6F6E |
jmp Tes7 |
|
Tes6e: |
mov dword [CNXT_ID+ 12], $736579 |
|
|
Tes7: |
test ecx, CX16_FLAG |
call write_yes_no |
jnz Tes7e |
|
mov eax, ETPRD+12 |
mov dword [CX16+ 12], $6F6E |
jmp Tes8 |
|
Tes7e: |
mov dword [CX16+ 12], $736579 |
|
|
Tes8: |
test ecx, ETPRD_FLAG |
call write_yes_no |
jnz Tes8e |
|
mov eax, VMX+8 |
mov dword [ETPRD+ 12], $6F6E |
jmp Tes9 |
|
Tes8e: |
mov dword [ETPRD+ 12], $736579 |
|
Tes9: |
test ecx, VMX_FLAG |
call write_yes_no |
jnz Tes9e |
|
mov eax, SSSE3+12 |
mov dword [VMX+ 8], $6F6E |
jmp Tes10 |
|
Tes9e: |
mov dword [VMX+ 8], $736579 |
|
Tes10: |
test ecx, SSSE3_FLAG |
call write_yes_no |
jnz Tes10e |
|
mov eax, DCA+8 |
mov dword [SSSE3+ 12], $6F6E |
jmp Tes11 |
|
Tes10e: |
mov dword [SSSE3+ 12], $736579 |
|
Tes11: |
test ecx, DCA_FLAG |
call write_yes_no |
@@: |
jnz Tes11e |
|
mov dword [DCA+ 8], $6F6E |
jmp Tes12 |
|
Tes11e: |
mov dword [DCA+ 8], $736579 |
|
Tes12: |
test ecx, SMX_FLAG |
jnz Tes12e |
|
mov dword [SMX+ 8], $6F6E |
jmp Tes13 |
|
Tes12e: |
mov dword [SMX+ 8], $736579 |
|
Tes13: |
test ecx, PDCM_FLAG |
jnz Tes13e |
|
mov dword [newLabel+ 8], $6F6E |
jmp Tes14 |
|
Tes13e: |
mov dword [newLabel+ 8], $736579 |
|
Tes14: |
test ecx, x2APIC_FLAG |
jnz Tes14e |
|
mov dword [x2APIC+ 8], $6F6E |
jmp Tes15 |
|
Tes14e: |
mov dword [x2APIC+ 8], $736579 |
|
Tes15: |
test ecx, PPCNT_FLAG |
jnz Tes15e |
|
mov dword [PPCNT+ 12], $6F6E |
jmp Tes16 |
|
Tes15e: |
mov dword [PPCNT+ 12], $736579 |
|
Tes16: |
|
ret |
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; |
decode_extended: |
xor eax, eax |
mov eax, $80000000 |
cpuid |
mov [extc], eax ; max number of calls |
test eax, eax |
jns @b |
|
test eax, 80000000h |
jnz gooodd |
|
jmp baaad |
|
baaad: |
|
jmp Tez13 |
|
gooodd: |
xor eax, eax |
mov eax, $80000001 ;// Setup extended function 8000_0001h |
cpuid |
|
mov eax, MP+8 |
Tez1: |
test edx, MP_FLAG |
call write_yes_no |
jnz Tez1e |
|
mov eax, NX+8 |
mov dword [MP+8], $6F6E |
jmp Tez2 |
|
Tez1e: |
mov dword [MP+ 8], $736579 |
|
Tez2: |
test edx, NX_FLAG |
call write_yes_no |
jnz Tez2e |
|
mov dword [NX+ 8], $6F6E |
jmp Tez4 |
;jmp Tez3 we do detection in another place, because of Cyrix specific MMX+ detection |
; mov eax, MMXPi+8 |
|
Tez2e: |
mov dword [NX+ 8], $736579 |
|
;Tez3: |
; test edx, MMXPi_FLAG |
; call write_yes_no |
;jnz Tez3e |
|
mov eax, MMXn+8 |
;mov dword [MMXPi+ 8], $6F6E |
;jmp Tez4 |
|
|
;Tez3e: |
;mov dword [MMXPi+ 8], $736579 |
|
Tez4: |
test edx, MMXn_FLAG |
call write_yes_no |
jnz Tez4e |
|
mov eax, FXSRn+8 |
mov dword [MMXn+ 8], $6F6E |
jmp Tez5 |
|
Tez4e: |
mov dword [MMXn+ 8], $736579 |
|
Tez5: |
test edx, FXSRn_FLAG |
call write_yes_no |
jnz Tez5e |
|
mov eax, FFXSR+12 |
mov dword [FXSRn+ 8], $6F6E |
jmp Tez6 |
|
Tez5e: |
mov dword [FXSRn+ 8], $736579 |
|
Tez6: |
test edx, FFXSR_FLAG |
call write_yes_no |
jnz Tez6e |
|
mov eax, TSCP+12 |
mov dword [FFXSR+ 12], $6F6E |
jmp Tez7 |
|
Tez6e: |
mov dword [FFXSR+ 12], $736579 |
|
Tez7: |
test edx, TSCP_FLAG |
call write_yes_no |
jnz Tez7e |
|
mov eax, LM+12 |
mov dword [TSCP+ 12], $6F6E |
jmp Tez8 |
|
Tez7e: |
mov dword [TSCP+ 12], $736579 |
|
|
Tez8: |
test edx, LM_FLAG |
call write_yes_no |
jnz Tez8e |
|
mov eax, DNo+12 |
mov dword [LM+ 12], $6F6E |
jmp Tez9 |
|
Tez8e: |
mov dword [LM+ 12], $736579 |
|
Tez9: |
test edx, DNo_FLAG |
call write_yes_no |
jnz Tez9e |
|
mov eax, DN+12 |
mov dword [DNo+ 12], $6F6E |
jmp Tez10 |
|
Tez9e: |
mov dword [DNo+ 12], $736579 |
|
|
Tez10: |
test edx, DN_FLAG |
call write_yes_no |
jnz Tez10e |
|
mov dword [DN+ 12], $6F6E |
jmp Tez11 |
|
Tez10e: |
mov dword [DN+ 12], $736579 |
|
;Intel |
mov eax, SYS+12 |
|
Tez11: |
test edx, SYS_FLAG |
call write_yes_no |
jnz Tez11e |
|
mov eax, LAF+12 |
mov dword [SYS+ 12], $6F6E |
jmp Tez12 |
|
Tez11e: |
mov dword [SYS+ 12], $736579 |
|
|
Tez12: |
test ecx, LAHF_FLAG |
call write_yes_no |
jnz Tez12e |
|
mov eax, CMPL+12 |
mov dword [LAF+ 12], $6F6E |
jmp Tez13 |
|
Tez12e: |
mov dword [LAF+ 12], $736579 |
|
Tez13: |
test ecx, CMPL_FLAG |
call write_yes_no |
jnz Tez13e |
|
mov eax, SVM+8 |
mov dword [CMPL+ 8], $6F6E |
jmp Tez14 |
|
Tez13e: |
mov dword [CMPL+ 8], $736579 |
|
Tez14: |
test ecx, SVM_FLAG |
call write_yes_no |
jnz Tez14e |
|
mov eax, MCR8+12 |
mov dword [SVM+ 8], $6F6E |
jmp Tez15 |
|
Tez14e: |
mov dword [SVM+ 8], $736579 |
|
Tez15: |
test ecx, MOVCR8_FLAG |
call write_yes_no |
jnz Tez15e |
|
mov dword [MCR8+ 12], $6F6E |
jmp Tez16 |
|
Tez15e: |
mov dword [MCR8+ 12], $736579 |
|
Tez16: |
test edx, PAGE_FLAG |
jnz Tez16e |
|
mov dword [PAGE+ 8], $6F6E |
jmp Tez17 |
|
Tez16e: |
mov dword [PAGE+ 8], $736579 |
|
Tez17: |
test ecx, EAS_FLAG |
jnz Tez17e |
|
mov dword [EAS+ 12], $6F6E |
jmp Tez18 |
|
Tez17e: |
mov dword [EAS+ 12], $736579 |
|
Tez18: |
test ecx, ABM_FLAG |
jnz Tez18e |
|
mov dword [ABM+ 8], $6F6E |
jmp Tez19 |
|
Tez18e: |
mov dword [ABM+ 8], $736579 |
|
Tez19: |
test ecx, SSE4A_FLAG |
jnz Tez19e |
|
mov dword [SSE4A+ 8], $6F6E |
jmp Tez20 |
|
Tez19e: |
mov dword [SSE4A+ 8], $736579 |
|
Tez20: |
test ecx, MIS_FLAG |
jnz Tez20e |
|
mov dword [MIS+ 8], $6F6E |
jmp Tez21 |
|
Tez20e: |
mov dword [MIS+ 8], $736579 |
|
Tez21: |
test ecx, 3DNP_FLAG |
jnz Tez21e |
|
;mov dword [DNP+ 8], $6F6E |
;jmp Tez22 |
|
Tez21e: |
;mov dword [DNP+ 8], $736579 |
|
Tez22: |
test ecx, OSVW_FLAG |
jnz Tez22e |
|
mov dword [OSVW+ 8], $6F6E |
jmp Tez23 |
|
Tez22e: |
mov dword [OSVW+ 8], $736579 |
|
Tez23: |
test ecx, SKINIT_FLAG |
jnz Tez23e |
|
mov dword [SKINIT_+ 12], $6F6E |
jmp Tez24 |
|
Tez23e: |
mov dword [SKINIT_+ 12], $736579 |
|
Tez24: |
test ecx, WDT_FLAG |
jnz Tez24e |
|
mov dword [WDT+ 12], $6F6E |
jmp Tez25 |
|
Tez24e: |
mov dword [WDT+ 12], $736579 |
|
Tez25: |
|
ret |
|
;////////////////////////////////////////////// |
decode_sse3: ; is SS3 supported |
xor eax, eax |
inc eax |
cpuid |
test ecx, 1 |
setnz [sse3sup] |
mov eax, sse3+6 |
|
write_yes_no: |
mov dword [eax], 'no' |
jz @f |
mov dword [eax], 'yes' |
@@: |
ret |
|
show_next_bit: |
shr edx, 1 |
write_yes_no_cf: |
mov dword [eax], 'no' |
jnc @f |
mov dword [eax], 'yes' |
@@: |
ret |