Mercurial > hg > graal-jvmci-8
comparison src/share/vm/c1/c1_Instruction.hpp @ 6795:7eca5de9e0b6
7023898: Intrinsify AtomicLongFieldUpdater.getAndIncrement()
Summary: use shorter instruction sequences for atomic add and atomic exchange when possible.
Reviewed-by: kvn, jrose
author | roland |
---|---|
date | Thu, 20 Sep 2012 16:49:17 +0200 |
parents | da91efe96a93 |
children | 46f6f063b272 |
comparison
equal
deleted
inserted
replaced
6794:8ae8f9dd7099 | 6795:7eca5de9e0b6 |
---|---|
100 class UnsafeGetRaw; | 100 class UnsafeGetRaw; |
101 class UnsafePutRaw; | 101 class UnsafePutRaw; |
102 class UnsafeObjectOp; | 102 class UnsafeObjectOp; |
103 class UnsafeGetObject; | 103 class UnsafeGetObject; |
104 class UnsafePutObject; | 104 class UnsafePutObject; |
105 class UnsafeGetAndSetObject; | |
105 class UnsafePrefetch; | 106 class UnsafePrefetch; |
106 class UnsafePrefetchRead; | 107 class UnsafePrefetchRead; |
107 class UnsafePrefetchWrite; | 108 class UnsafePrefetchWrite; |
108 class ProfileCall; | 109 class ProfileCall; |
109 class ProfileInvoke; | 110 class ProfileInvoke; |
200 virtual void do_RoundFP (RoundFP* x) = 0; | 201 virtual void do_RoundFP (RoundFP* x) = 0; |
201 virtual void do_UnsafeGetRaw (UnsafeGetRaw* x) = 0; | 202 virtual void do_UnsafeGetRaw (UnsafeGetRaw* x) = 0; |
202 virtual void do_UnsafePutRaw (UnsafePutRaw* x) = 0; | 203 virtual void do_UnsafePutRaw (UnsafePutRaw* x) = 0; |
203 virtual void do_UnsafeGetObject(UnsafeGetObject* x) = 0; | 204 virtual void do_UnsafeGetObject(UnsafeGetObject* x) = 0; |
204 virtual void do_UnsafePutObject(UnsafePutObject* x) = 0; | 205 virtual void do_UnsafePutObject(UnsafePutObject* x) = 0; |
206 virtual void do_UnsafeGetAndSetObject(UnsafeGetAndSetObject* x) = 0; | |
205 virtual void do_UnsafePrefetchRead (UnsafePrefetchRead* x) = 0; | 207 virtual void do_UnsafePrefetchRead (UnsafePrefetchRead* x) = 0; |
206 virtual void do_UnsafePrefetchWrite(UnsafePrefetchWrite* x) = 0; | 208 virtual void do_UnsafePrefetchWrite(UnsafePrefetchWrite* x) = 0; |
207 virtual void do_ProfileCall (ProfileCall* x) = 0; | 209 virtual void do_ProfileCall (ProfileCall* x) = 0; |
208 virtual void do_ProfileInvoke (ProfileInvoke* x) = 0; | 210 virtual void do_ProfileInvoke (ProfileInvoke* x) = 0; |
209 virtual void do_RuntimeCall (RuntimeCall* x) = 0; | 211 virtual void do_RuntimeCall (RuntimeCall* x) = 0; |
2271 // generic | 2273 // generic |
2272 virtual void input_values_do(ValueVisitor* f) { UnsafeObjectOp::input_values_do(f); | 2274 virtual void input_values_do(ValueVisitor* f) { UnsafeObjectOp::input_values_do(f); |
2273 f->visit(&_value); } | 2275 f->visit(&_value); } |
2274 }; | 2276 }; |
2275 | 2277 |
2278 LEAF(UnsafeGetAndSetObject, UnsafeObjectOp) | |
2279 private: | |
2280 Value _value; // Value to be stored | |
2281 bool _is_add; | |
2282 public: | |
2283 UnsafeGetAndSetObject(BasicType basic_type, Value object, Value offset, Value value, bool is_add) | |
2284 : UnsafeObjectOp(basic_type, object, offset, false, false) | |
2285 , _value(value) | |
2286 , _is_add(is_add) | |
2287 { | |
2288 ASSERT_VALUES | |
2289 } | |
2290 | |
2291 // accessors | |
2292 bool is_add() const { return _is_add; } | |
2293 Value value() { return _value; } | |
2294 | |
2295 // generic | |
2296 virtual void input_values_do(ValueVisitor* f) { UnsafeObjectOp::input_values_do(f); | |
2297 f->visit(&_value); } | |
2298 }; | |
2276 | 2299 |
2277 BASE(UnsafePrefetch, UnsafeObjectOp) | 2300 BASE(UnsafePrefetch, UnsafeObjectOp) |
2278 public: | 2301 public: |
2279 UnsafePrefetch(Value object, Value offset) | 2302 UnsafePrefetch(Value object, Value offset) |
2280 : UnsafeObjectOp(T_VOID, object, offset, false, false) | 2303 : UnsafeObjectOp(T_VOID, object, offset, false, false) |