992 MemBarAcquireNode(Compile* C, int alias_idx, Node* precedent) |
992 MemBarAcquireNode(Compile* C, int alias_idx, Node* precedent) |
993 : MemBarNode(C, alias_idx, precedent) {} |
993 : MemBarNode(C, alias_idx, precedent) {} |
994 virtual int Opcode() const; |
994 virtual int Opcode() const; |
995 }; |
995 }; |
996 |
996 |
|
997 // "Acquire" - no following ref can move before (but earlier refs can |
|
998 // follow, like an early Load stalled in cache). Requires multi-cpu |
|
999 // visibility. Inserted independ of any load, as required |
|
1000 // for intrinsic sun.misc.Unsafe.loadFence(). |
|
1001 class LoadFenceNode: public MemBarNode { |
|
1002 public: |
|
1003 LoadFenceNode(Compile* C, int alias_idx, Node* precedent) |
|
1004 : MemBarNode(C, alias_idx, precedent) {} |
|
1005 virtual int Opcode() const; |
|
1006 }; |
|
1007 |
997 // "Release" - no earlier ref can move after (but later refs can move |
1008 // "Release" - no earlier ref can move after (but later refs can move |
998 // up, like a speculative pipelined cache-hitting Load). Requires |
1009 // up, like a speculative pipelined cache-hitting Load). Requires |
999 // multi-cpu visibility. Inserted before a volatile store. |
1010 // multi-cpu visibility. Inserted before a volatile store. |
1000 class MemBarReleaseNode: public MemBarNode { |
1011 class MemBarReleaseNode: public MemBarNode { |
1001 public: |
1012 public: |
1002 MemBarReleaseNode(Compile* C, int alias_idx, Node* precedent) |
1013 MemBarReleaseNode(Compile* C, int alias_idx, Node* precedent) |
|
1014 : MemBarNode(C, alias_idx, precedent) {} |
|
1015 virtual int Opcode() const; |
|
1016 }; |
|
1017 |
|
1018 // "Release" - no earlier ref can move after (but later refs can move |
|
1019 // up, like a speculative pipelined cache-hitting Load). Requires |
|
1020 // multi-cpu visibility. Inserted independent of any store, as required |
|
1021 // for intrinsic sun.misc.Unsafe.storeFence(). |
|
1022 class StoreFenceNode: public MemBarNode { |
|
1023 public: |
|
1024 StoreFenceNode(Compile* C, int alias_idx, Node* precedent) |
1003 : MemBarNode(C, alias_idx, precedent) {} |
1025 : MemBarNode(C, alias_idx, precedent) {} |
1004 virtual int Opcode() const; |
1026 virtual int Opcode() const; |
1005 }; |
1027 }; |
1006 |
1028 |
1007 // "Acquire" - no following ref can move before (but earlier refs can |
1029 // "Acquire" - no following ref can move before (but earlier refs can |