diff options
author | Denys Dmytriyenko <denis@denix.org> | 2009-03-17 14:32:59 -0400 |
---|---|---|
committer | Denys Dmytriyenko <denis@denix.org> | 2009-03-17 14:32:59 -0400 |
commit | 709c4d66e0b107ca606941b988bad717c0b45d9b (patch) | |
tree | 37ee08b1eb308f3b2b6426d5793545c38396b838 /packages/juce/files/remove-x86isms.patch | |
parent | fa6cd5a3b993f16c27de4ff82b42684516d433ba (diff) |
rename packages/ to recipes/ per earlier agreement
See links below for more details:
http://thread.gmane.org/gmane.comp.handhelds.openembedded/21326
http://thread.gmane.org/gmane.comp.handhelds.openembedded/21816
Signed-off-by: Denys Dmytriyenko <denis@denix.org>
Acked-by: Mike Westerhof <mwester@dls.net>
Acked-by: Philip Balister <philip@balister.org>
Acked-by: Khem Raj <raj.khem@gmail.com>
Acked-by: Marcin Juszkiewicz <hrw@openembedded.org>
Acked-by: Koen Kooi <koen@openembedded.org>
Acked-by: Frans Meulenbroeks <fransmeulenbroeks@gmail.com>
Diffstat (limited to 'packages/juce/files/remove-x86isms.patch')
-rw-r--r-- | packages/juce/files/remove-x86isms.patch | 2353 |
1 files changed, 0 insertions, 2353 deletions
diff --git a/packages/juce/files/remove-x86isms.patch b/packages/juce/files/remove-x86isms.patch deleted file mode 100644 index 83016f733a..0000000000 --- a/packages/juce/files/remove-x86isms.patch +++ /dev/null @@ -1,2353 +0,0 @@ - -# -# Patch managed by http://www.holgerschurig.de/patcher.html -# - ---- juce/src/juce_core/basics/juce_Atomic.h~remove-x86isms.patch -+++ juce/src/juce_core/basics/juce_Atomic.h -@@ -1,188 +1,200 @@ --/*
-- ==============================================================================
--
-- This file is part of the JUCE library - "Jules' Utility Class Extensions"
-- Copyright 2004-6 by Raw Material Software ltd.
--
-- ------------------------------------------------------------------------------
--
-- JUCE can be redistributed and/or modified under the terms of the
-- GNU General Public License, as published by the Free Software Foundation;
-- either version 2 of the License, or (at your option) any later version.
--
-- JUCE is distributed in the hope that it will be useful,
-- but WITHOUT ANY WARRANTY; without even the implied warranty of
-- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-- GNU General Public License for more details.
--
-- You should have received a copy of the GNU General Public License
-- along with JUCE; if not, visit www.gnu.org/licenses or write to the
-- Free Software Foundation, Inc., 59 Temple Place, Suite 330,
-- Boston, MA 02111-1307 USA
--
-- ------------------------------------------------------------------------------
--
-- If you'd like to release a closed-source product which uses JUCE, commercial
-- licenses are also available: visit www.rawmaterialsoftware.com/juce for
-- more information.
--
-- ==============================================================================
--*/
--
--#ifndef __JUCE_ATOMIC_JUCEHEADER__
--#define __JUCE_ATOMIC_JUCEHEADER__
--
--// Atomic increment/decrement operations..
--
--//==============================================================================
--#if JUCE_MAC && ! DOXYGEN
-- #if (MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_4)
-- #include <libkern/OSAtomic.h>
--
-- forcedinline void atomicIncrement (int& variable) throw()
-- {
-- OSAtomicIncrement32 ((int32_t*) &variable);
-- }
--
-- forcedinline int atomicIncrementAndReturn (int& variable) throw()
-- {
-- return OSAtomicIncrement32 ((int32_t*) &variable);
-- }
--
-- forcedinline void atomicDecrement (int& variable) throw()
-- {
-- OSAtomicDecrement32 ((int32_t*) &variable);
-- }
--
-- forcedinline int atomicDecrementAndReturn (int& variable) throw()
-- {
-- return OSAtomicDecrement32 ((int32_t*) &variable);
-- }
--
-- #else
-- forcedinline void atomicIncrement (int& variable) throw()
-- {
-- OTAtomicAdd32 (1, (SInt32*) &variable);
-- }
--
-- forcedinline int atomicIncrementAndReturn (int& variable) throw()
-- {
-- return OTAtomicAdd32 (1, (SInt32*) &variable);
-- }
--
-- forcedinline void atomicDecrement (int& variable) throw()
-- {
-- OTAtomicAdd32 (-1, (SInt32*) &variable);
-- }
--
-- forcedinline int atomicDecrementAndReturn (int& variable) throw()
-- {
-- return OTAtomicAdd32 (-1, (SInt32*) &variable);
-- }
-- #endif
--#else
--#ifdef __GNUC__
--
-- /** Increments an integer in a thread-safe way. */
-- forcedinline void atomicIncrement (int& variable) throw()
-- {
-- __asm__ __volatile (
-- "lock incl (%%ecx)"
-- :
-- : "c" (&variable));
-- }
--
-- /** Increments an integer in a thread-safe way and returns the incremented value. */
-- forcedinline int atomicIncrementAndReturn (int& variable) throw()
-- {
-- int result;
--
-- __asm__ __volatile (
-- "lock xaddl %%eax, (%%ebx) \n\
-- incl %%eax"
-- : "=a" (result)
-- : "b" (&variable), "a" (1)
-- : "cc", "memory");
--
-- return result;
-- }
--
-- /** Decrememts an integer in a thread-safe way. */
-- forcedinline void atomicDecrement (int& variable) throw()
-- {
-- __asm__ __volatile (
-- "lock decl (%%ecx)"
-- :
-- : "c" (&variable));
-- }
--
-- /** Decrememts an integer in a thread-safe way and returns the incremented value. */
-- forcedinline int atomicDecrementAndReturn (int& variable) throw()
-- {
-- int result;
--
-- __asm__ __volatile (
-- "lock xaddl %%eax, (%%ebx) \n\
-- decl %%eax"
-- : "=a" (result)
-- : "b" (&variable), "a" (-1)
-- : "cc", "memory");
--
-- return result;
-- }
--
--#else
--
-- /** Increments an integer in a thread-safe way. */
-- inline_assembly void __fastcall atomicIncrement (int& variable) throw()
-- {
-- __asm {
-- mov ecx, dword ptr [variable]
-- lock inc dword ptr [ecx]
-- }
-- }
--
-- /** Increments an integer in a thread-safe way and returns the incremented value. */
-- inline_assembly int __fastcall atomicIncrementAndReturn (int& variable) throw()
-- {
-- int result;
--
-- __asm {
-- mov ecx, dword ptr [variable]
-- mov eax, 1
-- lock xadd dword ptr [ecx], eax
-- inc eax
-- mov result, eax
-- }
--
-- return result;
-- }
--
-- /** Decrememts an integer in a thread-safe way. */
-- inline_assembly void __fastcall atomicDecrement (int& variable) throw()
-- {
-- __asm {
-- mov ecx, dword ptr [variable]
-- lock dec dword ptr [ecx]
-- }
-- }
--
-- /** Decrememts an integer in a thread-safe way and returns the incremented value. */
-- inline_assembly int __fastcall atomicDecrementAndReturn (int& variable) throw()
-- {
-- int result;
--
-- __asm {
-- mov ecx, dword ptr [variable]
-- mov eax, -1
-- lock xadd dword ptr [ecx], eax
-- dec eax
-- mov result, eax
-- }
--
-- return result;
-- }
--#endif
--#endif
--
--#endif // __JUCE_ATOMIC_JUCEHEADER__
-+/* -+ ============================================================================== -+ -+ This file is part of the JUCE library - "Jules' Utility Class Extensions" -+ Copyright 2004-6 by Raw Material Software ltd. -+ -+ ------------------------------------------------------------------------------ -+ -+ JUCE can be redistributed and/or modified under the terms of the -+ GNU General Public License, as published by the Free Software Foundation; -+ either version 2 of the License, or (at your option) any later version. -+ -+ JUCE is distributed in the hope that it will be useful, -+ but WITHOUT ANY WARRANTY; without even the implied warranty of -+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -+ GNU General Public License for more details. -+ -+ You should have received a copy of the GNU General Public License -+ along with JUCE; if not, visit www.gnu.org/licenses or write to the -+ Free Software Foundation, Inc., 59 Temple Place, Suite 330, -+ Boston, MA 02111-1307 USA -+ -+ ------------------------------------------------------------------------------ -+ -+ If you'd like to release a closed-source product which uses JUCE, commercial -+ licenses are also available: visit www.rawmaterialsoftware.com/juce for -+ more information. -+ -+ ============================================================================== -+*/ -+ -+#ifndef __JUCE_ATOMIC_JUCEHEADER__ -+#define __JUCE_ATOMIC_JUCEHEADER__ -+ -+// Atomic increment/decrement operations.. -+ -+//============================================================================== -+#if JUCE_MAC && ! DOXYGEN -+ #if (MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_4) -+ #include <libkern/OSAtomic.h> -+ -+ forcedinline void atomicIncrement (int& variable) throw() -+ { -+ OSAtomicIncrement32 ((int32_t*) &variable); -+ } -+ -+ forcedinline int atomicIncrementAndReturn (int& variable) throw() -+ { -+ return OSAtomicIncrement32 ((int32_t*) &variable); -+ } -+ -+ forcedinline void atomicDecrement (int& variable) throw() -+ { -+ OSAtomicDecrement32 ((int32_t*) &variable); -+ } -+ -+ forcedinline int atomicDecrementAndReturn (int& variable) throw() -+ { -+ return OSAtomicDecrement32 ((int32_t*) &variable); -+ } -+ -+ #else -+ forcedinline void atomicIncrement (int& variable) throw() -+ { -+ OTAtomicAdd32 (1, (SInt32*) &variable); -+ } -+ -+ forcedinline int atomicIncrementAndReturn (int& variable) throw() -+ { -+ return OTAtomicAdd32 (1, (SInt32*) &variable); -+ } -+ -+ forcedinline void atomicDecrement (int& variable) throw() -+ { -+ OTAtomicAdd32 (-1, (SInt32*) &variable); -+ } -+ -+ forcedinline int atomicDecrementAndReturn (int& variable) throw() -+ { -+ return OTAtomicAdd32 (-1, (SInt32*) &variable); -+ } -+ #endif -+#else -+#ifdef __GNUC__ -+ -+ /** Increments an integer in a thread-safe way. */ -+ forcedinline void atomicIncrement (int& variable) throw() -+ { -+#ifndef __x86__ -+ variable++; -+#else -+ __asm__ __volatile ( -+ "lock incl (%%ecx)" -+ : -+ : "c" (&variable)); -+#endif -+ } -+ -+ /** Increments an integer in a thread-safe way and returns the incremented value. */ -+ forcedinline int atomicIncrementAndReturn (int& variable) throw() -+ { -+ int result; -+#ifndef __x86__ -+ result = ++variable; -+#else -+ __asm__ __volatile ( -+ "lock xaddl %%eax, (%%ebx) \n\ -+ incl %%eax" -+ : "=a" (result) -+ : "b" (&variable), "a" (1) -+ : "cc", "memory"); -+#endif -+ return result; -+ } -+ -+ /** Decrememts an integer in a thread-safe way. */ -+ forcedinline void atomicDecrement (int& variable) throw() -+ { -+#ifndef __x86__ -+ variable--; -+#else -+ __asm__ __volatile ( -+ "lock decl (%%ecx)" -+ : -+ : "c" (&variable)); -+#endif -+ } -+ -+ /** Decrememts an integer in a thread-safe way and returns the incremented value. */ -+ forcedinline int atomicDecrementAndReturn (int& variable) throw() -+ { -+ int result; -+#ifndef __x86__ -+ result = --variable; -+#else -+ __asm__ __volatile ( -+ "lock xaddl %%eax, (%%ebx) \n\ -+ decl %%eax" -+ : "=a" (result) -+ : "b" (&variable), "a" (-1) -+ : "cc", "memory"); -+#endif -+ return result; -+ } -+ -+#else -+ -+ /** Increments an integer in a thread-safe way. */ -+ inline_assembly void __fastcall atomicIncrement (int& variable) throw() -+ { -+ __asm { -+ mov ecx, dword ptr [variable] -+ lock inc dword ptr [ecx] -+ } -+ } -+ -+ /** Increments an integer in a thread-safe way and returns the incremented value. */ -+ inline_assembly int __fastcall atomicIncrementAndReturn (int& variable) throw() -+ { -+ int result; -+ -+ __asm { -+ mov ecx, dword ptr [variable] -+ mov eax, 1 -+ lock xadd dword ptr [ecx], eax -+ inc eax -+ mov result, eax -+ } -+ -+ return result; -+ } -+ -+ /** Decrememts an integer in a thread-safe way. */ -+ inline_assembly void __fastcall atomicDecrement (int& variable) throw() -+ { -+ __asm { -+ mov ecx, dword ptr [variable] -+ lock dec dword ptr [ecx] -+ } -+ } -+ -+ /** Decrememts an integer in a thread-safe way and returns the incremented value. */ -+ inline_assembly int __fastcall atomicDecrementAndReturn (int& variable) throw() -+ { -+ int result; -+ -+ __asm { -+ mov ecx, dword ptr [variable] -+ mov eax, -1 -+ lock xadd dword ptr [ecx], eax -+ dec eax -+ mov result, eax -+ } -+ -+ return result; -+ } -+#endif -+#endif -+ -+#endif // __JUCE_ATOMIC_JUCEHEADER__ ---- juce/src/juce_core/basics/juce_PlatformDefs.h~remove-x86isms.patch -+++ juce/src/juce_core/basics/juce_PlatformDefs.h -@@ -1,326 +1,330 @@ --/*
-- ==============================================================================
--
-- This file is part of the JUCE library - "Jules' Utility Class Extensions"
-- Copyright 2004-6 by Raw Material Software ltd.
--
-- ------------------------------------------------------------------------------
--
-- JUCE can be redistributed and/or modified under the terms of the
-- GNU General Public License, as published by the Free Software Foundation;
-- either version 2 of the License, or (at your option) any later version.
--
-- JUCE is distributed in the hope that it will be useful,
-- but WITHOUT ANY WARRANTY; without even the implied warranty of
-- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-- GNU General Public License for more details.
--
-- You should have received a copy of the GNU General Public License
-- along with JUCE; if not, visit www.gnu.org/licenses or write to the
-- Free Software Foundation, Inc., 59 Temple Place, Suite 330,
-- Boston, MA 02111-1307 USA
--
-- ------------------------------------------------------------------------------
--
-- If you'd like to release a closed-source product which uses JUCE, commercial
-- licenses are also available: visit www.rawmaterialsoftware.com/juce for
-- more information.
--
-- ==============================================================================
--*/
--
--#ifndef __JUCE_PLATFORMDEFS_JUCEHEADER__
--#define __JUCE_PLATFORMDEFS_JUCEHEADER__
--
--
--//==============================================================================
--// set up platform definitions..
--#ifdef _WIN32
-- #define JUCE_WIN32 1
-- #define JUCE_WINDOWS 1
--#else
-- #ifdef LINUX
-- #define JUCE_LINUX 1
-- #else
-- #define JUCE_MAC 1
-- #endif
--#endif
--
--//==============================================================================
--#ifdef JUCE_WINDOWS
-- #ifdef _MSC_VER
-- #ifdef _WIN64
-- #define JUCE_64BIT 1
-- #else
-- #define JUCE_32BIT 1
-- #endif
-- #endif
--
-- #ifdef _DEBUG
-- #define JUCE_DEBUG 1
-- #endif
--
-- /** If defined, this indicates that the processor is little-endian. */
-- #define JUCE_LITTLE_ENDIAN 1
--
-- #define JUCE_INTEL 1
--#endif
--
--//==============================================================================
--#ifdef JUCE_MAC
--
-- #include <CoreServices/CoreServices.h>
-- #include <wchar.h>
--
-- #ifndef NDEBUG
-- #define JUCE_DEBUG 1
-- #endif
--
-- #ifdef __LITTLE_ENDIAN__
-- #define JUCE_LITTLE_ENDIAN 1
-- #else
-- #define JUCE_BIG_ENDIAN 1
-- #endif
--
-- #if defined (__ppc__) || defined (__ppc64__)
-- #define JUCE_PPC 1
-- #else
-- #define JUCE_INTEL 1
-- #endif
--
-- #ifdef __LP64__
-- #define JUCE_64BIT 1
-- #else
-- #define JUCE_32BIT 1
-- #endif
--#endif
--
--//==============================================================================
--#ifdef JUCE_LINUX
--
-- #ifdef _DEBUG
-- #define JUCE_DEBUG 1
-- #endif
--
-- #include <wchar.h>
--
-- // Allow override for big-endian Linux platforms
-- #ifndef JUCE_BIG_ENDIAN
-- #define JUCE_LITTLE_ENDIAN 1
-- #endif
--
-- #if defined (__LP64__) || defined (_LP64)
-- #define JUCE_64BIT 1
-- #else
-- #define JUCE_32BIT 1
-- #endif
--
-- #define JUCE_INTEL 1
--#endif
--
--//==============================================================================
--#if defined (__GNUC__) || defined (__MWERKS__)
-- /** A platform-independent 64-bit integer type. */
-- typedef long long int64;
-- /** A platform-independent 64-bit unsigned integer type. */
-- typedef unsigned long long uint64;
-- /** A platform-independent unicode character type. */
-- typedef wchar_t juce_wchar;
--
-- /** A platform-independent way of forcing an inline function.
--
-- Use the syntax: @code
-- forcedinline void myfunction (int x)
-- @endcode
-- */
-- #ifndef JUCE_DEBUG
-- #define forcedinline inline __attribute__((always_inline))
-- #else
-- #define forcedinline inline
-- #endif
--
-- /** A platform-independent way of stopping the compiler inlining a function.
--
-- Use the syntax: @code
-- juce_noinline void myfunction (int x)
-- @endcode
-- */
-- #define juce_noinline __attribute__((noinline))
--
--#else
-- //==============================================================================
-- /** A platform-independent 64-bit integer type. */
-- typedef __int64 int64;
-- /** A platform-independent 64-bit unsigned integer type. */
-- typedef unsigned __int64 uint64;
--
-- /** A platform-independent unicode character type. */
-- typedef wchar_t juce_wchar;
--
-- /** A platform-independent way of forcing an inline function.
--
-- Use the syntax: @code
-- forcedinline void myfunction (int x)
-- @endcode
-- */
-- #ifdef _MSC_VER
-- #define forcedinline __forceinline
-- #else
-- #define forcedinline inline
-- #endif
--
-- /** A platform-independent way of stopping the compiler inlining a function.
--
-- Use the syntax: @code
-- juce_noinline void myfunction (int x)
-- @endcode
-- */
-- #define juce_noinline
--
--#endif
--
--#if JUCE_64BIT
-- typedef int64 pointer_sized_int;
-- typedef uint64 pointer_sized_uint;
--#else
-- #if _MSC_VER >= 1300
-- typedef _W64 int pointer_sized_int;
-- typedef _W64 unsigned int pointer_sized_uint;
-- #else
-- typedef int pointer_sized_int;
-- typedef unsigned int pointer_sized_uint;
-- #endif
--#endif
--
--
--// borland can't handle inline functions containing asm code, so define a
--// special type of inline modifier for this kind of function. Sigh..
--#ifdef __BORLANDC__
-- #define inline_assembly
--#else
-- #define inline_assembly forcedinline
--#endif
--
--//==============================================================================
--typedef signed char int8;
--typedef unsigned char uint8;
--typedef signed short int16;
--typedef unsigned short uint16;
--typedef signed int int32;
--typedef unsigned int uint32;
--
--
--//==============================================================================
--// Debugging macros
--//
--
--#ifdef JUCE_DEBUG
-- //==============================================================================
-- // If debugging is enabled..
--
-- /** Writes a string to the standard error stream.
--
-- This is only compiled in a debug build.
--
-- @see Logger::outputDebugString
-- */
-- #define DBG(dbgtext) Logger::outputDebugString (dbgtext);
--
-- /** Printf's a string to the standard error stream.
--
-- This is only compiled in a debug build.
--
-- @see Logger::outputDebugString
-- */
-- #define DBG_PRINTF(dbgprintf) Logger::outputDebugPrintf dbgprintf;
--
-- // Assertions..
-- #if defined (_MSC_VER) || DOXYGEN
-- /** This will always cause an assertion failure.
--
-- This is only compiled in a debug build.
--
-- @see jassert()
-- */
-- #ifdef __BORLANDC__
-- extern void juce_StopInDebugger();
-- #define jassertfalse { juce_StopInDebugger(); }
-- #else
-- #define jassertfalse { __asm int 3 }
-- #endif
-- #elif defined (JUCE_MAC)
-- #define jassertfalse { Debugger(); }
-- #elif defined (__GNUC__) || defined (JUCE_LINUX)
-- #define jassertfalse { asm("int $3"); }
-- #endif
--
-- //==============================================================================
-- /** Platform-independent assertion macro.
--
-- This gets optimised out when not being built with debugging turned on.
--
-- Be careful not to call any functions within its arguments that are vital to
-- the behaviour of the program, because these won't get called in the release
-- build.
--
-- @see jassertfalse
-- */
-- #define jassert(a) { if (! (a)) jassertfalse }
--
--#else
-- //==============================================================================
-- // If debugging is disabled, disable all the assertions and debugging stuff..
--
-- #define DBG(dbgtext)
-- #define DBG_PRINTF(dbgprintf)
--
-- #define jassert(a) {}
-- #define jassertfalse {}
--
--#endif
--
--//==============================================================================
--#ifndef DOXYGEN
-- template <bool b> struct JuceStaticAssert;
-- template <> struct JuceStaticAssert <true> { static void dummy() {} };
--#endif
--
--/** A compile-time assertion macro.
--
-- If the expression parameter is false, the macro will cause a compile error.
--*/
--#define static_jassert(expression) JuceStaticAssert<expression>::dummy();
--
--
--//==============================================================================
--#if JUCE_CATCH_UNHANDLED_EXCEPTIONS
--
-- #define JUCE_TRY try
--
-- /** Used in try-catch blocks, this macro will send exceptions to the JUCEApplication
-- object so they can be logged by the application if it wants to.
-- */
-- #define JUCE_CATCH_EXCEPTION \
-- catch (const std::exception& e) \
-- { \
-- JUCEApplication::sendUnhandledException (&e, __FILE__, __LINE__); \
-- } \
-- catch (...) \
-- { \
-- JUCEApplication::sendUnhandledException (0, __FILE__, __LINE__); \
-- }
--
-- #define JUCE_CATCH_ALL catch (...) {}
-- #define JUCE_CATCH_ALL_ASSERT catch (...) { jassertfalse }
--
--#else
--
-- #define JUCE_TRY
-- #define JUCE_CATCH_EXCEPTION
-- #define JUCE_CATCH_ALL
-- #define JUCE_CATCH_ALL_ASSERT
--
--#endif
--
--
--#endif // __JUCE_PLATFORMDEFS_JUCEHEADER__
-+/* -+ ============================================================================== -+ -+ This file is part of the JUCE library - "Jules' Utility Class Extensions" -+ Copyright 2004-6 by Raw Material Software ltd. -+ -+ ------------------------------------------------------------------------------ -+ -+ JUCE can be redistributed and/or modified under the terms of the -+ GNU General Public License, as published by the Free Software Foundation; -+ either version 2 of the License, or (at your option) any later version. -+ -+ JUCE is distributed in the hope that it will be useful, -+ but WITHOUT ANY WARRANTY; without even the implied warranty of -+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -+ GNU General Public License for more details. -+ -+ You should have received a copy of the GNU General Public License -+ along with JUCE; if not, visit www.gnu.org/licenses or write to the -+ Free Software Foundation, Inc., 59 Temple Place, Suite 330, -+ Boston, MA 02111-1307 USA -+ -+ ------------------------------------------------------------------------------ -+ -+ If you'd like to release a closed-source product which uses JUCE, commercial -+ licenses are also available: visit www.rawmaterialsoftware.com/juce for -+ more information. -+ -+ ============================================================================== -+*/ -+ -+#ifndef __JUCE_PLATFORMDEFS_JUCEHEADER__ -+#define __JUCE_PLATFORMDEFS_JUCEHEADER__ -+ -+ -+//============================================================================== -+// set up platform definitions.. -+#ifdef _WIN32 -+ #define JUCE_WIN32 1 -+ #define JUCE_WINDOWS 1 -+#else -+ #ifdef LINUX -+ #define JUCE_LINUX 1 -+ #else -+ #define JUCE_MAC 1 -+ #endif -+#endif -+ -+//============================================================================== -+#ifdef JUCE_WINDOWS -+ #ifdef _MSC_VER -+ #ifdef _WIN64 -+ #define JUCE_64BIT 1 -+ #else -+ #define JUCE_32BIT 1 -+ #endif -+ #endif -+ -+ #ifdef _DEBUG -+ #define JUCE_DEBUG 1 -+ #endif -+ -+ /** If defined, this indicates that the processor is little-endian. */ -+ #define JUCE_LITTLE_ENDIAN 1 -+ -+ #define JUCE_INTEL 1 -+#endif -+ -+//============================================================================== -+#ifdef JUCE_MAC -+ -+ #include <CoreServices/CoreServices.h> -+ #include <wchar.h> -+ -+ #ifndef NDEBUG -+ #define JUCE_DEBUG 1 -+ #endif -+ -+ #ifdef __LITTLE_ENDIAN__ -+ #define JUCE_LITTLE_ENDIAN 1 -+ #else -+ #define JUCE_BIG_ENDIAN 1 -+ #endif -+ -+ #if defined (__ppc__) || defined (__ppc64__) -+ #define JUCE_PPC 1 -+ #else -+ #define JUCE_INTEL 1 -+ #endif -+ -+ #ifdef __LP64__ -+ #define JUCE_64BIT 1 -+ #else -+ #define JUCE_32BIT 1 -+ #endif -+#endif -+ -+//============================================================================== -+#ifdef JUCE_LINUX -+ -+ #ifdef _DEBUG -+ #define JUCE_DEBUG 1 -+ #endif -+ -+ #include <wchar.h> -+ -+ // Allow override for big-endian Linux platforms -+ #ifndef JUCE_BIG_ENDIAN -+ #define JUCE_LITTLE_ENDIAN 1 -+ #endif -+ -+ #if defined (__LP64__) || defined (_LP64) -+ #define JUCE_64BIT 1 -+ #else -+ #define JUCE_32BIT 1 -+ #endif -+ -+ #define JUCE_INTEL 1 -+#endif -+ -+//============================================================================== -+#if defined (__GNUC__) || defined (__MWERKS__) -+ /** A platform-independent 64-bit integer type. */ -+ typedef long long int64; -+ /** A platform-independent 64-bit unsigned integer type. */ -+ typedef unsigned long long uint64; -+ /** A platform-independent unicode character type. */ -+ typedef wchar_t juce_wchar; -+ -+ /** A platform-independent way of forcing an inline function. -+ -+ Use the syntax: @code -+ forcedinline void myfunction (int x) -+ @endcode -+ */ -+ #ifndef JUCE_DEBUG -+ #define forcedinline inline __attribute__((always_inline)) -+ #else -+ #define forcedinline inline -+ #endif -+ -+ /** A platform-independent way of stopping the compiler inlining a function. -+ -+ Use the syntax: @code -+ juce_noinline void myfunction (int x) -+ @endcode -+ */ -+ #define juce_noinline __attribute__((noinline)) -+ -+#else -+ //============================================================================== -+ /** A platform-independent 64-bit integer type. */ -+ typedef __int64 int64; -+ /** A platform-independent 64-bit unsigned integer type. */ -+ typedef unsigned __int64 uint64; -+ -+ /** A platform-independent unicode character type. */ -+ typedef wchar_t juce_wchar; -+ -+ /** A platform-independent way of forcing an inline function. -+ -+ Use the syntax: @code -+ forcedinline void myfunction (int x) -+ @endcode -+ */ -+ #ifdef _MSC_VER -+ #define forcedinline __forceinline -+ #else -+ #define forcedinline inline -+ #endif -+ -+ /** A platform-independent way of stopping the compiler inlining a function. -+ -+ Use the syntax: @code -+ juce_noinline void myfunction (int x) -+ @endcode -+ */ -+ #define juce_noinline -+ -+#endif -+ -+#if JUCE_64BIT -+ typedef int64 pointer_sized_int; -+ typedef uint64 pointer_sized_uint; -+#else -+ #if _MSC_VER >= 1300 -+ typedef _W64 int pointer_sized_int; -+ typedef _W64 unsigned int pointer_sized_uint; -+ #else -+ typedef int pointer_sized_int; -+ typedef unsigned int pointer_sized_uint; -+ #endif -+#endif -+ -+ -+// borland can't handle inline functions containing asm code, so define a -+// special type of inline modifier for this kind of function. Sigh.. -+#ifdef __BORLANDC__ -+ #define inline_assembly -+#else -+ #define inline_assembly forcedinline -+#endif -+ -+//============================================================================== -+typedef signed char int8; -+typedef unsigned char uint8; -+typedef signed short int16; -+typedef unsigned short uint16; -+typedef signed int int32; -+typedef unsigned int uint32; -+ -+ -+//============================================================================== -+// Debugging macros -+// -+ -+#ifdef JUCE_DEBUG -+ //============================================================================== -+ // If debugging is enabled.. -+ -+ /** Writes a string to the standard error stream. -+ -+ This is only compiled in a debug build. -+ -+ @see Logger::outputDebugString -+ */ -+ #define DBG(dbgtext) Logger::outputDebugString (dbgtext); -+ -+ /** Printf's a string to the standard error stream. -+ -+ This is only compiled in a debug build. -+ -+ @see Logger::outputDebugString -+ */ -+ #define DBG_PRINTF(dbgprintf) Logger::outputDebugPrintf dbgprintf; -+ -+ // Assertions.. -+ #if defined (_MSC_VER) || DOXYGEN -+ /** This will always cause an assertion failure. -+ -+ This is only compiled in a debug build. -+ -+ @see jassert() -+ */ -+ #ifdef __BORLANDC__ -+ extern void juce_StopInDebugger(); -+ #define jassertfalse { juce_StopInDebugger(); } -+ #else -+ #define jassertfalse { __asm int 3 } -+ #endif -+ #elif defined (JUCE_MAC) -+ #define jassertfalse { Debugger(); } -+ #elif defined (__GNUC__) || defined (JUCE_LINUX) -+ #ifndef __x86__ -+ #define jassertfalse { 1/0; } -+ #else -+ #define jassertfalse { asm("int $3"); } -+ #endif -+ #endif -+ -+ //============================================================================== -+ /** Platform-independent assertion macro. -+ -+ This gets optimised out when not being built with debugging turned on. -+ -+ Be careful not to call any functions within its arguments that are vital to -+ the behaviour of the program, because these won't get called in the release -+ build. -+ -+ @see jassertfalse -+ */ -+ #define jassert(a) { if (! (a)) jassertfalse } -+ -+#else -+ //============================================================================== -+ // If debugging is disabled, disable all the assertions and debugging stuff.. -+ -+ #define DBG(dbgtext) -+ #define DBG_PRINTF(dbgprintf) -+ -+ #define jassert(a) {} -+ #define jassertfalse {} -+ -+#endif -+ -+//============================================================================== -+#ifndef DOXYGEN -+ template <bool b> struct JuceStaticAssert; -+ template <> struct JuceStaticAssert <true> { static void dummy() {} }; -+#endif -+ -+/** A compile-time assertion macro. -+ -+ If the expression parameter is false, the macro will cause a compile error. -+*/ -+#define static_jassert(expression) JuceStaticAssert<expression>::dummy(); -+ -+ -+//============================================================================== -+#if JUCE_CATCH_UNHANDLED_EXCEPTIONS -+ -+ #define JUCE_TRY try -+ -+ /** Used in try-catch blocks, this macro will send exceptions to the JUCEApplication -+ object so they can be logged by the application if it wants to. -+ */ -+ #define JUCE_CATCH_EXCEPTION \ -+ catch (const std::exception& e) \ -+ { \ -+ JUCEApplication::sendUnhandledException (&e, __FILE__, __LINE__); \ -+ } \ -+ catch (...) \ -+ { \ -+ JUCEApplication::sendUnhandledException (0, __FILE__, __LINE__); \ -+ } -+ -+ #define JUCE_CATCH_ALL catch (...) {} -+ #define JUCE_CATCH_ALL_ASSERT catch (...) { jassertfalse } -+ -+#else -+ -+ #define JUCE_TRY -+ #define JUCE_CATCH_EXCEPTION -+ #define JUCE_CATCH_ALL -+ #define JUCE_CATCH_ALL_ASSERT -+ -+#endif -+ -+ -+#endif // __JUCE_PLATFORMDEFS_JUCEHEADER__ ---- juce/src/juce_core/basics/juce_DataConversions.h~remove-x86isms.patch -+++ juce/src/juce_core/basics/juce_DataConversions.h -@@ -1,172 +1,176 @@ --/*
-- ==============================================================================
--
-- This file is part of the JUCE library - "Jules' Utility Class Extensions"
-- Copyright 2004-6 by Raw Material Software ltd.
--
-- ------------------------------------------------------------------------------
--
-- JUCE can be redistributed and/or modified under the terms of the
-- GNU General Public License, as published by the Free Software Foundation;
-- either version 2 of the License, or (at your option) any later version.
--
-- JUCE is distributed in the hope that it will be useful,
-- but WITHOUT ANY WARRANTY; without even the implied warranty of
-- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-- GNU General Public License for more details.
--
-- You should have received a copy of the GNU General Public License
-- along with JUCE; if not, visit www.gnu.org/licenses or write to the
-- Free Software Foundation, Inc., 59 Temple Place, Suite 330,
-- Boston, MA 02111-1307 USA
--
-- ------------------------------------------------------------------------------
--
-- If you'd like to release a closed-source product which uses JUCE, commercial
-- licenses are also available: visit www.rawmaterialsoftware.com/juce for
-- more information.
--
-- ==============================================================================
--*/
--
--#ifndef __JUCE_DATACONVERSIONS_JUCEHEADER__
--#define __JUCE_DATACONVERSIONS_JUCEHEADER__
--
--#include "juce_PlatformDefs.h"
--
--//==============================================================================
--// Endianness conversions..
--
--/** Swaps the byte-order in an integer from little to big-endianness or vice-versa. */
--inline_assembly uint32 swapByteOrder (uint32 n) throw()
--{
--#ifdef JUCE_MAC
-- return CFSwapInt32 (n);
--#else
-- #ifdef __GNUC__
-- // Inpenetrable GCC version..
-- asm("bswap %%eax" : "=a"(n) : "a"(n));
-- return n;
-- #else
-- // Win32 version..
-- __asm {
-- mov eax, n
-- bswap eax
-- mov n, eax
-- }
-- return n;
-- #endif
--#endif
--}
--
--/** Swaps the byte-order of a 16-bit short. */
--inline uint16 swapByteOrder (const uint16 n) throw()
--{
-- return (uint16) ((n << 8) | (n >> 8));
--}
--
--inline uint64 swapByteOrder (const uint64 value) throw()
--{
--#ifdef JUCE_MAC
-- return CFSwapInt64 (value);
--#else
-- return (((int64) swapByteOrder ((uint32) value)) << 32)
-- | swapByteOrder ((uint32) (value >> 32));
--#endif
--}
--
--#ifdef JUCE_LITTLE_ENDIAN
-- /** Swaps the byte order of a 16-bit int if the CPU is big-endian */
-- inline uint16 swapIfBigEndian (const uint16 v) throw() { return v; }
-- /** Swaps the byte order of a 32-bit int if the CPU is big-endian */
-- inline uint32 swapIfBigEndian (const uint32 v) throw() { return v; }
-- /** Swaps the byte order of a 16-bit int if the CPU is little-endian */
-- inline uint16 swapIfLittleEndian (const uint16 v) throw() { return swapByteOrder (v); }
-- /** Swaps the byte order of a 32-bit int if the CPU is little-endian */
-- inline uint32 swapIfLittleEndian (const uint32 v) throw() { return swapByteOrder (v); }
--
-- /** Turns 4 bytes into a little-endian integer. */
-- inline uint32 littleEndianInt (const char* const bytes) throw() { return *(uint32*) bytes; }
--
-- /** Turns 2 bytes into a little-endian integer. */
-- inline uint16 littleEndianShort (const char* const bytes) throw() { return *(uint16*) bytes; }
--
-- /** Turns 4 bytes into a big-endian integer. */
-- inline uint32 bigEndianInt (const char* const bytes) throw() { return swapByteOrder (*(uint32*) bytes); }
--
-- /** Turns 2 bytes into a big-endian integer. */
-- inline uint16 bigEndianShort (const char* const bytes) throw() { return swapByteOrder (*(uint16*) bytes); }
--
--#else
-- /** Swaps the byte order of a 16-bit int if the CPU is big-endian */
-- inline uint16 swapIfBigEndian (const uint16 v) throw() { return swapByteOrder (v); }
-- /** Swaps the byte order of a 32-bit int if the CPU is big-endian */
-- inline uint32 swapIfBigEndian (const uint32 v) throw() { return swapByteOrder (v); }
-- /** Swaps the byte order of a 16-bit int if the CPU is little-endian */
-- inline uint16 swapIfLittleEndian (const uint16 v) throw() { return v; }
-- /** Swaps the byte order of a 32-bit int if the CPU is little-endian */
-- inline uint32 swapIfLittleEndian (const uint32 v) throw() { return v; }
--
-- /** Turns 4 bytes into a little-endian integer. */
-- inline uint32 littleEndianInt (const char* const bytes) throw() { return swapByteOrder (*(uint32*) bytes); }
--
-- /** Turns 2 bytes into a little-endian integer. */
-- inline uint16 littleEndianShort (const char* const bytes) throw() { return swapByteOrder (*(uint16*) bytes); }
--
-- /** Turns 4 bytes into a big-endian integer. */
-- inline uint32 bigEndianInt (const char* const bytes) throw() { return *(uint32*) bytes; }
--
-- /** Turns 2 bytes into a big-endian integer. */
-- inline uint16 bigEndianShort (const char* const bytes) throw() { return *(uint16*) bytes; }
--#endif
--
--/** Converts 3 little-endian bytes into a signed 24-bit value (which is sign-extended to 32 bits). */
--inline int littleEndian24Bit (const char* const bytes) throw() { return (((int) bytes[2]) << 16) | (((uint32) (uint8) bytes[1]) << 8) | ((uint32) (uint8) bytes[0]); }
--/** Converts 3 big-endian bytes into a signed 24-bit value (which is sign-extended to 32 bits). */
--inline int bigEndian24Bit (const char* const bytes) throw() { return (((int) bytes[0]) << 16) | (((uint32) (uint8) bytes[1]) << 8) | ((uint32) (uint8) bytes[2]); }
--
--/** Copies a 24-bit number to 3 little-endian bytes. */
--inline void littleEndian24BitToChars (const int value, char* const destBytes) throw() { destBytes[0] = (char)(value & 0xff); destBytes[1] = (char)((value >> 8) & 0xff); destBytes[2] = (char)((value >> 16) & 0xff); }
--/** Copies a 24-bit number to 3 big-endian bytes. */
--inline void bigEndian24BitToChars (const int value, char* const destBytes) throw() { destBytes[0] = (char)((value >> 16) & 0xff); destBytes[1] = (char)((value >> 8) & 0xff); destBytes[2] = (char)(value & 0xff); }
--
--
--//==============================================================================
--/** Fast floating-point-to-integer conversion.
--
-- This is faster than using the normal c++ cast to convert a double to an int, and
-- it will round the value to the nearest integer, rather than rounding it down
-- like the normal cast does.
--*/
--inline int roundDoubleToInt (const double value) throw()
--{
-- union { int asInt[2]; double asDouble; } n;
-- n.asDouble = value + 6755399441055744.0;
--
--#if JUCE_BIG_ENDIAN
-- return n.asInt [1];
--#else
-- return n.asInt [0];
--#endif
--}
--
--/** Fast floating-point-to-integer conversion.
--
-- This is faster than using the normal c++ cast to convert a float to an int, and
-- it will round the value to the nearest integer, rather than rounding it down
-- like the normal cast does.
--*/
--inline int roundFloatToInt (const float value) throw()
--{
-- union { int asInt[2]; double asDouble; } n;
-- n.asDouble = value + 6755399441055744.0;
--
--#if JUCE_BIG_ENDIAN
-- return n.asInt [1];
--#else
-- return n.asInt [0];
--#endif
--}
--
--
--#endif // __JUCE_DATACONVERSIONS_JUCEHEADER__
-+/* -+ ============================================================================== -+ -+ This file is part of the JUCE library - "Jules' Utility Class Extensions" -+ Copyright 2004-6 by Raw Material Software ltd. -+ -+ ------------------------------------------------------------------------------ -+ -+ JUCE can be redistributed and/or modified under the terms of the -+ GNU General Public License, as published by the Free Software Foundation; -+ either version 2 of the License, or (at your option) any later version. -+ -+ JUCE is distributed in the hope that it will be useful, -+ but WITHOUT ANY WARRANTY; without even the implied warranty of -+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -+ GNU General Public License for more details. -+ -+ You should have received a copy of the GNU General Public License -+ along with JUCE; if not, visit www.gnu.org/licenses or write to the -+ Free Software Foundation, Inc., 59 Temple Place, Suite 330, -+ Boston, MA 02111-1307 USA -+ -+ ------------------------------------------------------------------------------ -+ -+ If you'd like to release a closed-source product which uses JUCE, commercial -+ licenses are also available: visit www.rawmaterialsoftware.com/juce for -+ more information. -+ -+ ============================================================================== -+*/ -+ -+#ifndef __JUCE_DATACONVERSIONS_JUCEHEADER__ -+#define __JUCE_DATACONVERSIONS_JUCEHEADER__ -+ -+#include "juce_PlatformDefs.h" -+ -+//============================================================================== -+// Endianness conversions.. -+ -+/** Swaps the byte-order in an integer from little to big-endianness or vice-versa. */ -+inline_assembly uint32 swapByteOrder (uint32 n) throw() -+{ -+#ifdef JUCE_MAC -+ return CFSwapInt32 (n); -+#else -+ #ifdef __GNUC__ -+ #ifndef __x86__ -+ return ( ((n)&0xff)<<24) | (((n)&0xff00)<<8) | (((n)>>8)&0xff00) | (((n)>>24)&0xff); -+ #else -+ // Inpenetrable GCC version.. -+ asm("bswap %%eax" : "=a"(n) : "a"(n)); -+ return n; -+ #endif -+ #else -+ // Win32 version.. -+ __asm { -+ mov eax, n -+ bswap eax -+ mov n, eax -+ } -+ return n; -+ #endif -+#endif -+} -+ -+/** Swaps the byte-order of a 16-bit short. */ -+inline uint16 swapByteOrder (const uint16 n) throw() -+{ -+ return (uint16) ((n << 8) | (n >> 8)); -+} -+ -+inline uint64 swapByteOrder (const uint64 value) throw() -+{ -+#ifdef JUCE_MAC -+ return CFSwapInt64 (value); -+#else -+ return (((int64) swapByteOrder ((uint32) value)) << 32) -+ | swapByteOrder ((uint32) (value >> 32)); -+#endif -+} -+ -+#ifdef JUCE_LITTLE_ENDIAN -+ /** Swaps the byte order of a 16-bit int if the CPU is big-endian */ -+ inline uint16 swapIfBigEndian (const uint16 v) throw() { return v; } -+ /** Swaps the byte order of a 32-bit int if the CPU is big-endian */ -+ inline uint32 swapIfBigEndian (const uint32 v) throw() { return v; } -+ /** Swaps the byte order of a 16-bit int if the CPU is little-endian */ -+ inline uint16 swapIfLittleEndian (const uint16 v) throw() { return swapByteOrder (v); } -+ /** Swaps the byte order of a 32-bit int if the CPU is little-endian */ -+ inline uint32 swapIfLittleEndian (const uint32 v) throw() { return swapByteOrder (v); } -+ -+ /** Turns 4 bytes into a little-endian integer. */ -+ inline uint32 littleEndianInt (const char* const bytes) throw() { return *(uint32*) bytes; } -+ -+ /** Turns 2 bytes into a little-endian integer. */ -+ inline uint16 littleEndianShort (const char* const bytes) throw() { return *(uint16*) bytes; } -+ -+ /** Turns 4 bytes into a big-endian integer. */ -+ inline uint32 bigEndianInt (const char* const bytes) throw() { return swapByteOrder (*(uint32*) bytes); } -+ -+ /** Turns 2 bytes into a big-endian integer. */ -+ inline uint16 bigEndianShort (const char* const bytes) throw() { return swapByteOrder (*(uint16*) bytes); } -+ -+#else -+ /** Swaps the byte order of a 16-bit int if the CPU is big-endian */ -+ inline uint16 swapIfBigEndian (const uint16 v) throw() { return swapByteOrder (v); } -+ /** Swaps the byte order of a 32-bit int if the CPU is big-endian */ -+ inline uint32 swapIfBigEndian (const uint32 v) throw() { return swapByteOrder (v); } -+ /** Swaps the byte order of a 16-bit int if the CPU is little-endian */ -+ inline uint16 swapIfLittleEndian (const uint16 v) throw() { return v; } -+ /** Swaps the byte order of a 32-bit int if the CPU is little-endian */ -+ inline uint32 swapIfLittleEndian (const uint32 v) throw() { return v; } -+ -+ /** Turns 4 bytes into a little-endian integer. */ -+ inline uint32 littleEndianInt (const char* const bytes) throw() { return swapByteOrder (*(uint32*) bytes); } -+ -+ /** Turns 2 bytes into a little-endian integer. */ -+ inline uint16 littleEndianShort (const char* const bytes) throw() { return swapByteOrder (*(uint16*) bytes); } -+ -+ /** Turns 4 bytes into a big-endian integer. */ -+ inline uint32 bigEndianInt (const char* const bytes) throw() { return *(uint32*) bytes; } -+ -+ /** Turns 2 bytes into a big-endian integer. */ -+ inline uint16 bigEndianShort (const char* const bytes) throw() { return *(uint16*) bytes; } -+#endif -+ -+/** Converts 3 little-endian bytes into a signed 24-bit value (which is sign-extended to 32 bits). */ -+inline int littleEndian24Bit (const char* const bytes) throw() { return (((int) bytes[2]) << 16) | (((uint32) (uint8) bytes[1]) << 8) | ((uint32) (uint8) bytes[0]); } -+/** Converts 3 big-endian bytes into a signed 24-bit value (which is sign-extended to 32 bits). */ -+inline int bigEndian24Bit (const char* const bytes) throw() { return (((int) bytes[0]) << 16) | (((uint32) (uint8) bytes[1]) << 8) | ((uint32) (uint8) bytes[2]); } -+ -+/** Copies a 24-bit number to 3 little-endian bytes. */ -+inline void littleEndian24BitToChars (const int value, char* const destBytes) throw() { destBytes[0] = (char)(value & 0xff); destBytes[1] = (char)((value >> 8) & 0xff); destBytes[2] = (char)((value >> 16) & 0xff); } -+/** Copies a 24-bit number to 3 big-endian bytes. */ -+inline void bigEndian24BitToChars (const int value, char* const destBytes) throw() { destBytes[0] = (char)((value >> 16) & 0xff); destBytes[1] = (char)((value >> 8) & 0xff); destBytes[2] = (char)(value & 0xff); } -+ -+ -+//============================================================================== -+/** Fast floating-point-to-integer conversion. -+ -+ This is faster than using the normal c++ cast to convert a double to an int, and -+ it will round the value to the nearest integer, rather than rounding it down -+ like the normal cast does. -+*/ -+inline int roundDoubleToInt (const double value) throw() -+{ -+ union { int asInt[2]; double asDouble; } n; -+ n.asDouble = value + 6755399441055744.0; -+ -+#if JUCE_BIG_ENDIAN -+ return n.asInt [1]; -+#else -+ return n.asInt [0]; -+#endif -+} -+ -+/** Fast floating-point-to-integer conversion. -+ -+ This is faster than using the normal c++ cast to convert a float to an int, and -+ it will round the value to the nearest integer, rather than rounding it down -+ like the normal cast does. -+*/ -+inline int roundFloatToInt (const float value) throw() -+{ -+ union { int asInt[2]; double asDouble; } n; -+ n.asDouble = value + 6755399441055744.0; -+ -+#if JUCE_BIG_ENDIAN -+ return n.asInt [1]; -+#else -+ return n.asInt [0]; -+#endif -+} -+ -+ -+#endif // __JUCE_DATACONVERSIONS_JUCEHEADER__ ---- juce/build/linux/platform_specific_code/juce_linux_SystemStats.cpp~remove-x86isms.patch -+++ juce/build/linux/platform_specific_code/juce_linux_SystemStats.cpp -@@ -1,472 +1,472 @@ --/*
-- ==============================================================================
--
-- This file is part of the JUCE library - "Jules' Utility Class Extensions"
-- Copyright 2004-6 by Raw Material Software ltd.
--
-- ------------------------------------------------------------------------------
--
-- JUCE can be redistributed and/or modified under the terms of the
-- GNU General Public License, as published by the Free Software Foundation;
-- either version 2 of the License, or (at your option) any later version.
--
-- JUCE is distributed in the hope that it will be useful,
-- but WITHOUT ANY WARRANTY; without even the implied warranty of
-- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-- GNU General Public License for more details.
--
-- You should have received a copy of the GNU General Public License
-- along with JUCE; if not, visit www.gnu.org/licenses or write to the
-- Free Software Foundation, Inc., 59 Temple Place, Suite 330,
-- Boston, MA 02111-1307 USA
--
-- ------------------------------------------------------------------------------
--
-- If you'd like to release a closed-source product which uses JUCE, commercial
-- licenses are also available: visit www.rawmaterialsoftware.com/juce for
-- more information.
--
-- ==============================================================================
--*/
--
--#include "linuxincludes.h"
--#include "../../../src/juce_core/basics/juce_StandardHeader.h"
--
--#ifdef __CYGWIN__
-- #include <apr_uuid.h>
-- #include <malloc.h>
--#else
-- #include <sys/sysinfo.h>
-- #include <dlfcn.h>
--#endif
--
--#ifdef JUCE_UUID
-- #include <uuid/uuid.h>
--#endif
--
--#ifndef CPU_ISSET
-- #undef SUPPORT_AFFINITIES
--#endif
--
--BEGIN_JUCE_NAMESPACE
--
--#include "../../../src/juce_core/io/files/juce_File.h"
--#include "../../../src/juce_core/basics/juce_SystemStats.h"
--#include "../../../src/juce_core/basics/juce_Logger.h"
--#include "../../../src/juce_core/misc/juce_Uuid.h"
--#include "../../../src/juce_core/threads/juce_Process.h"
--#include "../../../src/juce_appframework/events/juce_Timer.h"
--#include "../../../src/juce_core/misc/juce_PlatformUtilities.h"
--
--static struct _LogicalCpuInfo
--{
-- bool htSupported;
-- bool htAvailable;
-- int numPackages;
-- int numLogicalPerPackage;
-- uint32 physicalAffinityMask;
--} logicalCpuInfo;
--
--//==============================================================================
--static unsigned int getCPUIDWord (int* familyModel = 0, int* extFeatures = 0) __attribute__ ((noinline));
--
--static unsigned int getCPUIDWord (int* familyModel, int* extFeatures)
--{
-- unsigned int cpu = 0;
-- unsigned int ext = 0;
-- unsigned int family = 0;
--
-- __asm__ __volatile__ (
--" pushf \n"
--#if JUCE_64BIT
--" pop %%rax \n"
--#else
--" pop %%eax \n"
--#endif
--" movl %%eax, %%ecx \n"
--" xorl $0x200000, %%eax \n"
--#if JUCE_64BIT
--" push %%rax \n"
--#else
--" push %%eax \n"
--#endif
--" popf \n"
--" pushf \n"
--#if JUCE_64BIT
--" pop %%rax \n"
--#else
--" pop %%eax \n"
--#endif
--" andl $0x200000, %%eax \n"
--" andl $0x200000, %%ecx \n"
--" cmpl %%eax, %%ecx \n"
--" movl $0, %%edx \n"
--" je noCpuId \n"
--" movl $1, %%eax \n"
--" cpuid \n"
--"noCpuId: \n"
-- : "=a"(family), /* Output in eax */
-- "=d"(cpu), /* Output in ebx */
-- "=b"(ext) /* Output in edx */
-- : /* No inputs */
-- : "cc", "ecx" /* Clobber list */
-- );
--
-- if (familyModel)
-- *familyModel = family;
-- if (extFeatures)
-- *extFeatures = ext;
--
-- return cpu;
--}
--
--void juce_initLogicalCpuInfo()
--{
-- int familyModelWord, extFeaturesWord;
-- int featuresWord = getCPUIDWord (&familyModelWord, &extFeaturesWord);
--
-- logicalCpuInfo.htSupported = false;
-- logicalCpuInfo.htAvailable = false;
-- logicalCpuInfo.numLogicalPerPackage = 1;
-- logicalCpuInfo.numPackages = 0;
-- logicalCpuInfo.physicalAffinityMask = 0;
--
--#if SUPPORT_AFFINITIES
-- cpu_set_t processAffinity;
--
-- /*
-- N.B. If this line causes a compile error, then you've probably not got the latest
-- version of glibc installed.
--
-- If you don't want to update your copy of glibc and don't care about cpu affinities,
-- then you can just disable all this stuff by removing the SUPPORT_AFFINITIES macro
-- from the linuxincludes.h file.
-- */
-- if (sched_getaffinity (getpid(),
-- sizeof (cpu_set_t),
-- &processAffinity) != sizeof (cpu_set_t))
-- {
-- return;
-- }
--
-- // Checks: CPUID supported, model >= Pentium 4, Hyperthreading bit set, logical CPUs per package > 1
-- if (featuresWord == 0
-- || ((familyModelWord >> 8) & 0xf) < 15
-- || (featuresWord & (1 << 28)) == 0
-- || ((extFeaturesWord >> 16) & 0xff) < 2)
-- {
-- for (int i = 0; i < 64; ++i)
-- if (CPU_ISSET (i, &processAffinity))
-- logicalCpuInfo.physicalAffinityMask |= (1 << i);
--
-- return;
-- }
--
-- logicalCpuInfo.htSupported = true;
-- logicalCpuInfo.numLogicalPerPackage = (extFeaturesWord >> 16) & 0xff;
--
-- cpu_set_t affinityMask;
-- cpu_set_t physAff;
-- CPU_ZERO (&physAff);
--
-- unsigned char i = 1;
-- unsigned char physIdMask = 0xFF;
-- unsigned char physIdShift = 0;
--
-- //unsigned char apicId, logId, physId;
--
-- while (i < logicalCpuInfo.numLogicalPerPackage)
-- {
-- i *= 2;
-- physIdMask <<= 1;
-- physIdShift++;
-- }
--
-- CPU_SET (0, &affinityMask);
-- logicalCpuInfo.numPackages = 0;
--
--//xxx revisit this at some point..
--/* while ((affinityMask != 0) && (affinityMask <= processAffinity))
-- {
-- int ret;
-- if (! sched_setaffinity (getpid(), sizeof (cpu_set_t), &affinityMask))
-- {
-- sched_yield(); // schedule onto correct CPU
--
-- featuresWord = getCPUIDWord(&familyModelWord, &extFeaturesWord);
-- apicId = (unsigned char)(extFeaturesWord >> 24);
-- logId = (unsigned char)(apicId & ~physIdMask);
-- physId = (unsigned char)(apicId >> physIdShift);
--
-- if (logId != 0)
-- logicalCpuInfo.htAvailable = true;
--
-- if ((((int)logId) % logicalCpuInfo.numLogicalPerPackage) == 0)
-- {
-- // This is a physical CPU
-- physAff |= affinityMask;
-- logicalCpuInfo.numPackages++;
-- }
-- }
--
-- affinityMask = affinityMask << 1;
-- }
--
-- sched_setaffinity (getpid(), sizeof(unsigned long), &processAffinity);
--*/
--
-- logicalCpuInfo.physicalAffinityMask = 0;
--
-- for (int i = 0; i < 64; ++i)
-- if (CPU_ISSET (i, &physAff))
-- logicalCpuInfo.physicalAffinityMask |= (1 << i);
--
--#endif
--}
--
--//==============================================================================
--void Logger::outputDebugString (const String& text)
--{
-- fprintf (stdout, (const char*) (text + T("\n")));
--}
--
--void Logger::outputDebugPrintf (const tchar* format, ...)
--{
-- String text;
-- va_list args;
-- va_start (args, format);
-- text.vprintf(format, args);
-- outputDebugString(text);
--}
--
--const String SystemStats::getOSType()
--{
-- return SystemStats::Linux;
--}
--
--static const String getCpuInfo (const char* key, bool lastOne = false)
--{
-- String info;
-- char buf [256];
--
-- FILE* f = fopen ("/proc/cpuinfo", "r");
--
-- while (f != 0 && fgets (buf, sizeof(buf), f))
-- {
-- if (strncmp (buf, key, strlen (key)) == 0)
-- {
-- char* p = buf;
--
-- while (*p && *p != '\n')
-- ++p;
--
-- if (*p != 0)
-- *p = 0;
--
-- p = buf;
--
-- while (*p != 0 && *p != ':')
-- ++p;
--
-- if (*p != 0 && *(p + 1) != 0)
-- info = p + 2;
--
-- if (! lastOne)
-- break;
-- }
-- }
--
-- fclose (f);
-- return info;
--}
--
--bool SystemStats::hasMMX()
--{
-- return getCpuInfo ("flags").contains (T("mmx"));
--}
--
--bool SystemStats::hasSSE()
--{
-- return getCpuInfo ("flags").contains (T("sse"));
--}
--
--bool SystemStats::hasSSE2()
--{
-- return getCpuInfo ("flags").contains (T("sse2"));
--}
--
--bool SystemStats::has3DNow()
--{
-- return getCpuInfo ("flags").contains (T("3dnow"));
--}
--
--const String SystemStats::getCpuVendor()
--{
-- return getCpuInfo ("vendor_id");
--}
--
--int SystemStats::getCpuSpeedInMegaherz()
--{
-- const String speed (getCpuInfo ("cpu MHz"));
--
-- return (int) (speed.getFloatValue() + 0.5f);
--}
--
--bool SystemStats::hasHyperThreading()
--{
-- return logicalCpuInfo.htAvailable;
--}
--
--int SystemStats::getMemorySizeInMegabytes()
--{
--#ifndef __CYGWIN__
-- struct sysinfo sysi;
--
-- if (sysinfo (&sysi) == 0)
-- return (sysi.totalram * sysi.mem_unit / (1024 * 1024));
--
-- return 0;
--
--#else
-- jassertfalse
-- return 256;
--#endif
--}
--
--unsigned int juce_millisecondsSinceStartup()
--{
-- static unsigned int calibrate = 0;
-- static bool calibrated = false;
-- timeval t;
-- unsigned int ret = 0;
--
-- if (! gettimeofday (&t, 0))
-- {
-- if (! calibrated)
-- {
--#ifndef __CYGWIN__
-- struct sysinfo sysi;
--
-- if (sysinfo (&sysi) == 0)
-- // Safe to assume system was not brought up earlier than 1970!
-- calibrate = t.tv_sec - sysi.uptime;
--#else
-- // bit of a hack, but things should all still work, as we're not often
-- // really interested in how long the machine's been turned on, and just
-- // use this call for relative times..
-- calibrate = t.tv_sec;
--#endif
--
-- calibrated = true;
-- }
--
-- ret = 1000 * (t.tv_sec - calibrate) + (t.tv_usec / 1000);
-- }
--
-- return ret;
--}
--
--double juce_millisecondsSinceStartupHiRes()
--{
-- return Time::getHighResolutionTicks() * (1.0 / 1000000.0);
--}
--
--int64 Time::getHighResolutionTicks()
--{
-- timeval t;
-- if (gettimeofday(&t,NULL))
-- return 0;
--
-- return ((int64) t.tv_sec * (int64) 1000000) + (int64) t.tv_usec;
--}
--
--int64 Time::getHighResolutionTicksPerSecond()
--{
-- // Microseconds
-- return 1000000;
--}
--
--bool Time::setSystemTimeToThisTime() const
--{
-- timeval t;
-- t.tv_sec = millisSinceEpoch % 1000000;
-- t.tv_usec = millisSinceEpoch - t.tv_sec;
--
-- return settimeofday (&t, NULL) ? false : true;
--}
--
--const String Uuid::generateUuid()
--{
--#ifdef JUCE_UUID
-- uuid_t uuid;
-- char *s = new char[37];
-- String uuidStr;
--
-- uuid_generate (uuid);
-- uuid_unparse (uuid, s);
--
-- uuidStr = s;
-- delete[] s;
--
-- return uuidStr;
--#else
-- jassertfalse
-- return String::empty;
--#endif
--}
--
--int SystemStats::getPageSize()
--{
-- static int systemPageSize = 0;
--
-- if (systemPageSize == 0)
-- systemPageSize = sysconf (_SC_PAGESIZE);
--
-- return systemPageSize;
--}
--
--int SystemStats::getNumPhysicalCpus()
--{
-- if (logicalCpuInfo.numPackages)
-- return logicalCpuInfo.numPackages;
--
-- return getNumLogicalCpus();
--}
--
--int SystemStats::getNumLogicalCpus()
--{
-- const int lastCpu = getCpuInfo ("processor", true).getIntValue();
--
-- return lastCpu + 1;
--}
--
--uint32 SystemStats::getPhysicalAffinityMask()
--{
--#if SUPPORT_AFFINITIES
-- return logicalCpuInfo.physicalAffinityMask;
--#else
-- /* affinities aren't supported because either the appropriate header files weren't found,
-- or the SUPPORT_AFFINITIES macro was turned off in linuxheaders.h
-- */
-- jassertfalse
-- return 0;
--#endif
--
--}
--
--//==============================================================================
--void SystemStats::initialiseStats()
--{
-- // Process starts off as root when running suid
-- Process::lowerPrivilege();
--
-- String s (SystemStats::getJUCEVersion());
--
-- juce_initLogicalCpuInfo();
--}
--
--void PlatformUtilities::fpuReset()
--{
--}
--
--END_JUCE_NAMESPACE
-+/* -+ ============================================================================== -+ -+ This file is part of the JUCE library - "Jules' Utility Class Extensions" -+ Copyright 2004-6 by Raw Material Software ltd. -+ -+ ------------------------------------------------------------------------------ -+ -+ JUCE can be redistributed and/or modified under the terms of the -+ GNU General Public License, as published by the Free Software Foundation; -+ either version 2 of the License, or (at your option) any later version. -+ -+ JUCE is distributed in the hope that it will be useful, -+ but WITHOUT ANY WARRANTY; without even the implied warranty of -+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -+ GNU General Public License for more details. -+ -+ You should have received a copy of the GNU General Public License -+ along with JUCE; if not, visit www.gnu.org/licenses or write to the -+ Free Software Foundation, Inc., 59 Temple Place, Suite 330, -+ Boston, MA 02111-1307 USA -+ -+ ------------------------------------------------------------------------------ -+ -+ If you'd like to release a closed-source product which uses JUCE, commercial -+ licenses are also available: visit www.rawmaterialsoftware.com/juce for -+ more information. -+ -+ ============================================================================== -+*/ -+ -+#include "linuxincludes.h" -+#include "../../../src/juce_core/basics/juce_StandardHeader.h" -+ -+#ifdef __CYGWIN__ -+ #include <apr_uuid.h> -+ #include <malloc.h> -+#else -+ #include <sys/sysinfo.h> -+ #include <dlfcn.h> -+#endif -+ -+#ifdef JUCE_UUID -+ #include <uuid/uuid.h> -+#endif -+ -+#ifndef CPU_ISSET -+ #undef SUPPORT_AFFINITIES -+#endif -+ -+BEGIN_JUCE_NAMESPACE -+ -+#include "../../../src/juce_core/io/files/juce_File.h" -+#include "../../../src/juce_core/basics/juce_SystemStats.h" -+#include "../../../src/juce_core/basics/juce_Logger.h" -+#include "../../../src/juce_core/misc/juce_Uuid.h" -+#include "../../../src/juce_core/threads/juce_Process.h" -+#include "../../../src/juce_appframework/events/juce_Timer.h" -+#include "../../../src/juce_core/misc/juce_PlatformUtilities.h" -+ -+static struct _LogicalCpuInfo -+{ -+ bool htSupported; -+ bool htAvailable; -+ int numPackages; -+ int numLogicalPerPackage; -+ uint32 physicalAffinityMask; -+} logicalCpuInfo; -+ -+//============================================================================== -+static unsigned int getCPUIDWord (int* familyModel = 0, int* extFeatures = 0) __attribute__ ((noinline)); -+ -+static unsigned int getCPUIDWord (int* familyModel, int* extFeatures) -+{ -+ unsigned int cpu = 0; -+ unsigned int ext = 0; -+ unsigned int family = 0; -+#ifdef __x86__ -+ __asm__ __volatile__ ( -+" pushf \n" -+#if JUCE_64BIT -+" pop %%rax \n" -+#else -+" pop %%eax \n" -+#endif -+" movl %%eax, %%ecx \n" -+" xorl $0x200000, %%eax \n" -+#if JUCE_64BIT -+" push %%rax \n" -+#else -+" push %%eax \n" -+#endif -+" popf \n" -+" pushf \n" -+#if JUCE_64BIT -+" pop %%rax \n" -+#else -+" pop %%eax \n" -+#endif -+" andl $0x200000, %%eax \n" -+" andl $0x200000, %%ecx \n" -+" cmpl %%eax, %%ecx \n" -+" movl $0, %%edx \n" -+" je noCpuId \n" -+" movl $1, %%eax \n" -+" cpuid \n" -+"noCpuId: \n" -+ : "=a"(family), /* Output in eax */ -+ "=d"(cpu), /* Output in ebx */ -+ "=b"(ext) /* Output in edx */ -+ : /* No inputs */ -+ : "cc", "ecx" /* Clobber list */ -+ ); -+#endif -+ if (familyModel) -+ *familyModel = family; -+ if (extFeatures) -+ *extFeatures = ext; -+ -+ return cpu; -+} -+ -+void juce_initLogicalCpuInfo() -+{ -+ int familyModelWord, extFeaturesWord; -+ int featuresWord = getCPUIDWord (&familyModelWord, &extFeaturesWord); -+ -+ logicalCpuInfo.htSupported = false; -+ logicalCpuInfo.htAvailable = false; -+ logicalCpuInfo.numLogicalPerPackage = 1; -+ logicalCpuInfo.numPackages = 0; -+ logicalCpuInfo.physicalAffinityMask = 0; -+ -+#if SUPPORT_AFFINITIES -+ cpu_set_t processAffinity; -+ -+ /* -+ N.B. If this line causes a compile error, then you've probably not got the latest -+ version of glibc installed. -+ -+ If you don't want to update your copy of glibc and don't care about cpu affinities, -+ then you can just disable all this stuff by removing the SUPPORT_AFFINITIES macro -+ from the linuxincludes.h file. -+ */ -+ if (sched_getaffinity (getpid(), -+ sizeof (cpu_set_t), -+ &processAffinity) != sizeof (cpu_set_t)) -+ { -+ return; -+ } -+ -+ // Checks: CPUID supported, model >= Pentium 4, Hyperthreading bit set, logical CPUs per package > 1 -+ if (featuresWord == 0 -+ || ((familyModelWord >> 8) & 0xf) < 15 -+ || (featuresWord & (1 << 28)) == 0 -+ || ((extFeaturesWord >> 16) & 0xff) < 2) -+ { -+ for (int i = 0; i < 64; ++i) -+ if (CPU_ISSET (i, &processAffinity)) -+ logicalCpuInfo.physicalAffinityMask |= (1 << i); -+ -+ return; -+ } -+ -+ logicalCpuInfo.htSupported = true; -+ logicalCpuInfo.numLogicalPerPackage = (extFeaturesWord >> 16) & 0xff; -+ -+ cpu_set_t affinityMask; -+ cpu_set_t physAff; -+ CPU_ZERO (&physAff); -+ -+ unsigned char i = 1; -+ unsigned char physIdMask = 0xFF; -+ unsigned char physIdShift = 0; -+ -+ //unsigned char apicId, logId, physId; -+ -+ while (i < logicalCpuInfo.numLogicalPerPackage) -+ { -+ i *= 2; -+ physIdMask <<= 1; -+ physIdShift++; -+ } -+ -+ CPU_SET (0, &affinityMask); -+ logicalCpuInfo.numPackages = 0; -+ -+//xxx revisit this at some point.. -+/* while ((affinityMask != 0) && (affinityMask <= processAffinity)) -+ { -+ int ret; -+ if (! sched_setaffinity (getpid(), sizeof (cpu_set_t), &affinityMask)) -+ { -+ sched_yield(); // schedule onto correct CPU -+ -+ featuresWord = getCPUIDWord(&familyModelWord, &extFeaturesWord); -+ apicId = (unsigned char)(extFeaturesWord >> 24); -+ logId = (unsigned char)(apicId & ~physIdMask); -+ physId = (unsigned char)(apicId >> physIdShift); -+ -+ if (logId != 0) -+ logicalCpuInfo.htAvailable = true; -+ -+ if ((((int)logId) % logicalCpuInfo.numLogicalPerPackage) == 0) -+ { -+ // This is a physical CPU -+ physAff |= affinityMask; -+ logicalCpuInfo.numPackages++; -+ } -+ } -+ -+ affinityMask = affinityMask << 1; -+ } -+ -+ sched_setaffinity (getpid(), sizeof(unsigned long), &processAffinity); -+*/ -+ -+ logicalCpuInfo.physicalAffinityMask = 0; -+ -+ for (int i = 0; i < 64; ++i) -+ if (CPU_ISSET (i, &physAff)) -+ logicalCpuInfo.physicalAffinityMask |= (1 << i); -+ -+#endif -+} -+ -+//============================================================================== -+void Logger::outputDebugString (const String& text) -+{ -+ fprintf (stdout, (const char*) (text + T("\n"))); -+} -+ -+void Logger::outputDebugPrintf (const tchar* format, ...) -+{ -+ String text; -+ va_list args; -+ va_start (args, format); -+ text.vprintf(format, args); -+ outputDebugString(text); -+} -+ -+const String SystemStats::getOSType() -+{ -+ return SystemStats::Linux; -+} -+ -+static const String getCpuInfo (const char* key, bool lastOne = false) -+{ -+ String info; -+ char buf [256]; -+ -+ FILE* f = fopen ("/proc/cpuinfo", "r"); -+ -+ while (f != 0 && fgets (buf, sizeof(buf), f)) -+ { -+ if (strncmp (buf, key, strlen (key)) == 0) -+ { -+ char* p = buf; -+ -+ while (*p && *p != '\n') -+ ++p; -+ -+ if (*p != 0) -+ *p = 0; -+ -+ p = buf; -+ -+ while (*p != 0 && *p != ':') -+ ++p; -+ -+ if (*p != 0 && *(p + 1) != 0) -+ info = p + 2; -+ -+ if (! lastOne) -+ break; -+ } -+ } -+ -+ fclose (f); -+ return info; -+} -+ -+bool SystemStats::hasMMX() -+{ -+ return getCpuInfo ("flags").contains (T("mmx")); -+} -+ -+bool SystemStats::hasSSE() -+{ -+ return getCpuInfo ("flags").contains (T("sse")); -+} -+ -+bool SystemStats::hasSSE2() -+{ -+ return getCpuInfo ("flags").contains (T("sse2")); -+} -+ -+bool SystemStats::has3DNow() -+{ -+ return getCpuInfo ("flags").contains (T("3dnow")); -+} -+ -+const String SystemStats::getCpuVendor() -+{ -+ return getCpuInfo ("vendor_id"); -+} -+ -+int SystemStats::getCpuSpeedInMegaherz() -+{ -+ const String speed (getCpuInfo ("cpu MHz")); -+ -+ return (int) (speed.getFloatValue() + 0.5f); -+} -+ -+bool SystemStats::hasHyperThreading() -+{ -+ return logicalCpuInfo.htAvailable; -+} -+ -+int SystemStats::getMemorySizeInMegabytes() -+{ -+#ifndef __CYGWIN__ -+ struct sysinfo sysi; -+ -+ if (sysinfo (&sysi) == 0) -+ return (sysi.totalram * sysi.mem_unit / (1024 * 1024)); -+ -+ return 0; -+ -+#else -+ jassertfalse -+ return 256; -+#endif -+} -+ -+unsigned int juce_millisecondsSinceStartup() -+{ -+ static unsigned int calibrate = 0; -+ static bool calibrated = false; -+ timeval t; -+ unsigned int ret = 0; -+ -+ if (! gettimeofday (&t, 0)) -+ { -+ if (! calibrated) -+ { -+#ifndef __CYGWIN__ -+ struct sysinfo sysi; -+ -+ if (sysinfo (&sysi) == 0) -+ // Safe to assume system was not brought up earlier than 1970! -+ calibrate = t.tv_sec - sysi.uptime; -+#else -+ // bit of a hack, but things should all still work, as we're not often -+ // really interested in how long the machine's been turned on, and just -+ // use this call for relative times.. -+ calibrate = t.tv_sec; -+#endif -+ -+ calibrated = true; -+ } -+ -+ ret = 1000 * (t.tv_sec - calibrate) + (t.tv_usec / 1000); -+ } -+ -+ return ret; -+} -+ -+double juce_millisecondsSinceStartupHiRes() -+{ -+ return Time::getHighResolutionTicks() * (1.0 / 1000000.0); -+} -+ -+int64 Time::getHighResolutionTicks() -+{ -+ timeval t; -+ if (gettimeofday(&t,NULL)) -+ return 0; -+ -+ return ((int64) t.tv_sec * (int64) 1000000) + (int64) t.tv_usec; -+} -+ -+int64 Time::getHighResolutionTicksPerSecond() -+{ -+ // Microseconds -+ return 1000000; -+} -+ -+bool Time::setSystemTimeToThisTime() const -+{ -+ timeval t; -+ t.tv_sec = millisSinceEpoch % 1000000; -+ t.tv_usec = millisSinceEpoch - t.tv_sec; -+ -+ return settimeofday (&t, NULL) ? false : true; -+} -+ -+const String Uuid::generateUuid() -+{ -+#ifdef JUCE_UUID -+ uuid_t uuid; -+ char *s = new char[37]; -+ String uuidStr; -+ -+ uuid_generate (uuid); -+ uuid_unparse (uuid, s); -+ -+ uuidStr = s; -+ delete[] s; -+ -+ return uuidStr; -+#else -+ jassertfalse -+ return String::empty; -+#endif -+} -+ -+int SystemStats::getPageSize() -+{ -+ static int systemPageSize = 0; -+ -+ if (systemPageSize == 0) -+ systemPageSize = sysconf (_SC_PAGESIZE); -+ -+ return systemPageSize; -+} -+ -+int SystemStats::getNumPhysicalCpus() -+{ -+ if (logicalCpuInfo.numPackages) -+ return logicalCpuInfo.numPackages; -+ -+ return getNumLogicalCpus(); -+} -+ -+int SystemStats::getNumLogicalCpus() -+{ -+ const int lastCpu = getCpuInfo ("processor", true).getIntValue(); -+ -+ return lastCpu + 1; -+} -+ -+uint32 SystemStats::getPhysicalAffinityMask() -+{ -+#if SUPPORT_AFFINITIES -+ return logicalCpuInfo.physicalAffinityMask; -+#else -+ /* affinities aren't supported because either the appropriate header files weren't found, -+ or the SUPPORT_AFFINITIES macro was turned off in linuxheaders.h -+ */ -+ jassertfalse -+ return 0; -+#endif -+ -+} -+ -+//============================================================================== -+void SystemStats::initialiseStats() -+{ -+ // Process starts off as root when running suid -+ Process::lowerPrivilege(); -+ -+ String s (SystemStats::getJUCEVersion()); -+ -+ juce_initLogicalCpuInfo(); -+} -+ -+void PlatformUtilities::fpuReset() -+{ -+} -+ -+END_JUCE_NAMESPACE |