Upgrade libcompiler_rt to upstream revision 147390.
This version of libcompiler_rt adds support for __mulo[sdt]i4(), which computes a multiply and its overflow flag. There are also a lot of cleanup fixes to headers that don't really affect us. Updating to this revision should make it a bit easier to contribute changes back to the LLVM developers.
This commit is contained in:
commit
7686ff743c
@ -74,3 +74,25 @@ AUTHORS 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 IN
|
||||
THE SOFTWARE.
|
||||
|
||||
==============================================================================
|
||||
Copyrights and Licenses for Third Party Software Distributed with LLVM:
|
||||
==============================================================================
|
||||
The LLVM software contains code written by third parties. Such software will
|
||||
have its own individual LICENSE.TXT file in the directory in which it appears.
|
||||
This file will describe the copyrights, license, and restrictions which apply
|
||||
to that code.
|
||||
|
||||
The disclaimer of warranty in the University of Illinois Open Source License
|
||||
applies to all code in the LLVM Distribution, and nothing in any of the
|
||||
other licenses gives permission to use the names of the LLVM Team or the
|
||||
University of Illinois to endorse or promote products derived from this
|
||||
Software.
|
||||
|
||||
The following pieces of software have additional or alternate copyrights,
|
||||
licenses, and/or restrictions:
|
||||
|
||||
Program Directory
|
||||
------- ---------
|
||||
sysinfo lib/asan/sysinfo
|
||||
mach_override lib/asan/mach_override
|
||||
|
@ -106,6 +106,15 @@ si_int __mulvsi3(si_int a, si_int b); // a * b
|
||||
di_int __mulvdi3(di_int a, di_int b); // a * b
|
||||
ti_int __mulvti3(ti_int a, ti_int b); // a * b
|
||||
|
||||
|
||||
// Integral arithmetic which returns if overflow
|
||||
|
||||
si_int __mulosi4(si_int a, si_int b, int* overflow); // a * b, overflow set to one if result not in signed range
|
||||
di_int __mulodi4(di_int a, di_int b, int* overflow); // a * b, overflow set to one if result not in signed range
|
||||
ti_int __muloti4(ti_int a, ti_int b, int* overflow); // a * b, overflow set to
|
||||
one if result not in signed range
|
||||
|
||||
|
||||
// Integral comparison: a < b -> 0
|
||||
// a == b -> 1
|
||||
// a > b -> 2
|
||||
|
@ -1,23 +0,0 @@
|
||||
/* ===------ abi.h - configuration header 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 is a configuration header for compiler-rt.
|
||||
* This file is not part of the interface of this library.
|
||||
*
|
||||
* ===----------------------------------------------------------------------===
|
||||
*/
|
||||
|
||||
#if __ARM_EABI__
|
||||
# define ARM_EABI_FNALIAS(aeabi_name, name) \
|
||||
void __aeabi_##aeabi_name() __attribute__((alias("__" #name)));
|
||||
# define COMPILER_RT_ABI __attribute__((pcs("aapcs")))
|
||||
#else
|
||||
# define ARM_EABI_FNALIAS(aeabi_name, name)
|
||||
# define COMPILER_RT_ABI
|
||||
#endif
|
@ -11,10 +11,8 @@
|
||||
*
|
||||
*===----------------------------------------------------------------------===
|
||||
*/
|
||||
#include "abi.h"
|
||||
|
||||
#include "int_lib.h"
|
||||
#include <stdlib.h>
|
||||
|
||||
/* Returns: absolute value */
|
||||
|
||||
|
@ -11,10 +11,8 @@
|
||||
*
|
||||
* ===----------------------------------------------------------------------===
|
||||
*/
|
||||
#include "abi.h"
|
||||
|
||||
#include "int_lib.h"
|
||||
#include <stdlib.h>
|
||||
|
||||
/* Returns: absolute value */
|
||||
|
||||
|
@ -15,7 +15,6 @@
|
||||
#if __x86_64
|
||||
|
||||
#include "int_lib.h"
|
||||
#include <stdlib.h>
|
||||
|
||||
/* Returns: absolute value */
|
||||
|
||||
|
@ -12,8 +12,6 @@
|
||||
//
|
||||
//===----------------------------------------------------------------------===//
|
||||
|
||||
#include "abi.h"
|
||||
|
||||
#define DOUBLE_PRECISION
|
||||
#include "fp_lib.h"
|
||||
|
||||
|
@ -12,8 +12,6 @@
|
||||
//
|
||||
//===----------------------------------------------------------------------===//
|
||||
|
||||
#include "abi.h"
|
||||
|
||||
#define SINGLE_PRECISION
|
||||
#include "fp_lib.h"
|
||||
|
||||
|
@ -11,10 +11,8 @@
|
||||
*
|
||||
* ===----------------------------------------------------------------------===
|
||||
*/
|
||||
#include "abi.h"
|
||||
|
||||
#include "int_lib.h"
|
||||
#include <stdlib.h>
|
||||
|
||||
/* Returns: a + b */
|
||||
|
||||
|
@ -11,10 +11,8 @@
|
||||
*
|
||||
* ===----------------------------------------------------------------------===
|
||||
*/
|
||||
#include "abi.h"
|
||||
|
||||
#include "int_lib.h"
|
||||
#include <stdlib.h>
|
||||
|
||||
/* Returns: a + b */
|
||||
|
||||
|
@ -15,7 +15,6 @@
|
||||
#if __x86_64
|
||||
|
||||
#include "int_lib.h"
|
||||
#include <stdlib.h>
|
||||
|
||||
/* Returns: a + b */
|
||||
|
||||
|
@ -1,291 +0,0 @@
|
||||
/* ===-- apple_versioning.c - Adds versioning symbols for ld ---------------===
|
||||
*
|
||||
* 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.
|
||||
*
|
||||
* ===----------------------------------------------------------------------===
|
||||
*/
|
||||
|
||||
|
||||
|
||||
#if __APPLE__
|
||||
#if __arm__
|
||||
#define NOT_HERE_BEFORE_10_6(sym)
|
||||
#elif __ppc__
|
||||
#define NOT_HERE_BEFORE_10_6(sym) \
|
||||
extern const char sym##_tmp3 __asm("$ld$hide$os10.3$_" #sym ); \
|
||||
__attribute__((visibility("default"))) const char sym##_tmp3 = 0; \
|
||||
extern const char sym##_tmp4 __asm("$ld$hide$os10.4$_" #sym ); \
|
||||
__attribute__((visibility("default"))) const char sym##_tmp4 = 0; \
|
||||
extern const char sym##_tmp5 __asm("$ld$hide$os10.5$_" #sym ); \
|
||||
__attribute__((visibility("default"))) const char sym##_tmp5 = 0;
|
||||
#else
|
||||
#define NOT_HERE_BEFORE_10_6(sym) \
|
||||
extern const char sym##_tmp4 __asm("$ld$hide$os10.4$_" #sym ); \
|
||||
__attribute__((visibility("default"))) const char sym##_tmp4 = 0; \
|
||||
extern const char sym##_tmp5 __asm("$ld$hide$os10.5$_" #sym ); \
|
||||
__attribute__((visibility("default"))) const char sym##_tmp5 = 0;
|
||||
#endif /* __ppc__ */
|
||||
|
||||
|
||||
/* Symbols in libSystem.dylib in 10.6 and later,
|
||||
* but are in libgcc_s.dylib in earlier versions
|
||||
*/
|
||||
|
||||
NOT_HERE_BEFORE_10_6(__absvdi2)
|
||||
NOT_HERE_BEFORE_10_6(__absvsi2)
|
||||
NOT_HERE_BEFORE_10_6(__absvti2)
|
||||
NOT_HERE_BEFORE_10_6(__addvdi3)
|
||||
NOT_HERE_BEFORE_10_6(__addvsi3)
|
||||
NOT_HERE_BEFORE_10_6(__addvti3)
|
||||
NOT_HERE_BEFORE_10_6(__ashldi3)
|
||||
NOT_HERE_BEFORE_10_6(__ashlti3)
|
||||
NOT_HERE_BEFORE_10_6(__ashrdi3)
|
||||
NOT_HERE_BEFORE_10_6(__ashrti3)
|
||||
NOT_HERE_BEFORE_10_6(__clear_cache)
|
||||
NOT_HERE_BEFORE_10_6(__clzdi2)
|
||||
NOT_HERE_BEFORE_10_6(__clzsi2)
|
||||
NOT_HERE_BEFORE_10_6(__clzti2)
|
||||
NOT_HERE_BEFORE_10_6(__cmpdi2)
|
||||
NOT_HERE_BEFORE_10_6(__cmpti2)
|
||||
NOT_HERE_BEFORE_10_6(__ctzdi2)
|
||||
NOT_HERE_BEFORE_10_6(__ctzsi2)
|
||||
NOT_HERE_BEFORE_10_6(__ctzti2)
|
||||
NOT_HERE_BEFORE_10_6(__divdc3)
|
||||
NOT_HERE_BEFORE_10_6(__divdi3)
|
||||
NOT_HERE_BEFORE_10_6(__divsc3)
|
||||
NOT_HERE_BEFORE_10_6(__divtc3)
|
||||
NOT_HERE_BEFORE_10_6(__divti3)
|
||||
NOT_HERE_BEFORE_10_6(__divxc3)
|
||||
NOT_HERE_BEFORE_10_6(__enable_execute_stack)
|
||||
NOT_HERE_BEFORE_10_6(__ffsdi2)
|
||||
NOT_HERE_BEFORE_10_6(__ffsti2)
|
||||
NOT_HERE_BEFORE_10_6(__fixdfdi)
|
||||
NOT_HERE_BEFORE_10_6(__fixdfti)
|
||||
NOT_HERE_BEFORE_10_6(__fixsfdi)
|
||||
NOT_HERE_BEFORE_10_6(__fixsfti)
|
||||
NOT_HERE_BEFORE_10_6(__fixtfdi)
|
||||
NOT_HERE_BEFORE_10_6(__fixunsdfdi)
|
||||
NOT_HERE_BEFORE_10_6(__fixunsdfsi)
|
||||
NOT_HERE_BEFORE_10_6(__fixunsdfti)
|
||||
NOT_HERE_BEFORE_10_6(__fixunssfdi)
|
||||
NOT_HERE_BEFORE_10_6(__fixunssfsi)
|
||||
NOT_HERE_BEFORE_10_6(__fixunssfti)
|
||||
NOT_HERE_BEFORE_10_6(__fixunstfdi)
|
||||
NOT_HERE_BEFORE_10_6(__fixunsxfdi)
|
||||
NOT_HERE_BEFORE_10_6(__fixunsxfsi)
|
||||
NOT_HERE_BEFORE_10_6(__fixunsxfti)
|
||||
NOT_HERE_BEFORE_10_6(__fixxfdi)
|
||||
NOT_HERE_BEFORE_10_6(__fixxfti)
|
||||
NOT_HERE_BEFORE_10_6(__floatdidf)
|
||||
NOT_HERE_BEFORE_10_6(__floatdisf)
|
||||
NOT_HERE_BEFORE_10_6(__floatditf)
|
||||
NOT_HERE_BEFORE_10_6(__floatdixf)
|
||||
NOT_HERE_BEFORE_10_6(__floattidf)
|
||||
NOT_HERE_BEFORE_10_6(__floattisf)
|
||||
NOT_HERE_BEFORE_10_6(__floattixf)
|
||||
NOT_HERE_BEFORE_10_6(__floatundidf)
|
||||
NOT_HERE_BEFORE_10_6(__floatundisf)
|
||||
NOT_HERE_BEFORE_10_6(__floatunditf)
|
||||
NOT_HERE_BEFORE_10_6(__floatundixf)
|
||||
NOT_HERE_BEFORE_10_6(__floatuntidf)
|
||||
NOT_HERE_BEFORE_10_6(__floatuntisf)
|
||||
NOT_HERE_BEFORE_10_6(__floatuntixf)
|
||||
NOT_HERE_BEFORE_10_6(__gcc_personality_v0)
|
||||
NOT_HERE_BEFORE_10_6(__lshrdi3)
|
||||
NOT_HERE_BEFORE_10_6(__lshrti3)
|
||||
NOT_HERE_BEFORE_10_6(__moddi3)
|
||||
NOT_HERE_BEFORE_10_6(__modti3)
|
||||
NOT_HERE_BEFORE_10_6(__muldc3)
|
||||
NOT_HERE_BEFORE_10_6(__muldi3)
|
||||
NOT_HERE_BEFORE_10_6(__mulsc3)
|
||||
NOT_HERE_BEFORE_10_6(__multc3)
|
||||
NOT_HERE_BEFORE_10_6(__multi3)
|
||||
NOT_HERE_BEFORE_10_6(__mulvdi3)
|
||||
NOT_HERE_BEFORE_10_6(__mulvsi3)
|
||||
NOT_HERE_BEFORE_10_6(__mulvti3)
|
||||
NOT_HERE_BEFORE_10_6(__mulxc3)
|
||||
NOT_HERE_BEFORE_10_6(__negdi2)
|
||||
NOT_HERE_BEFORE_10_6(__negti2)
|
||||
NOT_HERE_BEFORE_10_6(__negvdi2)
|
||||
NOT_HERE_BEFORE_10_6(__negvsi2)
|
||||
NOT_HERE_BEFORE_10_6(__negvti2)
|
||||
NOT_HERE_BEFORE_10_6(__paritydi2)
|
||||
NOT_HERE_BEFORE_10_6(__paritysi2)
|
||||
NOT_HERE_BEFORE_10_6(__parityti2)
|
||||
NOT_HERE_BEFORE_10_6(__popcountdi2)
|
||||
NOT_HERE_BEFORE_10_6(__popcountsi2)
|
||||
NOT_HERE_BEFORE_10_6(__popcountti2)
|
||||
NOT_HERE_BEFORE_10_6(__powidf2)
|
||||
NOT_HERE_BEFORE_10_6(__powisf2)
|
||||
NOT_HERE_BEFORE_10_6(__powitf2)
|
||||
NOT_HERE_BEFORE_10_6(__powixf2)
|
||||
NOT_HERE_BEFORE_10_6(__subvdi3)
|
||||
NOT_HERE_BEFORE_10_6(__subvsi3)
|
||||
NOT_HERE_BEFORE_10_6(__subvti3)
|
||||
NOT_HERE_BEFORE_10_6(__ucmpdi2)
|
||||
NOT_HERE_BEFORE_10_6(__ucmpti2)
|
||||
NOT_HERE_BEFORE_10_6(__udivdi3)
|
||||
NOT_HERE_BEFORE_10_6(__udivmoddi4)
|
||||
NOT_HERE_BEFORE_10_6(__udivmodti4)
|
||||
NOT_HERE_BEFORE_10_6(__udivti3)
|
||||
NOT_HERE_BEFORE_10_6(__umoddi3)
|
||||
NOT_HERE_BEFORE_10_6(__umodti3)
|
||||
|
||||
|
||||
#if __ppc__
|
||||
NOT_HERE_BEFORE_10_6(__gcc_qadd)
|
||||
NOT_HERE_BEFORE_10_6(__gcc_qdiv)
|
||||
NOT_HERE_BEFORE_10_6(__gcc_qmul)
|
||||
NOT_HERE_BEFORE_10_6(__gcc_qsub)
|
||||
NOT_HERE_BEFORE_10_6(__trampoline_setup)
|
||||
#endif /* __ppc__ */
|
||||
|
||||
#if __arm__ && __DYNAMIC__
|
||||
#define NOT_HERE_UNTIL_AFTER_4_3(sym) \
|
||||
extern const char sym##_tmp1 __asm("$ld$hide$os3.0$_" #sym ); \
|
||||
__attribute__((visibility("default"))) const char sym##_tmp1 = 0; \
|
||||
extern const char sym##_tmp2 __asm("$ld$hide$os3.1$_" #sym ); \
|
||||
__attribute__((visibility("default"))) const char sym##_tmp2 = 0; \
|
||||
extern const char sym##_tmp3 __asm("$ld$hide$os3.2$_" #sym ); \
|
||||
__attribute__((visibility("default"))) const char sym##_tmp3 = 0; \
|
||||
extern const char sym##_tmp4 __asm("$ld$hide$os4.0$_" #sym ); \
|
||||
__attribute__((visibility("default"))) const char sym##_tmp4 = 0; \
|
||||
extern const char sym##_tmp5 __asm("$ld$hide$os4.1$_" #sym ); \
|
||||
__attribute__((visibility("default"))) const char sym##_tmp5 = 0; \
|
||||
extern const char sym##_tmp6 __asm("$ld$hide$os4.2$_" #sym ); \
|
||||
__attribute__((visibility("default"))) const char sym##_tmp6 = 0; \
|
||||
extern const char sym##_tmp7 __asm("$ld$hide$os4.3$_" #sym ); \
|
||||
__attribute__((visibility("default"))) const char sym##_tmp7 = 0;
|
||||
|
||||
NOT_HERE_UNTIL_AFTER_4_3(__absvdi2)
|
||||
NOT_HERE_UNTIL_AFTER_4_3(__absvsi2)
|
||||
NOT_HERE_UNTIL_AFTER_4_3(__adddf3)
|
||||
NOT_HERE_UNTIL_AFTER_4_3(__adddf3vfp)
|
||||
NOT_HERE_UNTIL_AFTER_4_3(__addsf3)
|
||||
NOT_HERE_UNTIL_AFTER_4_3(__addsf3vfp)
|
||||
NOT_HERE_UNTIL_AFTER_4_3(__addvdi3)
|
||||
NOT_HERE_UNTIL_AFTER_4_3(__addvsi3)
|
||||
NOT_HERE_UNTIL_AFTER_4_3(__ashldi3)
|
||||
NOT_HERE_UNTIL_AFTER_4_3(__ashrdi3)
|
||||
NOT_HERE_UNTIL_AFTER_4_3(__bswapdi2)
|
||||
NOT_HERE_UNTIL_AFTER_4_3(__bswapsi2)
|
||||
NOT_HERE_UNTIL_AFTER_4_3(__clzdi2)
|
||||
NOT_HERE_UNTIL_AFTER_4_3(__clzsi2)
|
||||
NOT_HERE_UNTIL_AFTER_4_3(__cmpdi2)
|
||||
NOT_HERE_UNTIL_AFTER_4_3(__ctzdi2)
|
||||
NOT_HERE_UNTIL_AFTER_4_3(__ctzsi2)
|
||||
NOT_HERE_UNTIL_AFTER_4_3(__divdc3)
|
||||
NOT_HERE_UNTIL_AFTER_4_3(__divdf3)
|
||||
NOT_HERE_UNTIL_AFTER_4_3(__divdf3vfp)
|
||||
NOT_HERE_UNTIL_AFTER_4_3(__divdi3)
|
||||
NOT_HERE_UNTIL_AFTER_4_3(__divsc3)
|
||||
NOT_HERE_UNTIL_AFTER_4_3(__divsf3)
|
||||
NOT_HERE_UNTIL_AFTER_4_3(__divsf3vfp)
|
||||
NOT_HERE_UNTIL_AFTER_4_3(__divsi3)
|
||||
NOT_HERE_UNTIL_AFTER_4_3(__eqdf2)
|
||||
NOT_HERE_UNTIL_AFTER_4_3(__eqdf2vfp)
|
||||
NOT_HERE_UNTIL_AFTER_4_3(__eqsf2)
|
||||
NOT_HERE_UNTIL_AFTER_4_3(__eqsf2vfp)
|
||||
NOT_HERE_UNTIL_AFTER_4_3(__extendsfdf2)
|
||||
NOT_HERE_UNTIL_AFTER_4_3(__extendsfdf2vfp)
|
||||
NOT_HERE_UNTIL_AFTER_4_3(__ffsdi2)
|
||||
NOT_HERE_UNTIL_AFTER_4_3(__fixdfdi)
|
||||
NOT_HERE_UNTIL_AFTER_4_3(__fixdfsi)
|
||||
NOT_HERE_UNTIL_AFTER_4_3(__fixdfsivfp)
|
||||
NOT_HERE_UNTIL_AFTER_4_3(__fixsfdi)
|
||||
NOT_HERE_UNTIL_AFTER_4_3(__fixsfsi)
|
||||
NOT_HERE_UNTIL_AFTER_4_3(__fixsfsivfp)
|
||||
NOT_HERE_UNTIL_AFTER_4_3(__fixunsdfdi)
|
||||
NOT_HERE_UNTIL_AFTER_4_3(__fixunsdfsi)
|
||||
NOT_HERE_UNTIL_AFTER_4_3(__fixunsdfsivfp)
|
||||
NOT_HERE_UNTIL_AFTER_4_3(__fixunssfdi)
|
||||
NOT_HERE_UNTIL_AFTER_4_3(__fixunssfsi)
|
||||
NOT_HERE_UNTIL_AFTER_4_3(__fixunssfsivfp)
|
||||
NOT_HERE_UNTIL_AFTER_4_3(__floatdidf)
|
||||
NOT_HERE_UNTIL_AFTER_4_3(__floatdisf)
|
||||
NOT_HERE_UNTIL_AFTER_4_3(__floatsidf)
|
||||
NOT_HERE_UNTIL_AFTER_4_3(__floatsidfvfp)
|
||||
NOT_HERE_UNTIL_AFTER_4_3(__floatsisf)
|
||||
NOT_HERE_UNTIL_AFTER_4_3(__floatsisfvfp)
|
||||
NOT_HERE_UNTIL_AFTER_4_3(__floatundidf)
|
||||
NOT_HERE_UNTIL_AFTER_4_3(__floatundisf)
|
||||
NOT_HERE_UNTIL_AFTER_4_3(__floatunsidf)
|
||||
NOT_HERE_UNTIL_AFTER_4_3(__floatunsisf)
|
||||
NOT_HERE_UNTIL_AFTER_4_3(__floatunssidfvfp)
|
||||
NOT_HERE_UNTIL_AFTER_4_3(__floatunssisfvfp)
|
||||
NOT_HERE_UNTIL_AFTER_4_3(__gedf2)
|
||||
NOT_HERE_UNTIL_AFTER_4_3(__gedf2vfp)
|
||||
NOT_HERE_UNTIL_AFTER_4_3(__gesf2)
|
||||
NOT_HERE_UNTIL_AFTER_4_3(__gesf2vfp)
|
||||
NOT_HERE_UNTIL_AFTER_4_3(__gtdf2)
|
||||
NOT_HERE_UNTIL_AFTER_4_3(__gtdf2vfp)
|
||||
NOT_HERE_UNTIL_AFTER_4_3(__gtsf2)
|
||||
NOT_HERE_UNTIL_AFTER_4_3(__gtsf2vfp)
|
||||
NOT_HERE_UNTIL_AFTER_4_3(__ledf2)
|
||||
NOT_HERE_UNTIL_AFTER_4_3(__ledf2vfp)
|
||||
NOT_HERE_UNTIL_AFTER_4_3(__lesf2)
|
||||
NOT_HERE_UNTIL_AFTER_4_3(__lesf2vfp)
|
||||
NOT_HERE_UNTIL_AFTER_4_3(__lshrdi3)
|
||||
NOT_HERE_UNTIL_AFTER_4_3(__ltdf2)
|
||||
NOT_HERE_UNTIL_AFTER_4_3(__ltdf2vfp)
|
||||
NOT_HERE_UNTIL_AFTER_4_3(__ltsf2)
|
||||
NOT_HERE_UNTIL_AFTER_4_3(__ltsf2vfp)
|
||||
NOT_HERE_UNTIL_AFTER_4_3(__moddi3)
|
||||
NOT_HERE_UNTIL_AFTER_4_3(__modsi3)
|
||||
NOT_HERE_UNTIL_AFTER_4_3(__muldc3)
|
||||
NOT_HERE_UNTIL_AFTER_4_3(__muldf3)
|
||||
NOT_HERE_UNTIL_AFTER_4_3(__muldf3vfp)
|
||||
NOT_HERE_UNTIL_AFTER_4_3(__muldi3)
|
||||
NOT_HERE_UNTIL_AFTER_4_3(__mulsc3)
|
||||
NOT_HERE_UNTIL_AFTER_4_3(__mulsf3)
|
||||
NOT_HERE_UNTIL_AFTER_4_3(__mulsf3vfp)
|
||||
NOT_HERE_UNTIL_AFTER_4_3(__mulvdi3)
|
||||
NOT_HERE_UNTIL_AFTER_4_3(__mulvsi3)
|
||||
NOT_HERE_UNTIL_AFTER_4_3(__nedf2)
|
||||
NOT_HERE_UNTIL_AFTER_4_3(__nedf2vfp)
|
||||
NOT_HERE_UNTIL_AFTER_4_3(__negdi2)
|
||||
NOT_HERE_UNTIL_AFTER_4_3(__negvdi2)
|
||||
NOT_HERE_UNTIL_AFTER_4_3(__negvsi2)
|
||||
NOT_HERE_UNTIL_AFTER_4_3(__nesf2)
|
||||
NOT_HERE_UNTIL_AFTER_4_3(__nesf2vfp)
|
||||
NOT_HERE_UNTIL_AFTER_4_3(__paritydi2)
|
||||
NOT_HERE_UNTIL_AFTER_4_3(__paritysi2)
|
||||
NOT_HERE_UNTIL_AFTER_4_3(__popcountdi2)
|
||||
NOT_HERE_UNTIL_AFTER_4_3(__popcountsi2)
|
||||
NOT_HERE_UNTIL_AFTER_4_3(__powidf2)
|
||||
NOT_HERE_UNTIL_AFTER_4_3(__powisf2)
|
||||
NOT_HERE_UNTIL_AFTER_4_3(__subdf3)
|
||||
NOT_HERE_UNTIL_AFTER_4_3(__subdf3vfp)
|
||||
NOT_HERE_UNTIL_AFTER_4_3(__subsf3)
|
||||
NOT_HERE_UNTIL_AFTER_4_3(__subsf3vfp)
|
||||
NOT_HERE_UNTIL_AFTER_4_3(__subvdi3)
|
||||
NOT_HERE_UNTIL_AFTER_4_3(__subvsi3)
|
||||
NOT_HERE_UNTIL_AFTER_4_3(__truncdfsf2)
|
||||
NOT_HERE_UNTIL_AFTER_4_3(__truncdfsf2vfp)
|
||||
NOT_HERE_UNTIL_AFTER_4_3(__ucmpdi2)
|
||||
NOT_HERE_UNTIL_AFTER_4_3(__udivdi3)
|
||||
NOT_HERE_UNTIL_AFTER_4_3(__udivmoddi4)
|
||||
NOT_HERE_UNTIL_AFTER_4_3(__udivsi3)
|
||||
NOT_HERE_UNTIL_AFTER_4_3(__umoddi3)
|
||||
NOT_HERE_UNTIL_AFTER_4_3(__umodsi3)
|
||||
NOT_HERE_UNTIL_AFTER_4_3(__unorddf2)
|
||||
NOT_HERE_UNTIL_AFTER_4_3(__unorddf2vfp)
|
||||
NOT_HERE_UNTIL_AFTER_4_3(__unordsf2)
|
||||
NOT_HERE_UNTIL_AFTER_4_3(__unordsf2vfp)
|
||||
|
||||
NOT_HERE_UNTIL_AFTER_4_3(__divmodsi4)
|
||||
NOT_HERE_UNTIL_AFTER_4_3(__udivmodsi4)
|
||||
#endif // __arm__ && __DYNAMIC__
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
#else /* !__APPLE__ */
|
||||
|
||||
extern int avoid_empty_file;
|
||||
|
||||
#endif /* !__APPLE__*/
|
@ -15,10 +15,11 @@
|
||||
// Adds two double precision floating point numbers using the Darwin
|
||||
// calling convention where double arguments are passsed in GPR pairs
|
||||
//
|
||||
.syntax unified
|
||||
.align 2
|
||||
DEFINE_COMPILERRT_FUNCTION(__adddf3vfp)
|
||||
fmdrr d6, r0, r1 // move first param from r0/r1 pair into d6
|
||||
fmdrr d7, r2, r3 // move second param from r2/r3 pair into d7
|
||||
faddd d6, d6, d7
|
||||
fmrrd r0, r1, d6 // move result back to r0/r1 pair
|
||||
vmov d6, r0, r1 // move first param from r0/r1 pair into d6
|
||||
vmov d7, r2, r3 // move second param from r2/r3 pair into d7
|
||||
vadd.f64 d6, d6, d7
|
||||
vmov r0, r1, d6 // move result back to r0/r1 pair
|
||||
bx lr
|
||||
|
@ -15,10 +15,11 @@
|
||||
// Adds two single precision floating point numbers using the Darwin
|
||||
// calling convention where single arguments are passsed in GPRs
|
||||
//
|
||||
.syntax unified
|
||||
.align 2
|
||||
DEFINE_COMPILERRT_FUNCTION(__addsf3vfp)
|
||||
fmsr s14, r0 // move first param from r0 into float register
|
||||
fmsr s15, r1 // move second param from r1 into float register
|
||||
fadds s14, s14, s15
|
||||
fmrs r0, s14 // move result back to r0
|
||||
vmov s14, r0 // move first param from r0 into float register
|
||||
vmov s15, r1 // move second param from r1 into float register
|
||||
vadd.f32 s14, s14, s15
|
||||
vmov r0, s14 // move result back to r0
|
||||
bx lr
|
||||
|
@ -15,10 +15,11 @@
|
||||
// Divides two double precision floating point numbers using the Darwin
|
||||
// calling convention where double arguments are passsed in GPR pairs
|
||||
//
|
||||
.syntax unified
|
||||
.align 2
|
||||
DEFINE_COMPILERRT_FUNCTION(__divdf3vfp)
|
||||
fmdrr d6, r0, r1 // move first param from r0/r1 pair into d6
|
||||
fmdrr d7, r2, r3 // move second param from r2/r3 pair into d7
|
||||
fdivd d5, d6, d7
|
||||
fmrrd r0, r1, d5 // move result back to r0/r1 pair
|
||||
vmov d6, r0, r1 // move first param from r0/r1 pair into d6
|
||||
vmov d7, r2, r3 // move second param from r2/r3 pair into d7
|
||||
vdiv.f64 d5, d6, d7
|
||||
vmov r0, r1, d5 // move result back to r0/r1 pair
|
||||
bx lr
|
||||
|
@ -15,10 +15,11 @@
|
||||
// Divides two single precision floating point numbers using the Darwin
|
||||
// calling convention where single arguments are passsed like 32-bit ints.
|
||||
//
|
||||
.syntax unified
|
||||
.align 2
|
||||
DEFINE_COMPILERRT_FUNCTION(__divsf3vfp)
|
||||
fmsr s14, r0 // move first param from r0 into float register
|
||||
fmsr s15, r1 // move second param from r1 into float register
|
||||
fdivs s13, s14, s15
|
||||
fmrs r0, s13 // move result back to r0
|
||||
vmov s14, r0 // move first param from r0 into float register
|
||||
vmov s15, r1 // move second param from r1 into float register
|
||||
vdiv.f32 s13, s14, s15
|
||||
vmov r0, s13 // move result back to r0
|
||||
bx lr
|
||||
|
@ -16,12 +16,13 @@
|
||||
// Uses Darwin calling convention where double precision arguments are passsed
|
||||
// like in GPR pairs.
|
||||
//
|
||||
.syntax unified
|
||||
.align 2
|
||||
DEFINE_COMPILERRT_FUNCTION(__eqdf2vfp)
|
||||
fmdrr d6, r0, r1 // load r0/r1 pair in double register
|
||||
fmdrr d7, r2, r3 // load r2/r3 pair in double register
|
||||
fcmpd d6, d7
|
||||
fmstat
|
||||
vmov d6, r0, r1 // load r0/r1 pair in double register
|
||||
vmov d7, r2, r3 // load r2/r3 pair in double register
|
||||
vcmp.f64 d6, d7
|
||||
vmrs apsr_nzcv, fpscr
|
||||
moveq r0, #1 // set result register to 1 if equal
|
||||
movne r0, #0
|
||||
bx lr
|
||||
|
@ -16,12 +16,13 @@
|
||||
// Uses Darwin calling convention where single precision arguments are passsed
|
||||
// like 32-bit ints
|
||||
//
|
||||
.syntax unified
|
||||
.align 2
|
||||
DEFINE_COMPILERRT_FUNCTION(__eqsf2vfp)
|
||||
fmsr s14, r0 // move from GPR 0 to float register
|
||||
fmsr s15, r1 // move from GPR 1 to float register
|
||||
fcmps s14, s15
|
||||
fmstat
|
||||
vmov s14, r0 // move from GPR 0 to float register
|
||||
vmov s15, r1 // move from GPR 1 to float register
|
||||
vcmp.f32 s14, s15
|
||||
vmrs apsr_nzcv, fpscr
|
||||
moveq r0, #1 // set result register to 1 if equal
|
||||
movne r0, #0
|
||||
bx lr
|
||||
|
@ -16,9 +16,10 @@
|
||||
// Uses Darwin calling convention where a single precision parameter is
|
||||
// passed in a GPR and a double precision result is returned in R0/R1 pair.
|
||||
//
|
||||
.syntax unified
|
||||
.align 2
|
||||
DEFINE_COMPILERRT_FUNCTION(__extendsfdf2vfp)
|
||||
fmsr s15, r0 // load float register from R0
|
||||
fcvtds d7, s15 // convert single to double
|
||||
fmrrd r0, r1, d7 // return result in r0/r1 pair
|
||||
vmov s15, r0 // load float register from R0
|
||||
vcvt.f64.f32 d7, s15 // convert single to double
|
||||
vmov r0, r1, d7 // return result in r0/r1 pair
|
||||
bx lr
|
||||
|
@ -16,9 +16,10 @@
|
||||
// Uses Darwin calling convention where a double precision parameter is
|
||||
// passed in GPR register pair.
|
||||
//
|
||||
.syntax unified
|
||||
.align 2
|
||||
DEFINE_COMPILERRT_FUNCTION(__fixdfsivfp)
|
||||
fmdrr d7, r0, r1 // load double register from R0/R1
|
||||
ftosizd s15, d7 // convert double to 32-bit int into s15
|
||||
fmrs r0, s15 // move s15 to result register
|
||||
vmov d7, r0, r1 // load double register from R0/R1
|
||||
vcvt.s32.f64 s15, d7 // convert double to 32-bit int into s15
|
||||
vmov r0, s15 // move s15 to result register
|
||||
bx lr
|
||||
|
@ -16,9 +16,10 @@
|
||||
// Uses Darwin calling convention where a single precision parameter is
|
||||
// passed in a GPR..
|
||||
//
|
||||
.syntax unified
|
||||
.align 2
|
||||
DEFINE_COMPILERRT_FUNCTION(__fixsfsivfp)
|
||||
fmsr s15, r0 // load float register from R0
|
||||
ftosizs s15, s15 // convert single to 32-bit int into s15
|
||||
fmrs r0, s15 // move s15 to result register
|
||||
vmov s15, r0 // load float register from R0
|
||||
vcvt.s32.f32 s15, s15 // convert single to 32-bit int into s15
|
||||
vmov r0, s15 // move s15 to result register
|
||||
bx lr
|
||||
|
@ -17,9 +17,10 @@
|
||||
// Uses Darwin calling convention where a double precision parameter is
|
||||
// passed in GPR register pair.
|
||||
//
|
||||
.syntax unified
|
||||
.align 2
|
||||
DEFINE_COMPILERRT_FUNCTION(__fixunsdfsivfp)
|
||||
fmdrr d7, r0, r1 // load double register from R0/R1
|
||||
ftouizd s15, d7 // convert double to 32-bit int into s15
|
||||
fmrs r0, s15 // move s15 to result register
|
||||
vmov d7, r0, r1 // load double register from R0/R1
|
||||
vcvt.u32.f64 s15, d7 // convert double to 32-bit int into s15
|
||||
vmov r0, s15 // move s15 to result register
|
||||
bx lr
|
||||
|
@ -17,9 +17,10 @@
|
||||
// Uses Darwin calling convention where a single precision parameter is
|
||||
// passed in a GPR..
|
||||
//
|
||||
.syntax unified
|
||||
.align 2
|
||||
DEFINE_COMPILERRT_FUNCTION(__fixunssfsivfp)
|
||||
fmsr s15, r0 // load float register from R0
|
||||
ftouizs s15, s15 // convert single to 32-bit unsigned into s15
|
||||
fmrs r0, s15 // move s15 to result register
|
||||
vmov s15, r0 // load float register from R0
|
||||
vcvt.u32.f32 s15, s15 // convert single to 32-bit unsigned into s15
|
||||
vmov r0, s15 // move s15 to result register
|
||||
bx lr
|
||||
|
@ -16,9 +16,10 @@
|
||||
// Uses Darwin calling convention where a double precision result is
|
||||
// return in GPR register pair.
|
||||
//
|
||||
.syntax unified
|
||||
.align 2
|
||||
DEFINE_COMPILERRT_FUNCTION(__floatsidfvfp)
|
||||
fmsr s15, r0 // move int to float register s15
|
||||
fsitod d7, s15 // convert 32-bit int in s15 to double in d7
|
||||
fmrrd r0, r1, d7 // move d7 to result register pair r0/r1
|
||||
vmov s15, r0 // move int to float register s15
|
||||
vcvt.f64.s32 d7, s15 // convert 32-bit int in s15 to double in d7
|
||||
vmov r0, r1, d7 // move d7 to result register pair r0/r1
|
||||
bx lr
|
||||
|
@ -16,9 +16,10 @@
|
||||
// Uses Darwin calling convention where a single precision result is
|
||||
// return in a GPR..
|
||||
//
|
||||
.syntax unified
|
||||
.align 2
|
||||
DEFINE_COMPILERRT_FUNCTION(__floatsisfvfp)
|
||||
fmsr s15, r0 // move int to float register s15
|
||||
fsitos s15, s15 // convert 32-bit int in s15 to float in s15
|
||||
fmrs r0, s15 // move s15 to result register
|
||||
vmov s15, r0 // move int to float register s15
|
||||
vcvt.f32.s32 s15, s15 // convert 32-bit int in s15 to float in s15
|
||||
vmov r0, s15 // move s15 to result register
|
||||
bx lr
|
||||
|
@ -16,9 +16,10 @@
|
||||
// Uses Darwin calling convention where a double precision result is
|
||||
// return in GPR register pair.
|
||||
//
|
||||
.syntax unified
|
||||
.align 2
|
||||
DEFINE_COMPILERRT_FUNCTION(__floatunssidfvfp)
|
||||
fmsr s15, r0 // move int to float register s15
|
||||
fuitod d7, s15 // convert 32-bit int in s15 to double in d7
|
||||
fmrrd r0, r1, d7 // move d7 to result register pair r0/r1
|
||||
vmov s15, r0 // move int to float register s15
|
||||
vcvt.f64.u32 d7, s15 // convert 32-bit int in s15 to double in d7
|
||||
vmov r0, r1, d7 // move d7 to result register pair r0/r1
|
||||
bx lr
|
||||
|
@ -16,9 +16,10 @@
|
||||
// Uses Darwin calling convention where a single precision result is
|
||||
// return in a GPR..
|
||||
//
|
||||
.syntax unified
|
||||
.align 2
|
||||
DEFINE_COMPILERRT_FUNCTION(__floatunssisfvfp)
|
||||
fmsr s15, r0 // move int to float register s15
|
||||
fuitos s15, s15 // convert 32-bit int in s15 to float in s15
|
||||
fmrs r0, s15 // move s15 to result register
|
||||
vmov s15, r0 // move int to float register s15
|
||||
vcvt.f32.u32 s15, s15 // convert 32-bit int in s15 to float in s15
|
||||
vmov r0, s15 // move s15 to result register
|
||||
bx lr
|
||||
|
@ -16,12 +16,13 @@
|
||||
// Uses Darwin calling convention where double precision arguments are passsed
|
||||
// like in GPR pairs.
|
||||
//
|
||||
.syntax unified
|
||||
.align 2
|
||||
DEFINE_COMPILERRT_FUNCTION(__gedf2vfp)
|
||||
fmdrr d6, r0, r1 // load r0/r1 pair in double register
|
||||
fmdrr d7, r2, r3 // load r2/r3 pair in double register
|
||||
fcmpd d6, d7
|
||||
fmstat
|
||||
vmov d6, r0, r1 // load r0/r1 pair in double register
|
||||
vmov d7, r2, r3 // load r2/r3 pair in double register
|
||||
vcmp.f64 d6, d7
|
||||
vmrs apsr_nzcv, fpscr
|
||||
movge r0, #1 // set result register to 1 if greater than or equal
|
||||
movlt r0, #0
|
||||
bx lr
|
||||
|
@ -16,12 +16,13 @@
|
||||
// Uses Darwin calling convention where single precision arguments are passsed
|
||||
// like 32-bit ints
|
||||
//
|
||||
.syntax unified
|
||||
.align 2
|
||||
DEFINE_COMPILERRT_FUNCTION(__gesf2vfp)
|
||||
fmsr s14, r0 // move from GPR 0 to float register
|
||||
fmsr s15, r1 // move from GPR 1 to float register
|
||||
fcmps s14, s15
|
||||
fmstat
|
||||
vmov s14, r0 // move from GPR 0 to float register
|
||||
vmov s15, r1 // move from GPR 1 to float register
|
||||
vcmp.f32 s14, s15
|
||||
vmrs apsr_nzcv, fpscr
|
||||
movge r0, #1 // set result register to 1 if greater than or equal
|
||||
movlt r0, #0
|
||||
bx lr
|
||||
|
@ -16,12 +16,13 @@
|
||||
// Uses Darwin calling convention where double precision arguments are passsed
|
||||
// like in GPR pairs.
|
||||
//
|
||||
.syntax unified
|
||||
.align 2
|
||||
DEFINE_COMPILERRT_FUNCTION(__gtdf2vfp)
|
||||
fmdrr d6, r0, r1 // load r0/r1 pair in double register
|
||||
fmdrr d7, r2, r3 // load r2/r3 pair in double register
|
||||
fcmpd d6, d7
|
||||
fmstat
|
||||
vmov d6, r0, r1 // load r0/r1 pair in double register
|
||||
vmov d7, r2, r3 // load r2/r3 pair in double register
|
||||
vcmp.f64 d6, d7
|
||||
vmrs apsr_nzcv, fpscr
|
||||
movgt r0, #1 // set result register to 1 if equal
|
||||
movle r0, #0
|
||||
bx lr
|
||||
|
@ -16,12 +16,13 @@
|
||||
// Uses Darwin calling convention where single precision arguments are passsed
|
||||
// like 32-bit ints
|
||||
//
|
||||
.syntax unified
|
||||
.align 2
|
||||
DEFINE_COMPILERRT_FUNCTION(__gtsf2vfp)
|
||||
fmsr s14, r0 // move from GPR 0 to float register
|
||||
fmsr s15, r1 // move from GPR 1 to float register
|
||||
fcmps s14, s15
|
||||
fmstat
|
||||
vmov s14, r0 // move from GPR 0 to float register
|
||||
vmov s15, r1 // move from GPR 1 to float register
|
||||
vcmp.f32 s14, s15
|
||||
vmrs apsr_nzcv, fpscr
|
||||
movgt r0, #1 // set result register to 1 if equal
|
||||
movle r0, #0
|
||||
bx lr
|
||||
|
@ -16,12 +16,13 @@
|
||||
// Uses Darwin calling convention where double precision arguments are passsed
|
||||
// like in GPR pairs.
|
||||
//
|
||||
.syntax unified
|
||||
.align 2
|
||||
DEFINE_COMPILERRT_FUNCTION(__ledf2vfp)
|
||||
fmdrr d6, r0, r1 // load r0/r1 pair in double register
|
||||
fmdrr d7, r2, r3 // load r2/r3 pair in double register
|
||||
fcmpd d6, d7
|
||||
fmstat
|
||||
vmov d6, r0, r1 // load r0/r1 pair in double register
|
||||
vmov d7, r2, r3 // load r2/r3 pair in double register
|
||||
vcmp.f64 d6, d7
|
||||
vmrs apsr_nzcv, fpscr
|
||||
movls r0, #1 // set result register to 1 if equal
|
||||
movhi r0, #0
|
||||
bx lr
|
||||
|
@ -16,12 +16,13 @@
|
||||
// Uses Darwin calling convention where single precision arguments are passsed
|
||||
// like 32-bit ints
|
||||
//
|
||||
.syntax unified
|
||||
.align 2
|
||||
DEFINE_COMPILERRT_FUNCTION(__lesf2vfp)
|
||||
fmsr s14, r0 // move from GPR 0 to float register
|
||||
fmsr s15, r1 // move from GPR 1 to float register
|
||||
fcmps s14, s15
|
||||
fmstat
|
||||
vmov s14, r0 // move from GPR 0 to float register
|
||||
vmov s15, r1 // move from GPR 1 to float register
|
||||
vcmp.f32 s14, s15
|
||||
vmrs apsr_nzcv, fpscr
|
||||
movls r0, #1 // set result register to 1 if equal
|
||||
movhi r0, #0
|
||||
bx lr
|
||||
|
@ -16,12 +16,13 @@
|
||||
// Uses Darwin calling convention where double precision arguments are passsed
|
||||
// like in GPR pairs.
|
||||
//
|
||||
.syntax unified
|
||||
.align 2
|
||||
DEFINE_COMPILERRT_FUNCTION(__ltdf2vfp)
|
||||
fmdrr d6, r0, r1 // load r0/r1 pair in double register
|
||||
fmdrr d7, r2, r3 // load r2/r3 pair in double register
|
||||
fcmpd d6, d7
|
||||
fmstat
|
||||
vmov d6, r0, r1 // load r0/r1 pair in double register
|
||||
vmov d7, r2, r3 // load r2/r3 pair in double register
|
||||
vcmp.f64 d6, d7
|
||||
vmrs apsr_nzcv, fpscr
|
||||
movmi r0, #1 // set result register to 1 if equal
|
||||
movpl r0, #0
|
||||
bx lr
|
||||
|
@ -16,12 +16,13 @@
|
||||
// Uses Darwin calling convention where single precision arguments are passsed
|
||||
// like 32-bit ints
|
||||
//
|
||||
.syntax unified
|
||||
.align 2
|
||||
DEFINE_COMPILERRT_FUNCTION(__ltsf2vfp)
|
||||
fmsr s14, r0 // move from GPR 0 to float register
|
||||
fmsr s15, r1 // move from GPR 1 to float register
|
||||
fcmps s14, s15
|
||||
fmstat
|
||||
vmov s14, r0 // move from GPR 0 to float register
|
||||
vmov s15, r1 // move from GPR 1 to float register
|
||||
vcmp.f32 s14, s15
|
||||
vmrs apsr_nzcv, fpscr
|
||||
movmi r0, #1 // set result register to 1 if equal
|
||||
movpl r0, #0
|
||||
bx lr
|
||||
|
@ -15,10 +15,11 @@
|
||||
// Multiplies two double precision floating point numbers using the Darwin
|
||||
// calling convention where double arguments are passsed in GPR pairs
|
||||
//
|
||||
.syntax unified
|
||||
.align 2
|
||||
DEFINE_COMPILERRT_FUNCTION(__muldf3vfp)
|
||||
fmdrr d6, r0, r1 // move first param from r0/r1 pair into d6
|
||||
fmdrr d7, r2, r3 // move second param from r2/r3 pair into d7
|
||||
fmuld d6, d6, d7
|
||||
fmrrd r0, r1, d6 // move result back to r0/r1 pair
|
||||
vmov d6, r0, r1 // move first param from r0/r1 pair into d6
|
||||
vmov d7, r2, r3 // move second param from r2/r3 pair into d7
|
||||
vmul.f64 d6, d6, d7
|
||||
vmov r0, r1, d6 // move result back to r0/r1 pair
|
||||
bx lr
|
||||
|
@ -15,10 +15,11 @@
|
||||
// Multiplies two single precision floating point numbers using the Darwin
|
||||
// calling convention where single arguments are passsed like 32-bit ints.
|
||||
//
|
||||
.syntax unified
|
||||
.align 2
|
||||
DEFINE_COMPILERRT_FUNCTION(__mulsf3vfp)
|
||||
fmsr s14, r0 // move first param from r0 into float register
|
||||
fmsr s15, r1 // move second param from r1 into float register
|
||||
fmuls s13, s14, s15
|
||||
fmrs r0, s13 // move result back to r0
|
||||
vmov s14, r0 // move first param from r0 into float register
|
||||
vmov s15, r1 // move second param from r1 into float register
|
||||
vmul.f32 s13, s14, s15
|
||||
vmov r0, s13 // move result back to r0
|
||||
bx lr
|
||||
|
@ -16,12 +16,13 @@
|
||||
// Uses Darwin calling convention where double precision arguments are passsed
|
||||
// like in GPR pairs.
|
||||
//
|
||||
.syntax unified
|
||||
.align 2
|
||||
DEFINE_COMPILERRT_FUNCTION(__nedf2vfp)
|
||||
fmdrr d6, r0, r1 // load r0/r1 pair in double register
|
||||
fmdrr d7, r2, r3 // load r2/r3 pair in double register
|
||||
fcmpd d6, d7
|
||||
fmstat
|
||||
vmov d6, r0, r1 // load r0/r1 pair in double register
|
||||
vmov d7, r2, r3 // load r2/r3 pair in double register
|
||||
vcmp.f64 d6, d7
|
||||
vmrs apsr_nzcv, fpscr
|
||||
movne r0, #1 // set result register to 0 if unequal
|
||||
moveq r0, #0
|
||||
bx lr
|
||||
|
@ -15,6 +15,7 @@
|
||||
// Returns the negation a double precision floating point numbers using the
|
||||
// Darwin calling convention where double arguments are passsed in GPR pairs.
|
||||
//
|
||||
.syntax unified
|
||||
.align 2
|
||||
DEFINE_COMPILERRT_FUNCTION(__negdf2vfp)
|
||||
eor r1, r1, #-2147483648 // flip sign bit on double in r0/r1 pair
|
||||
|
@ -15,6 +15,7 @@
|
||||
// Returns the negation of a single precision floating point numbers using the
|
||||
// Darwin calling convention where single arguments are passsed like 32-bit ints
|
||||
//
|
||||
.syntax unified
|
||||
.align 2
|
||||
DEFINE_COMPILERRT_FUNCTION(__negsf2vfp)
|
||||
eor r0, r0, #-2147483648 // flip sign bit on float in r0
|
||||
|
@ -16,12 +16,13 @@
|
||||
// Uses Darwin calling convention where single precision arguments are passsed
|
||||
// like 32-bit ints
|
||||
//
|
||||
.syntax unified
|
||||
.align 2
|
||||
DEFINE_COMPILERRT_FUNCTION(__nesf2vfp)
|
||||
fmsr s14, r0 // move from GPR 0 to float register
|
||||
fmsr s15, r1 // move from GPR 1 to float register
|
||||
fcmps s14, s15
|
||||
fmstat
|
||||
vmov s14, r0 // move from GPR 0 to float register
|
||||
vmov s15, r1 // move from GPR 1 to float register
|
||||
vcmp.f32 s14, s15
|
||||
vmrs apsr_nzcv, fpscr
|
||||
movne r0, #1 // set result register to 1 if unequal
|
||||
moveq r0, #0
|
||||
bx lr
|
||||
|
@ -15,10 +15,11 @@
|
||||
// Returns difference between two double precision floating point numbers using
|
||||
// the Darwin calling convention where double arguments are passsed in GPR pairs
|
||||
//
|
||||
.syntax unified
|
||||
.align 2
|
||||
DEFINE_COMPILERRT_FUNCTION(__subdf3vfp)
|
||||
fmdrr d6, r0, r1 // move first param from r0/r1 pair into d6
|
||||
fmdrr d7, r2, r3 // move second param from r2/r3 pair into d7
|
||||
fsubd d6, d6, d7
|
||||
fmrrd r0, r1, d6 // move result back to r0/r1 pair
|
||||
vmov d6, r0, r1 // move first param from r0/r1 pair into d6
|
||||
vmov d7, r2, r3 // move second param from r2/r3 pair into d7
|
||||
vsub.f64 d6, d6, d7
|
||||
vmov r0, r1, d6 // move result back to r0/r1 pair
|
||||
bx lr
|
||||
|
@ -16,10 +16,11 @@
|
||||
// using the Darwin calling convention where single arguments are passsed
|
||||
// like 32-bit ints.
|
||||
//
|
||||
.syntax unified
|
||||
.align 2
|
||||
DEFINE_COMPILERRT_FUNCTION(__subsf3vfp)
|
||||
fmsr s14, r0 // move first param from r0 into float register
|
||||
fmsr s15, r1 // move second param from r1 into float register
|
||||
fsubs s14, s14, s15
|
||||
fmrs r0, s14 // move result back to r0
|
||||
vmov s14, r0 // move first param from r0 into float register
|
||||
vmov s15, r1 // move second param from r1 into float register
|
||||
vsub.f32 s14, s14, s15
|
||||
vmov r0, s14 // move result back to r0
|
||||
bx lr
|
||||
|
@ -16,9 +16,10 @@
|
||||
// Uses Darwin calling convention where a double precision parameter is
|
||||
// passed in a R0/R1 pair and a signle precision result is returned in R0.
|
||||
//
|
||||
.syntax unified
|
||||
.align 2
|
||||
DEFINE_COMPILERRT_FUNCTION(__truncdfsf2vfp)
|
||||
fmdrr d7, r0, r1 // load double from r0/r1 pair
|
||||
fcvtsd s15, d7 // convert double to single (trucate precision)
|
||||
fmrs r0, s15 // return result in r0
|
||||
vmov d7, r0, r1 // load double from r0/r1 pair
|
||||
vcvt.f32.f64 s15, d7 // convert double to single (trucate precision)
|
||||
vmov r0, s15 // return result in r0
|
||||
bx lr
|
||||
|
@ -16,12 +16,13 @@
|
||||
// Uses Darwin calling convention where double precision arguments are passsed
|
||||
// like in GPR pairs.
|
||||
//
|
||||
.syntax unified
|
||||
.align 2
|
||||
DEFINE_COMPILERRT_FUNCTION(__unorddf2vfp)
|
||||
fmdrr d6, r0, r1 // load r0/r1 pair in double register
|
||||
fmdrr d7, r2, r3 // load r2/r3 pair in double register
|
||||
fcmpd d6, d7
|
||||
fmstat
|
||||
vmov d6, r0, r1 // load r0/r1 pair in double register
|
||||
vmov d7, r2, r3 // load r2/r3 pair in double register
|
||||
vcmp.f64 d6, d7
|
||||
vmrs apsr_nzcv, fpscr
|
||||
movvs r0, #1 // set result register to 1 if "overflow" (any NaNs)
|
||||
movvc r0, #0
|
||||
bx lr
|
||||
|
@ -16,12 +16,13 @@
|
||||
// Uses Darwin calling convention where single precision arguments are passsed
|
||||
// like 32-bit ints
|
||||
//
|
||||
.syntax unified
|
||||
.align 2
|
||||
DEFINE_COMPILERRT_FUNCTION(__unordsf2vfp)
|
||||
fmsr s14, r0 // move from GPR 0 to float register
|
||||
fmsr s15, r1 // move from GPR 1 to float register
|
||||
fcmps s14, s15
|
||||
fmstat
|
||||
vmov s14, r0 // move from GPR 0 to float register
|
||||
vmov s15, r1 // move from GPR 1 to float register
|
||||
vcmp.f32 s14, s15
|
||||
vmrs apsr_nzcv, fpscr
|
||||
movvs r0, #1 // set result register to 1 if "overflow" (any NaNs)
|
||||
movvc r0, #0
|
||||
bx lr
|
||||
|
@ -11,7 +11,6 @@
|
||||
*
|
||||
* ===----------------------------------------------------------------------===
|
||||
*/
|
||||
#include "abi.h"
|
||||
|
||||
#include "int_lib.h"
|
||||
|
||||
|
@ -11,7 +11,6 @@
|
||||
*
|
||||
* ===----------------------------------------------------------------------===
|
||||
*/
|
||||
#include "abi.h"
|
||||
|
||||
#include "int_lib.h"
|
||||
|
||||
|
@ -35,15 +35,16 @@
|
||||
#define SYMBOL_NAME(name) GLUE(__USER_LABEL_PREFIX__, name)
|
||||
|
||||
#ifdef VISIBILITY_HIDDEN
|
||||
#define DEFINE_COMPILERRT_FUNCTION(name) \
|
||||
.globl SYMBOL_NAME(name) SEPARATOR \
|
||||
HIDDEN_DIRECTIVE SYMBOL_NAME(name) SEPARATOR \
|
||||
SYMBOL_NAME(name):
|
||||
#define DECLARE_SYMBOL_VISIBILITY(name) \
|
||||
HIDDEN_DIRECTIVE SYMBOL_NAME(name) SEPARATOR
|
||||
#else
|
||||
#define DECLARE_SYMBOL_VISIBILITY(name)
|
||||
#endif
|
||||
|
||||
#define DEFINE_COMPILERRT_FUNCTION(name) \
|
||||
.globl SYMBOL_NAME(name) SEPARATOR \
|
||||
DECLARE_SYMBOL_VISIBILITY(name) \
|
||||
SYMBOL_NAME(name):
|
||||
#endif
|
||||
|
||||
#define DEFINE_COMPILERRT_PRIVATE_FUNCTION(name) \
|
||||
.globl SYMBOL_NAME(name) SEPARATOR \
|
||||
|
@ -9,7 +9,6 @@
|
||||
*/
|
||||
|
||||
#include "int_lib.h"
|
||||
#include <stdlib.h>
|
||||
|
||||
#if __APPLE__
|
||||
#include <libkern/OSCacheControl.h>
|
||||
|
@ -11,7 +11,6 @@
|
||||
*
|
||||
* ===----------------------------------------------------------------------===
|
||||
*/
|
||||
#include "abi.h"
|
||||
|
||||
#include "int_lib.h"
|
||||
|
||||
|
@ -11,7 +11,6 @@
|
||||
*
|
||||
* ===----------------------------------------------------------------------===
|
||||
*/
|
||||
#include "abi.h"
|
||||
|
||||
#include "int_lib.h"
|
||||
|
||||
|
@ -11,7 +11,6 @@
|
||||
*
|
||||
* ===----------------------------------------------------------------------===
|
||||
*/
|
||||
#include "abi.h"
|
||||
|
||||
#include "int_lib.h"
|
||||
|
||||
|
@ -11,7 +11,6 @@
|
||||
*
|
||||
* ===----------------------------------------------------------------------===
|
||||
*/
|
||||
#include "abi.h"
|
||||
|
||||
#include "int_lib.h"
|
||||
|
||||
|
@ -11,7 +11,6 @@
|
||||
*
|
||||
* ===----------------------------------------------------------------------===
|
||||
*/
|
||||
#include "abi.h"
|
||||
|
||||
#include "int_lib.h"
|
||||
|
||||
|
@ -13,8 +13,7 @@
|
||||
*/
|
||||
|
||||
#include "int_lib.h"
|
||||
#include <math.h>
|
||||
#include <complex.h>
|
||||
#include "int_math.h"
|
||||
|
||||
/* Returns: the quotient of (a + ib) / (c + id) */
|
||||
|
||||
@ -22,35 +21,37 @@ double _Complex
|
||||
__divdc3(double __a, double __b, double __c, double __d)
|
||||
{
|
||||
int __ilogbw = 0;
|
||||
double __logbw = logb(fmax(fabs(__c), fabs(__d)));
|
||||
if (isfinite(__logbw))
|
||||
double __logbw = crt_logb(crt_fmax(crt_fabs(__c), crt_fabs(__d)));
|
||||
if (crt_isfinite(__logbw))
|
||||
{
|
||||
__ilogbw = (int)__logbw;
|
||||
__c = scalbn(__c, -__ilogbw);
|
||||
__d = scalbn(__d, -__ilogbw);
|
||||
__c = crt_scalbn(__c, -__ilogbw);
|
||||
__d = crt_scalbn(__d, -__ilogbw);
|
||||
}
|
||||
double __denom = __c * __c + __d * __d;
|
||||
double _Complex z;
|
||||
__real__ z = scalbn((__a * __c + __b * __d) / __denom, -__ilogbw);
|
||||
__imag__ z = scalbn((__b * __c - __a * __d) / __denom, -__ilogbw);
|
||||
if (isnan(__real__ z) && isnan(__imag__ z))
|
||||
__real__ z = crt_scalbn((__a * __c + __b * __d) / __denom, -__ilogbw);
|
||||
__imag__ z = crt_scalbn((__b * __c - __a * __d) / __denom, -__ilogbw);
|
||||
if (crt_isnan(__real__ z) && crt_isnan(__imag__ z))
|
||||
{
|
||||
if ((__denom == 0.0) && (!isnan(__a) || !isnan(__b)))
|
||||
if ((__denom == 0.0) && (!crt_isnan(__a) || !crt_isnan(__b)))
|
||||
{
|
||||
__real__ z = copysign(INFINITY, __c) * __a;
|
||||
__imag__ z = copysign(INFINITY, __c) * __b;
|
||||
__real__ z = crt_copysign(CRT_INFINITY, __c) * __a;
|
||||
__imag__ z = crt_copysign(CRT_INFINITY, __c) * __b;
|
||||
}
|
||||
else if ((isinf(__a) || isinf(__b)) && isfinite(__c) && isfinite(__d))
|
||||
else if ((crt_isinf(__a) || crt_isinf(__b)) &&
|
||||
crt_isfinite(__c) && crt_isfinite(__d))
|
||||
{
|
||||
__a = copysign(isinf(__a) ? 1.0 : 0.0, __a);
|
||||
__b = copysign(isinf(__b) ? 1.0 : 0.0, __b);
|
||||
__real__ z = INFINITY * (__a * __c + __b * __d);
|
||||
__imag__ z = INFINITY * (__b * __c - __a * __d);
|
||||
__a = crt_copysign(crt_isinf(__a) ? 1.0 : 0.0, __a);
|
||||
__b = crt_copysign(crt_isinf(__b) ? 1.0 : 0.0, __b);
|
||||
__real__ z = CRT_INFINITY * (__a * __c + __b * __d);
|
||||
__imag__ z = CRT_INFINITY * (__b * __c - __a * __d);
|
||||
}
|
||||
else if (isinf(__logbw) && __logbw > 0.0 && isfinite(__a) && isfinite(__b))
|
||||
else if (crt_isinf(__logbw) && __logbw > 0.0 &&
|
||||
crt_isfinite(__a) && crt_isfinite(__b))
|
||||
{
|
||||
__c = copysign(isinf(__c) ? 1.0 : 0.0, __c);
|
||||
__d = copysign(isinf(__d) ? 1.0 : 0.0, __d);
|
||||
__c = crt_copysign(crt_isinf(__c) ? 1.0 : 0.0, __c);
|
||||
__d = crt_copysign(crt_isinf(__d) ? 1.0 : 0.0, __d);
|
||||
__real__ z = 0.0 * (__a * __c + __b * __d);
|
||||
__imag__ z = 0.0 * (__b * __c - __a * __d);
|
||||
}
|
||||
|
@ -15,7 +15,6 @@
|
||||
// underflow with correct rounding.
|
||||
//
|
||||
//===----------------------------------------------------------------------===//
|
||||
#include "abi.h"
|
||||
|
||||
#define DOUBLE_PRECISION
|
||||
#include "fp_lib.h"
|
||||
|
@ -11,7 +11,6 @@
|
||||
*
|
||||
* ===----------------------------------------------------------------------===
|
||||
*/
|
||||
#include "abi.h"
|
||||
|
||||
#include "int_lib.h"
|
||||
|
||||
|
@ -11,7 +11,6 @@
|
||||
*
|
||||
* ===----------------------------------------------------------------------===
|
||||
*/
|
||||
#include "abi.h"
|
||||
|
||||
#include "int_lib.h"
|
||||
|
||||
|
@ -11,7 +11,6 @@
|
||||
*
|
||||
* ===----------------------------------------------------------------------===
|
||||
*/
|
||||
#include "abi.h"
|
||||
|
||||
#include "int_lib.h"
|
||||
|
||||
|
@ -13,8 +13,7 @@
|
||||
*/
|
||||
|
||||
#include "int_lib.h"
|
||||
#include <math.h>
|
||||
#include <complex.h>
|
||||
#include "int_math.h"
|
||||
|
||||
/* Returns: the quotient of (a + ib) / (c + id) */
|
||||
|
||||
@ -22,35 +21,37 @@ float _Complex
|
||||
__divsc3(float __a, float __b, float __c, float __d)
|
||||
{
|
||||
int __ilogbw = 0;
|
||||
float __logbw = logbf(fmaxf(fabsf(__c), fabsf(__d)));
|
||||
if (isfinite(__logbw))
|
||||
float __logbw = crt_logbf(crt_fmaxf(crt_fabsf(__c), crt_fabsf(__d)));
|
||||
if (crt_isfinite(__logbw))
|
||||
{
|
||||
__ilogbw = (int)__logbw;
|
||||
__c = scalbnf(__c, -__ilogbw);
|
||||
__d = scalbnf(__d, -__ilogbw);
|
||||
__c = crt_scalbnf(__c, -__ilogbw);
|
||||
__d = crt_scalbnf(__d, -__ilogbw);
|
||||
}
|
||||
float __denom = __c * __c + __d * __d;
|
||||
float _Complex z;
|
||||
__real__ z = scalbnf((__a * __c + __b * __d) / __denom, -__ilogbw);
|
||||
__imag__ z = scalbnf((__b * __c - __a * __d) / __denom, -__ilogbw);
|
||||
if (isnan(__real__ z) && isnan(__imag__ z))
|
||||
__real__ z = crt_scalbnf((__a * __c + __b * __d) / __denom, -__ilogbw);
|
||||
__imag__ z = crt_scalbnf((__b * __c - __a * __d) / __denom, -__ilogbw);
|
||||
if (crt_isnan(__real__ z) && crt_isnan(__imag__ z))
|
||||
{
|
||||
if ((__denom == 0) && (!isnan(__a) || !isnan(__b)))
|
||||
if ((__denom == 0) && (!crt_isnan(__a) || !crt_isnan(__b)))
|
||||
{
|
||||
__real__ z = copysignf(INFINITY, __c) * __a;
|
||||
__imag__ z = copysignf(INFINITY, __c) * __b;
|
||||
__real__ z = crt_copysignf(CRT_INFINITY, __c) * __a;
|
||||
__imag__ z = crt_copysignf(CRT_INFINITY, __c) * __b;
|
||||
}
|
||||
else if ((isinf(__a) || isinf(__b)) && isfinite(__c) && isfinite(__d))
|
||||
else if ((crt_isinf(__a) || crt_isinf(__b)) &&
|
||||
crt_isfinite(__c) && crt_isfinite(__d))
|
||||
{
|
||||
__a = copysignf(isinf(__a) ? 1 : 0, __a);
|
||||
__b = copysignf(isinf(__b) ? 1 : 0, __b);
|
||||
__real__ z = INFINITY * (__a * __c + __b * __d);
|
||||
__imag__ z = INFINITY * (__b * __c - __a * __d);
|
||||
__a = crt_copysignf(crt_isinf(__a) ? 1 : 0, __a);
|
||||
__b = crt_copysignf(crt_isinf(__b) ? 1 : 0, __b);
|
||||
__real__ z = CRT_INFINITY * (__a * __c + __b * __d);
|
||||
__imag__ z = CRT_INFINITY * (__b * __c - __a * __d);
|
||||
}
|
||||
else if (isinf(__logbw) && __logbw > 0 && isfinite(__a) && isfinite(__b))
|
||||
else if (crt_isinf(__logbw) && __logbw > 0 &&
|
||||
crt_isfinite(__a) && crt_isfinite(__b))
|
||||
{
|
||||
__c = copysignf(isinf(__c) ? 1 : 0, __c);
|
||||
__d = copysignf(isinf(__d) ? 1 : 0, __d);
|
||||
__c = crt_copysignf(crt_isinf(__c) ? 1 : 0, __c);
|
||||
__d = crt_copysignf(crt_isinf(__d) ? 1 : 0, __d);
|
||||
__real__ z = 0 * (__a * __c + __b * __d);
|
||||
__imag__ z = 0 * (__b * __c - __a * __d);
|
||||
}
|
||||
|
@ -15,7 +15,6 @@
|
||||
// underflow with correct rounding.
|
||||
//
|
||||
//===----------------------------------------------------------------------===//
|
||||
#include "abi.h"
|
||||
|
||||
#define SINGLE_PRECISION
|
||||
#include "fp_lib.h"
|
||||
|
@ -11,7 +11,6 @@
|
||||
*
|
||||
* ===----------------------------------------------------------------------===
|
||||
*/
|
||||
#include "abi.h"
|
||||
|
||||
#include "int_lib.h"
|
||||
|
||||
|
@ -14,8 +14,7 @@
|
||||
#if !_ARCH_PPC
|
||||
|
||||
#include "int_lib.h"
|
||||
#include <math.h>
|
||||
#include <complex.h>
|
||||
#include "int_math.h"
|
||||
|
||||
/* Returns: the quotient of (a + ib) / (c + id) */
|
||||
|
||||
@ -23,35 +22,37 @@ long double _Complex
|
||||
__divxc3(long double __a, long double __b, long double __c, long double __d)
|
||||
{
|
||||
int __ilogbw = 0;
|
||||
long double __logbw = logbl(fmaxl(fabsl(__c), fabsl(__d)));
|
||||
if (isfinite(__logbw))
|
||||
long double __logbw = crt_logbl(crt_fmaxl(crt_fabsl(__c), crt_fabsl(__d)));
|
||||
if (crt_isfinite(__logbw))
|
||||
{
|
||||
__ilogbw = (int)__logbw;
|
||||
__c = scalbnl(__c, -__ilogbw);
|
||||
__d = scalbnl(__d, -__ilogbw);
|
||||
__c = crt_scalbnl(__c, -__ilogbw);
|
||||
__d = crt_scalbnl(__d, -__ilogbw);
|
||||
}
|
||||
long double __denom = __c * __c + __d * __d;
|
||||
long double _Complex z;
|
||||
__real__ z = scalbnl((__a * __c + __b * __d) / __denom, -__ilogbw);
|
||||
__imag__ z = scalbnl((__b * __c - __a * __d) / __denom, -__ilogbw);
|
||||
if (isnan(__real__ z) && isnan(__imag__ z))
|
||||
__real__ z = crt_scalbnl((__a * __c + __b * __d) / __denom, -__ilogbw);
|
||||
__imag__ z = crt_scalbnl((__b * __c - __a * __d) / __denom, -__ilogbw);
|
||||
if (crt_isnan(__real__ z) && crt_isnan(__imag__ z))
|
||||
{
|
||||
if ((__denom == 0) && (!isnan(__a) || !isnan(__b)))
|
||||
if ((__denom == 0) && (!crt_isnan(__a) || !crt_isnan(__b)))
|
||||
{
|
||||
__real__ z = copysignl(INFINITY, __c) * __a;
|
||||
__imag__ z = copysignl(INFINITY, __c) * __b;
|
||||
__real__ z = crt_copysignl(CRT_INFINITY, __c) * __a;
|
||||
__imag__ z = crt_copysignl(CRT_INFINITY, __c) * __b;
|
||||
}
|
||||
else if ((isinf(__a) || isinf(__b)) && isfinite(__c) && isfinite(__d))
|
||||
else if ((crt_isinf(__a) || crt_isinf(__b)) &&
|
||||
crt_isfinite(__c) && crt_isfinite(__d))
|
||||
{
|
||||
__a = copysignl(isinf(__a) ? 1 : 0, __a);
|
||||
__b = copysignl(isinf(__b) ? 1 : 0, __b);
|
||||
__real__ z = INFINITY * (__a * __c + __b * __d);
|
||||
__imag__ z = INFINITY * (__b * __c - __a * __d);
|
||||
__a = crt_copysignl(crt_isinf(__a) ? 1 : 0, __a);
|
||||
__b = crt_copysignl(crt_isinf(__b) ? 1 : 0, __b);
|
||||
__real__ z = CRT_INFINITY * (__a * __c + __b * __d);
|
||||
__imag__ z = CRT_INFINITY * (__b * __c - __a * __d);
|
||||
}
|
||||
else if (isinf(__logbw) && __logbw > 0 && isfinite(__a) && isfinite(__b))
|
||||
else if (crt_isinf(__logbw) && __logbw > 0 &&
|
||||
crt_isfinite(__a) && crt_isfinite(__b))
|
||||
{
|
||||
__c = copysignl(isinf(__c) ? 1 : 0, __c);
|
||||
__d = copysignl(isinf(__d) ? 1 : 0, __d);
|
||||
__c = crt_copysignl(crt_isinf(__c) ? 1 : 0, __c);
|
||||
__d = crt_copysignl(crt_isinf(__d) ? 1 : 0, __d);
|
||||
__real__ z = 0 * (__a * __c + __b * __d);
|
||||
__imag__ z = 0 * (__b * __c - __a * __d);
|
||||
}
|
||||
|
@ -8,7 +8,8 @@
|
||||
* ===----------------------------------------------------------------------===
|
||||
*/
|
||||
|
||||
#include <stdint.h>
|
||||
#include "int_lib.h"
|
||||
|
||||
#include <sys/mman.h>
|
||||
|
||||
/* #include "config.h"
|
||||
|
@ -12,7 +12,6 @@
|
||||
|
||||
#include "int_lib.h"
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
|
||||
|
||||
/*
|
||||
|
@ -38,10 +38,7 @@
|
||||
//
|
||||
//===----------------------------------------------------------------------===//
|
||||
|
||||
#include <stdint.h>
|
||||
#include <limits.h>
|
||||
|
||||
#include "abi.h"
|
||||
#include "int_lib.h"
|
||||
|
||||
typedef float src_t;
|
||||
typedef uint32_t src_rep_t;
|
||||
|
@ -11,7 +11,6 @@
|
||||
*
|
||||
* ===----------------------------------------------------------------------===
|
||||
*/
|
||||
#include "abi.h"
|
||||
|
||||
#include "int_lib.h"
|
||||
|
||||
|
@ -11,7 +11,6 @@
|
||||
*
|
||||
* ===----------------------------------------------------------------------===
|
||||
*/
|
||||
#include "abi.h"
|
||||
|
||||
#include "int_lib.h"
|
||||
|
||||
|
@ -12,7 +12,6 @@
|
||||
// conversion is undefined for out of range values in the C standard.
|
||||
//
|
||||
//===----------------------------------------------------------------------===//
|
||||
#include "abi.h"
|
||||
|
||||
#define DOUBLE_PRECISION
|
||||
#include "fp_lib.h"
|
||||
|
@ -11,7 +11,6 @@
|
||||
*
|
||||
* ===----------------------------------------------------------------------===
|
||||
*/
|
||||
#include "abi.h"
|
||||
|
||||
#include "int_lib.h"
|
||||
|
||||
|
@ -12,7 +12,6 @@
|
||||
// conversion is undefined for out of range values in the C standard.
|
||||
//
|
||||
//===----------------------------------------------------------------------===//
|
||||
#include "abi.h"
|
||||
|
||||
#define SINGLE_PRECISION
|
||||
#include "fp_lib.h"
|
||||
|
@ -11,7 +11,6 @@
|
||||
*
|
||||
* ===----------------------------------------------------------------------===
|
||||
*/
|
||||
#include "abi.h"
|
||||
|
||||
#include "int_lib.h"
|
||||
|
||||
|
@ -11,7 +11,6 @@
|
||||
*
|
||||
* ===----------------------------------------------------------------------===
|
||||
*/
|
||||
#include "abi.h"
|
||||
|
||||
#include "int_lib.h"
|
||||
|
||||
|
@ -11,7 +11,6 @@
|
||||
*
|
||||
* ===----------------------------------------------------------------------===
|
||||
*/
|
||||
#include "abi.h"
|
||||
|
||||
#include "int_lib.h"
|
||||
/* Returns: convert a to a unsigned long long, rounding toward zero.
|
||||
|
@ -11,7 +11,6 @@
|
||||
*
|
||||
* ===----------------------------------------------------------------------===
|
||||
*/
|
||||
#include "abi.h"
|
||||
|
||||
#include "int_lib.h"
|
||||
|
||||
|
@ -11,10 +11,8 @@
|
||||
*
|
||||
*===----------------------------------------------------------------------===
|
||||
*/
|
||||
#include "abi.h"
|
||||
|
||||
#include "int_lib.h"
|
||||
#include <float.h>
|
||||
|
||||
/* Returns: convert a to a double, rounding toward even. */
|
||||
|
||||
@ -30,7 +28,6 @@ ARM_EABI_FNALIAS(l2d, floatdidf);
|
||||
/* Support for systems that have hardware floating-point; we'll set the inexact flag
|
||||
* as a side-effect of this computation.
|
||||
*/
|
||||
#include <stdint.h>
|
||||
|
||||
COMPILER_RT_ABI double
|
||||
__floatdidf(di_int a)
|
||||
|
@ -12,9 +12,6 @@
|
||||
*===----------------------------------------------------------------------===
|
||||
*/
|
||||
|
||||
#include "abi.h"
|
||||
#include <float.h>
|
||||
|
||||
/* Returns: convert a to a float, rounding toward even.*/
|
||||
|
||||
/* Assumption: float is a IEEE 32 bit floating point type
|
||||
|
@ -12,7 +12,6 @@
|
||||
// mode.
|
||||
//
|
||||
//===----------------------------------------------------------------------===//
|
||||
#include "abi.h"
|
||||
|
||||
#define DOUBLE_PRECISION
|
||||
#include "fp_lib.h"
|
||||
|
@ -12,7 +12,6 @@
|
||||
// mode.
|
||||
//
|
||||
//===----------------------------------------------------------------------===//
|
||||
#include "abi.h"
|
||||
|
||||
#define SINGLE_PRECISION
|
||||
#include "fp_lib.h"
|
||||
|
@ -15,7 +15,6 @@
|
||||
#if __x86_64
|
||||
|
||||
#include "int_lib.h"
|
||||
#include <float.h>
|
||||
|
||||
/* Returns: convert a to a double, rounding toward even.*/
|
||||
|
||||
|
@ -15,7 +15,6 @@
|
||||
#if __x86_64
|
||||
|
||||
#include "int_lib.h"
|
||||
#include <float.h>
|
||||
|
||||
/* Returns: convert a to a float, rounding toward even. */
|
||||
|
||||
|
@ -15,7 +15,6 @@
|
||||
#if __x86_64
|
||||
|
||||
#include "int_lib.h"
|
||||
#include <float.h>
|
||||
|
||||
/* Returns: convert a to a long double, rounding toward even. */
|
||||
|
||||
|
@ -12,9 +12,6 @@
|
||||
* ===----------------------------------------------------------------------===
|
||||
*/
|
||||
|
||||
#include "abi.h"
|
||||
#include <float.h>
|
||||
|
||||
/* Returns: convert a to a double, rounding toward even. */
|
||||
|
||||
/* Assumption: double is a IEEE 64 bit floating point type
|
||||
@ -32,7 +29,6 @@ ARM_EABI_FNALIAS(ul2d, floatundidf);
|
||||
* as a side-effect of this computation.
|
||||
*/
|
||||
|
||||
#include <stdint.h>
|
||||
|
||||
COMPILER_RT_ABI double
|
||||
__floatundidf(du_int a)
|
||||
|
@ -12,9 +12,6 @@
|
||||
*===----------------------------------------------------------------------===
|
||||
*/
|
||||
|
||||
#include "abi.h"
|
||||
#include <float.h>
|
||||
|
||||
/* Returns: convert a to a float, rounding toward even. */
|
||||
|
||||
/* Assumption: float is a IEEE 32 bit floating point type
|
||||
|
@ -12,7 +12,6 @@
|
||||
// mode.
|
||||
//
|
||||
//===----------------------------------------------------------------------===//
|
||||
#include "abi.h"
|
||||
|
||||
#define DOUBLE_PRECISION
|
||||
#include "fp_lib.h"
|
||||
|
@ -12,7 +12,6 @@
|
||||
// mode.
|
||||
//
|
||||
//===----------------------------------------------------------------------===//
|
||||
#include "abi.h"
|
||||
|
||||
#define SINGLE_PRECISION
|
||||
#include "fp_lib.h"
|
||||
|
@ -15,7 +15,6 @@
|
||||
#if __x86_64
|
||||
|
||||
#include "int_lib.h"
|
||||
#include <float.h>
|
||||
|
||||
/* Returns: convert a to a double, rounding toward even. */
|
||||
|
||||
|
@ -15,7 +15,6 @@
|
||||
#if __x86_64
|
||||
|
||||
#include "int_lib.h"
|
||||
#include <float.h>
|
||||
|
||||
/* Returns: convert a to a float, rounding toward even. */
|
||||
|
||||
|
@ -15,7 +15,6 @@
|
||||
#if __x86_64
|
||||
|
||||
#include "int_lib.h"
|
||||
#include <float.h>
|
||||
|
||||
/* Returns: convert a to a long double, rounding toward even. */
|
||||
|
||||
|
@ -24,6 +24,7 @@
|
||||
#include <stdint.h>
|
||||
#include <stdbool.h>
|
||||
#include <limits.h>
|
||||
#include "int_lib.h"
|
||||
|
||||
#if defined SINGLE_PRECISION
|
||||
|
||||
|
@ -9,10 +9,6 @@
|
||||
*
|
||||
*/
|
||||
|
||||
#include <stdint.h>
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
|
||||
#include "int_lib.h"
|
||||
|
||||
/*
|
||||
@ -202,7 +198,7 @@ _Unwind_Reason_Code __gcc_personality_v0(int version, _Unwind_Action actions,
|
||||
|
||||
/* There is nothing to do if there is no LSDA for this frame. */
|
||||
const uint8_t* lsda = _Unwind_GetLanguageSpecificData(context);
|
||||
if ( lsda == NULL )
|
||||
if ( lsda == (uint8_t*) 0 )
|
||||
return _URC_CONTINUE_UNWIND;
|
||||
|
||||
uintptr_t pc = _Unwind_GetIP(context)-1;
|
||||
|
@ -1,4 +1,4 @@
|
||||
/* ===-- endianness.h - configuration header for compiler-rt ---------------===
|
||||
/* ===-- int_endianness.h - configuration header for compiler-rt ------------===
|
||||
*
|
||||
* The LLVM Compiler Infrastructure
|
||||
*
|
||||
@ -13,13 +13,8 @@
|
||||
* ===----------------------------------------------------------------------===
|
||||
*/
|
||||
|
||||
#ifndef ENDIANNESS_H
|
||||
#define ENDIANNESS_H
|
||||
|
||||
/*
|
||||
* Known limitations:
|
||||
* Middle endian systems are not handled currently.
|
||||
*/
|
||||
#ifndef INT_ENDIANNESS_H
|
||||
#define INT_ENDIANNESS_H
|
||||
|
||||
#if defined(__SVR4) && defined(__sun)
|
||||
#include <sys/byteorder.h>
|
||||
@ -91,4 +86,4 @@
|
||||
#error Unable to determine endian
|
||||
#endif /* Check we found an endianness correctly. */
|
||||
|
||||
#endif /* ENDIANNESS_H */
|
||||
#endif /* INT_ENDIANNESS_H */
|
@ -16,141 +16,31 @@
|
||||
#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: Signed integral is 2's complement. */
|
||||
/* Assumption: Right shift of signed negative is arithmetic shift. */
|
||||
/* Assumption: Endianness is little or big (not mixed). */
|
||||
|
||||
#include <limits.h>
|
||||
#include <stdint.h>
|
||||
#include "endianness.h"
|
||||
#include <math.h>
|
||||
/* ABI macro definitions */
|
||||
|
||||
/* If compiling for kernel use, call panic() instead of abort(). */
|
||||
#ifdef KERNEL_USE
|
||||
extern void panic (const char *, ...);
|
||||
#define compilerrt_abort() \
|
||||
panic("%s:%d: abort in %s", __FILE__, __LINE__, __FUNCTION__)
|
||||
#if __ARM_EABI__
|
||||
# define ARM_EABI_FNALIAS(aeabi_name, name) \
|
||||
void __aeabi_##aeabi_name() __attribute__((alias("__" #name)));
|
||||
# define COMPILER_RT_ABI __attribute__((pcs("aapcs")))
|
||||
#else
|
||||
#define compilerrt_abort() abort()
|
||||
# define ARM_EABI_FNALIAS(aeabi_name, name)
|
||||
# define COMPILER_RT_ABI
|
||||
#endif
|
||||
|
||||
#if !defined(INFINITY) && defined(HUGE_VAL)
|
||||
#define INFINITY HUGE_VAL
|
||||
#endif /* INFINITY */
|
||||
/* Include the standard compiler builtin headers we use functionality from. */
|
||||
#include <limits.h>
|
||||
#include <stdint.h>
|
||||
#include <stdbool.h>
|
||||
#include <float.h>
|
||||
|
||||
typedef int si_int;
|
||||
typedef unsigned su_int;
|
||||
/* Include the commonly used internal type definitions. */
|
||||
#include "int_types.h"
|
||||
|
||||
typedef long long di_int;
|
||||
typedef unsigned long long du_int;
|
||||
|
||||
typedef union
|
||||
{
|
||||
di_int all;
|
||||
struct
|
||||
{
|
||||
#if _YUGA_LITTLE_ENDIAN
|
||||
su_int low;
|
||||
si_int high;
|
||||
#else
|
||||
si_int high;
|
||||
su_int low;
|
||||
#endif /* _YUGA_LITTLE_ENDIAN */
|
||||
}s;
|
||||
} dwords;
|
||||
|
||||
typedef union
|
||||
{
|
||||
du_int all;
|
||||
struct
|
||||
{
|
||||
#if _YUGA_LITTLE_ENDIAN
|
||||
su_int low;
|
||||
su_int high;
|
||||
#else
|
||||
su_int high;
|
||||
su_int low;
|
||||
#endif /* _YUGA_LITTLE_ENDIAN */
|
||||
}s;
|
||||
} udwords;
|
||||
|
||||
#if __x86_64
|
||||
|
||||
typedef int ti_int __attribute__ ((mode (TI)));
|
||||
typedef unsigned tu_int __attribute__ ((mode (TI)));
|
||||
|
||||
typedef union
|
||||
{
|
||||
ti_int all;
|
||||
struct
|
||||
{
|
||||
#if _YUGA_LITTLE_ENDIAN
|
||||
du_int low;
|
||||
di_int high;
|
||||
#else
|
||||
di_int high;
|
||||
du_int low;
|
||||
#endif /* _YUGA_LITTLE_ENDIAN */
|
||||
}s;
|
||||
} twords;
|
||||
|
||||
typedef union
|
||||
{
|
||||
tu_int all;
|
||||
struct
|
||||
{
|
||||
#if _YUGA_LITTLE_ENDIAN
|
||||
du_int low;
|
||||
du_int high;
|
||||
#else
|
||||
du_int high;
|
||||
du_int low;
|
||||
#endif /* _YUGA_LITTLE_ENDIAN */
|
||||
}s;
|
||||
} utwords;
|
||||
|
||||
static inline ti_int make_ti(di_int h, di_int l) {
|
||||
twords r;
|
||||
r.s.high = h;
|
||||
r.s.low = l;
|
||||
return r.all;
|
||||
}
|
||||
|
||||
static inline tu_int make_tu(du_int h, du_int l) {
|
||||
utwords r;
|
||||
r.s.high = h;
|
||||
r.s.low = l;
|
||||
return r.all;
|
||||
}
|
||||
|
||||
#endif /* __x86_64 */
|
||||
|
||||
typedef union
|
||||
{
|
||||
su_int u;
|
||||
float f;
|
||||
} float_bits;
|
||||
|
||||
typedef union
|
||||
{
|
||||
udwords u;
|
||||
double f;
|
||||
} double_bits;
|
||||
|
||||
typedef struct
|
||||
{
|
||||
#if _YUGA_LITTLE_ENDIAN
|
||||
udwords low;
|
||||
udwords high;
|
||||
#else
|
||||
udwords high;
|
||||
udwords low;
|
||||
#endif /* _YUGA_LITTLE_ENDIAN */
|
||||
} uqwords;
|
||||
|
||||
typedef union
|
||||
{
|
||||
uqwords u;
|
||||
long double f;
|
||||
} long_double_bits;
|
||||
/* Include internal utility function declarations. */
|
||||
#include "int_util.h"
|
||||
|
||||
#endif /* INT_LIB_H */
|
||||
|
67
contrib/compiler-rt/lib/int_math.h
Normal file
67
contrib/compiler-rt/lib/int_math.h
Normal file
@ -0,0 +1,67 @@
|
||||
/* ===-- int_math.h - internal math inlines ---------------------------------===
|
||||
*
|
||||
* 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 is not part of the interface of this library.
|
||||
*
|
||||
* This file defines substitutes for the libm functions used in some of the
|
||||
* compiler-rt implementations, defined in such a way that there is not a direct
|
||||
* dependency on libm or math.h. Instead, we use the compiler builtin versions
|
||||
* where available. This reduces our dependencies on the system SDK by foisting
|
||||
* the responsibility onto the compiler.
|
||||
*
|
||||
* ===-----------------------------------------------------------------------===
|
||||
*/
|
||||
|
||||
#ifndef INT_MATH_H
|
||||
#define INT_MATH_H
|
||||
|
||||
#ifndef __has_builtin
|
||||
# define __has_builtin(x) 0
|
||||
#endif
|
||||
|
||||
#define CRT_INFINITY __builtin_huge_valf()
|
||||
|
||||
#define crt_isinf(x) __builtin_isinf((x))
|
||||
#define crt_isnan(x) __builtin_isnan((x))
|
||||
|
||||
/* Define crt_isfinite in terms of the builtin if available, otherwise provide
|
||||
* an alternate version in terms of our other functions. This supports some
|
||||
* versions of GCC which didn't have __builtin_isfinite.
|
||||
*/
|
||||
#if __has_builtin(__builtin_isfinite)
|
||||
# define crt_isfinite(x) __builtin_isfinite((x))
|
||||
#else
|
||||
# define crt_isfinite(x) \
|
||||
__extension__(({ \
|
||||
__typeof((x)) x_ = (x); \
|
||||
!crt_isinf(x_) && !crt_isnan(x_); \
|
||||
}))
|
||||
#endif
|
||||
|
||||
#define crt_copysign(x, y) __builtin_copysign((x), (y))
|
||||
#define crt_copysignf(x, y) __builtin_copysignf((x), (y))
|
||||
#define crt_copysignl(x, y) __builtin_copysignl((x), (y))
|
||||
|
||||
#define crt_fabs(x) __builtin_fabs((x))
|
||||
#define crt_fabsf(x) __builtin_fabsf((x))
|
||||
#define crt_fabsl(x) __builtin_fabsl((x))
|
||||
|
||||
#define crt_fmax(x, y) __builtin_fmax((x), (y))
|
||||
#define crt_fmaxf(x, y) __builtin_fmaxf((x), (y))
|
||||
#define crt_fmaxl(x, y) __builtin_fmaxl((x), (y))
|
||||
|
||||
#define crt_logb(x) __builtin_logb((x))
|
||||
#define crt_logbf(x) __builtin_logbf((x))
|
||||
#define crt_logbl(x) __builtin_logbl((x))
|
||||
|
||||
#define crt_scalbn(x, y) __builtin_scalbn((x), (y))
|
||||
#define crt_scalbnf(x, y) __builtin_scalbnf((x), (y))
|
||||
#define crt_scalbnl(x, y) __builtin_scalbnl((x), (y))
|
||||
|
||||
#endif /* INT_MATH_H */
|
140
contrib/compiler-rt/lib/int_types.h
Normal file
140
contrib/compiler-rt/lib/int_types.h
Normal file
@ -0,0 +1,140 @@
|
||||
/* ===-- int_lib.h - configuration header 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 is not part of the interface of this library.
|
||||
*
|
||||
* This file defines various standard types, most importantly a number of unions
|
||||
* used to access parts of larger types.
|
||||
*
|
||||
* ===----------------------------------------------------------------------===
|
||||
*/
|
||||
|
||||
#ifndef INT_TYPES_H
|
||||
#define INT_TYPES_H
|
||||
|
||||
#include "int_endianness.h"
|
||||
|
||||
typedef int si_int;
|
||||
typedef unsigned su_int;
|
||||
|
||||
typedef long long di_int;
|
||||
typedef unsigned long long du_int;
|
||||
|
||||
typedef union
|
||||
{
|
||||
di_int all;
|
||||
struct
|
||||
{
|
||||
#if _YUGA_LITTLE_ENDIAN
|
||||
su_int low;
|
||||
si_int high;
|
||||
#else
|
||||
si_int high;
|
||||
su_int low;
|
||||
#endif /* _YUGA_LITTLE_ENDIAN */
|
||||
}s;
|
||||
} dwords;
|
||||
|
||||
typedef union
|
||||
{
|
||||
du_int all;
|
||||
struct
|
||||
{
|
||||
#if _YUGA_LITTLE_ENDIAN
|
||||
su_int low;
|
||||
su_int high;
|
||||
#else
|
||||
su_int high;
|
||||
su_int low;
|
||||
#endif /* _YUGA_LITTLE_ENDIAN */
|
||||
}s;
|
||||
} udwords;
|
||||
|
||||
#if __x86_64
|
||||
|
||||
typedef int ti_int __attribute__ ((mode (TI)));
|
||||
typedef unsigned tu_int __attribute__ ((mode (TI)));
|
||||
|
||||
typedef union
|
||||
{
|
||||
ti_int all;
|
||||
struct
|
||||
{
|
||||
#if _YUGA_LITTLE_ENDIAN
|
||||
du_int low;
|
||||
di_int high;
|
||||
#else
|
||||
di_int high;
|
||||
du_int low;
|
||||
#endif /* _YUGA_LITTLE_ENDIAN */
|
||||
}s;
|
||||
} twords;
|
||||
|
||||
typedef union
|
||||
{
|
||||
tu_int all;
|
||||
struct
|
||||
{
|
||||
#if _YUGA_LITTLE_ENDIAN
|
||||
du_int low;
|
||||
du_int high;
|
||||
#else
|
||||
du_int high;
|
||||
du_int low;
|
||||
#endif /* _YUGA_LITTLE_ENDIAN */
|
||||
}s;
|
||||
} utwords;
|
||||
|
||||
static inline ti_int make_ti(di_int h, di_int l) {
|
||||
twords r;
|
||||
r.s.high = h;
|
||||
r.s.low = l;
|
||||
return r.all;
|
||||
}
|
||||
|
||||
static inline tu_int make_tu(du_int h, du_int l) {
|
||||
utwords r;
|
||||
r.s.high = h;
|
||||
r.s.low = l;
|
||||
return r.all;
|
||||
}
|
||||
|
||||
#endif /* __x86_64 */
|
||||
|
||||
typedef union
|
||||
{
|
||||
su_int u;
|
||||
float f;
|
||||
} float_bits;
|
||||
|
||||
typedef union
|
||||
{
|
||||
udwords u;
|
||||
double f;
|
||||
} double_bits;
|
||||
|
||||
typedef struct
|
||||
{
|
||||
#if _YUGA_LITTLE_ENDIAN
|
||||
udwords low;
|
||||
udwords high;
|
||||
#else
|
||||
udwords high;
|
||||
udwords low;
|
||||
#endif /* _YUGA_LITTLE_ENDIAN */
|
||||
} uqwords;
|
||||
|
||||
typedef union
|
||||
{
|
||||
uqwords u;
|
||||
long double f;
|
||||
} long_double_bits;
|
||||
|
||||
#endif /* INT_TYPES_H */
|
||||
|
43
contrib/compiler-rt/lib/int_util.c
Normal file
43
contrib/compiler-rt/lib/int_util.c
Normal file
@ -0,0 +1,43 @@
|
||||
/* ===-- int_util.c - Implement internal utilities --------------------------===
|
||||
*
|
||||
* 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.
|
||||
*
|
||||
* ===----------------------------------------------------------------------===
|
||||
*/
|
||||
|
||||
#include "int_util.h"
|
||||
#include "int_lib.h"
|
||||
|
||||
/* NOTE: The definitions in this file are declared weak because we clients to be
|
||||
* able to arbitrarily package individual functions into separate .a files. If
|
||||
* we did not declare these weak, some link situations might end up seeing
|
||||
* duplicate strong definitions of the same symbol.
|
||||
*
|
||||
* We can't use this solution for kernel use (which may not support weak), but
|
||||
* currently expect that when built for kernel use all the functionality is
|
||||
* packaged into a single library.
|
||||
*/
|
||||
|
||||
#ifdef KERNEL_USE
|
||||
|
||||
extern void panic(const char *, ...) __attribute__((noreturn));
|
||||
__attribute__((visibility("hidden")))
|
||||
void compilerrt_abort_impl(const char *file, int line, const char *function) {
|
||||
panic("%s:%d: abort in %s", file, line, function);
|
||||
}
|
||||
|
||||
#else
|
||||
|
||||
/* Get the system definition of abort() */
|
||||
#include <stdlib.h>
|
||||
|
||||
__attribute__((weak))
|
||||
__attribute__((visibility("hidden")))
|
||||
void compilerrt_abort_impl(const char *file, int line, const char *function) {
|
||||
abort();
|
||||
}
|
||||
|
||||
#endif
|
32
contrib/compiler-rt/lib/int_util.h
Normal file
32
contrib/compiler-rt/lib/int_util.h
Normal file
@ -0,0 +1,32 @@
|
||||
/* ===-- int_util.h - internal utility functions ----------------------------===
|
||||
*
|
||||
* 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 is not part of the interface of this library.
|
||||
*
|
||||
* This file defines non-inline utilities which are available for use in the
|
||||
* library. The function definitions themselves are all contained in int_util.c
|
||||
* which will always be compiled into any compiler-rt library.
|
||||
*
|
||||
* ===-----------------------------------------------------------------------===
|
||||
*/
|
||||
|
||||
#ifndef INT_UTIL_H
|
||||
#define INT_UTIL_H
|
||||
|
||||
/** \brief Trigger a program abort (or panic for kernel code). */
|
||||
#define compilerrt_abort() compilerrt_abort_impl(__FILE__, __LINE__, \
|
||||
__FUNCTION__)
|
||||
void compilerrt_abort_impl(const char *file, int line,
|
||||
const char *function)
|
||||
#ifndef KERNEL_USE
|
||||
__attribute__((weak))
|
||||
#endif
|
||||
__attribute__((noreturn)) __attribute__((visibility("hidden")));
|
||||
|
||||
#endif /* INT_UTIL_H */
|
@ -11,7 +11,6 @@
|
||||
*
|
||||
* ===----------------------------------------------------------------------===
|
||||
*/
|
||||
#include "abi.h"
|
||||
|
||||
#include "int_lib.h"
|
||||
|
||||
|
@ -11,7 +11,6 @@
|
||||
*
|
||||
* ===----------------------------------------------------------------------===
|
||||
*/
|
||||
#include "abi.h"
|
||||
|
||||
#include "int_lib.h"
|
||||
|
||||
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user