diff options
| author | Matthijs Hofstra <thiezz@gmail.com> | 2013-05-12 21:22:20 +0200 |
|---|---|---|
| committer | Matthijs Hofstra <thiezz@gmail.com> | 2013-05-12 23:23:40 +0200 |
| commit | a9f21326062b0b455aebd2459e8406b03a048a26 (patch) | |
| tree | 019e384aa6da67020e564f777548322c5a593924 /src/rustllvm/RustWrapper.cpp | |
| parent | 7dc94b87686ffd78a71442304158eb91d43885b0 (diff) | |
| download | rust-a9f21326062b0b455aebd2459e8406b03a048a26.tar.gz rust-a9f21326062b0b455aebd2459e8406b03a048a26.zip | |
Adds atomic_load, atomic_load_acq, atomic_store, and atomic_store_rel intrinsics.
The default versions (atomic_load and atomic_store) are sequentially consistent. The atomic_load_acq intrinsic acquires as described in [1]. The atomic_store_rel intrinsic releases as described in [1]. [1]: http://llvm.org/docs/Atomics.html
Diffstat (limited to 'src/rustllvm/RustWrapper.cpp')
| -rw-r--r-- | src/rustllvm/RustWrapper.cpp | 22 |
1 files changed, 22 insertions, 0 deletions
diff --git a/src/rustllvm/RustWrapper.cpp b/src/rustllvm/RustWrapper.cpp index 04e616de223..8c081858d60 100644 --- a/src/rustllvm/RustWrapper.cpp +++ b/src/rustllvm/RustWrapper.cpp @@ -545,6 +545,28 @@ extern "C" LLVMTypeRef LLVMMetadataType(void) { return LLVMMetadataTypeInContext(LLVMGetGlobalContext()); } +extern "C" LLVMValueRef LLVMBuildAtomicLoad(LLVMBuilderRef B, + LLVMValueRef source, + const char* Name, + AtomicOrdering order) { + LoadInst* li = new LoadInst(unwrap(source),0); + li->setVolatile(true); + li->setAtomic(order); + li->setAlignment(sizeof(intptr_t)); + return wrap(unwrap(B)->Insert(li)); +} + +extern "C" LLVMValueRef LLVMBuildAtomicStore(LLVMBuilderRef B, + LLVMValueRef val, + LLVMValueRef target, + AtomicOrdering order) { + StoreInst* si = new StoreInst(unwrap(val),unwrap(target)); + si->setVolatile(true); + si->setAtomic(order); + si->setAlignment(sizeof(intptr_t)); + return wrap(unwrap(B)->Insert(si)); +} + extern "C" LLVMValueRef LLVMBuildAtomicCmpXchg(LLVMBuilderRef B, LLVMValueRef target, LLVMValueRef old, |
