ソースを参照

mesa: Detect and provide macros for function attributes pure and const.

These are really useful hints to the compiler in the absence of link-time
optimization, and I'm going to use them in VC4.

I've made the const attribute be ATTRIBUTE_CONST unlike other function
attributes, because we have other things in the tree #defining CONST for
their own unrelated purposes.

v2: Alphabetize.

Reviewed-by: Kenneth Graunke <kenneth@whitecape.org> (v1)
tags/11.0-branchpoint
Eric Anholt 10年前
コミット
be1f49bda9
2個のファイルの変更22行の追加0行の削除
  1. 2
    0
      configure.ac
  2. 20
    0
      src/util/macros.h

+ 2
- 0
configure.ac ファイルの表示

@@ -205,10 +205,12 @@ AX_GCC_BUILTIN([__builtin_popcount])
AX_GCC_BUILTIN([__builtin_popcountll])
AX_GCC_BUILTIN([__builtin_unreachable])

AX_GCC_FUNC_ATTRIBUTE([const])
AX_GCC_FUNC_ATTRIBUTE([flatten])
AX_GCC_FUNC_ATTRIBUTE([format])
AX_GCC_FUNC_ATTRIBUTE([malloc])
AX_GCC_FUNC_ATTRIBUTE([packed])
AX_GCC_FUNC_ATTRIBUTE([pure])
AX_GCC_FUNC_ATTRIBUTE([unused])
AX_GCC_FUNC_ATTRIBUTE([warn_unused_result])


+ 20
- 0
src/util/macros.h ファイルの表示

@@ -103,6 +103,17 @@ do { \
#define assume(expr) assert(expr)
#endif

/* Attribute const is used for functions that have no effects other than their
* return value, and only rely on the argument values to compute the return
* value. As a result, calls to it can be CSEed. Note that using memory
* pointed to by the arguments is not allowed for const functions.
*/
#ifdef HAVE_FUNC_ATTRIBUTE_CONST
#define ATTRIBUTE_CONST __attribute__((__const__))
#else
#define ATTRIBUTE_CONST
#endif

#ifdef HAVE_FUNC_ATTRIBUTE_FLATTEN
#define FLATTEN __attribute__((__flatten__))
#else
@@ -130,6 +141,15 @@ do { \
#define PACKED
#endif

/* Attribute pure is used for functions that have no effects other than their
* return value. As a result, calls to it can be dead code eliminated.
*/
#ifdef HAVE_FUNC_ATTRIBUTE_PURE
#define PURE __attribute__((__pure__))
#else
#define PURE
#endif

#ifdef __cplusplus
/**
* Macro function that evaluates to true if T is a trivially

読み込み中…
キャンセル
保存