#!/bin/sh
# Construct makefile for libgcc.
-# Copyright (C) 2000, 2002, 2003, 2004, 2005 Free Software Foundation, Inc.
+# Copyright (C) 2000, 2002, 2003, 2004, 2005, 2006
+# Free Software Foundation, Inc.
#
# This file is part of GCC.
# DPBIT_FUNCS
# TPBIT
# TPBIT_FUNCS
+# D32PBIT
+# D32PBIT_FUNCS
+# D64PBIT
+# D64PBIT_FUNCS
+# D128PBIT
+# D128PBIT_FUNCS
# LIBGCC
# MULTILIBS
# EXTRA_MULTILIB_PARTS
_ffssi2 _ffsdi2 _clz _clzsi2 _clzdi2 _ctzsi2 _ctzdi2 _popcount_tab
_popcountsi2 _popcountdi2 _paritysi2 _paritydi2 _powisf2 _powidf2
_powixf2 _powitf2 _mulsc3 _muldc3 _mulxc3 _multc3 _divsc3 _divdc3
- _divxc3 _divtc3'
+ _divxc3 _divtc3 _floatundidf _floatundisf _floatundixf _floatunditf'
# Disable SHLIB_LINK if shared libgcc not enabled.
if [ "@enable_shared@" = "no" ]; then
# Dependencies for fp-bit.c
fpbit_c_dep='stmp-dirs config.status tsystem.h'
+# Dependencies for decnumber and friends. This is an overzealous set,
+# but at least we can be sure to recompile if anything gets modified.
+decnumber_dep='stmp-dirs $(srcdir)/../libdecnumber/decContext.h $(srcdir)/../libdecnumber/decNumber.h
+ $(srcdir)/../libdecnumber/decNumberLocal.h $(srcdir)/../libdecnumber/decimal32.h $(srcdir)/../libdecnumber/decimal64.h
+ $(srcdir)/../libdecnumber/decimal128.h $(srcdir)/../libdecnumber/decDPD.h $(srcdir)/../libdecnumber/decUtility.h'
+
# Flag whether we need eh_dummy.c
need_eh_dummy=
# Build software floating point functions.
#
- if [ "$FPBIT" ]; then
- for name in $FPBIT_FUNCS; do
- if [ "$libgcc_s_so" ]; then
- out="libgcc/${dir}/${name}${objext}"
- outS="libgcc/${dir}/${name}_s${objext}"
-
- echo $outS: $FPBIT $fpbit_c_dep
- echo " $gcc_s_compile" -DFINE_GRAINED_LIBRARIES $flags -DL$name \
- -c $FPBIT -o $outS
-
- echo $out: $FPBIT $fpbit_c_dep
- echo " $gcc_compile" -DFINE_GRAINED_LIBRARIES $flags -DL$name \
- '$(vis_hide)' -c $FPBIT -o $out
-
- echo $libgcc_a: $out
- echo $libgcc_s_so: $outS
- if [ "$SHLIB_MKMAP" ]; then
- echo libgcc/${dir}/libgcc.map: $outS
- fi
- else
- out="libgcc/${dir}/${name}${objext}"
- echo $out: $FPBIT $fpbit_c_dep
- echo " $gcc_compile" -DFINE_GRAINED_LIBRARIES $flags -DL$name \
- -c $FPBIT -o $out
-
- echo $libgcc_a: $out
+ for fpbit_var in FPBIT DPBIT TPBIT ; do
+ fpfuncs_var="${fpbit_var}_FUNCS"
+ eval fpbit=\$$fpbit_var
+ eval fpfuncs=\$$fpfuncs_var
+
+ if [ "$fpbit" ] ; then
+ for name in $fpfuncs; do
+ case "$name" in
+ # _sf_to_tf and _df_to_tf require tp-bit.c
+ # being compiled in.
+ _[sd]f_to_tf) [ -z "$TPBIT" ] && continue;;
+ esac
+ if [ "$libgcc_s_so" ]; then
+ out="libgcc/${dir}/${name}${objext}"
+ outS="libgcc/${dir}/${name}_s${objext}"
+
+ echo $outS: $fpbit $fpbit_c_dep
+ echo " $gcc_s_compile" -DFINE_GRAINED_LIBRARIES $flags -DL$name \
+ -c $fpbit -o $outS
+
+ echo $out: $fpbit $fpbit_c_dep
+ echo " $gcc_compile" -DFINE_GRAINED_LIBRARIES $flags -DL$name \
+ '$(vis_hide)' -c $fpbit -o $out
+
+ echo $libgcc_a: $out
+ echo $libgcc_s_so: $outS
+ if [ "$SHLIB_MKMAP" ]; then
+ echo libgcc/${dir}/libgcc.map: $outS
+ fi
+ else
+ out="libgcc/${dir}/${name}${objext}"
+ echo $out: $fpbit $fpbit_c_dep
+ echo " $gcc_compile" -DFINE_GRAINED_LIBRARIES $flags -DL$name \
+ -c $fpbit -o $out
+
+ echo $libgcc_a: $out
+ fi
+ done
fi
- done
- fi
-
- if [ "$DPBIT" ]; then
- for name in $DPBIT_FUNCS; do
- if [ "$libgcc_s_so" ]; then
- out="libgcc/${dir}/${name}${objext}"
- outS="libgcc/${dir}/${name}_s${objext}"
-
- echo $outS: $DPBIT $fpbit_c_dep
- echo " $gcc_s_compile" -DFINE_GRAINED_LIBRARIES $flags -DL$name \
- -c $DPBIT -o $outS
+ done
- echo $out: $DPBIT $fpbit_c_dep
- echo " $gcc_compile" -DFINE_GRAINED_LIBRARIES $flags -DL$name \
- '$(vis_hide)' -c $DPBIT -o $out
+ if [ "@enable_decimal_float@" = "yes" -a -z "$libgcc_so" ]; then
+ # Bring in the DFP support code if D32PBIT, D64PBIT or D128PBIT are set.
+ if [ -n "$D32PBIT" -o -n "$D64PBIT" -o -n "$D128PBIT" ] ; then
+ dec_filenames="decContext decNumber decRound decLibrary decUtility"
+ fi
- echo $libgcc_a: $out
- echo $libgcc_s_so: $outS
- if [ "$SHLIB_MKMAP" ]; then
- echo libgcc/${dir}/libgcc.map: $outS
- fi
- else
- out="libgcc/${dir}/${name}${objext}"
- echo $out: $DPBIT $fpbit_c_dep
- echo " $gcc_compile" -DFINE_GRAINED_LIBRARIES $flags -DL$name \
- -c $DPBIT -o $out
+ # Only bring in decimal*.c files for types we support.
+ if [ -n "$D32PBIT" ] ; then
+ dec_filenames="$dec_filenames decimal32"
+ fi
+ if [ -n "$D64PBIT" ] ; then
+ dec_filenames="$dec_filenames decimal64"
+ fi
+ if [ -n "$D128PBIT" ] ; then
+ dec_filenames="$dec_filenames decimal128"
+ fi
- echo $libgcc_a: $out
- fi
+ for name in $dec_filenames ; do
+ out="libgcc/${dir}/${name}${objext}"
+ echo $out: "\$(srcdir)/../libdecnumber/${name}.c" $decnumber_dep
+ echo " $gcc_compile" $flags -c "\$(srcdir)/../libdecnumber/${name}.c" -o $out
+ echo $libgcc_a: $out
done
- fi
-
- if [ "$TPBIT" ]; then
- for name in $TPBIT_FUNCS; do
- if [ "$libgcc_s_so" ]; then
- out="libgcc/${dir}/${name}${objext}"
- outS="libgcc/${dir}/${name}_s${objext}"
-
- echo $outS: $TPBIT $fpbit_c_dep
- echo " $gcc_s_compile" -DFINE_GRAINED_LIBRARIES $flags -DL$name \
- -c $TPBIT -o $outS
-
- echo $out: $TPBIT $fpbit_c_dep
- echo " $gcc_compile" -DFINE_GRAINED_LIBRARIES $flags -DL$name \
- '$(vis_hide)' -c $TPBIT -o $out
-
- echo $libgcc_a: $out
- echo $libgcc_s_so: $outS
- if [ "$SHLIB_MKMAP" ]; then
- echo libgcc/${dir}/libgcc.map: $outS
- fi
- else
- out="libgcc/${dir}/${name}${objext}"
- echo $out: $TPBIT $fpbit_c_dep
- echo " $gcc_compile" -DFINE_GRAINED_LIBRARIES $flags -DL$name \
- -c $TPBIT -o $out
- echo $libgcc_a: $out
+ # For individual functions, loop over each variable by name.
+ for dpbit_var in D32PBIT D64PBIT D128PBIT ; do
+ dpfuncs_var="${dpbit_var}_FUNCS"
+ eval dpbit=\$$dpbit_var
+ eval dpfuncs=\$$dpfuncs_var
+
+ if [ "$dpbit" ]; then
+ for name in $dpfuncs; do
+ out="libgcc/${dir}/${name}${objext}"
+ echo $out: $dpbit $fpbit_c_dep
+ echo " $gcc_compile" -DFINE_GRAINED_LIBRARIES $flags -DL$name \
+ -c $dpbit -o $out
+
+ echo $libgcc_a: $out
+ done
fi
done
fi
if [ "$need_eh_dummy" ]; then
echo "eh_dummy.c:"
- echo " echo 'struct eh_dummy;' > \$@"
+ echo " echo 'int __libgcc_eh_dummy;' > \$@"
fi
echo ""