aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorlizzie <lizzie@eden-emu.dev>2026-03-27 13:49:10 +0100
committercrueter <crueter@eden-emu.dev>2026-03-27 13:49:10 +0100
commit16e7e034d7565b285adadcb3710aa577221fc338 (patch)
tree065043603a410709d0551b83956654cd6f9b8b30 /src
parent47c6a73971cb3ba6d51e86421a2f4d275687df4f (diff)
[ports, freebsd] remove fastmem ban (#3786)
whatever issue there was, is now fixed on FBSD 15 Signed-off-by: lizzie <lizzie@eden-emu.dev> Reviewed-on: https://git.eden-emu.dev/eden-emu/eden/pulls/3786 Reviewed-by: crueter <crueter@eden-emu.dev> Reviewed-by: MaranBr <maranbr@eden-emu.dev> Co-authored-by: lizzie <lizzie@eden-emu.dev> Co-committed-by: lizzie <lizzie@eden-emu.dev>
Diffstat (limited to 'src')
-rw-r--r--src/common/host_memory.cpp14
-rw-r--r--src/common/settings.cpp2
-rw-r--r--src/core/arm/dynarmic/arm_dynarmic_32.cpp10
-rw-r--r--src/core/arm/dynarmic/arm_dynarmic_64.cpp8
4 files changed, 17 insertions, 17 deletions
diff --git a/src/common/host_memory.cpp b/src/common/host_memory.cpp
index d4b1709377..04f3a65778 100644
--- a/src/common/host_memory.cpp
+++ b/src/common/host_memory.cpp
@@ -30,6 +30,8 @@
#include <sys/random.h>
#include <mach/vm_map.h>
#include <mach/mach.h>
+#elif defined(__FreeBSD__)
+#include <sys/shm.h>
#endif
// FreeBSD
@@ -503,8 +505,7 @@ public:
fd = shm_open_anon(O_RDWR | O_CREAT | O_EXCL | O_NOFOLLOW, 0600);
#elif defined(__OpenBSD__)
fd = shm_open_anon(O_RDWR | O_CREAT | O_EXCL | O_NOFOLLOW, 0600);
-#elif defined(__FreeBSD__) && __FreeBSD__ < 13
- // XXX Drop after FreeBSD 12.* reaches EOL on 2024-06-30
+#elif defined(__FreeBSD__)
fd = shm_open(SHM_ANON, O_RDWR, 0600);
#elif defined(__APPLE__)
// macOS doesn't have memfd_create, use anonymous temporary file
@@ -571,9 +572,9 @@ public:
if (True(perms & MemoryPermission::Execute))
prot_flags |= PROT_EXEC;
#endif
- int flags = (fd > 0 ? MAP_SHARED : MAP_PRIVATE) | MAP_FIXED;
+ int flags = (fd >= 0 ? MAP_SHARED : MAP_PRIVATE) | MAP_FIXED;
void* ret = mmap(virtual_base + virtual_offset, length, prot_flags, flags, fd, host_offset);
- ASSERT_MSG(ret != MAP_FAILED, "mmap: {}", strerror(errno));
+ ASSERT_MSG(ret != MAP_FAILED, "mmap: {} {}", strerror(errno), fd);
}
void Unmap(size_t virtual_offset, size_t length) {
@@ -587,9 +588,8 @@ public:
auto [merged_pointer, merged_size] =
free_manager.FreeBlock(virtual_base + virtual_offset, length);
- void* ret = mmap(merged_pointer, merged_size, PROT_NONE,
- MAP_PRIVATE | MAP_ANONYMOUS | MAP_FIXED, -1, 0);
- ASSERT_MSG(ret != MAP_FAILED, "mmap failed: {}", strerror(errno));
+ void* ret = mmap(merged_pointer, merged_size, PROT_NONE, MAP_PRIVATE | MAP_ANONYMOUS | MAP_FIXED, -1, 0);
+ ASSERT_MSG(ret != MAP_FAILED, "mmap: {}", strerror(errno));
}
void Protect(size_t virtual_offset, size_t length, bool read, bool write, bool execute) {
diff --git a/src/common/settings.cpp b/src/common/settings.cpp
index f549169cd2..54848c4dd1 100644
--- a/src/common/settings.cpp
+++ b/src/common/settings.cpp
@@ -186,7 +186,7 @@ bool IsFastmemEnabled() {
// Only 4kb systems support host MMU right now
// TODO: Support this
return getpagesize() == 4096;
-#elif !defined(__APPLE__) && !defined(__ANDROID__) && !defined(_WIN32) && !defined(__linux__)
+#elif !defined(__APPLE__) && !defined(__ANDROID__) && !defined(_WIN32) && !defined(__linux__) && !defined(__FreeBSD__)
return false;
#else
return true;
diff --git a/src/core/arm/dynarmic/arm_dynarmic_32.cpp b/src/core/arm/dynarmic/arm_dynarmic_32.cpp
index 912a15475b..1520f128cf 100644
--- a/src/core/arm/dynarmic/arm_dynarmic_32.cpp
+++ b/src/core/arm/dynarmic/arm_dynarmic_32.cpp
@@ -186,7 +186,7 @@ void ArmDynarmic32::MakeJit(Common::PageTable* page_table) {
config.only_detect_misalignment_via_page_table_on_page_boundary = true;
config.fastmem_pointer = page_table->fastmem_arena ?
- std::optional<uintptr_t>{reinterpret_cast<uintptr_t>(page_table->fastmem_arena)} :
+ std::optional<uintptr_t>{uintptr_t(page_table->fastmem_arena)} :
std::nullopt;
config.fastmem_exclusive_access = config.fastmem_pointer != std::nullopt;
@@ -286,10 +286,6 @@ void ArmDynarmic32::MakeJit(Common::PageTable* page_table) {
// Curated optimizations
case Settings::CpuAccuracy::Auto:
config.unsafe_optimizations = true;
-#if defined(__FreeBSD__) || defined(__OpenBSD__) || defined(__sun__) || defined(__HAIKU__) || defined(__DragonFly__) || defined(__NetBSD__)
- config.fastmem_pointer = std::nullopt;
- config.fastmem_exclusive_access = false;
-#endif
config.optimizations |= Dynarmic::OptimizationFlag::Unsafe_UnfuseFMA;
config.optimizations |= Dynarmic::OptimizationFlag::Unsafe_IgnoreStandardFPCRValue;
config.optimizations |= Dynarmic::OptimizationFlag::Unsafe_InaccurateNaN;
@@ -304,6 +300,10 @@ void ArmDynarmic32::MakeJit(Common::PageTable* page_table) {
default:
break;
}
+ if (!Settings::IsFastmemEnabled()) {
+ config.fastmem_pointer = std::nullopt;
+ config.fastmem_exclusive_access = false;
+ }
m_jit.emplace(config);
}
diff --git a/src/core/arm/dynarmic/arm_dynarmic_64.cpp b/src/core/arm/dynarmic/arm_dynarmic_64.cpp
index 55584d0e38..fe7fb5983f 100644
--- a/src/core/arm/dynarmic/arm_dynarmic_64.cpp
+++ b/src/core/arm/dynarmic/arm_dynarmic_64.cpp
@@ -338,10 +338,6 @@ void ArmDynarmic64::MakeJit(Common::PageTable* page_table, std::size_t address_s
// Safe optimisations
case Settings::CpuAccuracy::Auto:
config.unsafe_optimizations = true;
-#if !defined(__APPLE__) && !defined(__linux__) && !defined(__ANDROID__) && !defined(_WIN32)
- config.fastmem_pointer = std::nullopt;
- config.fastmem_exclusive_access = false;
-#endif
config.optimizations |= Dynarmic::OptimizationFlag::Unsafe_UnfuseFMA;
config.fastmem_address_space_bits = 64;
config.optimizations |= Dynarmic::OptimizationFlag::Unsafe_IgnoreGlobalMonitor;
@@ -355,6 +351,10 @@ void ArmDynarmic64::MakeJit(Common::PageTable* page_table, std::size_t address_s
default:
break;
}
+ if (!Settings::IsFastmemEnabled()) {
+ config.fastmem_pointer = std::nullopt;
+ config.fastmem_exclusive_access = false;
+ }
m_jit.emplace(config);
}