Merge pull request #724 from citra-emu/arch-misdetection
Common: Add proper macros to test for architecture pointer size
This commit is contained in:
		| @@ -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 | ||||
|   | ||||
| @@ -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 | ||||
|   | ||||
| @@ -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. | ||||
|   | ||||
| @@ -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 | ||||
|   | ||||
| @@ -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 | ||||
|  | ||||
| //////////////////////////////////////////////////////////////////////////////////////////////////// | ||||
|   | ||||
		Reference in New Issue
	
	Block a user