123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293 |
- From 4e457165ee019fb9002b53ffa9a5f95b99b22113 Mon Sep 17 00:00:00 2001
- From: Jorrit Rouwe <[email protected]>
- Date: Mon, 10 Apr 2023 16:46:28 +0200
- Subject: [PATCH] Experimental linux armv7a support (#500)
- ---
- Build/Android/build.gradle | 2 +-
- Jolt/Core/FPControlWord.h | 33 ++++++++++++++++++++++++++++++++-
- Jolt/Core/TickCounter.h | 4 +++-
- 3 files changed, 36 insertions(+), 3 deletions(-)
- diff --git a/Build/Android/build.gradle b/Build/Android/build.gradle
- index 04bc67d84..de0c8f88b 100644
- --- a/Build/Android/build.gradle
- +++ b/Build/Android/build.gradle
- @@ -5,7 +5,7 @@ buildscript {
- mavenCentral()
- }
- dependencies {
- - classpath 'com.android.tools.build:gradle:7.4.1'
- + classpath 'com.android.tools.build:gradle:7.4.2'
-
- // NOTE: Do not place your application dependencies here; they belong
- // in the individual module build.gradle files
- diff --git a/Jolt/Core/FPControlWord.h b/Jolt/Core/FPControlWord.h
- index 9c47a040a..b66344da0 100644
- --- a/Jolt/Core/FPControlWord.h
- +++ b/Jolt/Core/FPControlWord.h
- @@ -60,7 +60,7 @@ class FPControlWord : public NonCopyable
- unsigned int mPrevState;
- };
-
- -#elif defined(JPH_CPU_ARM)
- +#elif defined(JPH_CPU_ARM) && defined(JPH_USE_NEON)
-
- /// Helper class that needs to be put on the stack to update the state of the floating point control word.
- /// This state is kept per thread.
- @@ -91,6 +91,37 @@ class FPControlWord : public NonCopyable
- uint64 mPrevState;
- };
-
- +#elif defined(JPH_CPU_ARM)
- +
- +/// Helper class that needs to be put on the stack to update the state of the floating point control word.
- +/// This state is kept per thread.
- +template <uint32 Value, uint32 Mask>
- +class FPControlWord : public NonCopyable
- +{
- +public:
- + FPControlWord()
- + {
- + uint32 val;
- + asm volatile("vmrs %0, fpscr" : "=r" (val));
- + mPrevState = val;
- + val &= ~Mask;
- + val |= Value;
- + asm volatile("vmsr fpscr, %0" : /* no output */ : "r" (val));
- + }
- +
- + ~FPControlWord()
- + {
- + uint32 val;
- + asm volatile("vmrs %0, fpscr" : "=r" (val));
- + val &= ~Mask;
- + val |= mPrevState & Mask;
- + asm volatile("vmsr fpscr, %0" : /* no output */ : "r" (val));
- + }
- +
- +private:
- + uint32 mPrevState;
- +};
- +
- #elif defined(JPH_CPU_WASM)
-
- // Not supported
- diff --git a/Jolt/Core/TickCounter.h b/Jolt/Core/TickCounter.h
- index a9d1272a3..9a8967d31 100644
- --- a/Jolt/Core/TickCounter.h
- +++ b/Jolt/Core/TickCounter.h
- @@ -27,10 +27,12 @@ JPH_INLINE uint64 GetProcessorTickCount()
- return JPH_PLATFORM_BLUE_GET_TICKS();
- #elif defined(JPH_CPU_X86)
- return __rdtsc();
- -#elif defined(JPH_CPU_ARM)
- +#elif defined(JPH_CPU_ARM) && defined(JPH_USE_NEON)
- uint64 val;
- asm volatile("mrs %0, cntvct_el0" : "=r" (val));
- return val;
- +#elif defined(JPH_CPU_ARM)
- + return 0; // Not supported
- #elif defined(JPH_CPU_WASM)
- return 0; // Not supported
- #else
|