about summary refs log tree commit diff stats
path: root/src
diff options
context:
space:
mode:
authorRainbowC0 <67918391+RainbowC0@users.noreply.github.com>2023-02-03 22:43:54 +0800
committerGitHub <noreply@github.com>2023-02-03 15:43:54 +0100
commit649c0f8055d6d7dbcfbd8ab8ed83dda6d125f8a0 (patch)
treebcf1ce63332c61f4b7d639f42efa480146dc9edf /src
parent87b66b8db89a28b641553d9d471b3b9aab67d5f7 (diff)
downloadbox64-649c0f8055d6d7dbcfbd8ab8ed83dda6d125f8a0.tar.gz
box64-649c0f8055d6d7dbcfbd8ab8ed83dda6d125f8a0.zip
Update x64emu.c (#507)
Added some adapations for Android as there is no __builtin_aarch64_get_fpcr and __builtin_aarch64_set_fpcr in Bionic.
Diffstat (limited to 'src')
-rwxr-xr-xsrc/emu/x64emu.c11
1 files changed, 10 insertions, 1 deletions
diff --git a/src/emu/x64emu.c b/src/emu/x64emu.c
index 6442adf7..2f46472c 100755
--- a/src/emu/x64emu.c
+++ b/src/emu/x64emu.c
@@ -518,10 +518,19 @@ void applyFlushTo0(x64emu_t* emu)
     #ifdef __x86_64__
     _mm_setcsr(_mm_getcsr() | (emu->mxcsr.x32&0x8040));
     #elif defined(__aarch64__)
+    #ifdef __ANDROID__
+    uint64_t fpcr;
+    __asm__ __volatile__ ("mrs    %0, fpcr":"=r"(fpcr));
+    #else
     uint64_t fpcr = __builtin_aarch64_get_fpcr();
+    #endif
     fpcr &= ~((1<<24) | (1<<1));    // clear bit FZ (24) and AH (1)
     fpcr |= (emu->mxcsr.f.MXCSR_FZ)<<24;  // set FZ as mxcsr FZ
     fpcr |= ((emu->mxcsr.f.MXCSR_DAZ)^(emu->mxcsr.f.MXCSR_FZ))<<1; // set AH if DAZ different from FZ
+    #ifdef __ANDROID__
+    __asm__ __volatile__ ("msr    fpcr, %0"::"r"(fpcr));
+    #else
     __builtin_aarch64_set_fpcr(fpcr);
     #endif
-}
\ No newline at end of file
+    #endif
+}