1 ! Copyright (C) 2009, 2010 Slava Pestov.
2 ! See http://factorcode.org/license.txt for BSD license.
3 USING: accessors assocs sequences alien alien.c-types
4 combinators compiler compiler.codegen.fixup compiler.units
5 cpu.architecture cpu.x86.assembler cpu.x86.assembler.operands
6 init io kernel locals math math.order math.parser memoize
12 : return-reg ( -- reg ) int-regs return-regs at first ;
14 : (sse-version) ( -- n )
49 "sse-42" resolve-label
53 "sse-41" resolve-label
57 "ssse-3" resolve-label
77 MEMO: sse-version ( -- n )
78 (sse-version) "sse-version" get string>number [ min ] when* ;
80 [ \ sse-version reset-memoized ] "cpu.x86.features" add-startup-hook
82 : sse? ( -- ? ) sse-version 10 >= ;
83 : sse2? ( -- ? ) sse-version 20 >= ;
84 : sse3? ( -- ? ) sse-version 30 >= ;
85 : ssse3? ( -- ? ) sse-version 33 >= ;
86 : sse4.1? ( -- ? ) sse-version 41 >= ;
87 : sse4.2? ( -- ? ) sse-version 42 >= ;
91 int-regs return-reg 1 MOV
94 int-regs return-reg dup XOR
95 int-regs return-reg SETB
98 : sse-string ( version -- string )
109 HOOK: instruction-count cpu ( -- n )
111 M: x86.32 instruction-count
116 M: x86.64 instruction-count
124 : count-instructions ( quot -- n )
125 instruction-count [ call instruction-count ] dip - ; inline