Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(7)

Unified Diff: src/IceIntrinsics.cpp

Issue 1017453007: Subzero: Support non sequentially consistent memory orderings for atomic ops. (Closed) Base URL: https://chromium.googlesource.com/native_client/pnacl-subzero.git@master
Patch Set: Add TODO Created 5 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « src/IceIntrinsics.h ('k') | src/IceTargetLoweringX8632.cpp » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: src/IceIntrinsics.cpp
diff --git a/src/IceIntrinsics.cpp b/src/IceIntrinsics.cpp
index 26a81dea7eaa10b5836e1aac95d29011c9396db9..5269f8f24aaa17f63d898da64a64a8b1948664c9 100644
--- a/src/IceIntrinsics.cpp
+++ b/src/IceIntrinsics.cpp
@@ -233,9 +233,62 @@ const Intrinsics::FullIntrinsicInfo *Intrinsics::find(const IceString &Name,
return &it->second;
}
-bool Intrinsics::VerifyMemoryOrder(uint64_t Order) {
- // There is only one memory ordering for atomics allowed right now.
- return Order == Intrinsics::MemoryOrderSequentiallyConsistent;
+bool Intrinsics::isMemoryOrderValid(IntrinsicID ID, uint64_t Order,
+ uint64_t OrderOther) {
+ // Reject orderings not allowed in PNaCl.
+ switch (Order) {
+ case Intrinsics::MemoryOrderAcquire:
+ case Intrinsics::MemoryOrderRelease:
+ case Intrinsics::MemoryOrderAcquireRelease:
+ case Intrinsics::MemoryOrderSequentiallyConsistent:
+ break;
+ default:
+ return false;
+ }
+ // Reject orderings not allowed by C++11.
+ switch (ID) {
+ default:
+ llvm_unreachable("isMemoryOrderValid: Unknown IntrinsicID");
+ return false;
+ case AtomicFence:
+ case AtomicFenceAll:
+ case AtomicRMW:
+ return true;
+ case AtomicCmpxchg:
+ switch (OrderOther) {
+ case Intrinsics::MemoryOrderInvalid:
jvoung (off chromium) 2015/03/17 19:05:21 Maybe call out case Intrinsics::MemoryOrderInvali
Jim Stichnoth 2015/03/17 21:05:11 Done.
+ case Intrinsics::MemoryOrderNum:
+ case Intrinsics::MemoryOrderRelease:
+ case Intrinsics::MemoryOrderAcquireRelease:
+ case Intrinsics::MemoryOrderRelaxed:
+ case Intrinsics::MemoryOrderConsume:
+ return false;
+ default:
+ if (OrderOther > Order)
+ return false;
+ if (Order == Intrinsics::MemoryOrderRelease &&
+ OrderOther != Intrinsics::MemoryOrderRelaxed)
+ return false;
+ return true;
+ }
+ case AtomicLoad:
+ switch (Order) {
+ case Intrinsics::MemoryOrderRelease:
+ case Intrinsics::MemoryOrderAcquireRelease:
+ return false;
+ default:
+ return true;
+ }
+ case AtomicStore:
+ switch (Order) {
+ case Intrinsics::MemoryOrderConsume:
+ case Intrinsics::MemoryOrderAcquire:
+ case Intrinsics::MemoryOrderAcquireRelease:
+ return false;
+ default:
+ return true;
+ }
+ }
}
Intrinsics::ValidateCallValue
« no previous file with comments | « src/IceIntrinsics.h ('k') | src/IceTargetLoweringX8632.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698