Home | History | Annotate | Line # | Download | only in libgcc
gen-fixed.sh revision 1.1.1.1
      1 #!/bin/sh
      2 
      3 # Worker script for libgcc/Makefile.in
      4 # Generate lists of fixed-point labels, funcs, modes, from, to.
      5 # Usage:
      6 #    gen-fixed.sh arith labels
      7 #    gen-fixed.sh arith funcs
      8 #    gen-fixed.sh arith modes
      9 #    gen-fixed.sh conv labels
     10 #    gen-fixed.sh conv funcs
     11 #    gen-fixed.sh conv from
     12 #    gen-fixed.sh conv to
     13 
     14 fixed_sfract_modes="QQ HQ SQ DQ TQ HA SA DA TA"
     15 fixed_ufract_modes="UQQ UHQ USQ UDQ UTQ UHA USA UDA UTA"
     16 fixed_fract_modes="$fixed_sfract_modes $fixed_ufract_modes"
     17 
     18 fixed_signed_modes="QI HI SI DI TI SF DF"
     19 fixed_unsigned_modes="UQI UHI USI UDI UTI"
     20 
     21 fixed_func_names="_add _sub _neg _mul _mulhelper _divhelper _ashl _ashlhelper _cmp _saturate1 _saturate2"
     22 fixed_sfunc_names="_ssadd _sssub _ssneg _ssmul _ssdiv _div _ssashl _ashr"
     23 fixed_ufunc_names="_usadd _ussub _usneg _usmul _usdiv _udiv _usashl _lshr"
     24 
     25 # emit the function information
     26 # $1 = output type selector
     27 # $2 = base function name
     28 # $3 = from mode
     29 # $4 = to mode
     30 emit ()
     31 {
     32     if [ "$3" != "$4" ]; then
     33 	case "$1" in
     34 	  labels)
     35             echo $2 ;;
     36 	  from | modes)
     37 	    echo $3 ;;
     38 	  to)
     39 	    echo $4 ;;
     40 	  funcs)
     41 	    echo $2$3$4 ;;
     42 	esac
     43     fi
     44 }
     45 
     46 case "$1" in
     47   arith)
     48     for n in $fixed_func_names; do
     49 	for m in $fixed_fract_modes; do
     50 	    emit $2 $n $m
     51 	done
     52     done
     53 
     54     for n in $fixed_sfunc_names; do
     55 	for m in $fixed_sfract_modes; do
     56 	    emit $2 $n $m
     57 	done
     58     done
     59 
     60     for n in $fixed_ufunc_names; do
     61 	for m in $fixed_ufract_modes; do
     62 	    emit $2 $n $m
     63 	done
     64     done
     65     ;;
     66 
     67   conv)
     68     for f in $fixed_fract_modes; do
     69 	for t in $fixed_fract_modes $fixed_signed_modes; do
     70 	    emit $2 _fract $f $t
     71 	done
     72     done
     73 
     74     for f in $fixed_signed_modes; do
     75 	for t in $fixed_fract_modes; do
     76 	    emit $2 _fract $f $t
     77 	done
     78     done
     79 
     80     for f in $fixed_fract_modes $fixed_signed_modes; do
     81 	for t in $fixed_fract_modes; do
     82 	    emit $2 _satfract $f $t
     83 	done
     84     done
     85 
     86     for f in $fixed_fract_modes; do
     87 	for t in $fixed_unsigned_modes; do
     88 	    emit $2 _fractuns $f $t
     89 	done
     90     done
     91 
     92     for f in $fixed_unsigned_modes; do
     93 	for t in $fixed_fract_modes; do
     94 	    emit $2 _fractuns $f $t
     95 	done
     96     done
     97 
     98     for f in $fixed_unsigned_modes; do
     99 	for t in $fixed_fract_modes; do
    100 	    emit $2 _satfractuns $f $t
    101 	done
    102     done
    103     ;;
    104 
    105 esac
    106