diff libgcc/gen-fixed.sh @ 0:a06113de4d67

first commit
author kent <kent@cr.ie.u-ryukyu.ac.jp>
date Fri, 17 Jul 2009 14:47:48 +0900
parents
children
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/libgcc/gen-fixed.sh	Fri Jul 17 14:47:48 2009 +0900
@@ -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