about summary refs log tree commit diff
path: root/sysdeps/i386/configure.in
blob: ec69080eb6c04a56b5fc19af0d6e6ea351582f8c (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
GLIBC_PROVIDES dnl See aclocal.m4 in the top level source directory.
# Local configure fragment for sysdeps/i386.

AC_CHECK_HEADER([cpuid.h], ,
  [AC_MSG_ERROR([gcc must provide the <cpuid.h> header])],
  [/* No default includes.  */])

AC_CACHE_CHECK(if -g produces usable source locations for assembler-with-cpp,
	       libc_cv_cpp_asm_debuginfo, [dnl
cat > conftest.S <<EOF
#include "confdefs.h"

/* comment on
   two lines */
	${libc_cv_dot_text}
	${libc_cv_asm_global_directive} foo
foo:
	/* Unfortunately this test only works for a real instruction,
	   not for any of the machine-independent pseudo-ops.
	   So we just have to assume everybody has a "nop".  */
	nop
	/* comment */
	nop
	/* comment */
	nop
EOF
if AC_TRY_COMMAND([${CC-cc} $CPPFLAGS $ASFLAGS -g -c conftest.S 1>&AS_MESSAGE_LOG_FD]) && {
   ac_pattern='conftest\.S'
   AC_TRY_COMMAND([readelf --debug-dump=line conftest.o |
		   grep $ac_pattern 1>&AS_MESSAGE_LOG_FD])
  }; then
  libc_cv_cpp_asm_debuginfo=yes
else
  libc_cv_cpp_asm_debuginfo=no
fi
rm -f conftest*])AC_SUBST(libc_cv_cpp_asm_debuginfo)
if test $libc_cv_cpp_asm_debuginfo = yes; then
  AC_DEFINE(HAVE_CPP_ASM_DEBUGINFO)
fi

dnl Check if -msse4 works.
AC_CACHE_CHECK(for SSE4 support, libc_cv_cc_sse4, [dnl
if AC_TRY_COMMAND([${CC-cc} -msse4 -xc /dev/null -S -o /dev/null]); then
  libc_cv_cc_sse4=yes
else
  libc_cv_cc_sse4=no
fi])
if test $libc_cv_cc_sse4 = yes; then
  AC_DEFINE(HAVE_SSE4_SUPPORT)
fi

dnl Check if -Wa,-mtune=i686 works.
AC_CACHE_CHECK(for assembler -mtune=i686 support, libc_cv_as_i686, [dnl
if AC_TRY_COMMAND([${CC-cc} -Wa,-mtune=i686 -xc /dev/null -S -o /dev/null]); then
  libc_cv_as_i686=yes
else
  libc_cv_as_i686=no
fi])

dnl Check if -mavx works.
AC_CACHE_CHECK(for AVX support, libc_cv_cc_avx, [dnl
if AC_TRY_COMMAND([${CC-cc} -mavx -xc /dev/null -S -o /dev/null]); then
  libc_cv_cc_avx=yes
else
  libc_cv_cc_avx=no
fi])
if test $libc_cv_cc_avx = yes; then
  AC_DEFINE(HAVE_AVX_SUPPORT)
fi

dnl Check if -msse2avx works.
AC_CACHE_CHECK(for AVX encoding of SSE instructions, libc_cv_cc_sse2avx, [dnl
if AC_TRY_COMMAND([${CC-cc} -msse2avx -xc /dev/null -S -o /dev/null]); then
  libc_cv_cc_sse2avx=yes
else
  libc_cv_cc_sse2avx=no
fi])
if test $libc_cv_cc_sse2avx = yes; then
  AC_DEFINE(HAVE_SSE2AVX_SUPPORT)
fi

dnl Check if -mfma4 works.
AC_CACHE_CHECK(for FMA4 support, libc_cv_cc_fma4, [dnl
if AC_TRY_COMMAND([${CC-cc} -mfma4 -xc /dev/null -S -o /dev/null]); then
  libc_cv_cc_fma4=yes
else
  libc_cv_cc_fma4=no
fi])
if test $libc_cv_cc_fma4 = yes; then
  AC_DEFINE(HAVE_FMA4_SUPPORT)
fi

dnl Check if -mno-vzeroupper works.
AC_CACHE_CHECK(for -mno-vzeroupper support, libc_cv_cc_novzeroupper, [dnl
if AC_TRY_COMMAND([${CC-cc} -mno-vzeroupper -xc /dev/null -S -o /dev/null]); then
  libc_cv_cc_novzeroupper=yes
else
  libc_cv_cc_novzeroupper=no
fi])

# Check for support of thread-local storage handling in assembler and
# linker.
AC_CACHE_CHECK(for i386 TLS support, libc_cv_386_tls, [dnl
cat > conftest.s <<\EOF
	.section ".tdata", "awT", @progbits
	.globl foo
foo:	.long	1
	.section ".tbss", "awT", @nobits
	.globl bar
bar:	.skip	4
	.text
baz:	leal	bar@TLSLDM(%ebx), %eax
	leal	bar@DTPOFF(%eax), %edx
	subl	foo@GOTTPOFF(%edx), %eax
	subl	$bar@TPOFF, %eax
	movl	foo@GOTNTPOFF(%edx), %ecx
	movl	%gs:(%ecx), %eax
	movl	%gs:bar@NTPOFF, %eax
EOF
dnl
if AC_TRY_COMMAND(${CC-cc} -c $CFLAGS conftest.s 1>&AS_MESSAGE_LOG_FD); then
  libc_cv_386_tls=yes
else
  libc_cv_386_tls=no
fi
rm -f conftest*])
if test $libc_cv_386_tls = no; then
  AC_MSG_ERROR([the assembler must support TLS])
fi

dnl It is always possible to access static and hidden symbols in an
dnl position independent way.
AC_DEFINE(PI_STATIC_AND_HIDDEN)