Home | History | Annotate | Download | only in wtf
      1 /*
      2  *  Copyright (C) 2005, 2007, 2008 Apple Inc. All rights reserved.
      3  *
      4  *  This library is free software; you can redistribute it and/or
      5  *  modify it under the terms of the GNU Library General Public
      6  *  License as published by the Free Software Foundation; either
      7  *  version 2 of the License, or (at your option) any later version.
      8  *
      9  *  This library is distributed in the hope that it will be useful,
     10  *  but WITHOUT ANY WARRANTY; without even the implied warranty of
     11  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
     12  *  Library General Public License for more details.
     13  *
     14  *  You should have received a copy of the GNU Library General Public License
     15  *  along with this library; see the file COPYING.LIB.  If not, write to
     16  *  the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
     17  *  Boston, MA 02110-1301, USA.
     18  *
     19  */
     20 
     21 #include "Platform.h"
     22 
     23 #ifndef ALWAYS_INLINE
     24 #if COMPILER(GCC) && defined(NDEBUG) && !COMPILER(MINGW)
     25 #define ALWAYS_INLINE inline __attribute__((__always_inline__))
     26 #elif (COMPILER(MSVC) || COMPILER(RVCT)) && defined(NDEBUG)
     27 #define ALWAYS_INLINE __forceinline
     28 #else
     29 #define ALWAYS_INLINE inline
     30 #endif
     31 #endif
     32 
     33 #ifndef NEVER_INLINE
     34 #if COMPILER(GCC)
     35 #define NEVER_INLINE __attribute__((__noinline__))
     36 #elif COMPILER(RVCT)
     37 #define NEVER_INLINE __declspec(noinline)
     38 #else
     39 #define NEVER_INLINE
     40 #endif
     41 #endif
     42 
     43 #ifndef UNLIKELY
     44 #if COMPILER(GCC) || (RVCT_VERSION_AT_LEAST(3, 0, 0, 0) && defined(__GNUC__))
     45 #define UNLIKELY(x) __builtin_expect((x), 0)
     46 #else
     47 #define UNLIKELY(x) (x)
     48 #endif
     49 #endif
     50 
     51 #ifndef LIKELY
     52 #if COMPILER(GCC) || (RVCT_VERSION_AT_LEAST(3, 0, 0, 0) && defined(__GNUC__))
     53 #define LIKELY(x) __builtin_expect((x), 1)
     54 #else
     55 #define LIKELY(x) (x)
     56 #endif
     57 #endif
     58 
     59 #ifndef NO_RETURN
     60 #if COMPILER(GCC)
     61 #define NO_RETURN __attribute((__noreturn__))
     62 #elif COMPILER(MSVC) || COMPILER(RVCT)
     63 #define NO_RETURN __declspec(noreturn)
     64 #else
     65 #define NO_RETURN
     66 #endif
     67 #endif
     68 
     69 #ifndef NO_RETURN_WITH_VALUE
     70 #if !COMPILER(MSVC)
     71 #define NO_RETURN_WITH_VALUE NO_RETURN
     72 #else
     73 #define NO_RETURN_WITH_VALUE
     74 #endif
     75 #endif
     76