From ffe0d6bf57f874b66a5b448acaa827dc1c7c281b Mon Sep 17 00:00:00 2001 From: erg Date: Sun, 22 Oct 2006 07:34:15 +0000 Subject: [PATCH] add contrib/cpuinfo --- contrib/cpuinfo/cpuinfo.factor | 5 +++ contrib/cpuinfo/load.factor | 12 +++++++ contrib/cpuinfo/os-unix.factor | 0 contrib/cpuinfo/os-windows.factor | 54 +++++++++++++++++++++++++++++++ 4 files changed, 71 insertions(+) create mode 100644 contrib/cpuinfo/cpuinfo.factor create mode 100644 contrib/cpuinfo/load.factor create mode 100644 contrib/cpuinfo/os-unix.factor create mode 100644 contrib/cpuinfo/os-windows.factor diff --git a/contrib/cpuinfo/cpuinfo.factor b/contrib/cpuinfo/cpuinfo.factor new file mode 100644 index 0000000000..360a86c445 --- /dev/null +++ b/contrib/cpuinfo/cpuinfo.factor @@ -0,0 +1,5 @@ +IN: cpuinfo +USING: kernel math ; + +: >megs ( m -- n ) + -20 shift ; diff --git a/contrib/cpuinfo/load.factor b/contrib/cpuinfo/load.factor new file mode 100644 index 0000000000..200ca8bc10 --- /dev/null +++ b/contrib/cpuinfo/load.factor @@ -0,0 +1,12 @@ +! See http://factorcode.org/license.txt for BSD license. +USING: kernel ; + +PROVIDE: contrib/cpuinfo +{ +files+ { + { "os-windows.factor" [ windows? ] } + { "os-unix.factor" [ unix? ] } + "cpuinfo.factor" +} } +{ +tests+ { +} } ; + diff --git a/contrib/cpuinfo/os-unix.factor b/contrib/cpuinfo/os-unix.factor new file mode 100644 index 0000000000..e69de29bb2 diff --git a/contrib/cpuinfo/os-windows.factor b/contrib/cpuinfo/os-windows.factor new file mode 100644 index 0000000000..a58c0cc2e4 --- /dev/null +++ b/contrib/cpuinfo/os-windows.factor @@ -0,0 +1,54 @@ +IN: cpuinfo +USING: alien kernel math win32-api ; + +: memory-status ( -- MEMORYSTATUSEX ) + "MEMORYSTATUSEX" + "MEMORYSTATUSEX" c-size over set-MEMORYSTATUSEX-dwLength + [ GlobalMemoryStatusEx ] keep swap zero? [ win32-error ] when ; + +: physical-ram ( -- n ) + memory-status MEMORYSTATUSEX-ullTotalPhys ; + +: available-ram ( -- n ) + memory-status MEMORYSTATUSEX-ullAvailPhys ; + +: system-info ( -- SYSTEM_INFO ) + "SYSTEM_INFO" [ GetSystemInfo ] keep ; + +: page-size ( -- n ) + system-info SYSTEM_INFO-dwPageSize ; + +: processor# ( -- n ) + system-info SYSTEM_INFO-dwNumberOfProcessors ; + +! 386, 486, 586, 2200 (IA64), 8664 (AMD_X8664) +: processor-type ( -- n ) + system-info SYSTEM_INFO-dwProcessorType ; + +! 0 = x86, 6 = Intel Itanium, 9 = x64 (AMD or Intel), 10 = WOW64, 0xffff = Unk +: processor-architecture ( -- n ) + system-info SYSTEM_INFO-dwOemId HEX: ffff0000 bitand ; + +: os-version + "OSVERSIONINFO" + "OSVERSIONINFO" c-size over set-OSVERSIONINFO-dwOSVersionInfoSize + [ GetVersionEx ] keep swap zero? [ win32-error ] when ; + +: windows-major ( -- n ) + os-version OSVERSIONINFO-dwMajorVersion ; + +: windows-minor ( -- n ) + os-version OSVERSIONINFO-dwMinorVersion ; + +: windows-build# ( -- n ) + os-version OSVERSIONINFO-dwBuildNumber ; + +: windows-platform-id ( -- n ) + os-version OSVERSIONINFO-dwPlatformId ; + +: windows-service-pack ( -- string ) + os-version OSVERSIONINFO-szCSDVersion ; + +: sse2? ( -- ? ) + PF_XMMI64_INSTRUCTIONS_AVAILABLE IsProcessorFeaturePresent zero? not ; +