diff options
| author | RainbowC0 <67918391+RainbowC0@users.noreply.github.com> | 2023-02-03 22:43:54 +0800 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2023-02-03 15:43:54 +0100 |
| commit | 649c0f8055d6d7dbcfbd8ab8ed83dda6d125f8a0 (patch) | |
| tree | bcf1ce63332c61f4b7d639f42efa480146dc9edf /src | |
| parent | 87b66b8db89a28b641553d9d471b3b9aab67d5f7 (diff) | |
| download | box64-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-x | src/emu/x64emu.c | 11 |
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 +} |