1 #ifndef TARGET_H 2 #define TARGET_H 3 4 extern struct symbol *size_t_ctype; 5 extern struct symbol *ssize_t_ctype; 6 7 /* 8 * For "__attribute__((aligned))" 9 */ 10 extern int max_alignment; 11 12 /* 13 * Integer data types 14 */ 15 extern int bits_in_bool; 16 extern int bits_in_char; 17 extern int bits_in_short; 18 extern int bits_in_int; 19 extern int bits_in_long; 20 extern int bits_in_longlong; 21 extern int bits_in_longlonglong; 22 23 extern int bits_in_wchar; 24 25 extern int max_int_alignment; 26 27 /* 28 * Floating point data types 29 */ 30 extern int bits_in_float; 31 extern int bits_in_double; 32 extern int bits_in_longdouble; 33 34 extern int max_fp_alignment; 35 36 /* 37 * Pointer data type 38 */ 39 extern int bits_in_pointer; 40 extern int pointer_alignment; 41 42 /* 43 * Enum data types 44 */ 45 extern int bits_in_enum; 46 extern int enum_alignment; 47 48 /* 49 * Helper functions for converting bits to bytes and vice versa. 50 */ 51 52 static inline int bits_to_bytes(int bits) 53 { 54 return bits >= 0 ? (bits + bits_in_char - 1) / bits_in_char : -1; 55 } 56 57 static inline int bytes_to_bits(int bytes) 58 { 59 return bytes * bits_in_char; 60 } 61 62 static inline unsigned long array_element_offset(unsigned long base_bits, int idx) 63 { 64 int fragment = base_bits % bits_in_char; 65 if (fragment) 66 base_bits += bits_in_char - fragment; 67 return base_bits * idx; 68 } 69 70 #endif 71