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