hotspot/src/share/vm/runtime/atomic.inline.hpp
author jiangli
Wed, 17 Dec 2014 23:34:52 -0500
changeset 28363 047115468f16
parent 27691 733f189ad1f7
child 29181 89beae49867c
permissions -rw-r--r--
8059510: Compact symbol table layout inside shared archive. Summary: Use separate compact table for shared symbols. Reviewed-by: iklam, gziemski, shade, sla, jrose
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
14626
0cf4eccf130f 8003240: x86: move MacroAssembler into separate file
twisti
parents:
diff changeset
     1
/*
23523
75f522e33395 8037295: Add size_t versions of Atomic::add, dec, and inc
mgronlun
parents: 22827
diff changeset
     2
 * Copyright (c) 2012, 2014, Oracle and/or its affiliates. All rights reserved.
14626
0cf4eccf130f 8003240: x86: move MacroAssembler into separate file
twisti
parents:
diff changeset
     3
 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
0cf4eccf130f 8003240: x86: move MacroAssembler into separate file
twisti
parents:
diff changeset
     4
 *
0cf4eccf130f 8003240: x86: move MacroAssembler into separate file
twisti
parents:
diff changeset
     5
 * This code is free software; you can redistribute it and/or modify it
0cf4eccf130f 8003240: x86: move MacroAssembler into separate file
twisti
parents:
diff changeset
     6
 * under the terms of the GNU General Public License version 2 only, as
0cf4eccf130f 8003240: x86: move MacroAssembler into separate file
twisti
parents:
diff changeset
     7
 * published by the Free Software Foundation.
0cf4eccf130f 8003240: x86: move MacroAssembler into separate file
twisti
parents:
diff changeset
     8
 *
0cf4eccf130f 8003240: x86: move MacroAssembler into separate file
twisti
parents:
diff changeset
     9
 * This code is distributed in the hope that it will be useful, but WITHOUT
0cf4eccf130f 8003240: x86: move MacroAssembler into separate file
twisti
parents:
diff changeset
    10
 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
0cf4eccf130f 8003240: x86: move MacroAssembler into separate file
twisti
parents:
diff changeset
    11
 * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
0cf4eccf130f 8003240: x86: move MacroAssembler into separate file
twisti
parents:
diff changeset
    12
 * version 2 for more details (a copy is included in the LICENSE file that
0cf4eccf130f 8003240: x86: move MacroAssembler into separate file
twisti
parents:
diff changeset
    13
 * accompanied this code).
0cf4eccf130f 8003240: x86: move MacroAssembler into separate file
twisti
parents:
diff changeset
    14
 *
0cf4eccf130f 8003240: x86: move MacroAssembler into separate file
twisti
parents:
diff changeset
    15
 * You should have received a copy of the GNU General Public License version
0cf4eccf130f 8003240: x86: move MacroAssembler into separate file
twisti
parents:
diff changeset
    16
 * 2 along with this work; if not, write to the Free Software Foundation,
0cf4eccf130f 8003240: x86: move MacroAssembler into separate file
twisti
parents:
diff changeset
    17
 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
0cf4eccf130f 8003240: x86: move MacroAssembler into separate file
twisti
parents:
diff changeset
    18
 *
0cf4eccf130f 8003240: x86: move MacroAssembler into separate file
twisti
parents:
diff changeset
    19
 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
0cf4eccf130f 8003240: x86: move MacroAssembler into separate file
twisti
parents:
diff changeset
    20
 * or visit www.oracle.com if you need additional information or have any
0cf4eccf130f 8003240: x86: move MacroAssembler into separate file
twisti
parents:
diff changeset
    21
 * questions.
0cf4eccf130f 8003240: x86: move MacroAssembler into separate file
twisti
parents:
diff changeset
    22
 *
0cf4eccf130f 8003240: x86: move MacroAssembler into separate file
twisti
parents:
diff changeset
    23
 */
0cf4eccf130f 8003240: x86: move MacroAssembler into separate file
twisti
parents:
diff changeset
    24
0cf4eccf130f 8003240: x86: move MacroAssembler into separate file
twisti
parents:
diff changeset
    25
#ifndef SHARE_VM_RUNTIME_ATOMIC_INLINE_HPP
0cf4eccf130f 8003240: x86: move MacroAssembler into separate file
twisti
parents:
diff changeset
    26
#define SHARE_VM_RUNTIME_ATOMIC_INLINE_HPP
0cf4eccf130f 8003240: x86: move MacroAssembler into separate file
twisti
parents:
diff changeset
    27
0cf4eccf130f 8003240: x86: move MacroAssembler into separate file
twisti
parents:
diff changeset
    28
#include "runtime/atomic.hpp"
0cf4eccf130f 8003240: x86: move MacroAssembler into separate file
twisti
parents:
diff changeset
    29
0cf4eccf130f 8003240: x86: move MacroAssembler into separate file
twisti
parents:
diff changeset
    30
// Linux
0cf4eccf130f 8003240: x86: move MacroAssembler into separate file
twisti
parents:
diff changeset
    31
#ifdef TARGET_OS_ARCH_linux_x86
0cf4eccf130f 8003240: x86: move MacroAssembler into separate file
twisti
parents:
diff changeset
    32
# include "atomic_linux_x86.inline.hpp"
0cf4eccf130f 8003240: x86: move MacroAssembler into separate file
twisti
parents:
diff changeset
    33
#endif
0cf4eccf130f 8003240: x86: move MacroAssembler into separate file
twisti
parents:
diff changeset
    34
#ifdef TARGET_OS_ARCH_linux_sparc
0cf4eccf130f 8003240: x86: move MacroAssembler into separate file
twisti
parents:
diff changeset
    35
# include "atomic_linux_sparc.inline.hpp"
0cf4eccf130f 8003240: x86: move MacroAssembler into separate file
twisti
parents:
diff changeset
    36
#endif
0cf4eccf130f 8003240: x86: move MacroAssembler into separate file
twisti
parents:
diff changeset
    37
#ifdef TARGET_OS_ARCH_linux_zero
0cf4eccf130f 8003240: x86: move MacroAssembler into separate file
twisti
parents:
diff changeset
    38
# include "atomic_linux_zero.inline.hpp"
0cf4eccf130f 8003240: x86: move MacroAssembler into separate file
twisti
parents:
diff changeset
    39
#endif
0cf4eccf130f 8003240: x86: move MacroAssembler into separate file
twisti
parents:
diff changeset
    40
#ifdef TARGET_OS_ARCH_linux_arm
0cf4eccf130f 8003240: x86: move MacroAssembler into separate file
twisti
parents:
diff changeset
    41
# include "atomic_linux_arm.inline.hpp"
0cf4eccf130f 8003240: x86: move MacroAssembler into separate file
twisti
parents:
diff changeset
    42
#endif
0cf4eccf130f 8003240: x86: move MacroAssembler into separate file
twisti
parents:
diff changeset
    43
#ifdef TARGET_OS_ARCH_linux_ppc
0cf4eccf130f 8003240: x86: move MacroAssembler into separate file
twisti
parents:
diff changeset
    44
# include "atomic_linux_ppc.inline.hpp"
0cf4eccf130f 8003240: x86: move MacroAssembler into separate file
twisti
parents:
diff changeset
    45
#endif
0cf4eccf130f 8003240: x86: move MacroAssembler into separate file
twisti
parents:
diff changeset
    46
0cf4eccf130f 8003240: x86: move MacroAssembler into separate file
twisti
parents:
diff changeset
    47
// Solaris
0cf4eccf130f 8003240: x86: move MacroAssembler into separate file
twisti
parents:
diff changeset
    48
#ifdef TARGET_OS_ARCH_solaris_x86
0cf4eccf130f 8003240: x86: move MacroAssembler into separate file
twisti
parents:
diff changeset
    49
# include "atomic_solaris_x86.inline.hpp"
0cf4eccf130f 8003240: x86: move MacroAssembler into separate file
twisti
parents:
diff changeset
    50
#endif
0cf4eccf130f 8003240: x86: move MacroAssembler into separate file
twisti
parents:
diff changeset
    51
#ifdef TARGET_OS_ARCH_solaris_sparc
0cf4eccf130f 8003240: x86: move MacroAssembler into separate file
twisti
parents:
diff changeset
    52
# include "atomic_solaris_sparc.inline.hpp"
0cf4eccf130f 8003240: x86: move MacroAssembler into separate file
twisti
parents:
diff changeset
    53
#endif
0cf4eccf130f 8003240: x86: move MacroAssembler into separate file
twisti
parents:
diff changeset
    54
0cf4eccf130f 8003240: x86: move MacroAssembler into separate file
twisti
parents:
diff changeset
    55
// Windows
0cf4eccf130f 8003240: x86: move MacroAssembler into separate file
twisti
parents:
diff changeset
    56
#ifdef TARGET_OS_ARCH_windows_x86
0cf4eccf130f 8003240: x86: move MacroAssembler into separate file
twisti
parents:
diff changeset
    57
# include "atomic_windows_x86.inline.hpp"
0cf4eccf130f 8003240: x86: move MacroAssembler into separate file
twisti
parents:
diff changeset
    58
#endif
0cf4eccf130f 8003240: x86: move MacroAssembler into separate file
twisti
parents:
diff changeset
    59
22827
07d991d45a51 8023033: PPC64 (part 13): basic changes for AIX
goetz
parents: 14626
diff changeset
    60
// AIX
07d991d45a51 8023033: PPC64 (part 13): basic changes for AIX
goetz
parents: 14626
diff changeset
    61
#ifdef TARGET_OS_ARCH_aix_ppc
07d991d45a51 8023033: PPC64 (part 13): basic changes for AIX
goetz
parents: 14626
diff changeset
    62
# include "atomic_aix_ppc.inline.hpp"
07d991d45a51 8023033: PPC64 (part 13): basic changes for AIX
goetz
parents: 14626
diff changeset
    63
#endif
07d991d45a51 8023033: PPC64 (part 13): basic changes for AIX
goetz
parents: 14626
diff changeset
    64
14626
0cf4eccf130f 8003240: x86: move MacroAssembler into separate file
twisti
parents:
diff changeset
    65
// BSD
0cf4eccf130f 8003240: x86: move MacroAssembler into separate file
twisti
parents:
diff changeset
    66
#ifdef TARGET_OS_ARCH_bsd_x86
0cf4eccf130f 8003240: x86: move MacroAssembler into separate file
twisti
parents:
diff changeset
    67
# include "atomic_bsd_x86.inline.hpp"
0cf4eccf130f 8003240: x86: move MacroAssembler into separate file
twisti
parents:
diff changeset
    68
#endif
0cf4eccf130f 8003240: x86: move MacroAssembler into separate file
twisti
parents:
diff changeset
    69
#ifdef TARGET_OS_ARCH_bsd_zero
0cf4eccf130f 8003240: x86: move MacroAssembler into separate file
twisti
parents:
diff changeset
    70
# include "atomic_bsd_zero.inline.hpp"
0cf4eccf130f 8003240: x86: move MacroAssembler into separate file
twisti
parents:
diff changeset
    71
#endif
0cf4eccf130f 8003240: x86: move MacroAssembler into separate file
twisti
parents:
diff changeset
    72
23523
75f522e33395 8037295: Add size_t versions of Atomic::add, dec, and inc
mgronlun
parents: 22827
diff changeset
    73
// size_t casts...
75f522e33395 8037295: Add size_t versions of Atomic::add, dec, and inc
mgronlun
parents: 22827
diff changeset
    74
#if (SIZE_MAX != UINTPTR_MAX)
75f522e33395 8037295: Add size_t versions of Atomic::add, dec, and inc
mgronlun
parents: 22827
diff changeset
    75
#error size_t is not WORD_SIZE, interesting platform, but missing implementation here
75f522e33395 8037295: Add size_t versions of Atomic::add, dec, and inc
mgronlun
parents: 22827
diff changeset
    76
#endif
75f522e33395 8037295: Add size_t versions of Atomic::add, dec, and inc
mgronlun
parents: 22827
diff changeset
    77
75f522e33395 8037295: Add size_t versions of Atomic::add, dec, and inc
mgronlun
parents: 22827
diff changeset
    78
inline size_t Atomic::add(size_t add_value, volatile size_t* dest) {
75f522e33395 8037295: Add size_t versions of Atomic::add, dec, and inc
mgronlun
parents: 22827
diff changeset
    79
  return (size_t) add_ptr((intptr_t) add_value, (volatile intptr_t*) dest);
75f522e33395 8037295: Add size_t versions of Atomic::add, dec, and inc
mgronlun
parents: 22827
diff changeset
    80
}
75f522e33395 8037295: Add size_t versions of Atomic::add, dec, and inc
mgronlun
parents: 22827
diff changeset
    81
75f522e33395 8037295: Add size_t versions of Atomic::add, dec, and inc
mgronlun
parents: 22827
diff changeset
    82
inline void Atomic::inc(volatile size_t* dest) {
75f522e33395 8037295: Add size_t versions of Atomic::add, dec, and inc
mgronlun
parents: 22827
diff changeset
    83
  inc_ptr((volatile intptr_t*) dest);
75f522e33395 8037295: Add size_t versions of Atomic::add, dec, and inc
mgronlun
parents: 22827
diff changeset
    84
}
75f522e33395 8037295: Add size_t versions of Atomic::add, dec, and inc
mgronlun
parents: 22827
diff changeset
    85
75f522e33395 8037295: Add size_t versions of Atomic::add, dec, and inc
mgronlun
parents: 22827
diff changeset
    86
inline void Atomic::dec(volatile size_t* dest) {
75f522e33395 8037295: Add size_t versions of Atomic::add, dec, and inc
mgronlun
parents: 22827
diff changeset
    87
  dec_ptr((volatile intptr_t*) dest);
75f522e33395 8037295: Add size_t versions of Atomic::add, dec, and inc
mgronlun
parents: 22827
diff changeset
    88
}
75f522e33395 8037295: Add size_t versions of Atomic::add, dec, and inc
mgronlun
parents: 22827
diff changeset
    89
27691
733f189ad1f7 8058255: Native jbyte Atomic::cmpxchg for supported x86 platforms
jwilhelm
parents: 23523
diff changeset
    90
#ifndef VM_HAS_SPECIALIZED_CMPXCHG_BYTE
733f189ad1f7 8058255: Native jbyte Atomic::cmpxchg for supported x86 platforms
jwilhelm
parents: 23523
diff changeset
    91
// See comment in atomic.cpp how to override.
733f189ad1f7 8058255: Native jbyte Atomic::cmpxchg for supported x86 platforms
jwilhelm
parents: 23523
diff changeset
    92
inline jbyte Atomic::cmpxchg(jbyte exchange_value, volatile jbyte *dest, jbyte comparand)
733f189ad1f7 8058255: Native jbyte Atomic::cmpxchg for supported x86 platforms
jwilhelm
parents: 23523
diff changeset
    93
{
733f189ad1f7 8058255: Native jbyte Atomic::cmpxchg for supported x86 platforms
jwilhelm
parents: 23523
diff changeset
    94
  return cmpxchg_general(exchange_value, dest, comparand);
733f189ad1f7 8058255: Native jbyte Atomic::cmpxchg for supported x86 platforms
jwilhelm
parents: 23523
diff changeset
    95
}
733f189ad1f7 8058255: Native jbyte Atomic::cmpxchg for supported x86 platforms
jwilhelm
parents: 23523
diff changeset
    96
#endif // VM_HAS_SPECIALIZED_CMPXCHG_BYTE
733f189ad1f7 8058255: Native jbyte Atomic::cmpxchg for supported x86 platforms
jwilhelm
parents: 23523
diff changeset
    97
14626
0cf4eccf130f 8003240: x86: move MacroAssembler into separate file
twisti
parents:
diff changeset
    98
#endif // SHARE_VM_RUNTIME_ATOMIC_INLINE_HPP