 : ssse3? ( -- ? ) sse-version 33 >= ;
 : sse4.1? ( -- ? ) sse-version 41 >= ;
 : sse4.2? ( -- ? ) sse-version 42 >= ;
+
+: popcnt? ( -- ? ) (popcnt?) c-bool> ;
 
 : sse-string ( version -- string )
     {


        CPUID

        ECX HEX: 100000 TEST
        "sse-42" get JNE

        ECX HEX: 80000 TEST
        "sse-41" get JNE

        ECX HEX: 200 TEST
        "ssse-3" get JNE

        ECX HEX: 1 TEST
        "sse-3" get JNE

        EDX HEX: 4000000 TEST
        "sse-2" get JNE

        EDX HEX: 2000000 TEST
        "sse-1" get JNE

        int-regs return-reg 0 MOV
        "end" get JMP

        "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 )
