1*b30d1939SAndy Fiddaman: generate ast_sa.h
2*b30d1939SAndy Fiddamancase $# in
3*b30d1939SAndy Fiddaman0)	set cc ;;
4*b30d1939SAndy Fiddamanesac
5*b30d1939SAndy Fiddamancat > _ast_.c <<'!'
6*b30d1939SAndy Fiddaman	#define _BYTESEX_H
7*b30d1939SAndy Fiddaman
8*b30d1939SAndy Fiddaman	#include <stdio.h>
9*b30d1939SAndy Fiddaman	#include <sys/types.h>
10*b30d1939SAndy Fiddaman
11*b30d1939SAndy Fiddaman	#if N == 0
12*b30d1939SAndy Fiddaman	#define _ast_int8_t	long
13*b30d1939SAndy Fiddaman	#define _ast_int8_str	"long"
14*b30d1939SAndy Fiddaman	#endif
15*b30d1939SAndy Fiddaman	#if N == 1
16*b30d1939SAndy Fiddaman	#define _ast_int8_t	long long
17*b30d1939SAndy Fiddaman	#define _ast_int8_str	"long long"
18*b30d1939SAndy Fiddaman	#endif
19*b30d1939SAndy Fiddaman	#if N == 2
20*b30d1939SAndy Fiddaman	#define _ast_int8_t	__int64_t
21*b30d1939SAndy Fiddaman	#define _ast_int8_str	"__int64_t"
22*b30d1939SAndy Fiddaman	#endif
23*b30d1939SAndy Fiddaman	#if N == 3
24*b30d1939SAndy Fiddaman	#define _ast_int8_t	_int64_t
25*b30d1939SAndy Fiddaman	#define _ast_int8_str	"_int64_t"
26*b30d1939SAndy Fiddaman	#endif
27*b30d1939SAndy Fiddaman	#if N == 4
28*b30d1939SAndy Fiddaman	#define _ast_int8_t	int64_t
29*b30d1939SAndy Fiddaman	#define _ast_int8_str	"int64_t"
30*b30d1939SAndy Fiddaman	#endif
31*b30d1939SAndy Fiddaman	#if N == 5
32*b30d1939SAndy Fiddaman	#define _ast_int8_t	__int64
33*b30d1939SAndy Fiddaman	#define _ast_int8_str	"__int64"
34*b30d1939SAndy Fiddaman	#endif
35*b30d1939SAndy Fiddaman	#if N == 6
36*b30d1939SAndy Fiddaman	#define _ast_int8_t	_int64
37*b30d1939SAndy Fiddaman	#define _ast_int8_str	"_int64"
38*b30d1939SAndy Fiddaman	#endif
39*b30d1939SAndy Fiddaman	#if N == 7
40*b30d1939SAndy Fiddaman	#define _ast_int8_t	int64
41*b30d1939SAndy Fiddaman	#define _ast_int8_str	"int64"
42*b30d1939SAndy Fiddaman	#endif
43*b30d1939SAndy Fiddaman
44*b30d1939SAndy Fiddaman	#define elementsof(x)	(sizeof(x)/sizeof(x[0]))
45*b30d1939SAndy Fiddaman
46*b30d1939SAndy Fiddaman	static char		i_char = 1;
47*b30d1939SAndy Fiddaman	static short		i_short = 1;
48*b30d1939SAndy Fiddaman	static int		i_int = 1;
49*b30d1939SAndy Fiddaman	static long		i_long = 1;
50*b30d1939SAndy Fiddaman	#ifdef _ast_int8_t
51*b30d1939SAndy Fiddaman	static _ast_int8_t	i_long_long = 1;
52*b30d1939SAndy Fiddaman	#endif
53*b30d1939SAndy Fiddaman
54*b30d1939SAndy Fiddaman	static struct
55*b30d1939SAndy Fiddaman	{
56*b30d1939SAndy Fiddaman		char*	name;
57*b30d1939SAndy Fiddaman		int	size;
58*b30d1939SAndy Fiddaman		char*	swap;
59*b30d1939SAndy Fiddaman	} int_type[] =
60*b30d1939SAndy Fiddaman	{
61*b30d1939SAndy Fiddaman		"char",		sizeof(char),		(char*)&i_char,
62*b30d1939SAndy Fiddaman		"short",	sizeof(short),		(char*)&i_short,
63*b30d1939SAndy Fiddaman		"int",		sizeof(int),		(char*)&i_int,
64*b30d1939SAndy Fiddaman		"long",		sizeof(long),		(char*)&i_long,
65*b30d1939SAndy Fiddaman	#ifdef _ast_int8_t
66*b30d1939SAndy Fiddaman		_ast_int8_str,	sizeof(_ast_int8_t),	(char*)&i_long_long,
67*b30d1939SAndy Fiddaman	#endif
68*b30d1939SAndy Fiddaman	};
69*b30d1939SAndy Fiddaman
70*b30d1939SAndy Fiddaman	static struct
71*b30d1939SAndy Fiddaman	{
72*b30d1939SAndy Fiddaman		char*	name;
73*b30d1939SAndy Fiddaman		int	size;
74*b30d1939SAndy Fiddaman	} flt_type[] =
75*b30d1939SAndy Fiddaman	{
76*b30d1939SAndy Fiddaman		"float",	sizeof(float),
77*b30d1939SAndy Fiddaman		"double",	sizeof(double),
78*b30d1939SAndy Fiddaman	#ifdef _typ_long_double
79*b30d1939SAndy Fiddaman		"long double",	sizeof(long double),
80*b30d1939SAndy Fiddaman	#endif
81*b30d1939SAndy Fiddaman	};
82*b30d1939SAndy Fiddaman
83*b30d1939SAndy Fiddaman	static int	int_size[] = { 1, 2, 4, 8 };
84*b30d1939SAndy Fiddaman
85*b30d1939SAndy Fiddaman	main()
86*b30d1939SAndy Fiddaman	{
87*b30d1939SAndy Fiddaman		register int	t;
88*b30d1939SAndy Fiddaman		register int	s;
89*b30d1939SAndy Fiddaman		register int	m = 1;
90*b30d1939SAndy Fiddaman		register int	b = 1;
91*b30d1939SAndy Fiddaman		register int	w = 0;
92*b30d1939SAndy Fiddaman
93*b30d1939SAndy Fiddaman	#ifdef _ast_int8_t
94*b30d1939SAndy Fiddaman		if (int_type[elementsof(int_type)-1].size <= 4)
95*b30d1939SAndy Fiddaman			return 1;
96*b30d1939SAndy Fiddaman	#endif
97*b30d1939SAndy Fiddaman		for (s = 0; s < elementsof(int_size); s++)
98*b30d1939SAndy Fiddaman		{
99*b30d1939SAndy Fiddaman			for (t = 0; t < elementsof(int_type) && int_type[t].size < int_size[s]; t++);
100*b30d1939SAndy Fiddaman			if (t < elementsof(int_type))
101*b30d1939SAndy Fiddaman			{
102*b30d1939SAndy Fiddaman				m = int_size[s];
103*b30d1939SAndy Fiddaman				printf("#define _ast_int%d_t		%s\n", m, int_type[t].name);
104*b30d1939SAndy Fiddaman				if (m > 1)
105*b30d1939SAndy Fiddaman				{
106*b30d1939SAndy Fiddaman					if (*int_type[t].swap)
107*b30d1939SAndy Fiddaman						w |= b;
108*b30d1939SAndy Fiddaman					b <<= 1;
109*b30d1939SAndy Fiddaman				}
110*b30d1939SAndy Fiddaman			}
111*b30d1939SAndy Fiddaman		}
112*b30d1939SAndy Fiddaman		printf("#define _ast_intmax_t		_ast_int%d_t\n", m);
113*b30d1939SAndy Fiddaman		if (m == sizeof(long))
114*b30d1939SAndy Fiddaman			printf("#define _ast_intmax_long		1\n");
115*b30d1939SAndy Fiddaman		printf("#define _ast_intswap		%d\n", w);
116*b30d1939SAndy Fiddaman		printf("\n");
117*b30d1939SAndy Fiddaman		for (t = 0; t < elementsof(flt_type); t++)
118*b30d1939SAndy Fiddaman		{
119*b30d1939SAndy Fiddaman			while (t < elementsof(flt_type) && flt_type[t].size == flt_type[t + 1].size)
120*b30d1939SAndy Fiddaman				t++;
121*b30d1939SAndy Fiddaman			m = flt_type[t].size;
122*b30d1939SAndy Fiddaman			printf("#define _ast_flt%d_t		%s\n", flt_type[t].size, flt_type[t].name);
123*b30d1939SAndy Fiddaman		}
124*b30d1939SAndy Fiddaman		printf("#define _ast_fltmax_t		_ast_flt%d_t\n", m);
125*b30d1939SAndy Fiddaman		if (m == sizeof(double))
126*b30d1939SAndy Fiddaman			printf("#define _ast_fltmax_double		1\n");
127*b30d1939SAndy Fiddaman		return 0;
128*b30d1939SAndy Fiddaman	}
129*b30d1939SAndy Fiddaman!
130*b30d1939SAndy Fiddamanecho "#ifndef _AST_SA_H"
131*b30d1939SAndy Fiddamanecho "#define _AST_SA_H		1"
132*b30d1939SAndy Fiddamanecho
133*b30d1939SAndy Fiddamanfor i in '' -DN=0 -DN=1 -DN=2 -DN=3 -DN=4 -DN=5 -DN=6 -DN=7 -DN=8
134*b30d1939SAndy Fiddamando	"$@" $i -o _ast_.exe _ast_.c 2> /dev/null &&
135*b30d1939SAndy Fiddaman	./_ast_.exe &&
136*b30d1939SAndy Fiddaman	break
137*b30d1939SAndy Fiddamandone
138*b30d1939SAndy Fiddamanecho '#include <stdint.h>' > _ast_.c
139*b30d1939SAndy Fiddamanif	"$@" -E _ast_.c > /dev/null 2>&1
140*b30d1939SAndy Fiddamanthen	echo "#define _hdr_stdint	1"
141*b30d1939SAndy Fiddamanfi
142*b30d1939SAndy Fiddamanecho '#include <unistd.h>' > _ast_.c
143*b30d1939SAndy Fiddamanif	"$@" -E _ast_.c > /dev/null 2>&1
144*b30d1939SAndy Fiddamanthen	echo "#define _hdr_unistd	1"
145*b30d1939SAndy Fiddamanfi
146*b30d1939SAndy Fiddamanrm -f _ast_.c _ast_.exe
147*b30d1939SAndy Fiddamanecho "#define __DEFINE__(T,obj,val)	T obj = val"
148*b30d1939SAndy Fiddamanecho "#define __EXTERN__(T,obj)		extern T obj"
149*b30d1939SAndy Fiddamanecho
150*b30d1939SAndy Fiddamanecho "#endif"
151