diff options
| author | gingerBill <gingerBill@users.noreply.github.com> | 2022-03-31 14:06:00 +0100 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2022-03-31 14:06:00 +0100 |
| commit | 0c4f905d82cb24107f0ded804de2f72c1626a4bc (patch) | |
| tree | 4cf145d06a711971497ee17236b4a849556da09e /src/llvm_backend_utility.cpp | |
| parent | 9ea45d35db29e673e11af87cca1334a818a109d9 (diff) | |
| parent | 77de7ebde590c08072a52568fb15378c1ca96770 (diff) | |
Merge pull request #1673 from odin-lang/new-sync
Brand New `package sync` and Atomics Intrinsics
Diffstat (limited to 'src/llvm_backend_utility.cpp')
| -rw-r--r-- | src/llvm_backend_utility.cpp | 22 |
1 files changed, 22 insertions, 0 deletions
diff --git a/src/llvm_backend_utility.cpp b/src/llvm_backend_utility.cpp index 399d1632d..037171637 100644 --- a/src/llvm_backend_utility.cpp +++ b/src/llvm_backend_utility.cpp @@ -2005,3 +2005,25 @@ lbValue lb_handle_objc_send(lbProcedure *p, Ast *expr) { } + + +LLVMAtomicOrdering llvm_atomic_ordering_from_odin(ExactValue const &value) { + GB_ASSERT(value.kind == ExactValue_Integer); + i64 v = exact_value_to_i64(value); + switch (v) { + case OdinAtomicMemoryOrder_relaxed: return LLVMAtomicOrderingUnordered; + case OdinAtomicMemoryOrder_consume: return LLVMAtomicOrderingMonotonic; + case OdinAtomicMemoryOrder_acquire: return LLVMAtomicOrderingAcquire; + case OdinAtomicMemoryOrder_release: return LLVMAtomicOrderingRelease; + case OdinAtomicMemoryOrder_acq_rel: return LLVMAtomicOrderingAcquireRelease; + case OdinAtomicMemoryOrder_seq_cst: return LLVMAtomicOrderingSequentiallyConsistent; + } + GB_PANIC("Unknown atomic ordering"); + return LLVMAtomicOrderingSequentiallyConsistent; +} + + +LLVMAtomicOrdering llvm_atomic_ordering_from_odin(Ast *expr) { + ExactValue value = type_and_value_of_expr(expr).value; + return llvm_atomic_ordering_from_odin(value); +} |