mirror of https://github.com/acidanthera/audk.git
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 */
|