2009-05-31 16:02:14 -04:00
|
|
|
! Copyright (C) 2009 Slava Pestov.
|
|
|
|
! See http://factorcode.org/license.txt for BSD license.
|
2009-09-08 14:56:37 -04:00
|
|
|
USING: system kernel math math.order math.parser namespaces
|
2009-09-15 22:43:18 -04:00
|
|
|
alien.c-types alien.syntax combinators locals init io cpu.x86
|
|
|
|
compiler compiler.units accessors ;
|
2009-05-31 16:02:14 -04:00
|
|
|
IN: cpu.x86.features
|
|
|
|
|
|
|
|
<PRIVATE
|
|
|
|
|
2009-09-03 04:28:38 -04:00
|
|
|
FUNCTION: int sse_version ( ) ;
|
2009-05-31 16:02:14 -04:00
|
|
|
|
|
|
|
FUNCTION: longlong read_timestamp_counter ( ) ;
|
|
|
|
|
|
|
|
PRIVATE>
|
|
|
|
|
2009-09-03 04:28:38 -04:00
|
|
|
ALIAS: sse-version sse_version
|
2009-05-31 16:02:14 -04:00
|
|
|
|
2009-09-03 04:28:38 -04:00
|
|
|
: sse-string ( version -- string )
|
|
|
|
{
|
|
|
|
{ 00 [ "no SSE" ] }
|
|
|
|
{ 10 [ "SSE1" ] }
|
|
|
|
{ 20 [ "SSE2" ] }
|
|
|
|
{ 30 [ "SSE3" ] }
|
|
|
|
{ 33 [ "SSSE3" ] }
|
|
|
|
{ 41 [ "SSE4.1" ] }
|
|
|
|
{ 42 [ "SSE4.2" ] }
|
|
|
|
} case ;
|
2009-05-31 16:02:14 -04:00
|
|
|
|
|
|
|
HOOK: instruction-count cpu ( -- n )
|
|
|
|
|
|
|
|
M: x86 instruction-count read_timestamp_counter ;
|
|
|
|
|
|
|
|
: count-instructions ( quot -- n )
|
|
|
|
instruction-count [ call ] dip instruction-count swap - ; inline
|
2009-09-03 04:28:38 -04:00
|
|
|
|
|
|
|
USING: cpu.x86.features cpu.x86.features.private ;
|
|
|
|
|
|
|
|
:: install-sse-check ( version -- )
|
|
|
|
[
|
|
|
|
sse-version version < [
|
|
|
|
"This image was built to use " write
|
|
|
|
version sse-string write
|
2009-09-08 15:17:05 -04:00
|
|
|
" but your CPU only supports " write
|
2009-09-03 04:28:38 -04:00
|
|
|
sse-version sse-string write "." print
|
|
|
|
"You will need to bootstrap Factor again." print
|
|
|
|
flush
|
|
|
|
1 exit
|
|
|
|
] when
|
|
|
|
] "cpu.x86" add-init-hook ;
|
|
|
|
|
|
|
|
: enable-sse ( version -- )
|
|
|
|
{
|
|
|
|
{ 00 [ ] }
|
|
|
|
{ 10 [ ] }
|
|
|
|
{ 20 [ enable-sse2 ] }
|
|
|
|
{ 30 [ enable-sse3 ] }
|
|
|
|
{ 33 [ enable-sse3 ] }
|
|
|
|
{ 41 [ enable-sse3 ] }
|
|
|
|
{ 42 [ enable-sse3 ] }
|
|
|
|
} case ;
|
|
|
|
|
|
|
|
[ { sse_version } compile ] with-optimizer
|
|
|
|
|
|
|
|
"Checking for multimedia extensions: " write sse-version
|
2009-09-08 14:56:37 -04:00
|
|
|
"sse-version" get [ string>number min ] when*
|
2009-09-03 04:28:38 -04:00
|
|
|
[ sse-string write " detected" print ]
|
|
|
|
[ install-sse-check ]
|
|
|
|
[ enable-sse ] tri
|