summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorH. Peter Anvin <hpa@zytor.com>2008-06-10 13:00:27 -0700
committerH. Peter Anvin <hpa@zytor.com>2008-06-10 13:00:27 -0700
commit253a4e7a9f26facc7e266f700832a213473d05f9 (patch)
tree87a91f6dea55afe42e4c3daeb1fb0996807c4fc8
parent51997d3d44a9279508b16e9f3d5e2de173ece7c2 (diff)
downloadnasm-253a4e7a9f26facc7e266f700832a213473d05f9.tar.gz
Make it possible to use "inline" and "restrict"
Put the appropriate machinery in place to be able to use the "inline" and "restrict" keywords with appropriate semantics.
-rw-r--r--compiler.h16
-rw-r--r--configure.in2
2 files changed, 16 insertions, 2 deletions
diff --git a/compiler.h b/compiler.h
index 51f49838..82b0d7ae 100644
--- a/compiler.h
+++ b/compiler.h
@@ -22,7 +22,17 @@
#ifdef HAVE_CONFIG_H
# include "config.h"
-#endif
+/* autoconf doesn't define these if they are redundant, but we want to
+ be able to #ifdef them... */
+#else
+/* Default these to unsupported unless we have config.h */
+# ifndef inline
+# define inline
+# endif
+# ifndef restrict
+# define restrict
+# endif
+#endif /* HAVE_CONFIG_H */
/* This is required to get the standard <inttypes.h> macros when compiling
with a C++ compiler. This must be defined *before* <inttypes.h> is
@@ -71,7 +81,9 @@ int vsnprintf(char *, size_t, const char *, va_list);
# ifdef HAVE_STDBOOL_H
# include <stdbool.h>
# else
-typedef enum { false, true } bool;
+/* This is sort of dangerous, since casts will behave different than
+ casting to the standard boolean type. Always use !!, not (bool). */
+typedef enum bool { false, true } bool;
# endif
#endif
diff --git a/configure.in b/configure.in
index 9a735141..15519489 100644
--- a/configure.in
+++ b/configure.in
@@ -92,6 +92,8 @@ AC_CHECK_HEADERS(stdbool.h)
dnl Checks for typedefs, structures, and compiler characteristics.
AC_C_CONST
+AC_C_INLINE
+AC_C_RESTRICT
AC_TYPE_SIZE_T
AC_C_BIGENDIAN(AC_DEFINE(WORDS_BIGENDIAN),AC_DEFINE(WORDS_LITTLEENDIAN))
AH_TEMPLATE(WORDS_BIGENDIAN,