int_lib.h 2.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970
  1. /* ===-- int_lib.h - configuration header for compiler-rt -----------------===
  2. *
  3. * The LLVM Compiler Infrastructure
  4. *
  5. * This file is dual licensed under the MIT and the University of Illinois Open
  6. * Source Licenses. See LICENSE.TXT for details.
  7. *
  8. * ===----------------------------------------------------------------------===
  9. *
  10. * This file is a configuration header for compiler-rt.
  11. * This file is not part of the interface of this library.
  12. *
  13. * ===----------------------------------------------------------------------===
  14. */
  15. #ifndef INT_LIB_H
  16. #define INT_LIB_H
  17. /* Assumption: Signed integral is 2's complement. */
  18. /* Assumption: Right shift of signed negative is arithmetic shift. */
  19. /* Assumption: Endianness is little or big (not mixed). */
  20. /* ABI macro definitions */
  21. #if __ARM_EABI__
  22. # define ARM_EABI_FNALIAS(aeabi_name, name) \
  23. void __aeabi_##aeabi_name() __attribute__((alias("__" #name)));
  24. # define COMPILER_RT_ABI __attribute__((pcs("aapcs")))
  25. #else
  26. # define ARM_EABI_FNALIAS(aeabi_name, name)
  27. # define COMPILER_RT_ABI
  28. #endif
  29. #if defined(__NetBSD__) && (defined(_KERNEL) || defined(_STANDALONE))
  30. /*
  31. * Kernel and boot environment can't use normal headers,
  32. * so use the equivalent system headers.
  33. */
  34. # include <machine/limits.h>
  35. # include <sys/stdint.h>
  36. # include <sys/types.h>
  37. #else
  38. /* Include the standard compiler builtin headers we use functionality from. */
  39. # include <limits.h>
  40. # include <stdint.h>
  41. # include <stdbool.h>
  42. # include <float.h>
  43. #endif
  44. /* Include the commonly used internal type definitions. */
  45. #include "int_types.h"
  46. /* Include internal utility function declarations. */
  47. #include "int_util.h"
  48. COMPILER_RT_ABI si_int __paritysi2(si_int a);
  49. COMPILER_RT_ABI si_int __paritydi2(di_int a);
  50. COMPILER_RT_ABI di_int __divdi3(di_int a, di_int b);
  51. COMPILER_RT_ABI si_int __divsi3(si_int a, si_int b);
  52. COMPILER_RT_ABI su_int __udivsi3(su_int n, su_int d);
  53. COMPILER_RT_ABI su_int __udivmodsi4(su_int a, su_int b, su_int* rem);
  54. COMPILER_RT_ABI du_int __udivmoddi4(du_int a, du_int b, du_int* rem);
  55. #ifdef CRT_HAS_128BIT
  56. COMPILER_RT_ABI si_int __clzti2(ti_int a);
  57. COMPILER_RT_ABI tu_int __udivmodti4(tu_int a, tu_int b, tu_int* rem);
  58. #endif
  59. #endif /* INT_LIB_H */