Subversion Repositories Kolibri OS

Rev

Rev 3291 | Go to most recent revision | Blame | Last modification | View Log | Download | RSS feed

  1. /*
  2.  * Copyright (c) 2011 Intel Corporation
  3.  *
  4.  * Permission is hereby granted, free of charge, to any person obtaining a
  5.  * copy of this software and associated documentation files (the "Software"),
  6.  * to deal in the Software without restriction, including without limitation
  7.  * the rights to use, copy, modify, merge, publish, distribute, sublicense,
  8.  * and/or sell copies of the Software, and to permit persons to whom the
  9.  * Software is furnished to do so, subject to the following conditions:
  10.  *
  11.  * The above copyright notice and this permission notice (including the next
  12.  * paragraph) shall be included in all copies or substantial portions of the
  13.  * Software.
  14.  *
  15.  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
  16.  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
  17.  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
  18.  * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
  19.  * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
  20.  * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
  21.  * SOFTWARE.
  22.  *
  23.  * Authors:
  24.  *    Chris Wilson <chris@chris-wilson.co.uk>
  25.  *
  26.  */
  27.  
  28. #ifndef _SNA_COMPILER_H_
  29. #define _SNA_COMPILER_H_
  30.  
  31. #if defined(__GNUC__) && (__GNUC__ > 2) && defined(__OPTIMIZE__)
  32. #define likely(expr) (__builtin_expect (!!(expr), 1))
  33. #define unlikely(expr) (__builtin_expect (!!(expr), 0))
  34. #define noinline __attribute__((noinline))
  35. #define force_inline inline __attribute__((always_inline))
  36. #define fastcall __attribute__((regparm(3)))
  37. #define must_check __attribute__((warn_unused_result))
  38. #define constant __attribute__((const))
  39. #define pure __attribute__((pure))
  40. #define tightly_packed __attribute__((__packed__))
  41. #define flatten __attribute__((flatten))
  42. #define page_aligned __attribute__((aligned(4096)))
  43. #else
  44. #define likely(expr) (expr)
  45. #define unlikely(expr) (expr)
  46. #define noinline
  47. #define force_inline inline
  48. #define fastcall
  49. #define must_check
  50. #define constant
  51. #define pure
  52. #define tighly_packed
  53. #define flatten
  54. #define page_aligned
  55. #endif
  56.  
  57. #define HAS_GCC(major, minor) defined(__GNUC__) && (__GNUC__ > (major) || __GNUC__ == (major) && __GNUC_MINOR__ >= (minor))
  58.  
  59. #if HAS_GCC(4, 5)
  60. #define sse2 __attribute__((target("sse2,fpmath=sse")))
  61. #define sse4_2 __attribute__((target("sse4.2,sse2,fpmath=sse")))
  62. #endif
  63.  
  64. #if HAS_GCC(4, 7)
  65. #define avx2 __attribute__((target("avx2,sse4.2,sse2,fpmath=sse")))
  66. #endif
  67.  
  68. #if HAS_GCC(4, 6) && defined(__OPTIMIZE__)
  69. #define fast __attribute__((optimize("Ofast")))
  70. #else
  71. #define fast
  72. #endif
  73.  
  74. #if HAS_GCC(4, 6) && defined(__OPTIMIZE__)
  75. #define fast_memcpy __attribute__((optimize("Ofast"))) __attribute__((target("inline-all-stringops")))
  76. #elif HAS_GCC(4, 5) && defined(__OPTIMIZE__)
  77. #define fast_memcpy __attribute__((target("inline-all-stringops")))
  78. #else
  79. #define fast_memcpy
  80. #endif
  81.  
  82. #ifdef HAVE_VALGRIND
  83. #define VG(x) x
  84. #else
  85. #define VG(x)
  86. #endif
  87.  
  88. #define VG_CLEAR(s) VG(memset(&s, 0, sizeof(s)))
  89.  
  90. #define COMPILE_TIME_ASSERT(E) ((void)sizeof(char[1 - 2*!(E)]))
  91.  
  92. #endif /* _SNA_COMPILER_H_ */
  93.