summaryrefslogtreecommitdiffstats
path: root/src/util/macros.h
diff options
context:
space:
mode:
authorEric Anholt <[email protected]>2015-07-10 16:25:26 -0700
committerEric Anholt <[email protected]>2015-07-17 12:25:54 -0700
commitbe1f49bda90425b7fd009ac177b307e61da0f994 (patch)
treeafd9b00c1e9c63900294f6f3cbb31d6e521fb734 /src/util/macros.h
parentbde4c8ec1fd69e312fe21e36c8ce07139916811a (diff)
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 <[email protected]> (v1)
Diffstat (limited to 'src/util/macros.h')
-rw-r--r--src/util/macros.h20
1 files changed, 20 insertions, 0 deletions
diff --git a/src/util/macros.h b/src/util/macros.h
index 66698e72701..5c5c92ec610 100644
--- a/src/util/macros.h
+++ b/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