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
14fixed_sfract_modes="QQ HQ SQ DQ TQ HA SA DA TA"
15fixed_ufract_modes="UQQ UHQ USQ UDQ UTQ UHA USA UDA UTA"
16fixed_fract_modes="$fixed_sfract_modes $fixed_ufract_modes"
17
18fixed_signed_modes="QI HI SI DI TI SF DF"
19fixed_unsigned_modes="UQI UHI USI UDI UTI"
20
21fixed_func_names="_add _sub _neg _mul _mulhelper _divhelper _ashl _ashlhelper _cmp _saturate1 _saturate2"
22fixed_sfunc_names="_ssadd _sssub _ssneg _ssmul _ssdiv _div _ssashl _ashr"
23fixed_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
30emit ()
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
46case "$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
105esac
106