cpu.x86.features: add popcnt? test

db4
Joe Groff 2010-05-15 13:26:14 -07:00
parent d5b7ec3348
commit c00272d80a
1 changed files with 23 additions and 12 deletions

View File

@ -22,23 +22,23 @@ IN: cpu.x86.features
CPUID
ECX HEX: 100000 TEST
"sse-42" get JNE
ECX 20 BT
"sse-42" get JB
ECX HEX: 80000 TEST
"sse-41" get JNE
ECX 19 BT
"sse-41" get JB
ECX HEX: 200 TEST
"ssse-3" get JNE
ECX 9 BT
"ssse-3" get JB
ECX HEX: 1 TEST
"sse-3" get JNE
ECX 0 BT
"sse-3" get JB
EDX HEX: 4000000 TEST
"sse-2" get JNE
EDX 26 BT
"sse-2" get JB
EDX HEX: 2000000 TEST
"sse-1" get JNE
EDX 25 BT
"sse-1" get JB
int-regs return-reg 0 MOV
"end" get JMP
@ -69,6 +69,15 @@ IN: cpu.x86.features
"end" resolve-label
] alien-assembly ;
: (popcnt?) ( -- n )
int { } cdecl [
int-regs return-reg 1 MOV
CPUID
ECX 23 BT
int-regs return-reg dup XOR
int-regs return-reg SETB
] alien-assembly ;
PRIVATE>
MEMO: sse-version ( -- n )
@ -83,6 +92,8 @@ MEMO: sse-version ( -- n )
: sse4.1? ( -- ? ) sse-version 41 >= ;
: sse4.2? ( -- ? ) sse-version 42 >= ;
: popcnt? ( -- ? ) (popcnt?) c-bool> ;
: sse-string ( version -- string )
{
{ 00 [ "no SSE" ] }