cpu.x86.features: add popcnt? test
parent
d5b7ec3348
commit
c00272d80a
|
@ -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" ] }
|
||||
|
|
Loading…
Reference in New Issue