| Index: src/arm64/simulator-arm64.h
|
| diff --git a/src/arm64/simulator-arm64.h b/src/arm64/simulator-arm64.h
|
| index 3016e616e4df8b8d1c41bba8df303f8a0c851125..c8c715a0677dbad216adb318478128e22d0fd881 100644
|
| --- a/src/arm64/simulator-arm64.h
|
| +++ b/src/arm64/simulator-arm64.h
|
| @@ -865,97 +865,6 @@
|
| char* last_debugger_input() { return last_debugger_input_; }
|
| char* last_debugger_input_;
|
|
|
| - // Synchronization primitives. See ARM DDI 0487A.a, B2.10. Pair types not
|
| - // implemented.
|
| - enum class MonitorAccess {
|
| - Open,
|
| - Exclusive,
|
| - };
|
| -
|
| - enum class TransactionSize {
|
| - None = 0,
|
| - Byte = 1,
|
| - HalfWord = 2,
|
| - Word = 4,
|
| - };
|
| -
|
| - TransactionSize get_transaction_size(unsigned size);
|
| -
|
| - // The least-significant bits of the address are ignored. The number of bits
|
| - // is implementation-defined, between 3 and 11. See ARM DDI 0487A.a, B2.10.3.
|
| - static const uintptr_t kExclusiveTaggedAddrMask = ~((1 << 11) - 1);
|
| -
|
| - class LocalMonitor {
|
| - public:
|
| - LocalMonitor();
|
| -
|
| - // These functions manage the state machine for the local monitor, but do
|
| - // not actually perform loads and stores. NotifyStoreExcl only returns
|
| - // true if the exclusive store is allowed; the global monitor will still
|
| - // have to be checked to see whether the memory should be updated.
|
| - void NotifyLoad(uintptr_t addr);
|
| - void NotifyLoadExcl(uintptr_t addr, TransactionSize size);
|
| - void NotifyStore(uintptr_t addr);
|
| - bool NotifyStoreExcl(uintptr_t addr, TransactionSize size);
|
| -
|
| - private:
|
| - void Clear();
|
| -
|
| - MonitorAccess access_state_;
|
| - uintptr_t tagged_addr_;
|
| - TransactionSize size_;
|
| - };
|
| -
|
| - class GlobalMonitor {
|
| - public:
|
| - GlobalMonitor();
|
| -
|
| - class Processor {
|
| - public:
|
| - Processor();
|
| -
|
| - private:
|
| - friend class GlobalMonitor;
|
| - // These functions manage the state machine for the global monitor, but do
|
| - // not actually perform loads and stores.
|
| - void Clear_Locked();
|
| - void NotifyLoadExcl_Locked(uintptr_t addr);
|
| - void NotifyStore_Locked(uintptr_t addr, bool is_requesting_processor);
|
| - bool NotifyStoreExcl_Locked(uintptr_t addr, bool is_requesting_processor);
|
| -
|
| - MonitorAccess access_state_;
|
| - uintptr_t tagged_addr_;
|
| - Processor* next_;
|
| - Processor* prev_;
|
| - // A stxr can fail due to background cache evictions. Rather than
|
| - // simulating this, we'll just occasionally introduce cases where an
|
| - // exclusive store fails. This will happen once after every
|
| - // kMaxFailureCounter exclusive stores.
|
| - static const int kMaxFailureCounter = 5;
|
| - int failure_counter_;
|
| - };
|
| -
|
| - // Exposed so it can be accessed by Simulator::{Read,Write}Ex*.
|
| - base::Mutex mutex;
|
| -
|
| - void NotifyLoadExcl_Locked(uintptr_t addr, Processor* processor);
|
| - void NotifyStore_Locked(uintptr_t addr, Processor* processor);
|
| - bool NotifyStoreExcl_Locked(uintptr_t addr, Processor* processor);
|
| -
|
| - // Called when the simulator is destroyed.
|
| - void RemoveProcessor(Processor* processor);
|
| -
|
| - private:
|
| - bool IsProcessorInLinkedList_Locked(Processor* processor) const;
|
| - void PrependProcessor_Locked(Processor* processor);
|
| -
|
| - Processor* head_;
|
| - };
|
| -
|
| - LocalMonitor local_monitor_;
|
| - GlobalMonitor::Processor global_monitor_processor_;
|
| - static base::LazyInstance<GlobalMonitor>::type global_monitor_;
|
| -
|
| private:
|
| void Init(FILE* stream);
|
|
|
|
|