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