Issue #4753: By enabling a configure option named '--with-computed-gotos'
on compilers that support it (notably: gcc, SunPro, icc), the bytecode evaluation loop is compiled with a new dispatch mechanism which gives speedups of up to 20%, depending on the system, on various benchmarks.
This commit is contained in:
parent
e6aad75f2b
commit
b52ec78baf
|
@ -247,6 +247,16 @@ ASDLGEN= $(srcdir)/Parser/asdl_c.py
|
||||||
|
|
||||||
##########################################################################
|
##########################################################################
|
||||||
# Python
|
# Python
|
||||||
|
|
||||||
|
OPCODETARGETS_H= \
|
||||||
|
$(srcdir)/Python/opcode_targets.h
|
||||||
|
|
||||||
|
OPCODETARGETGEN= \
|
||||||
|
$(srcdir)/Python/makeopcodetargets.py
|
||||||
|
|
||||||
|
OPCODETARGETGEN_FILES= \
|
||||||
|
$(OPCODETARGETGEN) $(srcdir)/Lib/opcode.py
|
||||||
|
|
||||||
PYTHON_OBJS= \
|
PYTHON_OBJS= \
|
||||||
Python/_warnings.o \
|
Python/_warnings.o \
|
||||||
Python/Python-ast.o \
|
Python/Python-ast.o \
|
||||||
|
@ -567,6 +577,11 @@ Objects/unicodeobject.o: $(srcdir)/Objects/unicodeobject.c \
|
||||||
$(BYTESTR_DEPS) \
|
$(BYTESTR_DEPS) \
|
||||||
$(srcdir)/Objects/stringlib/formatter.h
|
$(srcdir)/Objects/stringlib/formatter.h
|
||||||
|
|
||||||
|
$(OPCODETARGETS_H): $(OPCODETARGETGEN_FILES)
|
||||||
|
$(OPCODETARGETGEN) $(OPCODETARGETS_H)
|
||||||
|
|
||||||
|
Python/ceval.o: $(OPCODETARGETS_H)
|
||||||
|
|
||||||
Python/formatter_unicode.o: $(srcdir)/Python/formatter_unicode.c \
|
Python/formatter_unicode.o: $(srcdir)/Python/formatter_unicode.c \
|
||||||
$(BYTESTR_DEPS)
|
$(BYTESTR_DEPS)
|
||||||
|
|
||||||
|
|
|
@ -12,6 +12,11 @@ What's New in Python 3.1 alpha 0
|
||||||
Core and Builtins
|
Core and Builtins
|
||||||
-----------------
|
-----------------
|
||||||
|
|
||||||
|
- Issue #4753: By enabling a configure option named '--with-computed-gotos'
|
||||||
|
on compilers that support it (notably: gcc, SunPro, icc), the bytecode
|
||||||
|
evaluation loop is compiled with a new dispatch mechanism which gives
|
||||||
|
speedups of up to 20%, depending on the system, on various benchmarks.
|
||||||
|
|
||||||
- Issue #4874: Most builtin decoders now reject unicode input.
|
- Issue #4874: Most builtin decoders now reject unicode input.
|
||||||
|
|
||||||
- Issue #4842: Don't allow trailing 'L' when constructing an integer
|
- Issue #4842: Don't allow trailing 'L' when constructing an integer
|
||||||
|
|
497
Python/ceval.c
497
Python/ceval.c
File diff suppressed because it is too large
Load Diff
|
@ -0,0 +1,43 @@
|
||||||
|
#! /usr/bin/env python
|
||||||
|
"""Generate C code for the jump table of the threaded code interpreter
|
||||||
|
(for compilers supporting computed gotos or "labels-as-values", such as gcc).
|
||||||
|
"""
|
||||||
|
|
||||||
|
import imp
|
||||||
|
import os
|
||||||
|
|
||||||
|
|
||||||
|
def find_module(modname):
|
||||||
|
"""Finds and returns a module in the local dist/checkout.
|
||||||
|
"""
|
||||||
|
modpath = os.path.join(
|
||||||
|
os.path.dirname(os.path.dirname(__file__)), "Lib")
|
||||||
|
return imp.load_module(modname, *imp.find_module(modname, [modpath]))
|
||||||
|
|
||||||
|
def write_contents(f):
|
||||||
|
"""Write C code contents to the target file object.
|
||||||
|
"""
|
||||||
|
opcode = find_module("opcode")
|
||||||
|
targets = ['_unknown_opcode'] * 256
|
||||||
|
for opname, op in opcode.opmap.items():
|
||||||
|
if opname == "STOP_CODE":
|
||||||
|
# XXX opcode not implemented
|
||||||
|
continue
|
||||||
|
targets[op] = "TARGET_%s" % opname
|
||||||
|
f.write("static void *opcode_targets[256] = {\n")
|
||||||
|
f.write(",\n".join("\t&&%s" % s for s in targets))
|
||||||
|
f.write("\n};\n")
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
import sys
|
||||||
|
assert len(sys.argv) < 3, "Too many arguments"
|
||||||
|
if len(sys.argv) == 2:
|
||||||
|
target = sys.argv[1]
|
||||||
|
else:
|
||||||
|
target = "Python/opcode_targets.h"
|
||||||
|
f = open(target, "w")
|
||||||
|
try:
|
||||||
|
write_contents(f)
|
||||||
|
finally:
|
||||||
|
f.close()
|
|
@ -0,0 +1,258 @@
|
||||||
|
static void *opcode_targets[256] = {
|
||||||
|
&&_unknown_opcode,
|
||||||
|
&&TARGET_POP_TOP,
|
||||||
|
&&TARGET_ROT_TWO,
|
||||||
|
&&TARGET_ROT_THREE,
|
||||||
|
&&TARGET_DUP_TOP,
|
||||||
|
&&TARGET_ROT_FOUR,
|
||||||
|
&&_unknown_opcode,
|
||||||
|
&&_unknown_opcode,
|
||||||
|
&&_unknown_opcode,
|
||||||
|
&&TARGET_NOP,
|
||||||
|
&&TARGET_UNARY_POSITIVE,
|
||||||
|
&&TARGET_UNARY_NEGATIVE,
|
||||||
|
&&TARGET_UNARY_NOT,
|
||||||
|
&&_unknown_opcode,
|
||||||
|
&&_unknown_opcode,
|
||||||
|
&&TARGET_UNARY_INVERT,
|
||||||
|
&&_unknown_opcode,
|
||||||
|
&&_unknown_opcode,
|
||||||
|
&&_unknown_opcode,
|
||||||
|
&&TARGET_BINARY_POWER,
|
||||||
|
&&TARGET_BINARY_MULTIPLY,
|
||||||
|
&&_unknown_opcode,
|
||||||
|
&&TARGET_BINARY_MODULO,
|
||||||
|
&&TARGET_BINARY_ADD,
|
||||||
|
&&TARGET_BINARY_SUBTRACT,
|
||||||
|
&&TARGET_BINARY_SUBSCR,
|
||||||
|
&&TARGET_BINARY_FLOOR_DIVIDE,
|
||||||
|
&&TARGET_BINARY_TRUE_DIVIDE,
|
||||||
|
&&TARGET_INPLACE_FLOOR_DIVIDE,
|
||||||
|
&&TARGET_INPLACE_TRUE_DIVIDE,
|
||||||
|
&&_unknown_opcode,
|
||||||
|
&&_unknown_opcode,
|
||||||
|
&&_unknown_opcode,
|
||||||
|
&&_unknown_opcode,
|
||||||
|
&&_unknown_opcode,
|
||||||
|
&&_unknown_opcode,
|
||||||
|
&&_unknown_opcode,
|
||||||
|
&&_unknown_opcode,
|
||||||
|
&&_unknown_opcode,
|
||||||
|
&&_unknown_opcode,
|
||||||
|
&&_unknown_opcode,
|
||||||
|
&&_unknown_opcode,
|
||||||
|
&&_unknown_opcode,
|
||||||
|
&&_unknown_opcode,
|
||||||
|
&&_unknown_opcode,
|
||||||
|
&&_unknown_opcode,
|
||||||
|
&&_unknown_opcode,
|
||||||
|
&&_unknown_opcode,
|
||||||
|
&&_unknown_opcode,
|
||||||
|
&&_unknown_opcode,
|
||||||
|
&&_unknown_opcode,
|
||||||
|
&&_unknown_opcode,
|
||||||
|
&&_unknown_opcode,
|
||||||
|
&&_unknown_opcode,
|
||||||
|
&&TARGET_STORE_MAP,
|
||||||
|
&&TARGET_INPLACE_ADD,
|
||||||
|
&&TARGET_INPLACE_SUBTRACT,
|
||||||
|
&&TARGET_INPLACE_MULTIPLY,
|
||||||
|
&&_unknown_opcode,
|
||||||
|
&&TARGET_INPLACE_MODULO,
|
||||||
|
&&TARGET_STORE_SUBSCR,
|
||||||
|
&&TARGET_DELETE_SUBSCR,
|
||||||
|
&&TARGET_BINARY_LSHIFT,
|
||||||
|
&&TARGET_BINARY_RSHIFT,
|
||||||
|
&&TARGET_BINARY_AND,
|
||||||
|
&&TARGET_BINARY_XOR,
|
||||||
|
&&TARGET_BINARY_OR,
|
||||||
|
&&TARGET_INPLACE_POWER,
|
||||||
|
&&TARGET_GET_ITER,
|
||||||
|
&&TARGET_STORE_LOCALS,
|
||||||
|
&&TARGET_PRINT_EXPR,
|
||||||
|
&&TARGET_LOAD_BUILD_CLASS,
|
||||||
|
&&_unknown_opcode,
|
||||||
|
&&_unknown_opcode,
|
||||||
|
&&_unknown_opcode,
|
||||||
|
&&TARGET_INPLACE_LSHIFT,
|
||||||
|
&&TARGET_INPLACE_RSHIFT,
|
||||||
|
&&TARGET_INPLACE_AND,
|
||||||
|
&&TARGET_INPLACE_XOR,
|
||||||
|
&&TARGET_INPLACE_OR,
|
||||||
|
&&TARGET_BREAK_LOOP,
|
||||||
|
&&TARGET_WITH_CLEANUP,
|
||||||
|
&&_unknown_opcode,
|
||||||
|
&&TARGET_RETURN_VALUE,
|
||||||
|
&&TARGET_IMPORT_STAR,
|
||||||
|
&&_unknown_opcode,
|
||||||
|
&&TARGET_YIELD_VALUE,
|
||||||
|
&&TARGET_POP_BLOCK,
|
||||||
|
&&TARGET_END_FINALLY,
|
||||||
|
&&TARGET_POP_EXCEPT,
|
||||||
|
&&TARGET_STORE_NAME,
|
||||||
|
&&TARGET_DELETE_NAME,
|
||||||
|
&&TARGET_UNPACK_SEQUENCE,
|
||||||
|
&&TARGET_FOR_ITER,
|
||||||
|
&&TARGET_UNPACK_EX,
|
||||||
|
&&TARGET_STORE_ATTR,
|
||||||
|
&&TARGET_DELETE_ATTR,
|
||||||
|
&&TARGET_STORE_GLOBAL,
|
||||||
|
&&TARGET_DELETE_GLOBAL,
|
||||||
|
&&TARGET_DUP_TOPX,
|
||||||
|
&&TARGET_LOAD_CONST,
|
||||||
|
&&TARGET_LOAD_NAME,
|
||||||
|
&&TARGET_BUILD_TUPLE,
|
||||||
|
&&TARGET_BUILD_LIST,
|
||||||
|
&&TARGET_BUILD_SET,
|
||||||
|
&&TARGET_BUILD_MAP,
|
||||||
|
&&TARGET_LOAD_ATTR,
|
||||||
|
&&TARGET_COMPARE_OP,
|
||||||
|
&&TARGET_IMPORT_NAME,
|
||||||
|
&&TARGET_IMPORT_FROM,
|
||||||
|
&&TARGET_JUMP_FORWARD,
|
||||||
|
&&TARGET_JUMP_IF_FALSE,
|
||||||
|
&&TARGET_JUMP_IF_TRUE,
|
||||||
|
&&TARGET_JUMP_ABSOLUTE,
|
||||||
|
&&_unknown_opcode,
|
||||||
|
&&_unknown_opcode,
|
||||||
|
&&TARGET_LOAD_GLOBAL,
|
||||||
|
&&_unknown_opcode,
|
||||||
|
&&_unknown_opcode,
|
||||||
|
&&TARGET_CONTINUE_LOOP,
|
||||||
|
&&TARGET_SETUP_LOOP,
|
||||||
|
&&TARGET_SETUP_EXCEPT,
|
||||||
|
&&TARGET_SETUP_FINALLY,
|
||||||
|
&&_unknown_opcode,
|
||||||
|
&&TARGET_LOAD_FAST,
|
||||||
|
&&TARGET_STORE_FAST,
|
||||||
|
&&TARGET_DELETE_FAST,
|
||||||
|
&&_unknown_opcode,
|
||||||
|
&&_unknown_opcode,
|
||||||
|
&&_unknown_opcode,
|
||||||
|
&&TARGET_RAISE_VARARGS,
|
||||||
|
&&TARGET_CALL_FUNCTION,
|
||||||
|
&&TARGET_MAKE_FUNCTION,
|
||||||
|
&&TARGET_BUILD_SLICE,
|
||||||
|
&&TARGET_MAKE_CLOSURE,
|
||||||
|
&&TARGET_LOAD_CLOSURE,
|
||||||
|
&&TARGET_LOAD_DEREF,
|
||||||
|
&&TARGET_STORE_DEREF,
|
||||||
|
&&_unknown_opcode,
|
||||||
|
&&_unknown_opcode,
|
||||||
|
&&TARGET_CALL_FUNCTION_VAR,
|
||||||
|
&&TARGET_CALL_FUNCTION_KW,
|
||||||
|
&&TARGET_CALL_FUNCTION_VAR_KW,
|
||||||
|
&&TARGET_EXTENDED_ARG,
|
||||||
|
&&_unknown_opcode,
|
||||||
|
&&TARGET_LIST_APPEND,
|
||||||
|
&&TARGET_SET_ADD,
|
||||||
|
&&TARGET_MAP_ADD,
|
||||||
|
&&_unknown_opcode,
|
||||||
|
&&_unknown_opcode,
|
||||||
|
&&_unknown_opcode,
|
||||||
|
&&_unknown_opcode,
|
||||||
|
&&_unknown_opcode,
|
||||||
|
&&_unknown_opcode,
|
||||||
|
&&_unknown_opcode,
|
||||||
|
&&_unknown_opcode,
|
||||||
|
&&_unknown_opcode,
|
||||||
|
&&_unknown_opcode,
|
||||||
|
&&_unknown_opcode,
|
||||||
|
&&_unknown_opcode,
|
||||||
|
&&_unknown_opcode,
|
||||||
|
&&_unknown_opcode,
|
||||||
|
&&_unknown_opcode,
|
||||||
|
&&_unknown_opcode,
|
||||||
|
&&_unknown_opcode,
|
||||||
|
&&_unknown_opcode,
|
||||||
|
&&_unknown_opcode,
|
||||||
|
&&_unknown_opcode,
|
||||||
|
&&_unknown_opcode,
|
||||||
|
&&_unknown_opcode,
|
||||||
|
&&_unknown_opcode,
|
||||||
|
&&_unknown_opcode,
|
||||||
|
&&_unknown_opcode,
|
||||||
|
&&_unknown_opcode,
|
||||||
|
&&_unknown_opcode,
|
||||||
|
&&_unknown_opcode,
|
||||||
|
&&_unknown_opcode,
|
||||||
|
&&_unknown_opcode,
|
||||||
|
&&_unknown_opcode,
|
||||||
|
&&_unknown_opcode,
|
||||||
|
&&_unknown_opcode,
|
||||||
|
&&_unknown_opcode,
|
||||||
|
&&_unknown_opcode,
|
||||||
|
&&_unknown_opcode,
|
||||||
|
&&_unknown_opcode,
|
||||||
|
&&_unknown_opcode,
|
||||||
|
&&_unknown_opcode,
|
||||||
|
&&_unknown_opcode,
|
||||||
|
&&_unknown_opcode,
|
||||||
|
&&_unknown_opcode,
|
||||||
|
&&_unknown_opcode,
|
||||||
|
&&_unknown_opcode,
|
||||||
|
&&_unknown_opcode,
|
||||||
|
&&_unknown_opcode,
|
||||||
|
&&_unknown_opcode,
|
||||||
|
&&_unknown_opcode,
|
||||||
|
&&_unknown_opcode,
|
||||||
|
&&_unknown_opcode,
|
||||||
|
&&_unknown_opcode,
|
||||||
|
&&_unknown_opcode,
|
||||||
|
&&_unknown_opcode,
|
||||||
|
&&_unknown_opcode,
|
||||||
|
&&_unknown_opcode,
|
||||||
|
&&_unknown_opcode,
|
||||||
|
&&_unknown_opcode,
|
||||||
|
&&_unknown_opcode,
|
||||||
|
&&_unknown_opcode,
|
||||||
|
&&_unknown_opcode,
|
||||||
|
&&_unknown_opcode,
|
||||||
|
&&_unknown_opcode,
|
||||||
|
&&_unknown_opcode,
|
||||||
|
&&_unknown_opcode,
|
||||||
|
&&_unknown_opcode,
|
||||||
|
&&_unknown_opcode,
|
||||||
|
&&_unknown_opcode,
|
||||||
|
&&_unknown_opcode,
|
||||||
|
&&_unknown_opcode,
|
||||||
|
&&_unknown_opcode,
|
||||||
|
&&_unknown_opcode,
|
||||||
|
&&_unknown_opcode,
|
||||||
|
&&_unknown_opcode,
|
||||||
|
&&_unknown_opcode,
|
||||||
|
&&_unknown_opcode,
|
||||||
|
&&_unknown_opcode,
|
||||||
|
&&_unknown_opcode,
|
||||||
|
&&_unknown_opcode,
|
||||||
|
&&_unknown_opcode,
|
||||||
|
&&_unknown_opcode,
|
||||||
|
&&_unknown_opcode,
|
||||||
|
&&_unknown_opcode,
|
||||||
|
&&_unknown_opcode,
|
||||||
|
&&_unknown_opcode,
|
||||||
|
&&_unknown_opcode,
|
||||||
|
&&_unknown_opcode,
|
||||||
|
&&_unknown_opcode,
|
||||||
|
&&_unknown_opcode,
|
||||||
|
&&_unknown_opcode,
|
||||||
|
&&_unknown_opcode,
|
||||||
|
&&_unknown_opcode,
|
||||||
|
&&_unknown_opcode,
|
||||||
|
&&_unknown_opcode,
|
||||||
|
&&_unknown_opcode,
|
||||||
|
&&_unknown_opcode,
|
||||||
|
&&_unknown_opcode,
|
||||||
|
&&_unknown_opcode,
|
||||||
|
&&_unknown_opcode,
|
||||||
|
&&_unknown_opcode,
|
||||||
|
&&_unknown_opcode,
|
||||||
|
&&_unknown_opcode,
|
||||||
|
&&_unknown_opcode,
|
||||||
|
&&_unknown_opcode,
|
||||||
|
&&_unknown_opcode,
|
||||||
|
&&_unknown_opcode,
|
||||||
|
&&_unknown_opcode,
|
||||||
|
&&_unknown_opcode,
|
||||||
|
&&_unknown_opcode
|
||||||
|
};
|
16
configure.in
16
configure.in
|
@ -3660,6 +3660,22 @@ then
|
||||||
wide chars that would be converted.])
|
wide chars that would be converted.])
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
# Check for --with-computed-gotos
|
||||||
|
AC_MSG_CHECKING(for --with-computed-gotos)
|
||||||
|
AC_ARG_WITH(computed-gotos,
|
||||||
|
AC_HELP_STRING(--with-computed-gotos,
|
||||||
|
Use computed gotos / threaded dispatch in evaluation loop (not available on all compilers)),
|
||||||
|
[
|
||||||
|
if test "$withval" != no
|
||||||
|
then
|
||||||
|
AC_DEFINE(USE_COMPUTED_GOTOS, 1,
|
||||||
|
[Define if you want to use computed gotos in ceval.c.])
|
||||||
|
AC_MSG_RESULT(yes)
|
||||||
|
else AC_MSG_RESULT(no)
|
||||||
|
fi],
|
||||||
|
[AC_MSG_RESULT(no)])
|
||||||
|
|
||||||
|
|
||||||
AC_SUBST(THREADHEADERS)
|
AC_SUBST(THREADHEADERS)
|
||||||
|
|
||||||
for h in `(cd $srcdir;echo Python/thread_*.h)`
|
for h in `(cd $srcdir;echo Python/thread_*.h)`
|
||||||
|
|
|
@ -5,6 +5,9 @@
|
||||||
#define Py_PYCONFIG_H
|
#define Py_PYCONFIG_H
|
||||||
|
|
||||||
|
|
||||||
|
/* Define if building universal (internal helper macro) */
|
||||||
|
#undef AC_APPLE_UNIVERSAL_BUILD
|
||||||
|
|
||||||
/* Define for AIX if your compiler is a genuine IBM xlC/xlC_r and you want
|
/* Define for AIX if your compiler is a genuine IBM xlC/xlC_r and you want
|
||||||
support for AIX C++ shared extension modules. */
|
support for AIX C++ shared extension modules. */
|
||||||
#undef AIX_GENUINE_CPLUSPLUS
|
#undef AIX_GENUINE_CPLUSPLUS
|
||||||
|
@ -949,6 +952,31 @@
|
||||||
/* Define to 1 if your <sys/time.h> declares `struct tm'. */
|
/* Define to 1 if your <sys/time.h> declares `struct tm'. */
|
||||||
#undef TM_IN_SYS_TIME
|
#undef TM_IN_SYS_TIME
|
||||||
|
|
||||||
|
/* Define if you want to use computed gotos in ceval.c. */
|
||||||
|
#undef USE_COMPUTED_GOTOS
|
||||||
|
|
||||||
|
/* Enable extensions on AIX 3, Interix. */
|
||||||
|
#ifndef _ALL_SOURCE
|
||||||
|
# undef _ALL_SOURCE
|
||||||
|
#endif
|
||||||
|
/* Enable GNU extensions on systems that have them. */
|
||||||
|
#ifndef _GNU_SOURCE
|
||||||
|
# undef _GNU_SOURCE
|
||||||
|
#endif
|
||||||
|
/* Enable threading extensions on Solaris. */
|
||||||
|
#ifndef _POSIX_PTHREAD_SEMANTICS
|
||||||
|
# undef _POSIX_PTHREAD_SEMANTICS
|
||||||
|
#endif
|
||||||
|
/* Enable extensions on HP NonStop. */
|
||||||
|
#ifndef _TANDEM_SOURCE
|
||||||
|
# undef _TANDEM_SOURCE
|
||||||
|
#endif
|
||||||
|
/* Enable general extensions on Solaris. */
|
||||||
|
#ifndef __EXTENSIONS__
|
||||||
|
# undef __EXTENSIONS__
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
/* Define if a va_list is an array of some kind */
|
/* Define if a va_list is an array of some kind */
|
||||||
#undef VA_LIST_IS_ARRAY
|
#undef VA_LIST_IS_ARRAY
|
||||||
|
|
||||||
|
@ -986,20 +1014,21 @@
|
||||||
/* Define to profile with the Pentium timestamp counter */
|
/* Define to profile with the Pentium timestamp counter */
|
||||||
#undef WITH_TSC
|
#undef WITH_TSC
|
||||||
|
|
||||||
/* Define to 1 if your processor stores words with the most significant byte
|
/* Define WORDS_BIGENDIAN to 1 if your processor stores words with the most
|
||||||
first (like Motorola and SPARC, unlike Intel and VAX). */
|
significant byte first (like Motorola and SPARC, unlike Intel). */
|
||||||
#undef WORDS_BIGENDIAN
|
#if defined AC_APPLE_UNIVERSAL_BUILD
|
||||||
|
# if defined __BIG_ENDIAN__
|
||||||
|
# define WORDS_BIGENDIAN 1
|
||||||
|
# endif
|
||||||
|
#else
|
||||||
|
# ifndef WORDS_BIGENDIAN
|
||||||
|
# undef WORDS_BIGENDIAN
|
||||||
|
# endif
|
||||||
|
#endif
|
||||||
|
|
||||||
/* Define if arithmetic is subject to x87-style double rounding issue */
|
/* Define if arithmetic is subject to x87-style double rounding issue */
|
||||||
#undef X87_DOUBLE_ROUNDING
|
#undef X87_DOUBLE_ROUNDING
|
||||||
|
|
||||||
/* Define to 1 if on AIX 3.
|
|
||||||
System headers sometimes define this.
|
|
||||||
We just want to avoid a redefinition error message. */
|
|
||||||
#ifndef _ALL_SOURCE
|
|
||||||
# undef _ALL_SOURCE
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/* Define on OpenBSD to activate all library features */
|
/* Define on OpenBSD to activate all library features */
|
||||||
#undef _BSD_SOURCE
|
#undef _BSD_SOURCE
|
||||||
|
|
||||||
|
@ -1018,15 +1047,25 @@
|
||||||
/* This must be defined on some systems to enable large file support. */
|
/* This must be defined on some systems to enable large file support. */
|
||||||
#undef _LARGEFILE_SOURCE
|
#undef _LARGEFILE_SOURCE
|
||||||
|
|
||||||
|
/* Define to 1 if on MINIX. */
|
||||||
|
#undef _MINIX
|
||||||
|
|
||||||
/* Define on NetBSD to activate all library features */
|
/* Define on NetBSD to activate all library features */
|
||||||
#undef _NETBSD_SOURCE
|
#undef _NETBSD_SOURCE
|
||||||
|
|
||||||
/* Define _OSF_SOURCE to get the makedev macro. */
|
/* Define _OSF_SOURCE to get the makedev macro. */
|
||||||
#undef _OSF_SOURCE
|
#undef _OSF_SOURCE
|
||||||
|
|
||||||
|
/* Define to 2 if the system does not provide POSIX.1 features except with
|
||||||
|
this defined. */
|
||||||
|
#undef _POSIX_1_SOURCE
|
||||||
|
|
||||||
/* Define to activate features from IEEE Stds 1003.1-2001 */
|
/* Define to activate features from IEEE Stds 1003.1-2001 */
|
||||||
#undef _POSIX_C_SOURCE
|
#undef _POSIX_C_SOURCE
|
||||||
|
|
||||||
|
/* Define to 1 if you need to in order for `stat' and other things to work. */
|
||||||
|
#undef _POSIX_SOURCE
|
||||||
|
|
||||||
/* Define if you have POSIX threads, and your system does not define that. */
|
/* Define if you have POSIX threads, and your system does not define that. */
|
||||||
#undef _POSIX_THREADS
|
#undef _POSIX_THREADS
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue