fix fable freeze

This commit is contained in:
izzy2lost
2026-04-08 02:35:01 -04:00
parent bb5a2cfd30
commit d981ddb825
4 changed files with 19 additions and 5 deletions
+1 -1
View File
@@ -101,7 +101,7 @@ DEF_HELPER_FLAGS_3(write_crN, TCG_CALL_NO_RWG, void, env, int, tl)
#endif /* !CONFIG_USER_ONLY */
/* x86 FPU */
#if defined(XBOX) && (defined(__x86_64__) || defined(__aarch64__))
#if defined(XBOX) && defined(__x86_64__)
#define HS_DEF_HELPER_1(name, ret, t1) \
DEF_HELPER_1(name ## __soft, ret, t1) \
DEF_HELPER_1(name ## __hard, ret, t1)
+9 -1
View File
@@ -460,7 +460,15 @@ floatx80 int32_to_floatx80__hard(int32_t a, float_status *status)
#endif /* USE_HARD_FPU */
#endif /* XBOX && __x86_64__ */
#if defined(XBOX) && (defined(__x86_64__) || defined(__aarch64__))
#ifndef FPU_HELPER_COUNT
#define FPU_HELPER_COUNT() ((void)0)
#endif
#ifndef MAP_HELPER_SOFT_HARD
#define MAP_HELPER_SOFT_HARD(func) helper_ ## func ## __soft
#endif
#if defined(XBOX) && defined(__x86_64__)
#ifdef USE_HARD_FPU
#define MAP_HELPER_SOFT_HARD(func) helper_ ## func ## __hard
extern int g_fpu_helper_calls;
+7 -1
View File
@@ -1,4 +1,10 @@
#if defined(XBOX) && (defined(__x86_64__) || defined(__aarch64__))
/*
* On AArch64, the hard FPU helper path currently uses native double
* precision and does not correctly emulate x87 extended-precision
* compare/equality semantics. Disable the hard-FPU variant there to
* avoid equality bugs in games like Fable: The Lost Chapters on Android.
*/
#if defined(XBOX) && defined(__x86_64__)
#define USE_HARD_FPU 1
#include "fpu_helper.c"
#endif
+2 -2
View File
@@ -53,7 +53,7 @@ struct FPUProfileCounters g_fpu_profile;
int g_fpu_helper_calls;
#endif
#if defined(XBOX) && (defined(__x86_64__) || defined(__aarch64__))
#if defined(XBOX) && defined(__x86_64__)
#include "ui/xemu-settings.h"
#define MAP_GEN_HELPER_SOFT_HARD(name) \
(g_use_fp_jit ? gen_helper_##name##__hard : gen_helper_##name##__soft)
@@ -4393,7 +4393,7 @@ void tcg_x86_init(void)
fpstt = tcg_global_mem_new_i32(tcg_env,
offsetof(CPUX86State, fpstt), "fpstt");
#if defined(XBOX) && (defined(__x86_64__) || defined(__aarch64__))
#if defined(XBOX) && defined(__x86_64__)
g_use_fp_jit = g_config.perf.fp_jit;
#endif
}