For some variants, /tmp will be tmpfs, but not always. In case our mmap
fails to prevent flushing to disk (as apparently happens on Raspberry Pi),
shm will work better for us.
Thanks go to klyoungblood.
Opens up for having multiple JIT implementations available at runtime,
which could be use for experimenting with new JIT compiler types or for
unit testing one JIT on another architecture.
Very few of the newly virtual calls are on any sort of critical path so
hopefully there will not be a performance loss.
Color conversion assigned 'a' twice.
Console listener use local variable with the same name a class member.
Some additionals to nocopy for FileUtils and mutex
Complements the update to the key repeat logic in native. Also renames
UpdateConfirmCancelKeys to UpdateNativeMenuKeys since even before this commit,
the function also set the TabLeft and TabRight keys.
In file included from Common/CPUDetect.cpp:27:
In file included from Common/Common.h:139:
Common/Swap.h:76:23: error:
C++ requires a type specifier for all declarations
inline unsigned short bswap16(unsigned short x) { return (x << 8) | (x >> 8); }
^
/usr/include/sys/endian.h:59:20: note: expanded from macro 'bswap16'
^
/usr/include/x86/endian.h:74:16: note: expanded from macro '__bswap16'
((__uint16_t)(__builtin_constant_p(x) ? \
^
In file included from Common/CPUDetect.cpp:27:
In file included from Common/Common.h:139:
Common/Swap.h:76:23: error:
expected ')'
/usr/include/sys/endian.h:59:20: note: expanded from macro 'bswap16'
^
/usr/include/x86/endian.h:74:40: note: expanded from macro '__bswap16'
((__uint16_t)(__builtin_constant_p(x) ? \
^
Common/Swap.h:76:23: note:
to match this '('
/usr/include/sys/endian.h:59:20: note: expanded from macro 'bswap16'
^
/usr/include/x86/endian.h:74:15: note: expanded from macro '__bswap16'
((__uint16_t)(__builtin_constant_p(x) ? \
^
In file included from Common/CPUDetect.cpp:27:
In file included from Common/Common.h:139:
Common/Swap.h:76:59: error:
use of undeclared identifier 'x'
inline unsigned short bswap16(unsigned short x) { return (x << 8) | (x >> 8); }
^
Common/Swap.h:76:70: error:
use of undeclared identifier 'x'
inline unsigned short bswap16(unsigned short x) { return (x << 8) | (x >> 8); }
^
Common/Swap.h:77:21: error:
expected ')'
inline unsigned int bswap32(unsigned int x) { return (x >> 24) | ((x & 0xFF0...
^
/usr/include/sys/endian.h:60:20: note: expanded from macro 'bswap32'
^
/usr/include/x86/endian.h:77:27: note: expanded from macro '__bswap32'
(__builtin_constant_p(x) ? \
^
Common/Swap.h:77:21: note:
to match this '('
/usr/include/sys/endian.h:60:20: note: expanded from macro 'bswap32'
^
/usr/include/x86/endian.h:77:2: note: expanded from macro '__bswap32'
(__builtin_constant_p(x) ? \
^
In file included from Common/CPUDetect.cpp:27:
In file included from Common/Common.h:139:
Common/Swap.h:77:21: error:
functions that differ only in their return type cannot be overloaded
inline unsigned int bswap32(unsigned int x) { return (x >> 24) | ((x & 0xFF0...
^
/usr/include/sys/endian.h:60:20: note: expanded from macro 'bswap32'
^
/usr/include/x86/endian.h:77:3: note: expanded from macro '__bswap32'
(__builtin_constant_p(x) ? \
^
native/base/basictypes.h:92:44: note:
previous implicit declaration is here
inline uint16 swap16(uint16 _data) {return bswap16(_data);}
^
/usr/include/sys/endian.h:59:20: note: expanded from macro 'bswap16'
^
/usr/include/x86/endian.h:74:16: note: expanded from macro '__bswap16'
((__uint16_t)(__builtin_constant_p(x) ? \
^
In file included from Common/CPUDetect.cpp:27:
In file included from Common/Common.h:139:
Common/Swap.h:78:27: error:
expected ')'
inline unsigned long long bswap64(unsigned long long x) { return ((unsigned ...
^
/usr/include/sys/endian.h:61:20: note: expanded from macro 'bswap64'
^
/usr/include/x86/endian.h:80:27: note: expanded from macro '__bswap64'
(__builtin_constant_p(x) ? \
^
Common/Swap.h:78:27: note:
to match this '('
/usr/include/sys/endian.h:61:20: note: expanded from macro 'bswap64'
^
/usr/include/x86/endian.h:80:2: note: expanded from macro '__bswap64'
(__builtin_constant_p(x) ? \
^
In file included from Common/CPUDetect.cpp:27:
In file included from Common/Common.h:139:
Common/Swap.h:78:27: error:
functions that differ only in their return type cannot be overloaded
inline unsigned long long bswap64(unsigned long long x) { return ((unsigned ...
^
/usr/include/sys/endian.h:61:20: note: expanded from macro 'bswap64'
^
/usr/include/x86/endian.h:80:3: note: expanded from macro '__bswap64'
(__builtin_constant_p(x) ? \
^
native/base/basictypes.h:92:44: note:
previous implicit declaration is here
inline uint16 swap16(uint16 _data) {return bswap16(_data);}
^
/usr/include/sys/endian.h:59:20: note: expanded from macro 'bswap16'
^
/usr/include/x86/endian.h:74:16: note: expanded from macro '__bswap16'
((__uint16_t)(__builtin_constant_p(x) ? \
^
8 errors generated.
Common/CPUDetect.cpp:70:2: error: use of undeclared identifier '__cpuidex'; did you mean 'do_cpuidex'?
__cpuidex((int *)regs, cpuid_leaf, ecxval);
^~~~~~~~~
do_cpuidex
Common/CPUDetect.cpp:69:6: note: 'do_cpuidex' declared here
void do_cpuidex(u32 regs[4], u32 cpuid_leaf, u32 ecxval) {
^
Common/CPUDetect.cpp:70:12: error: cannot initialize a parameter of type 'u32 *' (aka 'unsigned int *') with an rvalue of type 'int *'
__cpuidex((int *)regs, cpuid_leaf, ecxval);
^~~~~~~~~~~
Common/CPUDetect.cpp:69:21: note: passing argument to parameter 'regs' here
void do_cpuidex(u32 regs[4], u32 cpuid_leaf, u32 ecxval) {
^
Common/CPUDetect.cpp:73:2: error: use of undeclared identifier '__cpuid'; did you mean 'do_cpuid'?
__cpuid((int *)regs, cpuid_leaf);
^~~~~~~
do_cpuid
Common/CPUDetect.cpp:72:6: note: 'do_cpuid' declared here
void do_cpuid(u32 regs[4], u32 cpuid_leaf) {
^
Common/CPUDetect.cpp:73:10: error: cannot initialize a parameter of type 'u32 *' (aka 'unsigned int *') with an rvalue of type 'int *'
__cpuid((int *)regs, cpuid_leaf);
^~~~~~~~~~~
Common/CPUDetect.cpp:72:19: note: passing argument to parameter 'regs' here
void do_cpuid(u32 regs[4], u32 cpuid_leaf) {
^
4 errors generated.
Clang still pretends as GCC 4.2.1 even with libc++ or newer libstdc++.
In file included from Common/ConsoleListener.cpp:33:
In file included from Common/ConsoleListener.h:20:
In file included from Common/LogManager.h:26:
Common/StdMutex.h:197:28: error:
reference to 'adopt_lock_t' is ambiguous
lock_guard(mutex_type& m, adopt_lock_t)
^
Common/StdMutex.h:183:6: note:
candidate found by name lookup is 'std::adopt_lock_t'
enum adopt_lock_t { adopt_lock };
^
/usr/include/c++/v1/__mutex_base:55:25: note: candidate found by name lookup is
'std::__1::adopt_lock_t'
struct _LIBCPP_TYPE_VIS adopt_lock_t {};
^
In file included from Common/ConsoleListener.cpp:33:
In file included from Common/ConsoleListener.h:20:
In file included from Common/LogManager.h:26:
Common/StdMutex.h:230:29: error:
reference to 'defer_lock_t' is ambiguous
unique_lock(mutex_type& m, defer_lock_t)
^
Common/StdMutex.h:181:6: note:
candidate found by name lookup is 'std::defer_lock_t'
enum defer_lock_t { defer_lock };
^
/usr/include/c++/v1/__mutex_base:53:25: note: candidate found by name lookup is
'std::__1::defer_lock_t'
struct _LIBCPP_TYPE_VIS defer_lock_t {};
^
In file included from Common/ConsoleListener.cpp:33:
In file included from Common/ConsoleListener.h:20:
In file included from Common/LogManager.h:26:
Common/StdMutex.h:234:29: error:
reference to 'try_to_lock_t' is ambiguous
unique_lock(mutex_type& m, try_to_lock_t)
^
Common/StdMutex.h:182:6: note:
candidate found by name lookup is 'std::try_to_lock_t'
enum try_to_lock_t { try_to_lock };
^
/usr/include/c++/v1/__mutex_base:54:25: note: candidate found by name lookup is
'std::__1::try_to_lock_t'
struct _LIBCPP_TYPE_VIS try_to_lock_t {};
^
In file included from Common/ConsoleListener.cpp:33:
In file included from Common/ConsoleListener.h:20:
In file included from Common/LogManager.h:26:
Common/StdMutex.h:238:29: error:
reference to 'adopt_lock_t' is ambiguous
unique_lock(mutex_type& m, adopt_lock_t)
^
Common/StdMutex.h:183:6: note:
candidate found by name lookup is 'std::adopt_lock_t'
enum adopt_lock_t { adopt_lock };
^
/usr/include/c++/v1/__mutex_base:55:25: note: candidate found by name lookup is
'std::__1::adopt_lock_t'
struct _LIBCPP_TYPE_VIS adopt_lock_t {};
^
In file included from Common/ConsoleListener.cpp:33:
In file included from Common/ConsoleListener.h:20:
In file included from Common/LogManager.h:26:
Common/StdMutex.h:345:6: warning:
variable templates are a C++14 extension [-Wc++14-extensions]
void swap(unique_lock<Mutex>& x, unique_lock<Mutex>& y)
^
Common/StdMutex.h:345:6: error:
variable has incomplete type 'void'
Common/StdMutex.h:345:11: error:
reference to 'unique_lock' is ambiguous
void swap(unique_lock<Mutex>& x, unique_lock<Mutex>& y)
^
Common/StdMutex.h:215:7: note:
candidate found by name lookup is 'std::unique_lock'
class unique_lock
^
/usr/include/c++/v1/__mutex_base:96:29: note: candidate found by name lookup is
'std::__1::unique_lock'
class _LIBCPP_TYPE_VIS_ONLY unique_lock
^
In file included from Common/ConsoleListener.cpp:33:
In file included from Common/ConsoleListener.h:20:
In file included from Common/LogManager.h:26:
Common/StdMutex.h:345:23: error:
'Mutex' does not refer to a value
void swap(unique_lock<Mutex>& x, unique_lock<Mutex>& y)
^
Common/StdMutex.h:344:17: note:
declared here
template <class Mutex>
^
Common/StdMutex.h:345:31: error:
use of undeclared identifier 'x'
void swap(unique_lock<Mutex>& x, unique_lock<Mutex>& y)
^
Common/StdMutex.h:345:34: error:
reference to 'unique_lock' is ambiguous
void swap(unique_lock<Mutex>& x, unique_lock<Mutex>& y)
^
Common/StdMutex.h:215:7: note:
candidate found by name lookup is 'std::unique_lock'
class unique_lock
^
/usr/include/c++/v1/__mutex_base:96:29: note: candidate found by name lookup is
'std::__1::unique_lock'
class _LIBCPP_TYPE_VIS_ONLY unique_lock
^
In file included from Common/ConsoleListener.cpp:33:
In file included from Common/ConsoleListener.h:20:
In file included from Common/LogManager.h:26:
Common/StdMutex.h:345:46: error:
'Mutex' does not refer to a value
void swap(unique_lock<Mutex>& x, unique_lock<Mutex>& y)
^
Common/StdMutex.h:344:17: note:
declared here
template <class Mutex>
^
Common/StdMutex.h:345:54: error:
use of undeclared identifier 'y'
void swap(unique_lock<Mutex>& x, unique_lock<Mutex>& y)
^
Common/StdMutex.h:345:56: error:
expected ';' at end of declaration
void swap(unique_lock<Mutex>& x, unique_lock<Mutex>& y)
^
;
Common/StdMutex.h:346:1: error:
expected unqualified-id
{
^
In file included from Common/ConsoleListener.cpp:33:
In file included from Common/ConsoleListener.h:20:
Common/LogManager.h:54:7: error:
reference to 'mutex' is ambiguous
std::mutex m_log_lock;
^
/usr/include/c++/v1/__mutex_base:27:24: note: candidate found by name lookup is
'std::__1::mutex'
class _LIBCPP_TYPE_VIS mutex
^
Common/StdMutex.h:107:7: note:
candidate found by name lookup is 'std::mutex'
class mutex
^
In file included from Common/ConsoleListener.cpp:33:
In file included from Common/ConsoleListener.h:20:
Common/LogManager.h:116:7: error:
reference to 'mutex' is ambiguous
std::mutex m_listeners_lock;
^
/usr/include/c++/v1/__mutex_base:27:24: note: candidate found by name lookup is
'std::__1::mutex'
class _LIBCPP_TYPE_VIS mutex
^
Common/StdMutex.h:107:7: note:
candidate found by name lookup is 'std::mutex'
class mutex
^
In file included from Common/ConsoleListener.cpp:33:
In file included from Common/ConsoleListener.h:20:
Common/LogManager.h:131:7: error:
reference to 'mutex' is ambiguous
std::mutex log_lock_;
^
/usr/include/c++/v1/__mutex_base:27:24: note: candidate found by name lookup is
'std::__1::mutex'
class _LIBCPP_TYPE_VIS mutex
^
Common/StdMutex.h:107:7: note:
candidate found by name lookup is 'std::mutex'
class mutex
^
1 warning and 16 errors generated.
Common/ColorConv.cpp:199:33: error: use of undeclared identifier '_mm_packus_epi32';
did you mean '_mm_packs_epi32'?
_mm_store_si128(&dstp[i / 2], _mm_packus_epi32(c1, c2));
^~~~~~~~~~~~~~~~
_mm_packs_epi32
/usr/bin/../lib/clang/3.6.0/include/emmintrin.h:1254:1: note: '_mm_packs_epi32'
declared here
_mm_packs_epi32(__m128i __a, __m128i __b)
^
Common/ColorConv.cpp:241:33: error: use of undeclared identifier '_mm_packus_epi32';
did you mean '_mm_packs_epi32'?
_mm_store_si128(&dstp[i / 2], _mm_packus_epi32(c1, c2));
^~~~~~~~~~~~~~~~
_mm_packs_epi32
/usr/bin/../lib/clang/3.6.0/include/emmintrin.h:1254:1: note: '_mm_packs_epi32'
declared here
_mm_packs_epi32(__m128i __a, __m128i __b)
^
2 errors generated.
GPU/Common/TextureScalerCommon.cpp:294:6: error: unknown type name '__m128'
__m128 result = _mm_set1_ps(0.0f);
^
GPU/Common/TextureScalerCommon.cpp:294:22: error: use of undeclared identifier
'_mm_set1_ps'
__m128 result = _mm_set1_ps(0.0f);
^
GPU/Common/TextureScalerCommon.cpp:305:9: error: unknown type name '__m128i'
__m128i samp...
^
GPU/Common/TextureScalerCommon.cpp:305:26: error: use of undeclared identifier
'_mm_cvtsi32_si128'
...__m128i sample = _mm_cvtsi32_si128(data[csy*w + csx]);
^
GPU/Common/TextureScalerCommon.cpp:307:9: error: unknown type name '__m128'
__m128 col ...
^
GPU/Common/TextureScalerCommon.cpp:308:31: error: use of undeclared identifier
'_mm_set1_ps'
...col = _mm_mul_ps(col, _mm_set1_ps(weight));
^
GPU/Common/TextureScalerCommon.cpp:314:6: error: unknown type name '__m128i'
__m128i pixel = _mm_cvtps_epi32(_mm_...
^
GPU/Common/TextureScalerCommon.cpp:314:57: error: use of undeclared identifier
'_mm_set1_ps'
...__m128i pixel = _mm_cvtps_epi32(_mm_mul_ps(result, _mm_set1_ps(bicubicInvSum...
^
8 errors generated.
This func is used when showing videos, some loading screens, etc. Also
when uploading graphics to VRAM.
The implementation takes 85% less than without SSE, although it could
probably be optimized further. Won't help game runtime much, but may help
some loading times or special effects.
We don't need to save gpu stats at all, so don't, makes it easier to
change it and dunno if anyone defines double as other than 64 bits.
Also, apparently there was padding in the event state but not on all
platforms.
Don't even want dangerous funcs like SUB().
Keeping things in opcode order at least locally so it doesn't get
confusing to maintain. Also fixed a bunch of missing asserts.
Don't really know what's going on here, but this seems like the easiest way out. Appears that CPUID really is buggy on this hardware, which seems weird. Alternate explanations would be that we are checking the wrong bits for xgetbv support or something...
Normally we'll log when the disk is full for files, but if we can't even
create the folder, we'll get errors trying to write into a non-existing
directory.
This one can generate slightly smaller code by exploiting some EAX-only
encoding and various other short forms, and adds support for many newer
CPU instructions.