hotspot/src/share/vm/runtime/atomic.inline.hpp
author twisti
Wed, 11 Nov 2015 14:40:38 -1000
changeset 34173 01bb07d23a5b
parent 29181 89beae49867c
child 39404 d0ad5220e91c
permissions -rw-r--r--
8141133: [JVMCI] crash during safepoint deopt if rethrow_exception is set Reviewed-by: twisti Contributed-by: Gilles Duboscq <gilles.m.duboscq@oracle.com>
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
29180
50369728b00e 8064611: AARCH64: Changes to HotSpot shared code
aph
parents: 23523
diff changeset
    46
#ifdef TARGET_OS_ARCH_linux_aarch64
50369728b00e 8064611: AARCH64: Changes to HotSpot shared code
aph
parents: 23523
diff changeset
    47
# include "atomic_linux_aarch64.inline.hpp"
50369728b00e 8064611: AARCH64: Changes to HotSpot shared code
aph
parents: 23523
diff changeset
    48
#endif
14626
0cf4eccf130f 8003240: x86: move MacroAssembler into separate file
twisti
parents:
diff changeset
    49
0cf4eccf130f 8003240: x86: move MacroAssembler into separate file
twisti
parents:
diff changeset
    50
// Solaris
0cf4eccf130f 8003240: x86: move MacroAssembler into separate file
twisti
parents:
diff changeset
    51
#ifdef TARGET_OS_ARCH_solaris_x86
0cf4eccf130f 8003240: x86: move MacroAssembler into separate file
twisti
parents:
diff changeset
    52
# include "atomic_solaris_x86.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
#ifdef TARGET_OS_ARCH_solaris_sparc
0cf4eccf130f 8003240: x86: move MacroAssembler into separate file
twisti
parents:
diff changeset
    55
# include "atomic_solaris_sparc.inline.hpp"
0cf4eccf130f 8003240: x86: move MacroAssembler into separate file
twisti
parents:
diff changeset
    56
#endif
0cf4eccf130f 8003240: x86: move MacroAssembler into separate file
twisti
parents:
diff changeset
    57
0cf4eccf130f 8003240: x86: move MacroAssembler into separate file
twisti
parents:
diff changeset
    58
// Windows
0cf4eccf130f 8003240: x86: move MacroAssembler into separate file
twisti
parents:
diff changeset
    59
#ifdef TARGET_OS_ARCH_windows_x86
0cf4eccf130f 8003240: x86: move MacroAssembler into separate file
twisti
parents:
diff changeset
    60
# include "atomic_windows_x86.inline.hpp"
0cf4eccf130f 8003240: x86: move MacroAssembler into separate file
twisti
parents:
diff changeset
    61
#endif
0cf4eccf130f 8003240: x86: move MacroAssembler into separate file
twisti
parents:
diff changeset
    62
22827
07d991d45a51 8023033: PPC64 (part 13): basic changes for AIX
goetz
parents: 14626
diff changeset
    63
// AIX
07d991d45a51 8023033: PPC64 (part 13): basic changes for AIX
goetz
parents: 14626
diff changeset
    64
#ifdef TARGET_OS_ARCH_aix_ppc
07d991d45a51 8023033: PPC64 (part 13): basic changes for AIX
goetz
parents: 14626
diff changeset
    65
# include "atomic_aix_ppc.inline.hpp"
07d991d45a51 8023033: PPC64 (part 13): basic changes for AIX
goetz
parents: 14626
diff changeset
    66
#endif
07d991d45a51 8023033: PPC64 (part 13): basic changes for AIX
goetz
parents: 14626
diff changeset
    67
14626
0cf4eccf130f 8003240: x86: move MacroAssembler into separate file
twisti
parents:
diff changeset
    68
// BSD
0cf4eccf130f 8003240: x86: move MacroAssembler into separate file
twisti
parents:
diff changeset
    69
#ifdef TARGET_OS_ARCH_bsd_x86
0cf4eccf130f 8003240: x86: move MacroAssembler into separate file
twisti
parents:
diff changeset
    70
# include "atomic_bsd_x86.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
#ifdef TARGET_OS_ARCH_bsd_zero
0cf4eccf130f 8003240: x86: move MacroAssembler into separate file
twisti
parents:
diff changeset
    73
# include "atomic_bsd_zero.inline.hpp"
0cf4eccf130f 8003240: x86: move MacroAssembler into separate file
twisti
parents:
diff changeset
    74
#endif
0cf4eccf130f 8003240: x86: move MacroAssembler into separate file
twisti
parents:
diff changeset
    75
23523
75f522e33395 8037295: Add size_t versions of Atomic::add, dec, and inc
mgronlun
parents: 22827
diff changeset
    76
// size_t casts...
75f522e33395 8037295: Add size_t versions of Atomic::add, dec, and inc
mgronlun
parents: 22827
diff changeset
    77
#if (SIZE_MAX != UINTPTR_MAX)
75f522e33395 8037295: Add size_t versions of Atomic::add, dec, and inc
mgronlun
parents: 22827
diff changeset
    78
#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
    79
#endif
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
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
    82
  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
    83
}
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
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
    86
  inc_ptr((volatile intptr_t*) dest);
75f522e33395 8037295: Add size_t versions of Atomic::add, dec, and inc
mgronlun
parents: 22827
diff changeset
    87
}
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
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
    90
  dec_ptr((volatile intptr_t*) dest);
75f522e33395 8037295: Add size_t versions of Atomic::add, dec, and inc
mgronlun
parents: 22827
diff changeset
    91
}
75f522e33395 8037295: Add size_t versions of Atomic::add, dec, and inc
mgronlun
parents: 22827
diff changeset
    92
27691
733f189ad1f7 8058255: Native jbyte Atomic::cmpxchg for supported x86 platforms
jwilhelm
parents: 23523
diff changeset
    93
#ifndef VM_HAS_SPECIALIZED_CMPXCHG_BYTE
733f189ad1f7 8058255: Native jbyte Atomic::cmpxchg for supported x86 platforms
jwilhelm
parents: 23523
diff changeset
    94
// See comment in atomic.cpp how to override.
733f189ad1f7 8058255: Native jbyte Atomic::cmpxchg for supported x86 platforms
jwilhelm
parents: 23523
diff changeset
    95
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
    96
{
733f189ad1f7 8058255: Native jbyte Atomic::cmpxchg for supported x86 platforms
jwilhelm
parents: 23523
diff changeset
    97
  return cmpxchg_general(exchange_value, dest, comparand);
733f189ad1f7 8058255: Native jbyte Atomic::cmpxchg for supported x86 platforms
jwilhelm
parents: 23523
diff changeset
    98
}
733f189ad1f7 8058255: Native jbyte Atomic::cmpxchg for supported x86 platforms
jwilhelm
parents: 23523
diff changeset
    99
#endif // VM_HAS_SPECIALIZED_CMPXCHG_BYTE
733f189ad1f7 8058255: Native jbyte Atomic::cmpxchg for supported x86 platforms
jwilhelm
parents: 23523
diff changeset
   100
14626
0cf4eccf130f 8003240: x86: move MacroAssembler into separate file
twisti
parents:
diff changeset
   101
#endif // SHARE_VM_RUNTIME_ATOMIC_INLINE_HPP