aboutsummaryrefslogtreecommitdiffstats
path: root/gcc-4.9/libgcc/gen-fixed.sh
diff options
context:
space:
mode:
authorBen Cheng <bccheng@google.com>2014-03-25 22:37:19 -0700
committerBen Cheng <bccheng@google.com>2014-03-25 22:37:19 -0700
commit1bc5aee63eb72b341f506ad058502cd0361f0d10 (patch)
treec607e8252f3405424ff15bc2d00aa38dadbb2518 /gcc-4.9/libgcc/gen-fixed.sh
parent283a0bf58fcf333c58a2a92c3ebbc41fb9eb1fdb (diff)
downloadtoolchain_gcc-1bc5aee63eb72b341f506ad058502cd0361f0d10.tar.gz
toolchain_gcc-1bc5aee63eb72b341f506ad058502cd0361f0d10.tar.bz2
toolchain_gcc-1bc5aee63eb72b341f506ad058502cd0361f0d10.zip
Initial checkin of GCC 4.9.0 from trunk (r208799).
Change-Id: I48a3c08bb98542aa215912a75f03c0890e497dba
Diffstat (limited to 'gcc-4.9/libgcc/gen-fixed.sh')
-rw-r--r--gcc-4.9/libgcc/gen-fixed.sh105
1 files changed, 105 insertions, 0 deletions
diff --git a/gcc-4.9/libgcc/gen-fixed.sh b/gcc-4.9/libgcc/gen-fixed.sh
new file mode 100644
index 000000000..774996110
--- /dev/null
+++ b/gcc-4.9/libgcc/gen-fixed.sh
@@ -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