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);
 | |
| }
 |