Mercurial > projects > ldc
comparison runtime/import/llvmdc/intrinsics.di @ 527:cecfee2d01a8
Added support for overloaded intrinsics.
Added atomic intrinsics in the intrinsics.di header.
author | Tomas Lindquist Olsen <tomas.l.olsen@gmail.com> |
---|---|
date | Wed, 20 Aug 2008 01:02:22 +0200 |
parents | bebc6099fb89 |
children | 6aaa3d3c1183 |
comparison
equal
deleted
inserted
replaced
526:642f6fa854e5 | 527:cecfee2d01a8 |
---|---|
243 | 243 |
244 pragma(intrinsic, "llvm.part.select.i64") | 244 pragma(intrinsic, "llvm.part.select.i64") |
245 ulong llvm_part_select_i(ulong val, uint loBit, uint hiBit); | 245 ulong llvm_part_select_i(ulong val, uint loBit, uint hiBit); |
246 | 246 |
247 | 247 |
248 // The 'llvm.part.set' family of intrinsic functions replaces a range of bits in an integer value with another integer value. It returns the integer with the replaced bits. | |
249 | |
250 // TODO | |
251 // declare i17 @llvm.part.set.i17.i9 (i17 %val, i9 %repl, i32 %lo, i32 %hi) | |
252 // declare i29 @llvm.part.set.i29.i9 (i29 %val, i9 %repl, i32 %lo, i32 %hi) | |
253 | |
254 | |
248 | 255 |
249 | 256 |
250 // | 257 // |
251 // ATOMIC OPERATIONS AND SYNCHRONIZATION INTRINSICS | 258 // ATOMIC OPERATIONS AND SYNCHRONIZATION INTRINSICS |
252 // | 259 // |
253 | 260 |
254 // TODO | 261 // The llvm.memory.barrier intrinsic guarantees ordering between specific pairs of memory access types. |
255 | 262 |
256 | 263 pragma(intrinsic, "llvm.memory.barrier") |
257 | 264 void llvm_memory_barrier(bool ll, bool ls, bool sl, bool ss, bool device); |
265 | |
266 // This loads a value in memory and compares it to a given value. If they are equal, it stores a new value into the memory. | |
267 | |
268 pragma(intrinsic, "llvm.atomic.cmp.swap.i#.p0i#") | |
269 T llvm_atomic_cmp_swap(T)(T* ptr, T cmp, T val); | |
270 | |
271 // This intrinsic loads the value stored in memory at ptr and yields the value from memory. It then stores the value in val in the memory at ptr. | |
272 | |
273 pragma(intrinsic, "llvm.atomic.swap.i#.p0i#") | |
274 T llvm_atomic_swap(T)(T* ptr, T val); | |
275 | |
276 // This intrinsic adds delta to the value stored in memory at ptr. It yields the original value at ptr. | |
277 | |
278 pragma(intrinsic, "llvm.atomic.load.add.i#.p0i#") | |
279 T llvm_atomic_load_add(T)(T* ptr, T val); | |
280 | |
281 // This intrinsic subtracts delta to the value stored in memory at ptr. It yields the original value at ptr. | |
282 | |
283 pragma(intrinsic, "llvm.atomic.load.sub.i#.p0i#") | |
284 T llvm_atomic_load_sub(T)(T* ptr, T val); | |
285 | |
286 // These intrinsics bitwise the operation (and, nand, or, xor) delta to the value stored in memory at ptr. It yields the original value at ptr. | |
287 | |
288 pragma(intrinsic, "llvm.atomic.load.and.i#.p0i#") | |
289 T llvm_atomic_load_and(T)(T* ptr, T val); | |
290 pragma(intrinsic, "llvm.atomic.load.nand.i#.p0i#") | |
291 T llvm_atomic_load_nand(T)(T* ptr, T val); | |
292 pragma(intrinsic, "llvm.atomic.load.or.i#.p0i#") | |
293 T llvm_atomic_load_or(T)(T* ptr, T val); | |
294 pragma(intrinsic, "llvm.atomic.load.xor.i#.p0i#") | |
295 T llvm_atomic_load_xor(T)(T* ptr, T val); | |
296 | |
297 // These intrinsics takes the signed or unsigned minimum or maximum of delta and the value stored in memory at ptr. It yields the original value at ptr. | |
298 | |
299 pragma(intrinsic, "llvm.atomic.load.max.i#.p0i#") | |
300 T llvm_atomic_load_max(T)(T* ptr, T val); | |
301 pragma(intrinsic, "llvm.atomic.load.min.i#.p0i#") | |
302 T llvm_atomic_load_min(T)(T* ptr, T val); | |
303 pragma(intrinsic, "llvm.atomic.load.umax.i#.p0i#") | |
304 T llvm_atomic_load_umax(T)(T* ptr, T val); | |
305 pragma(intrinsic, "llvm.atomic.load.umin.i#.p0i#") | |
306 T llvm_atomic_load_umin(T)(T* ptr, T val); | |
258 | 307 |
259 // | 308 // |
260 // GENERAL INTRINSICS | 309 // GENERAL INTRINSICS |
261 // | 310 // |
262 | 311 |