# HG changeset patch # User coleenp # Date 1533684950 14400 # Node ID edd33b9946ca70a2bdbc9b75bd52f5a88db7139f # Parent 9c68699bebe59e8a9055dfa51352714921fb4a98 8208575: Remove Atomic::add/sub for short Summary: Removed code to atomic::add for short because it's no longer used for Symbol. Reviewed-by: iklam diff -r 9c68699bebe5 -r edd33b9946ca src/hotspot/share/runtime/atomic.hpp --- a/src/hotspot/share/runtime/atomic.hpp Tue Aug 07 15:45:07 2018 -0700 +++ b/src/hotspot/share/runtime/atomic.hpp Tue Aug 07 19:35:50 2018 -0400 @@ -635,29 +635,6 @@ } }; -// Most platforms do not support atomic add on a 2-byte value. However, -// if the value occupies the most significant 16 bits of an aligned 32-bit -// word, then we can do this with an atomic add of (add_value << 16) -// to the 32-bit word. -// -// The least significant parts of this 32-bit word will never be affected, even -// in case of overflow/underflow. -// -// Use the ATOMIC_SHORT_PAIR macro (see macros.hpp) to get the desired alignment. -template<> -struct Atomic::AddImpl { - short operator()(short add_value, short volatile* dest, atomic_memory_order order) const { -#ifdef VM_LITTLE_ENDIAN - assert((intx(dest) & 0x03) == 0x02, "wrong alignment"); - int new_value = Atomic::add(add_value << 16, (volatile int*)(dest-1), order); -#else - assert((intx(dest) & 0x03) == 0x00, "wrong alignment"); - int new_value = Atomic::add(add_value << 16, (volatile int*)(dest), order); -#endif - return (short)(new_value >> 16); // preserves sign - } -}; - template template inline D Atomic::FetchAndAdd::operator()(I add_value, D volatile* dest, diff -r 9c68699bebe5 -r edd33b9946ca src/hotspot/share/utilities/macros.hpp --- a/src/hotspot/share/utilities/macros.hpp Tue Aug 07 15:45:07 2018 -0700 +++ b/src/hotspot/share/utilities/macros.hpp Tue Aug 07 19:35:50 2018 -0400 @@ -609,26 +609,6 @@ #define COMPILER_HEADER(basename) XSTR(COMPILER_HEADER_STEM(basename).hpp) #define COMPILER_HEADER_INLINE(basename) XSTR(COMPILER_HEADER_STEM(basename).inline.hpp) -// To use Atomic::inc(jshort* dest) and Atomic::dec(jshort* dest), the address must be specially -// aligned, such that (*dest) occupies the upper 16 bits of an aligned 32-bit word. The best way to -// achieve is to place your short value next to another short value, which doesn't need atomic ops. -// -// Example -// ATOMIC_SHORT_PAIR( -// volatile short _refcount, // needs atomic operation -// unsigned short _length // number of UTF8 characters in the symbol (does not need atomic op) -// ); - -#ifdef VM_LITTLE_ENDIAN - #define ATOMIC_SHORT_PAIR(atomic_decl, non_atomic_decl) \ - non_atomic_decl; \ - atomic_decl -#else - #define ATOMIC_SHORT_PAIR(atomic_decl, non_atomic_decl) \ - atomic_decl; \ - non_atomic_decl -#endif - #if INCLUDE_CDS && INCLUDE_G1GC && defined(_LP64) && !defined(_WINDOWS) #define INCLUDE_CDS_JAVA_HEAP 1 #define CDS_JAVA_HEAP_ONLY(x) x