aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/common
diff options
context:
space:
mode:
authorGravatar Yuri Kunde Schlesner <yuriks@yuriks.net>2015-05-07 18:17:33 -0300
committerGravatar Yuri Kunde Schlesner <yuriks@yuriks.net>2015-05-07 18:22:36 -0300
commitfae5933ad614ca8c2559f499ebe16b518594cca3 (patch)
tree352d4e078789f31408c8f8658ba84cc03c08cbcf /src/common
parent4f4d230dac936f32cceb8be35fe09822d85bb2b6 (diff)
Common: Add proper macros to test for architecture pointer size
The old system of just defining macros available in some other platform was susceptible to silently using the wrong code if you forgot to include a particular header. This fixes a crash on non-Windows platforms introduced by e1fbac3ca13d37d2625c11d30cfdece4327b446b.
Diffstat (limited to 'src/common')
-rw-r--r--src/common/common_funcs.h7
-rw-r--r--src/common/hash.cpp2
-rw-r--r--src/common/mem_arena.cpp9
-rw-r--r--src/common/memory_util.cpp2
-rw-r--r--src/common/platform.h8
5 files changed, 11 insertions, 17 deletions
diff --git a/src/common/common_funcs.h b/src/common/common_funcs.h
index 4f9e514c..91b74c6b 100644
--- a/src/common/common_funcs.h
+++ b/src/common/common_funcs.h
@@ -34,13 +34,6 @@
#define MEMORY_ALIGNED64(x) __declspec(align(64)) x
#define MEMORY_ALIGNED128(x) __declspec(align(128)) x
#else
- // Windows compatibility
- #ifdef _LP64
- #define _M_X64 1
- #else
- #define _M_IX86 1
- #endif
-
#define __forceinline inline __attribute__((always_inline))
#define MEMORY_ALIGNED16(x) __attribute__((aligned(16))) x
#define MEMORY_ALIGNED32(x) __attribute__((aligned(32))) x
diff --git a/src/common/hash.cpp b/src/common/hash.cpp
index b0b3613f..e2364d70 100644
--- a/src/common/hash.cpp
+++ b/src/common/hash.cpp
@@ -103,7 +103,7 @@ u32 HashEctor(const u8* ptr, int length)
}
-#ifdef _M_X64
+#if EMU_ARCH_BITS == 64
//-----------------------------------------------------------------------------
// Block read - if your platform needs to do endian-swapping or can only
diff --git a/src/common/mem_arena.cpp b/src/common/mem_arena.cpp
index f233d4a3..689fdb92 100644
--- a/src/common/mem_arena.cpp
+++ b/src/common/mem_arena.cpp
@@ -20,6 +20,7 @@
#include "common/logging/log.h"
#include "common/mem_arena.h"
#include "common/memory_util.h"
+#include "common/platform.h"
#include "common/string_util.h"
#ifndef _WIN32
@@ -198,7 +199,7 @@ void MemArena::ReleaseView(void* view, size_t size)
u8* MemArena::Find4GBBase()
{
-#ifdef _M_X64
+#if EMU_ARCH_BITS == 64
#ifdef _WIN32
// 64 bit
u8* base = (u8*)VirtualAlloc(0, 0xE1000000, MEM_RESERVE, PAGE_READWRITE);
@@ -269,7 +270,7 @@ static bool Memory_TryBase(u8 *base, const MemoryView *views, int num_views, u32
if (!*view.out_ptr_low)
goto bail;
}
-#ifdef _M_X64
+#if EMU_ARCH_BITS == 64
*view.out_ptr = (u8*)arena->CreateView(
position, view.size, base + view.virtual_address);
#else
@@ -305,7 +306,7 @@ bail:
}
if (*views[j].out_ptr)
{
-#ifdef _M_X64
+#if EMU_ARCH_BITS == 64
arena->ReleaseView(*views[j].out_ptr, views[j].size);
#else
if (!(views[j].flags & MV_MIRROR_PREVIOUS))
@@ -336,7 +337,7 @@ u8 *MemoryMap_Setup(const MemoryView *views, int num_views, u32 flags, MemArena
arena->GrabLowMemSpace(total_mem);
// Now, create views in high memory where there's plenty of space.
-#ifdef _M_X64
+#if EMU_ARCH_BITS == 64
u8 *base = MemArena::Find4GBBase();
// This really shouldn't fail - in 64-bit, there will always be enough
// address space.
diff --git a/src/common/memory_util.cpp b/src/common/memory_util.cpp
index 2087a118..20b791a1 100644
--- a/src/common/memory_util.cpp
+++ b/src/common/memory_util.cpp
@@ -71,7 +71,7 @@ void* AllocateExecutableMemory(size_t size, bool low)
}
#endif
-#if defined(_M_X64)
+#if EMU_ARCH_BITS == 64
if ((u64)ptr >= 0x80000000 && low == true)
LOG_ERROR(Common_Memory, "Executable memory ended up above 2GB!");
#endif
diff --git a/src/common/platform.h b/src/common/platform.h
index 1516dc88..df780ac6 100644
--- a/src/common/platform.h
+++ b/src/common/platform.h
@@ -57,10 +57,10 @@
#endif
-#if defined(__x86_64__) || defined(_M_X64) || defined(__alpha__) || defined(__ia64__)
-#define EMU_ARCHITECTURE_X64
-#else
-#define EMU_ARCHITECTURE_X86
+#if defined(__x86_64__) || defined(_M_X64) || defined(__aarch64__)
+ #define EMU_ARCH_BITS 64
+#elif defined(__i386) || defined(_M_IX86) || defined(__arm__) || defined(_M_ARM)
+ #define EMU_ARCH_BITS 32
#endif
////////////////////////////////////////////////////////////////////////////////////////////////////