177ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao/* ===-- int_lib.h - configuration header for compiler-rt -----------------=== 277ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao * 377ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao * The LLVM Compiler Infrastructure 477ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao * 577ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao * This file is distributed under the University of Illinois Open Source 677ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao * License. See LICENSE.TXT for details. 777ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao * 877ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao * ===----------------------------------------------------------------------=== 977ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao * 1077ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao * This file is a configuration header for compiler-rt. 1177ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao * This file is not part of the interface of this library. 1277ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao * 1377ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao * ===----------------------------------------------------------------------=== 1477ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao */ 1577ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao 1677ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao#ifndef INT_LIB_H 1777ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao#define INT_LIB_H 1877ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao 1977ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao/* Assumption: signed integral is 2's complement */ 2077ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao/* Assumption: right shift of signed negative is arithmetic shift */ 2177ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao 2277ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao#include <limits.h> 2377ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao#include "endianness.h" 2477ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao#include <math.h> 2577ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao 2677ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao#if !defined(INFINITY) && defined(HUGE_VAL) 2777ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao#define INFINITY HUGE_VAL 2877ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao#endif /* INFINITY */ 2977ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao 3077ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liaotypedef int si_int; 3177ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liaotypedef unsigned su_int; 3277ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao 3377ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liaotypedef long long di_int; 3477ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liaotypedef unsigned long long du_int; 3577ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao 3677ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liaotypedef union 3777ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao{ 3877ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao di_int all; 3977ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao struct 4077ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao { 4177ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao#if _YUGA_LITTLE_ENDIAN 4277ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao su_int low; 4377ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao si_int high; 4477ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao#else 4577ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao si_int high; 4677ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao su_int low; 4777ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao#endif /* _YUGA_LITTLE_ENDIAN */ 4877ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao }s; 4977ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao} dwords; 5077ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao 5177ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liaotypedef union 5277ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao{ 5377ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao du_int all; 5477ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao struct 5577ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao { 5677ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao#if _YUGA_LITTLE_ENDIAN 5777ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao su_int low; 5877ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao su_int high; 5977ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao#else 6077ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao su_int high; 6177ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao su_int low; 6277ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao#endif /* _YUGA_LITTLE_ENDIAN */ 6377ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao }s; 6477ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao} udwords; 6577ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao 6677ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao#if __x86_64 6777ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao 6877ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liaotypedef int ti_int __attribute__ ((mode (TI))); 6977ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liaotypedef unsigned tu_int __attribute__ ((mode (TI))); 7077ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao 7177ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liaotypedef union 7277ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao{ 7377ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao ti_int all; 7477ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao struct 7577ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao { 7677ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao#if _YUGA_LITTLE_ENDIAN 7777ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao du_int low; 7877ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao di_int high; 7977ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao#else 8077ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao di_int high; 8177ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao du_int low; 8277ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao#endif /* _YUGA_LITTLE_ENDIAN */ 8377ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao }s; 8477ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao} twords; 8577ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao 8677ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liaotypedef union 8777ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao{ 8877ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao tu_int all; 8977ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao struct 9077ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao { 9177ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao#if _YUGA_LITTLE_ENDIAN 9277ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao du_int low; 9377ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao du_int high; 9477ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao#else 9577ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao du_int high; 9677ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao du_int low; 9777ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao#endif /* _YUGA_LITTLE_ENDIAN */ 9877ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao }s; 9977ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao} utwords; 10077ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao 10177ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liaostatic inline ti_int make_ti(di_int h, di_int l) { 10277ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao twords r; 10377ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao r.s.high = h; 10477ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao r.s.low = l; 10577ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao return r.all; 10677ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao} 10777ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao 10877ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liaostatic inline tu_int make_tu(du_int h, du_int l) { 10977ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao utwords r; 11077ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao r.s.high = h; 11177ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao r.s.low = l; 11277ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao return r.all; 11377ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao} 11477ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao 11577ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao#endif /* __x86_64 */ 11677ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao 11777ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liaotypedef union 11877ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao{ 11977ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao su_int u; 12077ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao float f; 12177ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao} float_bits; 12277ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao 12377ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liaotypedef union 12477ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao{ 12577ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao udwords u; 12677ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao double f; 12777ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao} double_bits; 12877ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao 12977ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liaotypedef struct 13077ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao{ 13177ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao#if _YUGA_LITTLE_ENDIAN 13277ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao udwords low; 13377ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao udwords high; 13477ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao#else 13577ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao udwords high; 13677ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao udwords low; 13777ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao#endif /* _YUGA_LITTLE_ENDIAN */ 13877ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao} uqwords; 13977ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao 14077ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liaotypedef union 14177ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao{ 14277ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao uqwords u; 14377ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao long double f; 14477ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao} long_double_bits; 14577ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao 14677ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao#endif /* INT_LIB_H */ 147