X-Git-Url: http://git.liburcu.org/?p=urcu.git;a=blobdiff_plain;f=compiler.h;h=99972f30e2ba89726f663c78261f4e9203b6d026;hp=717465c4d8570ce443e8cec4bb5b1abe3f3a0765;hb=ba59a0c7b244a0939a2298fc76a9002436ef9674;hpb=2dc5fa0f7cfbfb0a64a7a67b39626650e863f16a diff --git a/compiler.h b/compiler.h index 717465c..99972f3 100644 --- a/compiler.h +++ b/compiler.h @@ -8,25 +8,18 @@ * * Copyright (c) 2009 Mathieu Desnoyers * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. -* - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. + * THIS MATERIAL IS PROVIDED AS IS, WITH ABSOLUTELY NO WARRANTY EXPRESSED + * OR IMPLIED. ANY USE IS AT YOUR OWN RISK. * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - * - * IBM's contributions to this file may be relicensed under LGPLv2 or later. + * Permission is hereby granted to use or copy this program + * for any purpose, provided the above notices are retained on all copies. + * Permission to modify the code and to distribute modified code is granted, + * provided the above notices are retained, and a notice that the code was + * modified is included with the above copyright notice. */ -#define likely() __builtin_expect(!!(x), 1) -#define unlikely() __builtin_expect(!!(x), 0) +#define likely(x) __builtin_expect(!!(x), 1) +#define unlikely(x) __builtin_expect(!!(x), 0) #define barrier() asm volatile("" : : : "memory"); @@ -44,4 +37,14 @@ */ #define ACCESS_ONCE(x) (*(volatile typeof(x) *)&x) +#if (__GNUC__ == 4) +#define __compiler_offsetof(a, b) __builtin_offsetof(a, b) +#endif + +#ifdef __compiler_offsetof +#define offsetof(TYPE, MEMBER) __compiler_offsetof(TYPE, MEMBER) +#else +#define offsetof(TYPE, MEMBER) ((size_t) &((TYPE *)0)->MEMBER) +#endif + #endif /* _COMPILER_H */