blob: 1af96678972f258ffa157f8d5f19a360f7315489 [file] [log] [blame]
Daniel Dunbar24768732009-10-27 17:48:46 +00001/* ===-- int_lib.h - configuration header for compiler-rt -----------------===
Edward O'Callaghandf720462009-08-05 01:47:29 +00002 *
3 * The LLVM Compiler Infrastructure
4 *
Howard Hinnant5b791f62010-11-16 22:13:33 +00005 * This file is dual licensed under the MIT and the University of Illinois Open
6 * Source Licenses. See LICENSE.TXT for details.
Edward O'Callaghandf720462009-08-05 01:47:29 +00007 *
8 * ===----------------------------------------------------------------------===
9 *
Daniel Dunbar24768732009-10-27 17:48:46 +000010 * This file is a configuration header for compiler-rt.
Edward O'Callaghandf720462009-08-05 01:47:29 +000011 * This file is not part of the interface of this library.
12 *
13 * ===----------------------------------------------------------------------===
14 */
Daniel Dunbarfd089992009-06-26 16:47:03 +000015
16#ifndef INT_LIB_H
17#define INT_LIB_H
18
Daniel Dunbarcc675f42011-11-15 18:56:21 +000019/* Assumption: Signed integral is 2's complement. */
20/* Assumption: Right shift of signed negative is arithmetic shift. */
21/* Assumption: Endianness is little or big (not mixed). */
22
Daniel Dunbarb6f75f72011-11-15 18:34:44 +000023/* ABI macro definitions */
24
25#if __ARM_EABI__
26# define ARM_EABI_FNALIAS(aeabi_name, name) \
27 void __aeabi_##aeabi_name() __attribute__((alias("__" #name)));
28# define COMPILER_RT_ABI __attribute__((pcs("aapcs")))
29#else
30# define ARM_EABI_FNALIAS(aeabi_name, name)
31# define COMPILER_RT_ABI
32#endif
33
Joerg Sonnenberger24f4a7d2013-12-03 16:19:14 +000034#if defined(__NetBSD__) && (defined(_KERNEL) || defined(_STANDALONE))
35/*
36 * Kernel and boot environment can't use normal headers,
37 * so use the equivalent system headers.
38 */
39# include <machine/limits.h>
40# include <sys/stdint.h>
41# include <sys/types.h>
42#else
Daniel Dunbar7205b232011-11-16 00:20:36 +000043/* Include the standard compiler builtin headers we use functionality from. */
Joerg Sonnenberger24f4a7d2013-12-03 16:19:14 +000044# include <limits.h>
45# include <stdint.h>
46# include <stdbool.h>
47# include <float.h>
48#endif
Daniel Dunbar7205b232011-11-16 00:20:36 +000049
Daniel Dunbarad4f9822011-11-15 18:56:13 +000050/* Include the commonly used internal type definitions. */
51#include "int_types.h"
Daniel Dunbarfd089992009-06-26 16:47:03 +000052
Daniel Dunbar2b88e032011-11-16 01:19:19 +000053/* Include internal utility function declarations. */
54#include "int_util.h"
55
Joerg Sonnenberger6e99daa2014-03-01 15:30:50 +000056COMPILER_RT_ABI si_int __clzti2(ti_int a);
57
58COMPILER_RT_ABI si_int __paritysi2(si_int a);
59COMPILER_RT_ABI si_int __paritydi2(di_int a);
60
61COMPILER_RT_ABI di_int __divdi3(di_int a, di_int b);
62COMPILER_RT_ABI si_int __divsi3(si_int a, si_int b);
63COMPILER_RT_ABI su_int __udivsi3(su_int n, su_int d);
64
65COMPILER_RT_ABI su_int __udivmodsi4(su_int a, su_int b, su_int* rem);
66COMPILER_RT_ABI du_int __udivmoddi4(du_int a, du_int b, du_int* rem);
67#ifdef CRT_HAS_128BIT
68COMPILER_RT_ABI tu_int __udivmodti4(tu_int a, tu_int b, tu_int* rem);
69#endif
70
Edward O'Callaghan7a6cb5f2009-08-05 19:57:20 +000071#endif /* INT_LIB_H */