mirror of
				https://git.proxmox.com/git/mirror_edk2
				synced 2025-10-31 07:17:27 +00:00 
			
		
		
		
	 d799c02832
			
		
	
	
		d799c02832
		
	
	
	
	
		
			
			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 */
 |