1 /* ===-- int_lib.h - configuration header for compiler-rt -----------------=== 2 * 3 * The LLVM Compiler Infrastructure 4 * 5 * This file is dual licensed under the MIT and the University of Illinois Open 6 * Source Licenses. See LICENSE.TXT for details. 7 * 8 * ===----------------------------------------------------------------------=== 9 * 10 * This file is a configuration header for compiler-rt. 11 * This file is not part of the interface of this library. 12 * 13 * ===----------------------------------------------------------------------=== 14 */ 15 16 #ifndef INT_LIB_H 17 #define INT_LIB_H 18 19 #define FLT_MANT_DIG __FLT_MANT_DIG__ 20 #define CHAR_BIT 8 21 22 typedef unsigned su_int; 23 typedef int si_int; 24 25 typedef unsigned long long du_int; 26 typedef long long di_int; 27 28 typedef union 29 { 30 di_int all; 31 struct 32 { 33 su_int low; 34 si_int high; 35 } s; 36 } dwords; 37 38 typedef union 39 { 40 du_int all; 41 struct 42 { 43 su_int low; 44 su_int high; 45 } s; 46 } udwords; 47 48 typedef union 49 { 50 su_int u; 51 float f; 52 } float_bits; 53 54 /* Assumption: Signed integral is 2's complement. */ 55 /* Assumption: Right shift of signed negative is arithmetic shift. */ 56 57 di_int __divdi3(di_int a, di_int b); 58 di_int __moddi3(di_int a, di_int b); 59 du_int __umoddi3(du_int a, du_int b); 60 di_int __divmoddi4(di_int a, di_int b, di_int* rem); 61 du_int __udivmoddi4(du_int a, du_int b, du_int* rem); 62 63 #endif /* INT_LIB_H */ 64