E2K: added initial support of MCST Elbrus 2000 CPU architecture
This commit is contained in:
parent
5a4d0b7a4d
commit
0d5f7a1916
@ -3281,7 +3281,7 @@ void MathLib_Init( float gamma, float texGamma, float brightness, int overbright
|
||||
{
|
||||
s_bSSEEnabled = true;
|
||||
|
||||
#ifndef PLATFORM_WINDOWS_PC64
|
||||
#if !defined(PLATFORM_WINDOWS_PC64) && (defined(__i386__) || defined(__amd64__))
|
||||
// These are not yet available.
|
||||
// Select the SSE specific routines if available
|
||||
pfVectorNormalize = _VectorNormalize;
|
||||
|
@ -15,6 +15,8 @@
|
||||
#include "sse2neon.h"
|
||||
#endif
|
||||
|
||||
#if !defined(__e2k__)
|
||||
|
||||
#include "sse.h"
|
||||
|
||||
// memdbgon must be the last include file in a .cpp file!!!
|
||||
@ -1127,3 +1129,5 @@ vec_t DotProduct (const vec_t *a, const vec_t *c)
|
||||
*/
|
||||
|
||||
#endif // COMPILER_MSVC64
|
||||
|
||||
#endif // !defined(__e2k__)
|
||||
|
@ -1152,7 +1152,7 @@ inline void CVertexBuilder::FastAdvanceNVertices( int n )
|
||||
//-----------------------------------------------------------------------------
|
||||
inline void CVertexBuilder::FastVertex( const ModelVertexDX7_t &vertex )
|
||||
{
|
||||
#if defined(__arm__) || defined(__aarch64__) || defined(PLATFORM_WINDOWS_PC64)
|
||||
#if defined(__arm__) || defined(__aarch64__) || defined(__e2k__) || defined(PLATFORM_WINDOWS_PC64)
|
||||
FastVertexSSE( vertex );
|
||||
#else
|
||||
Assert( m_CompressionType == VERTEX_COMPRESSION_NONE ); // FIXME: support compressed verts if needed
|
||||
@ -1354,7 +1354,7 @@ inline void CVertexBuilder::Fast4VerticesSSE(
|
||||
|
||||
inline void CVertexBuilder::FastVertex( const ModelVertexDX8_t &vertex )
|
||||
{
|
||||
#if defined(__arm__) || defined(__aarch64__) || defined(PLATFORM_WINDOWS_PC64)
|
||||
#if defined(__arm__) || defined(__aarch64__) || defined(__e2k__) || defined(PLATFORM_WINDOWS_PC64)
|
||||
FastVertexSSE( vertex );
|
||||
#else
|
||||
Assert( m_CompressionType == VERTEX_COMPRESSION_NONE ); // FIXME: support compressed verts if needed
|
||||
|
@ -1201,7 +1201,7 @@ FORCEINLINE int RoundFloatToInt(float f)
|
||||
};
|
||||
flResult = __fctiw( f );
|
||||
return pResult[1];
|
||||
#elif defined (__arm__) || defined (__aarch64__)
|
||||
#elif defined (__arm__) || defined (__aarch64__) || defined(__e2k__)
|
||||
return (int)(f + 0.5f);
|
||||
#else
|
||||
#error Unknown architecture
|
||||
@ -1233,7 +1233,7 @@ FORCEINLINE unsigned long RoundFloatToUnsignedLong(float f)
|
||||
Assert( pIntResult[1] >= 0 );
|
||||
return pResult[1];
|
||||
#else // !X360
|
||||
#if defined(__arm__) || defined(__aarch64__)
|
||||
#if defined(__arm__) || defined(__aarch64__) || defined(__e2k__)
|
||||
return (unsigned long)(f + 0.5f);
|
||||
#elif defined( PLATFORM_WINDOWS_PC64 )
|
||||
uint nRet = ( uint ) f;
|
||||
|
@ -24,10 +24,6 @@ typedef unsigned char uint8;
|
||||
#define POSIX 1
|
||||
#endif
|
||||
|
||||
#if defined(__x86_64__) || defined(_WIN64) || defined(__aarch64__)
|
||||
#define X64BITS
|
||||
#endif
|
||||
|
||||
// Make sure VALVE_BIG_ENDIAN gets set on PS3, may already be set previously in Valve internal code.
|
||||
#if !defined(VALVE_BIG_ENDIAN) && defined(_PS3)
|
||||
#define VALVE_BIG_ENDIAN
|
||||
@ -48,7 +44,7 @@ typedef unsigned __int64 uint64;
|
||||
typedef int64 lint64;
|
||||
typedef uint64 ulint64;
|
||||
|
||||
#ifdef X64BITS
|
||||
#ifdef PLATFORM_64BITS
|
||||
typedef __int64 intp; // intp is an integer that can accomodate a pointer
|
||||
typedef unsigned __int64 uintp; // (ie, sizeof(intp) >= sizeof(int) && sizeof(intp) >= sizeof(void *)
|
||||
#else
|
||||
@ -74,7 +70,7 @@ typedef unsigned long long uint64;
|
||||
typedef long int lint64;
|
||||
typedef unsigned long int ulint64;
|
||||
|
||||
#ifdef X64BITS
|
||||
#ifdef PLATFORM_64BITS
|
||||
typedef long long intp;
|
||||
typedef unsigned long long uintp;
|
||||
#else
|
||||
|
@ -9,7 +9,7 @@
|
||||
#ifndef PLATFORM_H
|
||||
#define PLATFORM_H
|
||||
|
||||
#if defined(__x86_64__) || defined(_WIN64) || defined(__aarch64__)
|
||||
#if defined(__x86_64__) || defined(_WIN64) || defined(__aarch64__) || defined(__e2k__)
|
||||
#define PLATFORM_64BITS 1
|
||||
#endif
|
||||
|
||||
@ -17,6 +17,11 @@
|
||||
#define COMPILER_GCC 1
|
||||
#endif
|
||||
|
||||
#if defined(__LCC__) && defined(__MCST__)
|
||||
// MCST LCC (eLbrus Compiler Collection)
|
||||
#define COMPILER_MCST_LCC 1
|
||||
#endif
|
||||
|
||||
#ifdef __GLIBC__
|
||||
#define PLATFORM_GLIBC 1
|
||||
#endif
|
||||
@ -898,7 +903,7 @@ static FORCEINLINE double fsel(double fComparand, double fValGE, double fLT)
|
||||
|
||||
#endif
|
||||
#endif
|
||||
#elif defined (__arm__) || defined (__aarch64__)
|
||||
#elif defined (__arm__) || defined (__aarch64__) || defined(__e2k__)
|
||||
inline void SetupFPUControlWord() {}
|
||||
#else
|
||||
inline void SetupFPUControlWord()
|
||||
@ -1069,7 +1074,7 @@ inline T QWordSwapC( T dw )
|
||||
// The typically used methods.
|
||||
//-------------------------------------
|
||||
|
||||
#if (defined(__i386__) || defined(__amd64__) || defined(__arm__) || defined(__aarch64__)) && !defined(VALVE_LITTLE_ENDIAN)
|
||||
#if (defined(__i386__) || defined(__amd64__) || defined(__arm__) || defined(__aarch64__) || defined(__e2k__)) && !defined(VALVE_LITTLE_ENDIAN)
|
||||
#define VALVE_LITTLE_ENDIAN 1
|
||||
#endif
|
||||
|
||||
@ -1235,7 +1240,7 @@ PLATFORM_INTERFACE struct tm * Plat_localtime( const time_t *timep, struct tm *
|
||||
|
||||
inline uint64 Plat_Rdtsc()
|
||||
{
|
||||
#if (defined( __arm__ ) || defined( __aarch64__ )) && defined (POSIX)
|
||||
#if (defined( __arm__ ) || defined( __aarch64__ ) || defined(__e2k__)) && defined (POSIX)
|
||||
struct timespec t;
|
||||
clock_gettime( CLOCK_REALTIME, &t);
|
||||
return t.tv_sec * 1000000000ULL + t.tv_nsec;
|
||||
|
@ -30,7 +30,7 @@ compiler_optimizations.CFLAGS['gottagofast'] = {
|
||||
}
|
||||
'''
|
||||
|
||||
VALID_BUILD_TYPES = ['fastnative', 'fast', 'release', 'debug', 'nooptimize', 'sanitize', 'none']
|
||||
VALID_BUILD_TYPES = ['native','fastnative', 'fast', 'release', 'debug', 'nooptimize', 'sanitize', 'none']
|
||||
|
||||
LINKFLAGS = {
|
||||
'common': {
|
||||
@ -65,6 +65,12 @@ CFLAGS = {
|
||||
'clang': ['-O2', '-march=native'],
|
||||
'default': ['-O3']
|
||||
},
|
||||
'native': {
|
||||
'msvc': ['/O2', '/Oy', '/MT'],
|
||||
'gcc': ['-O2', '-march=native'],
|
||||
'clang': ['-O2', '-march=native'],
|
||||
'default': ['-O3']
|
||||
},
|
||||
'release': {
|
||||
'msvc': ['/O2', '/MT'],
|
||||
'owcc': ['-O3', '-fomit-leaf-frame-pointer', '-fomit-frame-pointer', '-finline-functions', '-finline-limit=512'],
|
||||
|
@ -22,7 +22,7 @@ const tchar* GetProcessorVendorId();
|
||||
|
||||
static bool cpuid(uint32 function, uint32& out_eax, uint32& out_ebx, uint32& out_ecx, uint32& out_edx)
|
||||
{
|
||||
#if defined (__arm__) || defined (__aarch64__) || defined( _X360 )
|
||||
#if defined (__arm__) || defined (__aarch64__) || defined(__e2k__) || defined( _X360 )
|
||||
return false;
|
||||
#elif defined(GNUC)
|
||||
|
||||
@ -376,6 +376,8 @@ const tchar* GetProcessorArchName()
|
||||
return "aarch64";
|
||||
#elif defined __arm__ || defined _M_ARM
|
||||
return "arm";
|
||||
#elif defined(__e2k__)
|
||||
return "e2k";
|
||||
#else
|
||||
#error "Unknown architecture"
|
||||
#endif
|
||||
|
@ -124,7 +124,7 @@ uint64 CalculateCPUFreq()
|
||||
}
|
||||
}
|
||||
|
||||
#if !defined(__arm__) && !defined(__aarch64__)
|
||||
#if defined(__i386__) || defined(_M_IX86)
|
||||
// fallback mechanism to calculate when failed
|
||||
// Compute the period. Loop until we get 3 consecutive periods that
|
||||
// are the same to within a small error. The error is chosen
|
||||
@ -178,7 +178,6 @@ uint64 CalculateCPUFreq()
|
||||
#else
|
||||
// ARM hard-coded frequency
|
||||
return (uint64)2000000000;
|
||||
#endif // if !ARM
|
||||
#endif // if i386
|
||||
#endif // if APPLE
|
||||
}
|
||||
|
||||
|
@ -13,7 +13,7 @@ bool CheckMMXTechnology(void) { return false; }
|
||||
bool CheckSSETechnology(void) { return false; }
|
||||
bool CheckSSE2Technology(void) { return false; }
|
||||
bool Check3DNowTechnology(void) { return false; }
|
||||
#elif defined (__arm__) || defined (__aarch64__)
|
||||
#elif defined (__arm__) || defined (__aarch64__) || defined(__e2k__)
|
||||
bool CheckMMXTechnology(void) { return false; }
|
||||
bool CheckSSETechnology(void) { return false; }
|
||||
bool CheckSSE2Technology(void) { return false; }
|
||||
|
@ -91,6 +91,8 @@ int64 CReliableTimer::GetPerformanceCountNow()
|
||||
struct timespec ts;
|
||||
clock_gettime(CLOCK_REALTIME, &ts);
|
||||
return ts.tv_sec * 1000000000ULL + ts.tv_nsec;
|
||||
#elif defined(__e2k__)
|
||||
return (int64)Plat_Rdtsc();
|
||||
#else
|
||||
uint64 un64;
|
||||
__asm__ __volatile__ (
|
||||
|
@ -951,7 +951,8 @@ static bool ReadHeaderFromBufferPastBaseHeader( CUtlBuffer &buf, VTFFileHeader_t
|
||||
|
||||
bool CVTFTexture::ReadHeader( CUtlBuffer &buf, VTFFileHeader_t &header )
|
||||
{
|
||||
if ( IsX360() && SetupByteSwap( buf ) )
|
||||
#ifdef _X360
|
||||
if ( SetupByteSwap( buf ) )
|
||||
{
|
||||
VTFFileBaseHeader_t baseHeader;
|
||||
m_Swap.SwapFieldsToTargetEndian( &baseHeader, (VTFFileBaseHeader_t*)buf.PeekGet() );
|
||||
@ -979,6 +980,7 @@ bool CVTFTexture::ReadHeader( CUtlBuffer &buf, VTFFileHeader_t &header )
|
||||
}
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
memset( &header, 0, sizeof(VTFFileHeader_t) );
|
||||
buf.Get( &header, sizeof(VTFFileBaseHeader_t) );
|
||||
|
Loading…
Reference in New Issue
Block a user