aboutsummaryrefslogtreecommitdiff
path: root/core/sys/llvm/standard_c_library.odin
blob: 1818e8462a21aa1962b93e46215908af26c1534d (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
// Standard C Library Intrinsics

package sys_llvm

@(default_calling_convention="none")
foreign _ {
	when size_of(int) == 4 {
		@(link_name="llvm.memcpy.p0i8.p0i8.i32")
		memcpy :: proc(dst, src: rawptr, len: int, is_volatile: bool = false) ---

		@(link_name="llvm.memcpy.inline.p0i8.p0i8.i32")
		memcpy_inline :: proc(dst, src: rawptr, len: int, is_volatile: bool = false) ---

		@(link_name="llvm.memmove.p0i8.p0i8.i32")
		memmove :: proc(dst, src: rawptr, len: int, is_volatile: bool = false) ---

		@(link_name="llvm.memset.p0i8.i32")
		memset :: proc(dst: rawptr, val: byte, len: int, is_volatile: bool = false) ---
	} else {
		@(link_name="llvm.memcpy.p0i8.p0i8.i64")
		memcpy :: proc(dst, src: rawptr, len: int, is_volatile: bool = false) ---

		@(link_name="llvm.memcpy.inline.p0i8.p0i8.i64")
		memcpy_inline :: proc(dst, src: rawptr, len: int, is_volatile: bool = false) ---

		@(link_name="llvm.memmove.p0i8.p0i8.i64")
		memmove :: proc(dst, src: rawptr, len: int, is_volatile: bool = false) ---

		@(link_name="llvm.memset.p0i8.i64")
		memset :: proc(dst: rawptr, val: byte, len: int, is_volatile: bool = false) ---
	}
}


@(default_calling_convention="none")
foreign _ {
	@(link_name="llvm.sqrt.f32")
	sqrt_f32 :: proc(f32) -> f32 ---
	@(link_name="llvm.sqrt.f64")
	sqrt_f64 :: proc(f64) -> f64 ---

	@(link_name="llvm.powi.f32")
	powi_f32 :: proc(val: f32, power: i32) -> f32 ---
	@(link_name="llvm.powi.f64")
	powi_f64 :: proc(val: f64, power: i32) -> f64 ---

	@(link_name="llvm.sin.f32")
	sin_f32 :: proc(f32) -> f32 ---
	@(link_name="llvm.sin.f64")
	sin_f64 :: proc(f64) -> f64 ---

	@(link_name="llvm.cos.f32")
	cos_f32 :: proc(f32) -> f32 ---
	@(link_name="llvm.cos.f64")
	cos_f64 :: proc(f64) -> f64 ---

	@(link_name="llvm.pow.f32")
	pow_f32 :: proc(val, power: f32) -> f32 ---
	@(link_name="llvm.pow.f64")
	pow_f64 :: proc(val, power: f64) -> f64 ---

	@(link_name="llvm.exp.f32")
	exp_f32 :: proc(f32) -> f32 ---
	@(link_name="llvm.exp.f64")
	exp_f64 :: proc(f64) -> f64 ---

	@(link_name="llvm.exp2.f32")
	exp2_f32 :: proc(f32) -> f32 ---
	@(link_name="llvm.exp2.f64")
	exp2_f64 :: proc(f64) -> f64 ---

	@(link_name="llvm.log.f32")
	log_f32 :: proc(f32) -> f32 ---
	@(link_name="llvm.log.f64")
	log_f64 :: proc(f64) -> f64 ---

	@(link_name="llvm.log10.f32")
	log10_f32 :: proc(f32) -> f32 ---
	@(link_name="llvm.log10.f64")
	log10_f64 :: proc(f64) -> f64 ---

	@(link_name="llvm.log2.f32")
	log2_f32 :: proc(f32) -> f32 ---
	@(link_name="llvm.log2.f64")
	log2_f64 :: proc(f64) -> f64 ---

	@(link_name="llvm.fma.f32")
	fma_f32 :: proc(a, b, c: f32) -> f32 ---
	@(link_name="llvm.fma.f64")
	fma_f64 :: proc(a, b, c: f64) -> f64 ---

	@(link_name="llvm.fabs.f32")
	fabs_f32 :: proc(f32) -> f32 ---
	@(link_name="llvm.fabs.f64")
	fabs_f64 :: proc(f64) -> f64 ---

	@(link_name="llvm.min_num.f32")
	min_num_f32 :: proc(val0, val1: f32) -> f32 ---
	@(link_name="llvm.min_num.f64")
	min_num_f64 :: proc(val0, val1: f64) -> f64 ---

	@(link_name="llvm.max_num.f32")
	max_num_f32 :: proc(val0, val1: f32) -> f32 ---
	@(link_name="llvm.max_num.f64")
	max_num_f64 :: proc(val0, val1: f64) -> f64 ---

	@(link_name="llvm.minimum.f32")
	minimum_f32 :: proc(val0, val1: f32) -> f32 ---
	@(link_name="llvm.minimum.f64")
	minimum_f64 :: proc(val0, val1: f64) -> f64 ---

	@(link_name="llvm.maximum.f32")
	maximum_f32 :: proc(val0, val1: f32) -> f32 ---
	@(link_name="llvm.maximum.f64")
	maximum_f64 :: proc(val0, val1: f64) -> f64 ---

	@(link_name="llvm.copysign.f32")
	copy_sign_f32 :: proc(mag, sgn: f32) -> f32 ---
	@(link_name="llvm.copysign.f64")
	copy_sign_f64 :: proc(mag, sgn: f64) -> f64 ---

	@(link_name="llvm.floor.f32")
	floor_f32 :: proc(f32) -> f32 ---
	@(link_name="llvm.floor.f64")
	floor_f64 :: proc(f64) -> f64 ---

	@(link_name="llvm.ceil.f32")
	ceil_f32 :: proc(f32) -> f32 ---
	@(link_name="llvm.ceil.f64")
	ceil_f64 :: proc(f64) -> f64 ---

	@(link_name="llvm.trunc.f32")
	trunc_f32 :: proc(f32) -> f32 ---
	@(link_name="llvm.trunc.f64")
	trunc_f64 :: proc(f64) -> f64 ---

	@(link_name="llvm.rint.f32")
	rint_f32 :: proc(f32) -> f32 ---
	@(link_name="llvm.rint.f64")
	rint_f64 :: proc(f64) -> f64 ---

	@(link_name="llvm.nearbyint.f32")
	nearby_int_f32 :: proc(f32) -> f32 ---
	@(link_name="llvm.nearbyint.f64")
	nearby_int_f64 :: proc(f64) -> f64 ---

	@(link_name="llvm.round.f32")
	round_f32 :: proc(f32) -> f32 ---
	@(link_name="llvm.round.f64")
	round_f64 :: proc(f64) -> f64 ---

	@(link_name="llvm.roundeven.f32")
	round_even_f32 :: proc(f32) -> f32 ---
	@(link_name="llvm.roundeven.f64")
	round_even_f64 :: proc(f64) -> f64 ---


	@(link_name="llvm.lround.i32.f32")
	lround_f32_i32 :: proc(f32) -> i32 ---
	@(link_name="llvm.lround.i32.f64")
	lround_f64_i32 :: proc(f64) -> i32 ---

	@(link_name="llvm.lround.i64.f32")
	lround_f32_i64 :: proc(f32) -> i64 ---
	@(link_name="llvm.lround.i64.f64")
	lround_f64_i64 :: proc(f64) -> i64 ---


	@(link_name="llvm.lrint.i32.f32")
	lrint_f32_i32 :: proc(f32) -> i32 ---
	@(link_name="llvm.lrint.i32.f64")
	lrint_f64_i32 :: proc(f64) -> i32 ---

	@(link_name="llvm.lrint.i64.f32")
	lrint_f32_i64 :: proc(f32) -> i64 ---
	@(link_name="llvm.lrint.i64.f64")
	lrint_f64_i64 :: proc(f64) -> i64 ---
}