--- old/src/share/vm/oops/oop.hpp 2017-04-25 16:45:27.167173376 +0200 +++ new/src/share/vm/oops/oop.hpp 2017-04-25 16:45:27.019173381 +0200 @@ -38,10 +38,6 @@ // // no virtual functions allowed -// store into oop with store check -template inline void oop_store(T* p, oop v); -template inline void oop_store(volatile T* p, oop v); - extern bool always_do_update_barrier; // Forward declarations. @@ -122,6 +118,9 @@ bool is_objArray_noinline() const; bool is_typeArray_noinline() const; + protected: + inline oop oop_base() const { return const_cast(this); } + private: // field addresses in oop inline void* field_base(int offset) const; @@ -162,104 +161,95 @@ // Load an oop out of the Java heap as is without decoding. // Called by GC to check for null before decoding. - static inline narrowOop load_heap_oop(narrowOop* p) { return *p; } - static inline oop load_heap_oop(oop* p) { return *p; } + static inline narrowOop load_heap_oop(narrowOop* p); + static inline oop load_heap_oop(oop* p); // Load an oop out of Java heap and decode it to an uncompressed oop. static inline oop load_decode_heap_oop_not_null(narrowOop* p); - static inline oop load_decode_heap_oop_not_null(oop* p) { return *p; } + static inline oop load_decode_heap_oop_not_null(oop* p); static inline oop load_decode_heap_oop(narrowOop* p); - static inline oop load_decode_heap_oop(oop* p) { return *p; } + static inline oop load_decode_heap_oop(oop* p); // Store already encoded heap oop into the heap. - static inline void store_heap_oop(narrowOop* p, narrowOop v) { *p = v; } - static inline void store_heap_oop(oop* p, oop v) { *p = v; } + static inline void store_heap_oop(narrowOop* p, narrowOop v); + static inline void store_heap_oop(oop* p, oop v); // Encode oop if UseCompressedOops and store into the heap. static inline void encode_store_heap_oop_not_null(narrowOop* p, oop v); - static inline void encode_store_heap_oop_not_null(oop* p, oop v) { *p = v; } + static inline void encode_store_heap_oop_not_null(oop* p, oop v); static inline void encode_store_heap_oop(narrowOop* p, oop v); - static inline void encode_store_heap_oop(oop* p, oop v) { *p = v; } - - static inline void release_store_heap_oop(volatile narrowOop* p, narrowOop v); - static inline void release_store_heap_oop(volatile oop* p, oop v); + static inline void encode_store_heap_oop(oop* p, oop v); - static inline void release_encode_store_heap_oop_not_null(volatile narrowOop* p, oop v); - static inline void release_encode_store_heap_oop_not_null(volatile oop* p, oop v); - static inline void release_encode_store_heap_oop(volatile narrowOop* p, oop v); - static inline void release_encode_store_heap_oop(volatile oop* p, oop v); - - static inline oop atomic_exchange_oop(oop exchange_value, volatile HeapWord *dest); - static inline oop atomic_compare_exchange_oop(oop exchange_value, - volatile HeapWord *dest, - oop compare_value, - bool prebarrier = false); + static oop atomic_exchange_oop(oop exchange_value, volatile HeapWord *dest); + static oop atomic_compare_exchange_oop(oop exchange_value, + volatile HeapWord *dest, + oop compare_value); // Access to fields in a instanceOop through these methods. - inline oop obj_field(int offset) const; - inline void obj_field_put(int offset, oop value); - inline void obj_field_put_raw(int offset, oop value); - inline void obj_field_put_volatile(int offset, oop value); + oop obj_field(int offset) const; + void obj_field_put(int offset, oop value); + void obj_field_put_raw(int offset, oop value); + void obj_field_put_volatile(int offset, oop value); - inline Metadata* metadata_field(int offset) const; - inline void metadata_field_put(int offset, Metadata* value); + Metadata* metadata_field(int offset) const; + void metadata_field_put(int offset, Metadata* value); - inline jbyte byte_field(int offset) const; - inline void byte_field_put(int offset, jbyte contents); + jbyte byte_field(int offset) const; + void byte_field_put(int offset, jbyte contents); - inline jchar char_field(int offset) const; - inline void char_field_put(int offset, jchar contents); + jchar char_field(int offset) const; + void char_field_put(int offset, jchar contents); - inline jboolean bool_field(int offset) const; - inline void bool_field_put(int offset, jboolean contents); + jboolean bool_field(int offset) const; + void bool_field_put(int offset, jboolean contents); - inline jint int_field(int offset) const; - inline void int_field_put(int offset, jint contents); + jint int_field(int offset) const; + void int_field_put(int offset, jint contents); - inline jshort short_field(int offset) const; - inline void short_field_put(int offset, jshort contents); + jshort short_field(int offset) const; + void short_field_put(int offset, jshort contents); - inline jlong long_field(int offset) const; - inline void long_field_put(int offset, jlong contents); + jlong long_field(int offset) const; + void long_field_put(int offset, jlong contents); - inline jfloat float_field(int offset) const; - inline void float_field_put(int offset, jfloat contents); + jfloat float_field(int offset) const; + void float_field_put(int offset, jfloat contents); - inline jdouble double_field(int offset) const; - inline void double_field_put(int offset, jdouble contents); + jdouble double_field(int offset) const; + void double_field_put(int offset, jdouble contents); - inline address address_field(int offset) const; - inline void address_field_put(int offset, address contents); + address address_field(int offset) const; + void address_field_put(int offset, address contents); - inline oop obj_field_acquire(int offset) const; - inline void release_obj_field_put(int offset, oop value); + oop obj_field_acquire(int offset) const; + void release_obj_field_put(int offset, oop value); - inline jbyte byte_field_acquire(int offset) const; - inline void release_byte_field_put(int offset, jbyte contents); + jbyte byte_field_acquire(int offset) const; + void release_byte_field_put(int offset, jbyte contents); - inline jchar char_field_acquire(int offset) const; - inline void release_char_field_put(int offset, jchar contents); + jchar char_field_acquire(int offset) const; + void release_char_field_put(int offset, jchar contents); - inline jboolean bool_field_acquire(int offset) const; - inline void release_bool_field_put(int offset, jboolean contents); + jboolean bool_field_acquire(int offset) const; + void release_bool_field_put(int offset, jboolean contents); - inline jint int_field_acquire(int offset) const; - inline void release_int_field_put(int offset, jint contents); + jint int_field_acquire(int offset) const; + void release_int_field_put(int offset, jint contents); - inline jshort short_field_acquire(int offset) const; - inline void release_short_field_put(int offset, jshort contents); + jshort short_field_acquire(int offset) const; + void release_short_field_put(int offset, jshort contents); - inline jlong long_field_acquire(int offset) const; - inline void release_long_field_put(int offset, jlong contents); + jlong long_field_acquire(int offset) const; + void release_long_field_put(int offset, jlong contents); - inline jfloat float_field_acquire(int offset) const; - inline void release_float_field_put(int offset, jfloat contents); + jfloat float_field_acquire(int offset) const; + void release_float_field_put(int offset, jfloat contents); - inline jdouble double_field_acquire(int offset) const; - inline void release_double_field_put(int offset, jdouble contents); + jdouble double_field_acquire(int offset) const; + void release_double_field_put(int offset, jdouble contents); - inline address address_field_acquire(int offset) const; - inline void release_address_field_put(int offset, address contents); + address address_field_acquire(int offset) const; + void release_address_field_put(int offset, address contents); // printing functions for VM debugging void print_on(outputStream* st) const; // First level print