aboutsummaryrefslogtreecommitdiffhomepage
path: root/include/core
diff options
context:
space:
mode:
authorGravatar george@mozilla.com <george@mozilla.com@2bbb7eff-a529-9590-31e7-b0007b416f81>2012-07-27 21:08:01 +0000
committerGravatar george@mozilla.com <george@mozilla.com@2bbb7eff-a529-9590-31e7-b0007b416f81>2012-07-27 21:08:01 +0000
commit2092c40a0d0a89a91cc4b6bb2b1b992fd4f02cd7 (patch)
treea455c139dda104ef03aa27e607cbaea7a751226b /include/core
parent3cb969f27de56df0d9116c13f18bd31ee0715f1a (diff)
Add support for ARM without EDSP and ARMv6+
Diffstat (limited to 'include/core')
-rw-r--r--include/core/SkMath.h5
-rw-r--r--include/core/SkPostConfig.h45
2 files changed, 46 insertions, 4 deletions
diff --git a/include/core/SkMath.h b/include/core/SkMath.h
index 5889103696..7a4b707ce7 100644
--- a/include/core/SkMath.h
+++ b/include/core/SkMath.h
@@ -153,10 +153,7 @@ static inline bool SkIsPow2(int value) {
With this requirement, we can generate faster instructions on some
architectures.
*/
-#if defined(__arm__) \
- && !defined(__thumb__) \
- && !defined(__ARM_ARCH_4T__) \
- && !defined(__ARM_ARCH_5T__)
+#ifdef SK_ARM_HAS_EDSP
static inline int32_t SkMulS16(S16CPU x, S16CPU y) {
SkASSERT((int16_t)x == x);
SkASSERT((int16_t)y == y);
diff --git a/include/core/SkPostConfig.h b/include/core/SkPostConfig.h
index ae09627f24..9130a3a4f4 100644
--- a/include/core/SkPostConfig.h
+++ b/include/core/SkPostConfig.h
@@ -322,3 +322,48 @@
#ifndef SK_ALLOW_STATIC_GLOBAL_INITIALIZERS
#define SK_ALLOW_STATIC_GLOBAL_INITIALIZERS 1
#endif
+
+//////////////////////////////////////////////////////////////////////
+// ARM defines
+
+#if defined(__GNUC__) && defined(__arm__)
+
+# define SK_ARM_ARCH 3
+
+# if defined(__ARM_ARCH_4__) || defined(__ARM_ARCH_4T__) \
+ || defined(_ARM_ARCH_4)
+# undef SK_ARM_ARCH
+# define SK_ARM_ARCH 4
+# endif
+
+# if defined(__ARM_ARCH_5__) || defined(__ARM_ARCH_5T__) \
+ || defined(__ARM_ARCH_5E__) || defined(__ARM_ARCH_5TE__) \
+ || defined(__ARM_ARCH_5TEJ__) || defined(_ARM_ARCH_5)
+# undef SK_ARM_ARCH
+# define SK_ARM_ARCH 5
+# endif
+
+# if defined(__ARM_ARCH_6__) || defined(__ARM_ARCH_6J__) \
+ || defined(__ARM_ARCH_6K__) || defined(__ARM_ARCH_6Z__) \
+ || defined(__ARM_ARCH_6ZK__) || defined(__ARM_ARCH_6T2__) \
+ || defined(__ARM_ARCH_6M__) || defined(_ARM_ARCH_6)
+# undef SK_ARM_ARCH
+# define SK_ARM_ARCH 6
+# endif
+
+# if defined(__ARM_ARCH_7__) || defined(__ARM_ARCH_7A__) \
+ || defined(__ARM_ARCH_7R__) || defined(__ARM_ARCH_7M__) \
+ || defined(__ARM_ARCH_7EM__) || defined(_ARM_ARCH_7)
+# undef SK_ARM_ARCH
+# define SK_ARM_ARCH 7
+# endif
+
+# undef SK_ARM_HAS_EDSP
+# if defined(__thumb2__) && (SK_ARM_ARCH >= 6) \
+ || !defined(__thumb__) \
+ && ((SK_ARM_ARCH > 5) || defined(__ARM_ARCH_5E__) \
+ || defined(__ARM_ARCH_5TE__) || defined(__ARM_ARCH_5TEJ__))
+# define SK_ARM_HAS_EDSP 1
+# endif
+
+#endif