Provide missing functionality by using files from LLVM. Changes made: - Formatting changes (tabs to spaces, DOS line endings etc). - Simplified 'int_endianness.h' to work for our case. - Added LLVM licence to the individual files. Contributed-under: TianoCore Contribution Agreement 1.0 Signed-off-by: Harry Liebel <Harry.Liebel@arm.com> Reviewed-by: Olivier Martin <Olivier.Martin@arm.com> Reviewed-by: Daryl McDaniel <edk2-lists@mc2research.org> git-svn-id: https://svn.code.sf.net/p/edk2/code/trunk/edk2@18117 6f19259b-4bc3-4df7-8a09-765794883524
		
			
				
	
	
		
			75 lines
		
	
	
		
			2.7 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			75 lines
		
	
	
		
			2.7 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
/**
 | 
						|
University of Illinois/NCSA
 | 
						|
Open Source License
 | 
						|
 | 
						|
Copyright (c) 2009-2014 by the contributors listed in CREDITS.TXT
 | 
						|
 | 
						|
All rights reserved.
 | 
						|
 | 
						|
Developed by:
 | 
						|
 | 
						|
    LLVM Team
 | 
						|
 | 
						|
    University of Illinois at Urbana-Champaign
 | 
						|
 | 
						|
    http://llvm.org
 | 
						|
 | 
						|
Permission is hereby granted, free of charge, to any person obtaining a copy of
 | 
						|
this software and associated documentation files (the "Software"), to deal with
 | 
						|
the Software without restriction, including without limitation the rights to
 | 
						|
use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
 | 
						|
of the Software, and to permit persons to whom the Software is furnished to do
 | 
						|
so, subject to the following conditions:
 | 
						|
 | 
						|
    * Redistributions of source code must retain the above copyright notice,
 | 
						|
      this list of conditions and the following disclaimers.
 | 
						|
 | 
						|
    * Redistributions in binary form must reproduce the above copyright notice,
 | 
						|
      this list of conditions and the following disclaimers in the
 | 
						|
      documentation and/or other materials provided with the distribution.
 | 
						|
 | 
						|
    * Neither the names of the LLVM Team, University of Illinois at
 | 
						|
      Urbana-Champaign, nor the names of its contributors may be used to
 | 
						|
      endorse or promote products derived from this Software without specific
 | 
						|
      prior written permission.
 | 
						|
 | 
						|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 | 
						|
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
 | 
						|
FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL THE
 | 
						|
CONTRIBUTORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
 | 
						|
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
 | 
						|
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS WITH THE
 | 
						|
SOFTWARE.
 | 
						|
**/
 | 
						|
 | 
						|
#include "int_lib.h"
 | 
						|
 | 
						|
/* Returns: convert a to a unsigned int, rounding toward zero.
 | 
						|
 *          Negative values all become zero.
 | 
						|
 */
 | 
						|
 | 
						|
/* Assumption: double is a IEEE 64 bit floating point type
 | 
						|
 *             su_int is a 32 bit integral type
 | 
						|
 *             value in double is representable in su_int or is negative
 | 
						|
 *                 (no range checking performed)
 | 
						|
 */
 | 
						|
 | 
						|
/* seee eeee eeee mmmm mmmm mmmm mmmm mmmm | mmmm mmmm mmmm mmmm mmmm mmmm mmmm mmmm */
 | 
						|
 | 
						|
ARM_EABI_FNALIAS(d2uiz, fixunsdfsi)
 | 
						|
 | 
						|
COMPILER_RT_ABI su_int
 | 
						|
__fixunsdfsi(double a)
 | 
						|
{
 | 
						|
    double_bits fb;
 | 
						|
    fb.f = a;
 | 
						|
    int e = ((fb.u.s.high & 0x7FF00000) >> 20) - 1023;
 | 
						|
    if (e < 0 || (fb.u.s.high & 0x80000000))
 | 
						|
        return 0;
 | 
						|
    return (
 | 
						|
                0x80000000u                      |
 | 
						|
                ((fb.u.s.high & 0x000FFFFF) << 11) |
 | 
						|
                (fb.u.s.low >> 21)
 | 
						|
           ) >> (31 - e);
 | 
						|
}
 |