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