LCOV - code coverage report
Current view: top level - mozglue/build - arm.h (source / functions) Hit Total Coverage
Test: output.info Lines: 4 4 100.0 %
Date: 2017-07-14 16:53:18 Functions: 4 4 100.0 %
Legend: Lines: hit not hit

          Line data    Source code
       1             : /* This Source Code Form is subject to the terms of the Mozilla Public
       2             :  * License, v. 2.0. If a copy of the MPL was not distributed with this
       3             :  * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
       4             : 
       5             : /* compile-time and runtime tests for whether to use SSE instructions */
       6             : 
       7             : #ifndef mozilla_arm_h_
       8             : #define mozilla_arm_h_
       9             : 
      10             : // for definition of MFBT_DATA
      11             : #include "mozilla/Types.h"
      12             : 
      13             : /* This is patterned after SSE.h, but provides ARMv5E, ARMv6, and NEON
      14             :    detection. For reasons similar to the SSE code, code using NEON (even just
      15             :    in inline asm) needs to be in a separate compilation unit from the regular
      16             :    code, because it requires an ".fpu neon" directive which can't be undone.
      17             :    ARMv5E and ARMv6 code may also require an .arch directive, since by default
      18             :    the assembler refuses to generate code for opcodes outside of its current
      19             :    .arch setting.
      20             : 
      21             :    TODO: Add Thumb, Thumb2, VFP, iwMMX, etc. detection, if we need it. */
      22             : 
      23             : #if defined(__GNUC__) && defined(__arm__)
      24             : 
      25             : #  define MOZILLA_ARM_ARCH 3
      26             : 
      27             : #  if defined(__ARM_ARCH_4__) || defined(__ARM_ARCH_4T__) \
      28             :    || defined(_ARM_ARCH_4)
      29             : #    undef MOZILLA_ARM_ARCH
      30             : #    define MOZILLA_ARM_ARCH 4
      31             : #  endif
      32             : 
      33             : #  if defined(__ARM_ARCH_5__) || defined(__ARM_ARCH_5T__) \
      34             :    || defined(__ARM_ARCH_5E__) || defined(__ARM_ARCH_5TE__) \
      35             :    || defined(__ARM_ARCH_5TEJ__) || defined(_ARM_ARCH_5)
      36             : #    undef MOZILLA_ARM_ARCH
      37             : #    define MOZILLA_ARM_ARCH 5
      38             : #  endif
      39             : 
      40             : #  if defined(__ARM_ARCH_6__) || defined(__ARM_ARCH_6J__) \
      41             :    || defined(__ARM_ARCH_6K__) || defined(__ARM_ARCH_6Z__) \
      42             :    || defined(__ARM_ARCH_6ZK__) || defined(__ARM_ARCH_6T2__) \
      43             :    || defined(__ARM_ARCH_6M__) || defined(_ARM_ARCH_6)
      44             : #    undef MOZILLA_ARM_ARCH
      45             : #    define MOZILLA_ARM_ARCH 6
      46             : #  endif
      47             : 
      48             : #  if defined(__ARM_ARCH_7__) || defined(__ARM_ARCH_7A__) \
      49             :    || defined(__ARM_ARCH_7R__) || defined(__ARM_ARCH_7M__) \
      50             :    || defined(__ARM_ARCH_7EM__) || defined(_ARM_ARCH_7)
      51             : #    undef MOZILLA_ARM_ARCH
      52             : #    define MOZILLA_ARM_ARCH 7
      53             : #  endif
      54             : 
      55             : 
      56             : #  ifdef __GNUC__
      57             : #    define MOZILLA_MAY_SUPPORT_EDSP 1
      58             : 
      59             : #    if defined(HAVE_ARM_SIMD)
      60             : #      define MOZILLA_MAY_SUPPORT_ARMV6 1
      61             : #    endif
      62             : 
      63             : #    if defined(HAVE_ARM_NEON)
      64             : #      define MOZILLA_MAY_SUPPORT_NEON 1
      65             : #    endif
      66             : 
      67             : #    if defined(HAVE_ARM_SIMD)
      68             : #      define MOZILLA_MAY_SUPPORT_ARMV7 1
      69             : #    endif
      70             : #  endif
      71             : 
      72             :   // Currently we only have CPU detection for Linux via /proc/cpuinfo
      73             : #  if defined(__linux__) || defined(ANDROID)
      74             : #    define MOZILLA_ARM_HAVE_CPUID_DETECTION 1
      75             : #  endif
      76             : 
      77             : #endif
      78             : 
      79             : // When using -mfpu=neon on arm gcc, or using default on aarch64,
      80             : // the compiler generates neon instructions.
      81             : #if defined(__ARM_NEON)
      82             : #  define MOZILLA_PRESUME_NEON 1
      83             : #endif
      84             : 
      85             : namespace mozilla {
      86             : 
      87             :   namespace arm_private {
      88             : #if defined(MOZILLA_ARM_HAVE_CPUID_DETECTION)
      89             : #if !defined(MOZILLA_PRESUME_EDSP)
      90             :     extern bool MFBT_DATA edsp_enabled;
      91             : #endif
      92             : #if !defined(MOZILLA_PRESUME_ARMV6)
      93             :     extern bool MFBT_DATA armv6_enabled;
      94             : #endif
      95             : #if !defined(MOZILLA_PRESUME_ARMV7)
      96             :     extern bool MFBT_DATA armv7_enabled;
      97             : #endif
      98             : #if !defined(MOZILLA_PRESUME_NEON)
      99             :     extern bool MFBT_DATA neon_enabled;
     100             : #endif
     101             : #endif
     102             :   } // namespace arm_private
     103             : 
     104             : #if defined(MOZILLA_PRESUME_EDSP)
     105             : #  define MOZILLA_MAY_SUPPORT_EDSP 1
     106             :   inline bool supports_edsp() { return true; }
     107             : #elif defined(MOZILLA_MAY_SUPPORT_EDSP) \
     108             :    && defined(MOZILLA_ARM_HAVE_CPUID_DETECTION)
     109             :   inline bool supports_edsp() { return arm_private::edsp_enabled; }
     110             : #else
     111           1 :   inline bool supports_edsp() { return false; }
     112             : #endif
     113             : 
     114             : #if defined(MOZILLA_PRESUME_ARMV6)
     115             : #  define MOZILLA_MAY_SUPPORT_ARMV6 1
     116             :   inline bool supports_armv6() { return true; }
     117             : #elif defined(MOZILLA_MAY_SUPPORT_ARMV6) \
     118             :    && defined(MOZILLA_ARM_HAVE_CPUID_DETECTION)
     119             :   inline bool supports_armv6() { return arm_private::armv6_enabled; }
     120             : #else
     121           1 :   inline bool supports_armv6() { return false; }
     122             : #endif
     123             : 
     124             : #if defined(MOZILLA_PRESUME_ARMV7)
     125             : #  define MOZILLA_MAY_SUPPORT_ARMV7 1
     126             :   inline bool supports_armv7() { return true; }
     127             : #elif defined(MOZILLA_MAY_SUPPORT_ARMV7) \
     128             :    && defined(MOZILLA_ARM_HAVE_CPUID_DETECTION)
     129             :   inline bool supports_armv7() { return arm_private::armv7_enabled; }
     130             : #else
     131           1 :   inline bool supports_armv7() { return false; }
     132             : #endif
     133             : 
     134             : #if defined(MOZILLA_PRESUME_NEON)
     135             : #  define MOZILLA_MAY_SUPPORT_NEON 1
     136             :   inline bool supports_neon() { return true; }
     137             : #elif defined(MOZILLA_MAY_SUPPORT_NEON) \
     138             :    && defined(MOZILLA_ARM_HAVE_CPUID_DETECTION)
     139             :   inline bool supports_neon() { return arm_private::neon_enabled; }
     140             : #else
     141           1 :   inline bool supports_neon() { return false; }
     142             : #endif
     143             : 
     144             : } // namespace mozilla
     145             : 
     146             : #endif /* !defined(mozilla_arm_h_) */

Generated by: LCOV version 1.13