1.1 --- a/src/share/vm/c1/c1_Instruction.hpp Wed Sep 19 16:50:26 2012 -0700 1.2 +++ b/src/share/vm/c1/c1_Instruction.hpp Thu Sep 20 16:49:17 2012 +0200 1.3 @@ -102,6 +102,7 @@ 1.4 class UnsafeObjectOp; 1.5 class UnsafeGetObject; 1.6 class UnsafePutObject; 1.7 +class UnsafeGetAndSetObject; 1.8 class UnsafePrefetch; 1.9 class UnsafePrefetchRead; 1.10 class UnsafePrefetchWrite; 1.11 @@ -202,6 +203,7 @@ 1.12 virtual void do_UnsafePutRaw (UnsafePutRaw* x) = 0; 1.13 virtual void do_UnsafeGetObject(UnsafeGetObject* x) = 0; 1.14 virtual void do_UnsafePutObject(UnsafePutObject* x) = 0; 1.15 + virtual void do_UnsafeGetAndSetObject(UnsafeGetAndSetObject* x) = 0; 1.16 virtual void do_UnsafePrefetchRead (UnsafePrefetchRead* x) = 0; 1.17 virtual void do_UnsafePrefetchWrite(UnsafePrefetchWrite* x) = 0; 1.18 virtual void do_ProfileCall (ProfileCall* x) = 0; 1.19 @@ -2273,6 +2275,27 @@ 1.20 f->visit(&_value); } 1.21 }; 1.22 1.23 +LEAF(UnsafeGetAndSetObject, UnsafeObjectOp) 1.24 + private: 1.25 + Value _value; // Value to be stored 1.26 + bool _is_add; 1.27 + public: 1.28 + UnsafeGetAndSetObject(BasicType basic_type, Value object, Value offset, Value value, bool is_add) 1.29 + : UnsafeObjectOp(basic_type, object, offset, false, false) 1.30 + , _value(value) 1.31 + , _is_add(is_add) 1.32 + { 1.33 + ASSERT_VALUES 1.34 + } 1.35 + 1.36 + // accessors 1.37 + bool is_add() const { return _is_add; } 1.38 + Value value() { return _value; } 1.39 + 1.40 + // generic 1.41 + virtual void input_values_do(ValueVisitor* f) { UnsafeObjectOp::input_values_do(f); 1.42 + f->visit(&_value); } 1.43 +}; 1.44 1.45 BASE(UnsafePrefetch, UnsafeObjectOp) 1.46 public: