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
		
			
				
	
	
		
			106 lines
		
	
	
		
			3.6 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			106 lines
		
	
	
		
			3.6 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.
 | 
						|
**/
 | 
						|
 | 
						|
#ifndef INT_LIB_H
 | 
						|
#define INT_LIB_H
 | 
						|
 | 
						|
/* Assumption: Signed integral is 2's complement. */
 | 
						|
/* Assumption: Right shift of signed negative is arithmetic shift. */
 | 
						|
/* Assumption: Endianness is little or big (not mixed). */
 | 
						|
 | 
						|
/* ABI macro definitions */
 | 
						|
 | 
						|
/*
 | 
						|
 * TODO define this appropriately for targets that require explicit export
 | 
						|
 * declarations (i.e. Windows)
 | 
						|
 */
 | 
						|
#define COMPILER_RT_EXPORT
 | 
						|
 | 
						|
#if __ARM_EABI__
 | 
						|
# define ARM_EABI_FNALIAS(aeabi_name, name)         \
 | 
						|
  void __aeabi_##aeabi_name() __attribute__((alias("__" #name)));
 | 
						|
# define COMPILER_RT_ABI COMPILER_RT_EXPORT __attribute__((pcs("aapcs")))
 | 
						|
#else
 | 
						|
# define ARM_EABI_FNALIAS(aeabi_name, name)
 | 
						|
# define COMPILER_RT_ABI COMPILER_RT_EXPORT
 | 
						|
#endif
 | 
						|
 | 
						|
#if defined(__NetBSD__) && (defined(_KERNEL) || defined(_STANDALONE))
 | 
						|
/*
 | 
						|
 * Kernel and boot environment can't use normal headers,
 | 
						|
 * so use the equivalent system headers.
 | 
						|
 */
 | 
						|
#  include <machine/limits.h>
 | 
						|
#  include <sys/stdint.h>
 | 
						|
#  include <sys/types.h>
 | 
						|
#else
 | 
						|
/* Include the standard compiler builtin headers we use functionality from. */
 | 
						|
#  include <limits.h>
 | 
						|
#  include <stdint.h>
 | 
						|
#  include <stdbool.h>
 | 
						|
#  include <float.h>
 | 
						|
#endif
 | 
						|
 | 
						|
/* Include the commonly used internal type definitions. */
 | 
						|
#include "int_types.h"
 | 
						|
 | 
						|
/* Include internal utility function declarations. */
 | 
						|
#include "int_util.h"
 | 
						|
 | 
						|
COMPILER_RT_ABI si_int __paritysi2(si_int a);
 | 
						|
COMPILER_RT_ABI si_int __paritydi2(di_int a);
 | 
						|
 | 
						|
COMPILER_RT_ABI di_int __divdi3(di_int a, di_int b);
 | 
						|
COMPILER_RT_ABI si_int __divsi3(si_int a, si_int b);
 | 
						|
COMPILER_RT_ABI su_int __udivsi3(su_int n, su_int d);
 | 
						|
 | 
						|
COMPILER_RT_ABI su_int __udivmodsi4(su_int a, su_int b, su_int* rem);
 | 
						|
COMPILER_RT_ABI du_int __udivmoddi4(du_int a, du_int b, du_int* rem);
 | 
						|
#ifdef CRT_HAS_128BIT
 | 
						|
COMPILER_RT_ABI si_int __clzti2(ti_int a);
 | 
						|
COMPILER_RT_ABI tu_int __udivmodti4(tu_int a, tu_int b, tu_int* rem);
 | 
						|
#endif
 | 
						|
 | 
						|
#endif /* INT_LIB_H */
 |