forked from OSchip/llvm-project
builtins: add AEABI div0 functions
Add the missing AEABI functions that are part of the base platform ABI specification. The provided implementation does the bare minimum to avoid requiring libc headers. This permits the use of compiler-rt on bare-metal environments which conform to EABI. llvm-svn: 217322
This commit is contained in:
parent
b6a85b4f6a
commit
a0a5873e28
|
@ -167,6 +167,7 @@ set(arm_SOURCES
|
|||
arm/adddf3vfp.S
|
||||
arm/addsf3vfp.S
|
||||
arm/aeabi_dcmp.S
|
||||
arm/aeabi_div0.c
|
||||
arm/aeabi_fcmp.S
|
||||
arm/aeabi_idivmod.S
|
||||
arm/aeabi_ldivmod.S
|
||||
|
|
|
@ -0,0 +1,43 @@
|
|||
/* ===-- aeabi_div0.c - ARM Runtime ABI support routines for compiler-rt ---===
|
||||
*
|
||||
* The LLVM Compiler Infrastructure
|
||||
*
|
||||
* This file is dual licensed under the MIT and the University of Illinois Open
|
||||
* Source Licenses. See LICENSE.TXT for details.
|
||||
*
|
||||
* ===----------------------------------------------------------------------===
|
||||
*
|
||||
* This file implements the division by zero helper routines as specified by the
|
||||
* Run-time ABI for the ARM Architecture.
|
||||
*
|
||||
* ===----------------------------------------------------------------------===
|
||||
*/
|
||||
|
||||
/*
|
||||
* §4.3.2 - Division by zero
|
||||
*
|
||||
* The *div0 functions:
|
||||
* - Return the value passed to them as a parameter
|
||||
* - Or, return a fixed value defined by the execution environment (such as 0)
|
||||
* - Or, raise a signal (often SIGFPE) or throw an exception, and do not return
|
||||
*
|
||||
* An application may provide its own implementations of the *div0 functions to
|
||||
* for a particular behaviour from the *div and *divmod functions called out of
|
||||
* line.
|
||||
*/
|
||||
|
||||
/* provide an unused declaration to pacify pendantic compilation */
|
||||
extern unsigned char declaration;
|
||||
|
||||
#if defined(__ARM_EABI__)
|
||||
int __attribute__((weak)) __attribute__((visibility("hidden")))
|
||||
__aeabi_idiv0(int return_value) {
|
||||
return return_value;
|
||||
}
|
||||
|
||||
long long __attribute__((weak)) __attribute__((visibility("hidden")))
|
||||
__aeabi_ldiv0(long long return_value) {
|
||||
return return_value;
|
||||
}
|
||||
#endif
|
||||
|
Loading…
Reference in New Issue