MEMO: sse-version ( -- n )
(sse-version) "sse-version" get string>number [ min ] when* ;
-[ \ sse-version reset-memoized ] "cpu.x86.features" add-startup-hook
-
: sse? ( -- ? ) sse-version 10 >= ;
: sse2? ( -- ? ) sse-version 20 >= ;
: sse3? ( -- ? ) sse-version 30 >= ;
return-reg SETB
] alien-assembly ;
+MEMO: enable-popcnt? ( -- ? )
+ popcnt? "enable-popcnt" get and ;
+
+[ { sse-version enable-popcnt? } [ reset-memoized ] each ]
+"cpu.x86.features" add-startup-hook
+
: sse-string ( version -- string )
{
{ 00 [ "no SSE" ] }
: check-sse ( -- )
"Checking for multimedia extensions... " write flush
- [ { (sse-version) } compile ] with-optimizer
sse-version
[ sse-string " detected" append print ]
[ 20 < "cpu.x86.x87" "cpu.x86.sse" ? require ] bi ;
+
+: check-popcnt ( -- )
+ enable-popcnt? [
+ "Building with POPCNT support" print
+ enable-bit-count
+ ] when ;
+
+: check-cpu-features ( -- )
+ [ { (sse-version) popcnt? } compile ] with-optimizer
+ check-sse
+ check-popcnt ;