src/share/vm/opto/memnode.hpp

Print this page
rev 2571 : [mq]: membar3

*** 877,904 **** Node* precedent = NULL); }; // "Acquire" - no following ref can move before (but earlier refs can // follow, like an early Load stalled in cache). Requires multi-cpu ! // visibility. Inserted after a volatile load or FastLock. class MemBarAcquireNode: public MemBarNode { public: MemBarAcquireNode(Compile* C, int alias_idx, Node* precedent) : MemBarNode(C, alias_idx, precedent) {} virtual int Opcode() const; }; // "Release" - no earlier ref can move after (but later refs can move // up, like a speculative pipelined cache-hitting Load). Requires ! // multi-cpu visibility. Inserted before a volatile store or FastUnLock. class MemBarReleaseNode: public MemBarNode { public: MemBarReleaseNode(Compile* C, int alias_idx, Node* precedent) : MemBarNode(C, alias_idx, precedent) {} virtual int Opcode() const; }; // Ordering between a volatile store and a following volatile load. // Requires multi-CPU visibility? class MemBarVolatileNode: public MemBarNode { public: MemBarVolatileNode(Compile* C, int alias_idx, Node* precedent) --- 877,924 ---- Node* precedent = NULL); }; // "Acquire" - no following ref can move before (but earlier refs can // follow, like an early Load stalled in cache). Requires multi-cpu ! // visibility. Inserted after a volatile load. class MemBarAcquireNode: public MemBarNode { public: MemBarAcquireNode(Compile* C, int alias_idx, Node* precedent) : MemBarNode(C, alias_idx, precedent) {} virtual int Opcode() const; }; // "Release" - no earlier ref can move after (but later refs can move // up, like a speculative pipelined cache-hitting Load). Requires ! // multi-cpu visibility. Inserted before a volatile store. class MemBarReleaseNode: public MemBarNode { public: MemBarReleaseNode(Compile* C, int alias_idx, Node* precedent) : MemBarNode(C, alias_idx, precedent) {} virtual int Opcode() const; }; + // "Acquire" - no following ref can move before (but earlier refs can + // follow, like an early Load stalled in cache). Requires multi-cpu + // visibility. Inserted after a FastLock. + class MemBarAcquireLockNode: public MemBarNode { + public: + MemBarAcquireLockNode(Compile* C, int alias_idx, Node* precedent) + : MemBarNode(C, alias_idx, precedent) {} + virtual int Opcode() const; + }; + + // "Release" - no earlier ref can move after (but later refs can move + // up, like a speculative pipelined cache-hitting Load). Requires + // multi-cpu visibility. Inserted before a FastUnLock. + class MemBarReleaseLockNode: public MemBarNode { + public: + MemBarReleaseLockNode(Compile* C, int alias_idx, Node* precedent) + : MemBarNode(C, alias_idx, precedent) {} + virtual int Opcode() const; + }; + // Ordering between a volatile store and a following volatile load. // Requires multi-CPU visibility? class MemBarVolatileNode: public MemBarNode { public: MemBarVolatileNode(Compile* C, int alias_idx, Node* precedent)