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