Use atomic load/store for volatile IGET/IPUT/SGET/SPUT.
Bug: 14112919
Change-Id: I79316f438dd3adea9b2653ffc968af83671ad282
diff --git a/runtime/instruction_set.h b/runtime/instruction_set.h
index bfbbbd6..1cea24b 100644
--- a/runtime/instruction_set.h
+++ b/runtime/instruction_set.h
@@ -59,7 +59,8 @@
#endif
enum InstructionFeatures {
- kHwDiv = 1 // Supports hardware divide.
+ kHwDiv = 0x1, // Supports hardware divide.
+ kHwLpae = 0x2, // Supports Large Physical Address Extension.
};
// This is a bitmask of supported features per architecture.
@@ -78,6 +79,14 @@
mask_ = (mask_ & ~kHwDiv) | (v ? kHwDiv : 0);
}
+ bool HasLpae() const {
+ return (mask_ & kHwLpae) != 0;
+ }
+
+ void SetHasLpae(bool v) {
+ mask_ = (mask_ & ~kHwLpae) | (v ? kHwLpae : 0);
+ }
+
std::string GetFeatureString() const;
// Other features in here.