Skip to content

Commit b4eaa3d

Browse files
committed
get-gcc-builtins.sh: extract ia32 declarations automatically
Also updates existing ia32 declarations if mismatches are detected.
1 parent 98e5c23 commit b4eaa3d

File tree

1 file changed

+92
-4
lines changed

1 file changed

+92
-4
lines changed

src/ansi-c/get-gcc-builtins.sh

Lines changed: 92 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -10,10 +10,11 @@ fi
1010
builtin_defs=" \
1111
builtin-types.def builtins.def sync-builtins.def \
1212
omp-builtins.def gtm-builtins.def cilk-builtins.def cilkplus.def \
13-
sanitizer.def chkp-builtins.def hsa-builtins.def brig-builtins.def"
13+
sanitizer.def chkp-builtins.def hsa-builtins.def brig-builtins.def \
14+
config/i386/i386-builtin.def config/i386/i386-builtin-types.def"
1415

1516
for f in $builtin_defs ; do
16-
[ ! -s $f ] || continue
17+
[ ! -s `basename $f` ] || continue
1718
echo Downloading http://gcc.gnu.org/svn/gcc/trunk/gcc/$f
1819
svn export http://gcc.gnu.org/svn/gcc/trunk/gcc/$f > /dev/null
1920
done
@@ -25,6 +26,31 @@ cat > gcc-builtins.h <<EOF
2526
#include <stdio.h>
2627
#include <wctype.h>
2728
29+
typedef char __gcc_v8qi __attribute__ ((__vector_size__ (8)));
30+
typedef char __gcc_v16qi __attribute__ ((__vector_size__ (16)));
31+
typedef char __gcc_v32qi __attribute__ ((__vector_size__ (32)));
32+
typedef char __gcc_v64qi __attribute__ ((__vector_size__ (64)));
33+
typedef int __gcc_v2si __attribute__ ((__vector_size__ (8)));
34+
typedef int __gcc_v4si __attribute__ ((__vector_size__ (16)));
35+
typedef int __gcc_v8si __attribute__ ((__vector_size__ (32)));
36+
typedef int __gcc_v16si __attribute__ ((__vector_size__ (64)));
37+
typedef short __gcc_v4hi __attribute__ ((__vector_size__ (8)));
38+
typedef short __gcc_v8hi __attribute__ ((__vector_size__ (16)));
39+
typedef short __gcc_v16hi __attribute__ ((__vector_size__ (32)));
40+
typedef short __gcc_v32hi __attribute__ ((__vector_size__ (64)));
41+
typedef float __gcc_v2sf __attribute__ ((__vector_size__ (8)));
42+
typedef float __gcc_v4sf __attribute__ ((__vector_size__ (16)));
43+
typedef float __gcc_v8sf __attribute__ ((__vector_size__ (32)));
44+
typedef float __gcc_v16sf __attribute__ ((__vector_size__ (64)));
45+
typedef double __gcc_v2df __attribute__ ((__vector_size__ (16)));
46+
typedef double __gcc_v4df __attribute__ ((__vector_size__ (32)));
47+
typedef double __gcc_v8df __attribute__ ((__vector_size__ (64)));
48+
typedef long long __gcc_v1di __attribute__ ((__vector_size__ (8)));
49+
typedef long long __gcc_v2di __attribute__ ((__vector_size__ (16)));
50+
typedef long long __gcc_v4di __attribute__ ((__vector_size__ (32)));
51+
typedef long long __gcc_v8di __attribute__ ((__vector_size__ (64)));
52+
typedef unsigned long long __gcc_di;
53+
2854
EOF
2955

3056
cat > builtins.h <<EOF
@@ -63,6 +89,15 @@ cat > builtins.h <<EOF
6389
#define uint64_type_node uint64_t
6490
#define pid_type_node pid_t
6591
#define const_tm_ptr_type_node const struct tm*
92+
#define char_type_node char
93+
#define intSI_type_node int
94+
#define intHI_type_node short
95+
#define unsigned_intSI_type_node unsigned
96+
#define unsigned_intHI_type_node unsigned short
97+
#define unsigned_intQI_type_node unsigned char
98+
#define short_unsigned_type_node unsigned short
99+
#define short_integer_type_node short
100+
#define unsigned_char_type_node unsigned char
66101
67102
// some newer versions of GCC apparently support __floatXYZ
68103
#define dfloat32_type_node __float32
@@ -121,19 +156,53 @@ NEXTDEF ENUM(name) RETURN name(ARG1, ARG2, ARG3, ARG4, ARG5, ARG6, ARG7, ...)
121156
#define DEF_POINTER_TYPE(ENUM, TYPE) \
122157
NEXTDEF ENUM TYPE*
123158
159+
#define DEF_POINTER_TYPE_CONST(ENUM, TYPE, C) \
160+
NEXTDEF ENUM const TYPE*
161+
124162
#include "builtin-types.def"
125163
126164
NEXTDEF DEF_BUILTIN(ENUM, NAME, CLASS, TYPE, LIBTYPE, BOTH_P, \
127165
FALLBACK_P, NONANSI_P, ATTRS, IMPLICIT, COND) \
128166
TYPE(MANGLE(NAME));
167+
168+
#include "i386-builtin-types-expanded.def"
169+
170+
NEXTDEF BDESC(mask, icode, name, code, comparison, flag) \
171+
flag(MANGLEi386(name));
172+
NEXTDEF BDESC_FIRST(kind, KIND, mask, icode, name, code, comparison, flag) \
173+
flag(MANGLEi386(name));
129174
EOF
130175

131-
gcc -E builtins.h | sed 's/^NEXTDEF/#define/' | cat - builtins.def | \
176+
grep '^DEF_VECTOR_TYPE' i386-builtin-types.def | \
177+
awk -F '[,() \t]' '{ print "#define " $3 " __gcc_" tolower($3) }' \
178+
> i386-builtin-types-expanded.def
179+
180+
grep -v '^DEF_FUNCTION_TYPE[[:space:]]' i386-builtin-types.def | \
181+
grep '^DEF_P' | \
182+
sed '/^DEF_POINTER_TYPE[^,]*, [^,]*, [^,]*$/ s/_TYPE/_TYPE_CONST/' \
183+
>> i386-builtin-types-expanded.def
184+
185+
cat i386-builtin-types.def | \
186+
sed '/^DEF_FUNCTION_TYPE[[:space:]]/! s/.*//' | \
187+
sed 's/^DEF_FUNCTION_TYPE[[:space:]]*(\([^,]*\))/\1_FTYPE_VOID/' | \
188+
sed 's/^DEF_FUNCTION_TYPE[[:space:]]*(\([^,]*\), \(.*\))/\1_FTYPE_\2/' | \
189+
sed 's/, /_/g' > i386-type-names.def
190+
cat i386-builtin-types.def | tr -c -d ',\n' | awk '{ print length }' | \
191+
paste - i386-type-names.def i386-builtin-types.def | grep -v '#' | \
192+
sed 's/^\([0-9]\)[[:space:]]*\([^[:space:]]*\)[[:space:]]*DEF_FUNCTION_TYPE[[:space:]]*(/DEF_FUNCTION_TYPE_\1(\2, /' | \
193+
grep ^DEF_FUNCTION_TYPE >> i386-builtin-types-expanded.def
194+
195+
gcc -E builtins.h | sed 's/^NEXTDEF/#define/' | \
196+
cat - builtins.def i386-builtin.def | \
132197
gcc -E -P - | \
133198
sed 's/MANGLE("__builtin_" "\(.*\)")/__builtin_\1/' | \
199+
sed 's/MANGLEi386("__builtin_\(.*\)")/__builtin_\1/' | \
200+
sed 's/^(int) //' | \
134201
sed '/^;$/d' >> gcc-builtins.h
135202

136-
rm $builtin_defs builtins.h
203+
for f in $builtin_defs builtins.h i386-builtin-types-expanded.def i386-type-names.def ; do
204+
rm `basename $f`
205+
done
137206

138207
sed_is_gnu_sed=0
139208
if sed --version >/dev/null 2>&1 ; then
@@ -158,6 +227,12 @@ remove_line lang_hooks.types.type_for_mode
158227
remove_line __float
159228
remove_line pointer_bounds_type_node
160229
remove_line BT_LAST
230+
remove_line BDESC_END
231+
remove_line error_mark_node
232+
remove_line '^0('
233+
remove_line 'CC.mode('
234+
remove_line FTYPE
235+
remove_line MULTI_ARG
161236

162237
ifs=$IFS
163238
IFS='
@@ -176,6 +251,19 @@ while read line ; do
176251
continue
177252
fi
178253

254+
bi=`echo "$line" | cut -f1 -d'(' | sed 's/.* //'`
255+
256+
if [[ $bi =~ __builtin_ia32 ]] ; then
257+
if grep -wq $bi gcc_builtin_headers_ia32*.h ; then
258+
if [ $sed_is_gnu_sed -eq 1 ] ; then
259+
sed -i "/[^/].*$bi(/ s/.*/$line/" gcc_builtin_headers_ia32*.h
260+
else
261+
sed -i '' "/[^/].*$bi(/ s/.*/$line/" gcc_builtin_headers_ia32*.h
262+
fi
263+
continue
264+
fi
265+
fi
266+
179267
echo "$line" >> _gcc-builtins.h
180268
done < gcc-builtins.h
181269
mv _gcc-builtins.h gcc-builtins.h

0 commit comments

Comments
 (0)