| Index: Source/wtf/CPU.h
|
| diff --git a/Source/wtf/CPU.h b/Source/wtf/CPU.h
|
| index 061d128afab82d7c4883c04f7e28a4d226e0e4a8..ada4d8521b5a1bfc3f44b644a086e17229978f60 100644
|
| --- a/Source/wtf/CPU.h
|
| +++ b/Source/wtf/CPU.h
|
| @@ -2,7 +2,7 @@
|
| * Copyright (C) 2006, 2007, 2008, 2009, 2013 Apple Inc. All rights reserved.
|
| * Copyright (C) 2007-2009 Torch Mobile, Inc.
|
| * Copyright (C) 2010, 2011 Research In Motion Limited. All rights reserved.
|
| - * Copyright (C) 2013 Samsung Electronics. All rights reserved.
|
| + * Copyright (C) 2013-2014 Samsung Electronics. All rights reserved.
|
| *
|
| * Redistribution and use in source and binary forms, with or without
|
| * modification, are permitted provided that the following conditions
|
| @@ -155,12 +155,39 @@
|
| # endif
|
| #endif /* !defined(WTF_CPU_ARM_THUMB2) */
|
|
|
| -#if defined(__ARM_NEON__) && !defined(WTF_CPU_ARM_NEON)
|
| -#define WTF_CPU_ARM_NEON 1
|
| +// The isSupportedNEON() function returns true if the target device
|
| +// is ARMv7-A and supports Neon instructions. In OPTIONAL mode, this actually
|
| +// probes the CPU at runtime (and caches the result).
|
| +#if CPU(ARM_NEON)
|
| +static inline bool isSupportedNEON(void) { return true; }
|
| +#elif CPU(ARM_NEON_OPTIONAL)
|
| +extern bool isSupportedNEON(void) WTF_PURE_FUNCTION;
|
| +#else
|
| +static inline bool isSupportedNEON(void) { return false; }
|
| +#endif
|
| +
|
| +// Helper macro
|
| +#if CPU(ARM)
|
| +#define WTF_CPU_ARM_HAS_NEON() isSupportedNEON()
|
| +#endif
|
| +
|
| +// Use WTF_CPU_ARM_NEON_WRAP(symbol) to map 'symbol' to a NEON-specific symbol
|
| +// when applicable. This will transform 'symbol' differently depending on
|
| +// the current NEON configuration, i.e.:
|
| +//
|
| +// NONE -> 'symbol'
|
| +// WTF_CPU_ARM_NEON -> 'symbolNEON'
|
| +// WTF_CPU_ARM_NEON_OPTIONAL -> 'symbol' or 'symbolNEON' depending on runtime check.
|
| +#if CPU(ARM_NEON)
|
| +# define WTF_CPU_ARM_NEON_WRAP(x) (x ## NEON)
|
| +#elif CPU(ARM_NEON_OPTIONAL)
|
| +# define WTF_CPU_ARM_NEON_WRAP(x) (WTF_CPU_ARM_HAS_NEON() ? x ## NEON : x)
|
| +#else
|
| +# define WTF_CPU_ARM_NEON_WRAP(x) (x)
|
| #endif
|
|
|
| -#if CPU(ARM_NEON) && (!COMPILER(GCC) || GCC_VERSION_AT_LEAST(4, 7, 0))
|
| -// All NEON intrinsics usage can be disabled by this macro.
|
| +#if (CPU(ARM_NEON) || CPU(ARM_NEON_OPTIONAL)) && (!COMPILER(GCC) || GCC_VERSION_AT_LEAST(4, 7, 0))
|
| +// All NEON intrinsics usage can be enabled by this macro.
|
| #define HAVE_ARM_NEON_INTRINSICS 1
|
| #endif
|
|
|
|
|