177ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao// This file is distributed under the University of Illinois Open Source 277ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao// License. See LICENSE.TXT for details. 377ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao 477ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao#include "../assembly.h" 577ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao 677ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao// long double __floatundixf(du_int a);16 777ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao 877ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao#ifdef __i386__ 977ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao 1077ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao#ifndef __ELF__ 1177ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao.const 1277ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao#endif 1377ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao.align 4 1477ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liaotwop52: .quad 0x4330000000000000 1577ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liaotwop84_plus_twop52_neg: 1677ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao .quad 0xc530000000100000 1777ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liaotwop84: .quad 0x4530000000000000 1877ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao 1977ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao#define REL_ADDR(_a) (_a)-0b(%eax) 2077ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao 2177ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao.text 2277ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao.align 4 2377ed6142daed1e068fbda64405d0de9845e40e1Shih-wei LiaoDEFINE_COMPILERRT_FUNCTION(__floatundixf) 2477ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao calll 0f 2577ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao0: popl %eax 2677ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao movss 8(%esp), %xmm0 // hi 32 bits of input 2777ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao movss 4(%esp), %xmm1 // lo 32 bits of input 2877ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao orpd REL_ADDR(twop84), %xmm0 // 2^84 + hi (as a double) 2977ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao orpd REL_ADDR(twop52), %xmm1 // 2^52 + lo (as a double) 3077ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao addsd REL_ADDR(twop84_plus_twop52_neg), %xmm0 // hi - 2^52 (no rounding occurs) 3177ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao movsd %xmm1, 4(%esp) 3277ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao fldl 4(%esp) 3377ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao movsd %xmm0, 4(%esp) 3477ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao faddl 4(%esp) 3577ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao ret 3677ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao 3777ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao#endif // __i386__ 38