11dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project/*- 21dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project * Copyright (c) 2002, 2003 David Schultz <das@FreeBSD.ORG> 31dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project * All rights reserved. 41dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project * 51dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project * Redistribution and use in source and binary forms, with or without 61dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project * modification, are permitted provided that the following conditions 71dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project * are met: 81dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project * 1. Redistributions of source code must retain the above copyright 91dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project * notice, this list of conditions and the following disclaimer. 101dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project * 2. Redistributions in binary form must reproduce the above copyright 111dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project * notice, this list of conditions and the following disclaimer in the 121dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project * documentation and/or other materials provided with the distribution. 131dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project * 141dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND 151dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 161dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 171dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE 181dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 191dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 201dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 211dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 221dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 231dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 241dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project * SUCH DAMAGE. 251dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project * 26a0ee07829a9ba7e99ef68e8c12551301cc797f0fElliott Hughes * $FreeBSD$ 271dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project */ 281dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project 29a0ee07829a9ba7e99ef68e8c12551301cc797f0fElliott Hughes#if defined(__VFP_FP__) 30a0ee07829a9ba7e99ef68e8c12551301cc797f0fElliott Hughes#define _IEEE_WORD_ORDER _BYTE_ORDER 31a0ee07829a9ba7e99ef68e8c12551301cc797f0fElliott Hughes#else 32a0ee07829a9ba7e99ef68e8c12551301cc797f0fElliott Hughes#define _IEEE_WORD_ORDER _BIG_ENDIAN 33a0ee07829a9ba7e99ef68e8c12551301cc797f0fElliott Hughes#endif 34a0ee07829a9ba7e99ef68e8c12551301cc797f0fElliott Hughes 351dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Projectunion IEEEl2bits { 361dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project long double e; 371dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project struct { 38a0ee07829a9ba7e99ef68e8c12551301cc797f0fElliott Hughes#if _BYTE_ORDER == _LITTLE_ENDIAN 39a0ee07829a9ba7e99ef68e8c12551301cc797f0fElliott Hughes#if _IEEE_WORD_ORDER == _LITTLE_ENDIAN 401dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project unsigned int manl :32; 41a0ee07829a9ba7e99ef68e8c12551301cc797f0fElliott Hughes#endif 421dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project unsigned int manh :20; 431dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project unsigned int exp :11; 441dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project unsigned int sign :1; 45a0ee07829a9ba7e99ef68e8c12551301cc797f0fElliott Hughes#if _IEEE_WORD_ORDER == _BIG_ENDIAN 46a0ee07829a9ba7e99ef68e8c12551301cc797f0fElliott Hughes unsigned int manl :32; 47a0ee07829a9ba7e99ef68e8c12551301cc797f0fElliott Hughes#endif 48a0ee07829a9ba7e99ef68e8c12551301cc797f0fElliott Hughes#else /* _BYTE_ORDER == _LITTLE_ENDIAN */ 491dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project unsigned int sign :1; 501dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project unsigned int exp :11; 511dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project unsigned int manh :20; 521dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project unsigned int manl :32; 531dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project#endif 541dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project } bits; 551dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project}; 561dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project 571dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project#define LDBL_NBIT 0 58a0ee07829a9ba7e99ef68e8c12551301cc797f0fElliott Hughes#define LDBL_IMPLICIT_NBIT 591dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project#define mask_nbit_l(u) ((void)0) 601dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project 61a0ee07829a9ba7e99ef68e8c12551301cc797f0fElliott Hughes#define LDBL_MANH_SIZE 20 621dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project#define LDBL_MANL_SIZE 32 631dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project 641dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project#define LDBL_TO_ARRAY32(u, a) do { \ 651dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project (a)[0] = (uint32_t)(u).bits.manl; \ 661dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project (a)[1] = (uint32_t)(u).bits.manh; \ 671dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project} while(0) 68