fixed-obj.mk: New file to support fine-grain fixed-point functions.
* fixed-obj.mk: New file to support fine-grain fixed-point functions. * Makefile.in (fixed_point): Define. Check if fixed_point is yes to build support functions. * configure.ac: Check for fixed_point support. * configure: Regenerated. * gen-fixed.sh: New file to generate lists of fixed-point labels, funcs, modes, from, to. Co-Authored-By: Nigel Stephens <nigel@mips.com> From-SVN: r128557
This commit is contained in:
parent
154e4a0a8d
commit
8d2a9e0ee2
6 changed files with 244 additions and 1 deletions
|
@ -1,3 +1,14 @@
|
|||
2007-09-17 Chao-ying Fu <fu@mips.com>
|
||||
Nigel Stephens <nigel@mips.com>
|
||||
|
||||
* fixed-obj.mk: New file to support fine-grain fixed-point functions.
|
||||
* Makefile.in (fixed_point): Define.
|
||||
Check if fixed_point is yes to build support functions.
|
||||
* configure.ac: Check for fixed_point support.
|
||||
* configure: Regenerated.
|
||||
* gen-fixed.sh: New file to generate lists of fixed-point labels,
|
||||
funcs, modes, from, to.
|
||||
|
||||
2007-09-11 Janis Johnson <janis187@us.ibm.com
|
||||
|
||||
* Makefile.in (dfp-filenames): Add bid128_noncomp.
|
||||
|
|
|
@ -38,6 +38,7 @@ SHELL = @SHELL@
|
|||
enable_shared = @enable_shared@
|
||||
decimal_float = @decimal_float@
|
||||
enable_decimal_float = @enable_decimal_float@
|
||||
fixed_point = @fixed_point@
|
||||
|
||||
host_noncanonical = @host_noncanonical@
|
||||
|
||||
|
@ -575,6 +576,48 @@ endif
|
|||
|
||||
endif
|
||||
|
||||
# Build fixed-point support.
|
||||
ifeq ($(fixed_point),yes)
|
||||
|
||||
# Generate permutations of function name and mode
|
||||
fixed-labels := $(shell $(SHELL) $(srcdir)/gen-fixed.sh arith labels)
|
||||
fixed-funcs := $(shell $(SHELL) $(srcdir)/gen-fixed.sh arith funcs)
|
||||
fixed-modes := $(shell $(SHELL) $(srcdir)/gen-fixed.sh arith modes)
|
||||
|
||||
# Generate the rules for each arithmetic function
|
||||
iter-items := $(fixed-funcs)
|
||||
iter-labels := $(fixed-labels)
|
||||
iter-from := $(fixed-modes)
|
||||
iter-to := $(fixed-modes)
|
||||
include $(srcdir)/empty.mk $(patsubst %,$(srcdir)/fixed-obj.mk,$(iter-items))
|
||||
|
||||
# Add arithmetic functions to list of objects to be built
|
||||
libgcc-objects += $(patsubst %,%$(objext),$(fixed-funcs))
|
||||
ifeq ($(enable_shared),yes)
|
||||
libgcc-s-objects += $(patsubst %,%_s$(objext),$(fixed-funcs))
|
||||
endif
|
||||
|
||||
# Convert from or to fractional
|
||||
fixed-conv-funcs := $(shell $(SHELL) $(srcdir)/gen-fixed.sh conv funcs)
|
||||
fixed-conv-labels := $(shell $(SHELL) $(srcdir)/gen-fixed.sh conv labels)
|
||||
fixed-conv-from := $(shell $(SHELL) $(srcdir)/gen-fixed.sh conv from)
|
||||
fixed-conv-to := $(shell $(SHELL) $(srcdir)/gen-fixed.sh conv to)
|
||||
|
||||
# Generate the make rules for each conversion function
|
||||
iter-items := $(fixed-conv-funcs)
|
||||
iter-labels := $(fixed-conv-labels)
|
||||
iter-from := $(fixed-conv-from)
|
||||
iter-to := $(fixed-conv-to)
|
||||
include $(srcdir)/empty.mk $(patsubst %,$(srcdir)/fixed-obj.mk,$(iter-items))
|
||||
|
||||
# Add conversion functions to list of objects to be built
|
||||
libgcc-objects += $(patsubst %,%$(objext),$(fixed-conv-funcs))
|
||||
ifeq ($(enable_shared),yes)
|
||||
libgcc-s-objects += $(patsubst %,%_s$(objext),$(fixed-conv-funcs))
|
||||
endif
|
||||
|
||||
endif
|
||||
|
||||
# Build LIB2ADD and LIB2ADD_ST.
|
||||
ifneq ($(filter-out %.c %.S %.asm,$(LIB2ADD) $(LIB2ADD_ST)),)
|
||||
$(error Unsupported files in LIB2ADD or LIB2ADD_ST.)
|
||||
|
|
48
libgcc/configure
vendored
48
libgcc/configure
vendored
|
@ -272,7 +272,7 @@ PACKAGE_STRING='GNU C Runtime Library 1.0'
|
|||
PACKAGE_BUGREPORT=''
|
||||
|
||||
ac_unique_file="static-object.mk"
|
||||
ac_subst_vars='SHELL PATH_SEPARATOR PACKAGE_NAME PACKAGE_TARNAME PACKAGE_VERSION PACKAGE_STRING PACKAGE_BUGREPORT exec_prefix prefix program_transform_name bindir sbindir libexecdir datadir sysconfdir sharedstatedir localstatedir libdir includedir oldincludedir infodir mandir build_alias host_alias target_alias DEFS ECHO_C ECHO_N ECHO_T LIBS libgcc_topdir enable_shared slibdir INSTALL_PROGRAM INSTALL_SCRIPT INSTALL_DATA AWK build build_cpu build_vendor build_os host host_cpu host_vendor host_os host_noncanonical build_libsubdir build_subdir host_subdir target_subdir AR ac_ct_AR LIPO ac_ct_LIPO NM ac_ct_NM RANLIB ac_ct_RANLIB STRIP ac_ct_STRIP LN_S CC CFLAGS LDFLAGS CPPFLAGS ac_ct_CC EXEEXT OBJEXT CPP decimal_float enable_decimal_float vis_hide set_have_cc_tls tmake_file extra_parts asm_hidden_op LIBOBJS LTLIBOBJS'
|
||||
ac_subst_vars='SHELL PATH_SEPARATOR PACKAGE_NAME PACKAGE_TARNAME PACKAGE_VERSION PACKAGE_STRING PACKAGE_BUGREPORT exec_prefix prefix program_transform_name bindir sbindir libexecdir datadir sysconfdir sharedstatedir localstatedir libdir includedir oldincludedir infodir mandir build_alias host_alias target_alias DEFS ECHO_C ECHO_N ECHO_T LIBS libgcc_topdir enable_shared slibdir INSTALL_PROGRAM INSTALL_SCRIPT INSTALL_DATA AWK build build_cpu build_vendor build_os host host_cpu host_vendor host_os host_noncanonical build_libsubdir build_subdir host_subdir target_subdir AR ac_ct_AR LIPO ac_ct_LIPO NM ac_ct_NM RANLIB ac_ct_RANLIB STRIP ac_ct_STRIP LN_S CC CFLAGS LDFLAGS CPPFLAGS ac_ct_CC EXEEXT OBJEXT CPP decimal_float enable_decimal_float fixed_point vis_hide set_have_cc_tls tmake_file extra_parts asm_hidden_op LIBOBJS LTLIBOBJS'
|
||||
ac_subst_files=''
|
||||
|
||||
# Initialize some variables set by options.
|
||||
|
@ -3330,6 +3330,51 @@ if test x$enable_decimal_float = xyes; then
|
|||
fi
|
||||
|
||||
|
||||
# Check for fixed-point support.
|
||||
echo "$as_me:$LINENO: checking whether fixed-point is supported" >&5
|
||||
echo $ECHO_N "checking whether fixed-point is supported... $ECHO_C" >&6
|
||||
if test "${libgcc_cv_fixed_point+set}" = set; then
|
||||
echo $ECHO_N "(cached) $ECHO_C" >&6
|
||||
else
|
||||
cat >conftest.$ac_ext <<_ACEOF
|
||||
_Sat _Fract x;
|
||||
_ACEOF
|
||||
rm -f conftest.$ac_objext
|
||||
if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
|
||||
(eval $ac_compile) 2>conftest.er1
|
||||
ac_status=$?
|
||||
grep -v '^ *+' conftest.er1 >conftest.err
|
||||
rm -f conftest.er1
|
||||
cat conftest.err >&5
|
||||
echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
||||
(exit $ac_status); } &&
|
||||
{ ac_try='test -z "$ac_c_werror_flag"
|
||||
|| test ! -s conftest.err'
|
||||
{ (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
|
||||
(eval $ac_try) 2>&5
|
||||
ac_status=$?
|
||||
echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
||||
(exit $ac_status); }; } &&
|
||||
{ ac_try='test -s conftest.$ac_objext'
|
||||
{ (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
|
||||
(eval $ac_try) 2>&5
|
||||
ac_status=$?
|
||||
echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
||||
(exit $ac_status); }; }; then
|
||||
libgcc_cv_fixed_point=yes
|
||||
else
|
||||
echo "$as_me: failed program was:" >&5
|
||||
sed 's/^/| /' conftest.$ac_ext >&5
|
||||
|
||||
libgcc_cv_fixed_point=no
|
||||
fi
|
||||
rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
|
||||
fi
|
||||
echo "$as_me:$LINENO: result: $libgcc_cv_fixed_point" >&5
|
||||
echo "${ECHO_T}$libgcc_cv_fixed_point" >&6
|
||||
fixed_point=$libgcc_cv_fixed_point
|
||||
|
||||
|
||||
# Collect host-machine-specific information.
|
||||
. ${srcdir}/config.host
|
||||
|
||||
|
@ -4152,6 +4197,7 @@ s,@OBJEXT@,$OBJEXT,;t t
|
|||
s,@CPP@,$CPP,;t t
|
||||
s,@decimal_float@,$decimal_float,;t t
|
||||
s,@enable_decimal_float@,$enable_decimal_float,;t t
|
||||
s,@fixed_point@,$fixed_point,;t t
|
||||
s,@vis_hide@,$vis_hide,;t t
|
||||
s,@set_have_cc_tls@,$set_have_cc_tls,;t t
|
||||
s,@tmake_file@,$tmake_file,;t t
|
||||
|
|
|
@ -145,6 +145,13 @@ if test x$enable_decimal_float = xyes; then
|
|||
fi
|
||||
AC_SUBST(enable_decimal_float)
|
||||
|
||||
# Check for fixed-point support.
|
||||
AC_CACHE_CHECK([whether fixed-point is supported], [libgcc_cv_fixed_point],
|
||||
[AC_COMPILE_IFELSE([_Sat _Fract x;], [libgcc_cv_fixed_point=yes],
|
||||
[libgcc_cv_fixed_point=no])])
|
||||
fixed_point=$libgcc_cv_fixed_point
|
||||
AC_SUBST(fixed_point)
|
||||
|
||||
# Collect host-machine-specific information.
|
||||
. ${srcdir}/config.host
|
||||
|
||||
|
|
31
libgcc/fixed-obj.mk
Normal file
31
libgcc/fixed-obj.mk
Normal file
|
@ -0,0 +1,31 @@
|
|||
# This file is included several times in a row, once for each element of
|
||||
# $(iter-items). On each inclusion, we advance $o to the next element.
|
||||
# $(iter-labels) and $(iter-from) and $(iter-to) are also advanced.
|
||||
|
||||
o := $(firstword $(iter-items))
|
||||
iter-items := $(filter-out $o,$(iter-items))
|
||||
|
||||
$o-label := $(firstword $(iter-labels))
|
||||
iter-labels := $(wordlist 2,$(words $(iter-labels)),$(iter-labels))
|
||||
|
||||
$o-from := $(firstword $(iter-from))
|
||||
iter-from := $(wordlist 2,$(words $(iter-from)),$(iter-from))
|
||||
|
||||
$o-to := $(firstword $(iter-to))
|
||||
iter-to := $(wordlist 2,$(words $(iter-to)),$(iter-to))
|
||||
|
||||
ifeq ($($o-from),$($o-to))
|
||||
$o-opt := -D$($o-from)_MODE
|
||||
else
|
||||
$o-opt := -DFROM_$($o-from) -DTO_$($o-to)
|
||||
endif
|
||||
|
||||
#$(info $o$(objext): -DL$($o-label) $($o-opt))
|
||||
|
||||
$o$(objext): %$(objext): $(gcc_srcdir)/config/fixed-bit.c
|
||||
$(gcc_compile) -DL$($*-label) $($*-opt) -c $(gcc_srcdir)/config/fixed-bit.c $(vis_hide)
|
||||
|
||||
ifeq ($(enable_shared),yes)
|
||||
$(o)_s$(objext): %_s$(objext): $(gcc_srcdir)/config/fixed-bit.c
|
||||
$(gcc_s_compile) -DL$($*-label) $($*-opt) -c $(gcc_srcdir)/config/fixed-bit.c
|
||||
endif
|
105
libgcc/gen-fixed.sh
Normal file
105
libgcc/gen-fixed.sh
Normal file
|
@ -0,0 +1,105 @@
|
|||
#!/bin/sh
|
||||
|
||||
# Worker script for libgcc/Makefile.in
|
||||
# Generate lists of fixed-point labels, funcs, modes, from, to.
|
||||
# Usage:
|
||||
# gen-fixed.sh arith labels
|
||||
# gen-fixed.sh arith funcs
|
||||
# gen-fixed.sh arith modes
|
||||
# gen-fixed.sh conv labels
|
||||
# gen-fixed.sh conv funcs
|
||||
# gen-fixed.sh conv from
|
||||
# gen-fixed.sh conv to
|
||||
|
||||
fixed_sfract_modes="QQ HQ SQ DQ TQ HA SA DA TA"
|
||||
fixed_ufract_modes="UQQ UHQ USQ UDQ UTQ UHA USA UDA UTA"
|
||||
fixed_fract_modes="$fixed_sfract_modes $fixed_ufract_modes"
|
||||
|
||||
fixed_signed_modes="QI HI SI DI TI SF DF"
|
||||
fixed_unsigned_modes="UQI UHI USI UDI UTI"
|
||||
|
||||
fixed_func_names="_add _sub _neg _mul _mulhelper _divhelper _ashl _ashlhelper _cmp _saturate1 _saturate2"
|
||||
fixed_sfunc_names="_ssadd _sssub _ssneg _ssmul _ssdiv _div _ssashl _ashr"
|
||||
fixed_ufunc_names="_usadd _ussub _usneg _usmul _usdiv _udiv _usashl _lshr"
|
||||
|
||||
# emit the function information
|
||||
# $1 = output type selector
|
||||
# $2 = base function name
|
||||
# $3 = from mode
|
||||
# $4 = to mode
|
||||
emit ()
|
||||
{
|
||||
if [ "$3" != "$4" ]; then
|
||||
case "$1" in
|
||||
labels)
|
||||
echo $2 ;;
|
||||
from | modes)
|
||||
echo $3 ;;
|
||||
to)
|
||||
echo $4 ;;
|
||||
funcs)
|
||||
echo $2$3$4 ;;
|
||||
esac
|
||||
fi
|
||||
}
|
||||
|
||||
case "$1" in
|
||||
arith)
|
||||
for n in $fixed_func_names; do
|
||||
for m in $fixed_fract_modes; do
|
||||
emit $2 $n $m
|
||||
done
|
||||
done
|
||||
|
||||
for n in $fixed_sfunc_names; do
|
||||
for m in $fixed_sfract_modes; do
|
||||
emit $2 $n $m
|
||||
done
|
||||
done
|
||||
|
||||
for n in $fixed_ufunc_names; do
|
||||
for m in $fixed_ufract_modes; do
|
||||
emit $2 $n $m
|
||||
done
|
||||
done
|
||||
;;
|
||||
|
||||
conv)
|
||||
for f in $fixed_fract_modes; do
|
||||
for t in $fixed_fract_modes $fixed_signed_modes; do
|
||||
emit $2 _fract $f $t
|
||||
done
|
||||
done
|
||||
|
||||
for f in $fixed_signed_modes; do
|
||||
for t in $fixed_fract_modes; do
|
||||
emit $2 _fract $f $t
|
||||
done
|
||||
done
|
||||
|
||||
for f in $fixed_fract_modes $fixed_signed_modes; do
|
||||
for t in $fixed_fract_modes; do
|
||||
emit $2 _satfract $f $t
|
||||
done
|
||||
done
|
||||
|
||||
for f in $fixed_fract_modes; do
|
||||
for t in $fixed_unsigned_modes; do
|
||||
emit $2 _fractuns $f $t
|
||||
done
|
||||
done
|
||||
|
||||
for f in $fixed_unsigned_modes; do
|
||||
for t in $fixed_fract_modes; do
|
||||
emit $2 _fractuns $f $t
|
||||
done
|
||||
done
|
||||
|
||||
for f in $fixed_unsigned_modes; do
|
||||
for t in $fixed_fract_modes; do
|
||||
emit $2 _satfractuns $f $t
|
||||
done
|
||||
done
|
||||
;;
|
||||
|
||||
esac
|
Loading…
Add table
Reference in a new issue