standard_c_library.odin 5.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177
  1. // Standard C Library Intrinsics
  2. package sys_llvm
  3. @(default_calling_convention="none")
  4. foreign _ {
  5. when size_of(int) == 4 {
  6. @(link_name="llvm.memcpy.p0i8.p0i8.i32")
  7. memcpy :: proc(dst, src: rawptr, len: int, is_volatile: bool = false) ---
  8. @(link_name="llvm.memcpy.inline.p0i8.p0i8.i32")
  9. memcpy_inline :: proc(dst, src: rawptr, len: int, is_volatile: bool = false) ---
  10. @(link_name="llvm.memmove.p0i8.p0i8.i32")
  11. memmove :: proc(dst, src: rawptr, len: int, is_volatile: bool = false) ---
  12. @(link_name="llvm.memset.p0i8.i32")
  13. memset :: proc(dst: rawptr, val: byte, len: int, is_volatile: bool = false) ---
  14. } else {
  15. @(link_name="llvm.memcpy.p0i8.p0i8.i64")
  16. memcpy :: proc(dst, src: rawptr, len: int, is_volatile: bool = false) ---
  17. @(link_name="llvm.memcpy.inline.p0i8.p0i8.i64")
  18. memcpy_inline :: proc(dst, src: rawptr, len: int, is_volatile: bool = false) ---
  19. @(link_name="llvm.memmove.p0i8.p0i8.i64")
  20. memmove :: proc(dst, src: rawptr, len: int, is_volatile: bool = false) ---
  21. @(link_name="llvm.memset.p0i8.i64")
  22. memset :: proc(dst: rawptr, val: byte, len: int, is_volatile: bool = false) ---
  23. }
  24. }
  25. @(default_calling_convention="none")
  26. foreign _ {
  27. @(link_name="llvm.sqrt.f32")
  28. sqrt_f32 :: proc(f32) -> f32 ---
  29. @(link_name="llvm.sqrt.f64")
  30. sqrt_f64 :: proc(f64) -> f64 ---
  31. @(link_name="llvm.powi.f32")
  32. powi_f32 :: proc(val: f32, power: i32) -> f32 ---
  33. @(link_name="llvm.powi.f64")
  34. powi_f64 :: proc(val: f64, power: i32) -> f64 ---
  35. @(link_name="llvm.sin.f32")
  36. sin_f32 :: proc(f32) -> f32 ---
  37. @(link_name="llvm.sin.f64")
  38. sin_f64 :: proc(f64) -> f64 ---
  39. @(link_name="llvm.cos.f32")
  40. cos_f32 :: proc(f32) -> f32 ---
  41. @(link_name="llvm.cos.f64")
  42. cos_f64 :: proc(f64) -> f64 ---
  43. @(link_name="llvm.pow.f32")
  44. pow_f32 :: proc(val, power: f32) -> f32 ---
  45. @(link_name="llvm.pow.f64")
  46. pow_f64 :: proc(val, power: f64) -> f64 ---
  47. @(link_name="llvm.exp.f32")
  48. exp_f32 :: proc(f32) -> f32 ---
  49. @(link_name="llvm.exp.f64")
  50. exp_f64 :: proc(f64) -> f64 ---
  51. @(link_name="llvm.exp2.f32")
  52. exp2_f32 :: proc(f32) -> f32 ---
  53. @(link_name="llvm.exp2.f64")
  54. exp2_f64 :: proc(f64) -> f64 ---
  55. @(link_name="llvm.log.f32")
  56. log_f32 :: proc(f32) -> f32 ---
  57. @(link_name="llvm.log.f64")
  58. log_f64 :: proc(f64) -> f64 ---
  59. @(link_name="llvm.log10.f32")
  60. log10_f32 :: proc(f32) -> f32 ---
  61. @(link_name="llvm.log10.f64")
  62. log10_f64 :: proc(f64) -> f64 ---
  63. @(link_name="llvm.log2.f32")
  64. log2_f32 :: proc(f32) -> f32 ---
  65. @(link_name="llvm.log2.f64")
  66. log2_f64 :: proc(f64) -> f64 ---
  67. @(link_name="llvm.fma.f32")
  68. fma_f32 :: proc(a, b, c: f32) -> f32 ---
  69. @(link_name="llvm.fma.f64")
  70. fma_f64 :: proc(a, b, c: f64) -> f64 ---
  71. @(link_name="llvm.fabs.f32")
  72. fabs_f32 :: proc(f32) -> f32 ---
  73. @(link_name="llvm.fabs.f64")
  74. fabs_f64 :: proc(f64) -> f64 ---
  75. @(link_name="llvm.min_num.f32")
  76. min_num_f32 :: proc(val0, val1: f32) -> f32 ---
  77. @(link_name="llvm.min_num.f64")
  78. min_num_f64 :: proc(val0, val1: f64) -> f64 ---
  79. @(link_name="llvm.max_num.f32")
  80. max_num_f32 :: proc(val0, val1: f32) -> f32 ---
  81. @(link_name="llvm.max_num.f64")
  82. max_num_f64 :: proc(val0, val1: f64) -> f64 ---
  83. @(link_name="llvm.minimum.f32")
  84. minimum_f32 :: proc(val0, val1: f32) -> f32 ---
  85. @(link_name="llvm.minimum.f64")
  86. minimum_f64 :: proc(val0, val1: f64) -> f64 ---
  87. @(link_name="llvm.maximum.f32")
  88. maximum_f32 :: proc(val0, val1: f32) -> f32 ---
  89. @(link_name="llvm.maximum.f64")
  90. maximum_f64 :: proc(val0, val1: f64) -> f64 ---
  91. @(link_name="llvm.copysign.f32")
  92. copy_sign_f32 :: proc(mag, sgn: f32) -> f32 ---
  93. @(link_name="llvm.copysign.f64")
  94. copy_sign_f64 :: proc(mag, sgn: f64) -> f64 ---
  95. @(link_name="llvm.floor.f32")
  96. floor_f32 :: proc(f32) -> f32 ---
  97. @(link_name="llvm.floor.f64")
  98. floor_f64 :: proc(f64) -> f64 ---
  99. @(link_name="llvm.ceil.f32")
  100. ceil_f32 :: proc(f32) -> f32 ---
  101. @(link_name="llvm.ceil.f64")
  102. ceil_f64 :: proc(f64) -> f64 ---
  103. @(link_name="llvm.trunc.f32")
  104. trunc_f32 :: proc(f32) -> f32 ---
  105. @(link_name="llvm.trunc.f64")
  106. trunc_f64 :: proc(f64) -> f64 ---
  107. @(link_name="llvm.rint.f32")
  108. rint_f32 :: proc(f32) -> f32 ---
  109. @(link_name="llvm.rint.f64")
  110. rint_f64 :: proc(f64) -> f64 ---
  111. @(link_name="llvm.nearbyint.f32")
  112. nearby_int_f32 :: proc(f32) -> f32 ---
  113. @(link_name="llvm.nearbyint.f64")
  114. nearby_int_f64 :: proc(f64) -> f64 ---
  115. @(link_name="llvm.round.f32")
  116. round_f32 :: proc(f32) -> f32 ---
  117. @(link_name="llvm.round.f64")
  118. round_f64 :: proc(f64) -> f64 ---
  119. @(link_name="llvm.roundeven.f32")
  120. round_even_f32 :: proc(f32) -> f32 ---
  121. @(link_name="llvm.roundeven.f64")
  122. round_even_f64 :: proc(f64) -> f64 ---
  123. @(link_name="llvm.lround.i32.f32")
  124. lround_f32_i32 :: proc(f32) -> i32 ---
  125. @(link_name="llvm.lround.i32.f64")
  126. lround_f64_i32 :: proc(f64) -> i32 ---
  127. @(link_name="llvm.lround.i64.f32")
  128. lround_f32_i64 :: proc(f32) -> i64 ---
  129. @(link_name="llvm.lround.i64.f64")
  130. lround_f64_i64 :: proc(f64) -> i64 ---
  131. @(link_name="llvm.lrint.i32.f32")
  132. lrint_f32_i32 :: proc(f32) -> i32 ---
  133. @(link_name="llvm.lrint.i32.f64")
  134. lrint_f64_i32 :: proc(f64) -> i32 ---
  135. @(link_name="llvm.lrint.i64.f32")
  136. lrint_f32_i64 :: proc(f32) -> i64 ---
  137. @(link_name="llvm.lrint.i64.f64")
  138. lrint_f64_i64 :: proc(f64) -> i64 ---
  139. }