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