Home | History | Annotate | Download | only in linux
      1 /* Never include this file directly.  Include <linux/compiler.h> instead.  */
      2 
      3 /*
      4  * Common definitions for all gcc versions go here.
      5  */
      6 
      7 
      8 /* Optimization barrier */
      9 /* The "volatile" is due to gcc bugs */
     10 #define barrier() __asm__ __volatile__("": : :"memory")
     11 
     12 /* This macro obfuscates arithmetic on a variable address so that gcc
     13    shouldn't recognize the original var, and make assumptions about it */
     14 /*
     15  * Versions of the ppc64 compiler before 4.1 had a bug where use of
     16  * RELOC_HIDE could trash r30. The bug can be worked around by changing
     17  * the inline assembly constraint from =g to =r, in this particular
     18  * case either is valid.
     19  */
     20 #define RELOC_HIDE(ptr, off)					\
     21   ({ unsigned long __ptr;					\
     22     __asm__ ("" : "=r"(__ptr) : "0"(ptr));		\
     23     (typeof(ptr)) (__ptr + (off)); })
     24 
     25 
     26 #define inline		inline		__attribute__((always_inline))
     27 #define __inline__	__inline__	__attribute__((always_inline))
     28 #define __inline	__inline	__attribute__((always_inline))
     29 #define __deprecated			__attribute__((deprecated))
     30 #define  noinline			__attribute__((noinline))
     31 #define __attribute_pure__		__attribute__((pure))
     32 #define __attribute_const__		__attribute__((__const__))
     33