1/* 2 * copyright (c) 2006 Michael Niedermayer <michaelni@gmx.at> 3 * 4 * This file is part of Libav. 5 * 6 * Libav is free software; you can redistribute it and/or 7 * modify it under the terms of the GNU Lesser General Public 8 * License as published by the Free Software Foundation; either 9 * version 2.1 of the License, or (at your option) any later version. 10 * 11 * Libav is distributed in the hope that it will be useful, 12 * but WITHOUT ANY WARRANTY; without even the implied warranty of 13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 14 * Lesser General Public License for more details. 15 * 16 * You should have received a copy of the GNU Lesser General Public 17 * License along with Libav; if not, write to the Free Software 18 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA 19 */ 20 21/** 22 * @file 23 * Macro definitions for various function/variable attributes 24 */ 25 26#ifndef AVUTIL_ATTRIBUTES_H 27#define AVUTIL_ATTRIBUTES_H 28 29#ifdef __GNUC__ 30# define AV_GCC_VERSION_AT_LEAST(x,y) (__GNUC__ > x || __GNUC__ == x && __GNUC_MINOR__ >= y) 31#else 32# define AV_GCC_VERSION_AT_LEAST(x,y) 0 33#endif 34 35#ifndef av_always_inline 36#if AV_GCC_VERSION_AT_LEAST(3,1) 37# define av_always_inline __attribute__((always_inline)) inline 38#else 39# define av_always_inline inline 40#endif 41#endif 42 43#ifndef av_noinline 44#if AV_GCC_VERSION_AT_LEAST(3,1) 45# define av_noinline __attribute__((noinline)) 46#else 47# define av_noinline 48#endif 49#endif 50 51#ifndef av_pure 52#if AV_GCC_VERSION_AT_LEAST(3,1) 53# define av_pure __attribute__((pure)) 54#else 55# define av_pure 56#endif 57#endif 58 59#ifndef av_const 60#if AV_GCC_VERSION_AT_LEAST(2,6) 61# define av_const __attribute__((const)) 62#else 63# define av_const 64#endif 65#endif 66 67#ifndef av_cold 68#if AV_GCC_VERSION_AT_LEAST(4,3) 69# define av_cold __attribute__((cold)) 70#else 71# define av_cold 72#endif 73#endif 74 75#ifndef av_flatten 76#if AV_GCC_VERSION_AT_LEAST(4,1) 77# define av_flatten __attribute__((flatten)) 78#else 79# define av_flatten 80#endif 81#endif 82 83#ifndef attribute_deprecated 84#if AV_GCC_VERSION_AT_LEAST(3,1) 85# define attribute_deprecated __attribute__((deprecated)) 86#else 87# define attribute_deprecated 88#endif 89#endif 90 91#ifndef av_unused 92#if defined(__GNUC__) 93# define av_unused __attribute__((unused)) 94#else 95# define av_unused 96#endif 97#endif 98 99/** 100 * Mark a variable as used and prevent the compiler from optimizing it 101 * away. This is useful for variables accessed only from inline 102 * assembler without the compiler being aware. 103 */ 104#ifndef av_used 105#if AV_GCC_VERSION_AT_LEAST(3,1) 106# define av_used __attribute__((used)) 107#else 108# define av_used 109#endif 110#endif 111 112#ifndef av_alias 113#if AV_GCC_VERSION_AT_LEAST(3,3) 114# define av_alias __attribute__((may_alias)) 115#else 116# define av_alias 117#endif 118#endif 119 120#ifndef av_uninit 121#if defined(__GNUC__) && !defined(__ICC) 122# define av_uninit(x) x=x 123#else 124# define av_uninit(x) x 125#endif 126#endif 127 128#ifdef __GNUC__ 129# define av_builtin_constant_p __builtin_constant_p 130# define av_printf_format(fmtpos, attrpos) __attribute__((__format__(__printf__, fmtpos, attrpos))) 131#else 132# define av_builtin_constant_p(x) 0 133# define av_printf_format(fmtpos, attrpos) 134#endif 135 136#endif /* AVUTIL_ATTRIBUTES_H */ 137