hotspot/src/os_cpu/linux_aarch64/vm/copy_linux_aarch64.inline.hpp
author enevill
Thu, 10 Mar 2016 14:53:09 +0000
changeset 36595 3322a76f3a00
parent 29182 78af2a4d1ec3
child 46306 26cf11456712
permissions -rw-r--r--
8151502: optimize pd_disjoint_words and pd_conjoint_words Summary: optimize copy routines using inline assembler Reviewed-by: aph
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
29182
78af2a4d1ec3 8068055: AARCH64: os_cpu
aph
parents:
diff changeset
     1
/*
78af2a4d1ec3 8068055: AARCH64: os_cpu
aph
parents:
diff changeset
     2
 * Copyright (c) 2003, 2010, Oracle and/or its affiliates. All rights reserved.
78af2a4d1ec3 8068055: AARCH64: os_cpu
aph
parents:
diff changeset
     3
 * Copyright (c) 2014, Red Hat Inc. All rights reserved.
78af2a4d1ec3 8068055: AARCH64: os_cpu
aph
parents:
diff changeset
     4
 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
78af2a4d1ec3 8068055: AARCH64: os_cpu
aph
parents:
diff changeset
     5
 *
78af2a4d1ec3 8068055: AARCH64: os_cpu
aph
parents:
diff changeset
     6
 * This code is free software; you can redistribute it and/or modify it
78af2a4d1ec3 8068055: AARCH64: os_cpu
aph
parents:
diff changeset
     7
 * under the terms of the GNU General Public License version 2 only, as
78af2a4d1ec3 8068055: AARCH64: os_cpu
aph
parents:
diff changeset
     8
 * published by the Free Software Foundation.
78af2a4d1ec3 8068055: AARCH64: os_cpu
aph
parents:
diff changeset
     9
 *
78af2a4d1ec3 8068055: AARCH64: os_cpu
aph
parents:
diff changeset
    10
 * This code is distributed in the hope that it will be useful, but WITHOUT
78af2a4d1ec3 8068055: AARCH64: os_cpu
aph
parents:
diff changeset
    11
 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
78af2a4d1ec3 8068055: AARCH64: os_cpu
aph
parents:
diff changeset
    12
 * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
78af2a4d1ec3 8068055: AARCH64: os_cpu
aph
parents:
diff changeset
    13
 * version 2 for more details (a copy is included in the LICENSE file that
78af2a4d1ec3 8068055: AARCH64: os_cpu
aph
parents:
diff changeset
    14
 * accompanied this code).
78af2a4d1ec3 8068055: AARCH64: os_cpu
aph
parents:
diff changeset
    15
 *
78af2a4d1ec3 8068055: AARCH64: os_cpu
aph
parents:
diff changeset
    16
 * You should have received a copy of the GNU General Public License version
78af2a4d1ec3 8068055: AARCH64: os_cpu
aph
parents:
diff changeset
    17
 * 2 along with this work; if not, write to the Free Software Foundation,
78af2a4d1ec3 8068055: AARCH64: os_cpu
aph
parents:
diff changeset
    18
 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
78af2a4d1ec3 8068055: AARCH64: os_cpu
aph
parents:
diff changeset
    19
 *
78af2a4d1ec3 8068055: AARCH64: os_cpu
aph
parents:
diff changeset
    20
 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
78af2a4d1ec3 8068055: AARCH64: os_cpu
aph
parents:
diff changeset
    21
 * or visit www.oracle.com if you need additional information or have any
78af2a4d1ec3 8068055: AARCH64: os_cpu
aph
parents:
diff changeset
    22
 * questions.
78af2a4d1ec3 8068055: AARCH64: os_cpu
aph
parents:
diff changeset
    23
 *
78af2a4d1ec3 8068055: AARCH64: os_cpu
aph
parents:
diff changeset
    24
 */
78af2a4d1ec3 8068055: AARCH64: os_cpu
aph
parents:
diff changeset
    25
78af2a4d1ec3 8068055: AARCH64: os_cpu
aph
parents:
diff changeset
    26
#ifndef OS_CPU_LINUX_AARCH64_VM_COPY_LINUX_AARCH64_INLINE_HPP
78af2a4d1ec3 8068055: AARCH64: os_cpu
aph
parents:
diff changeset
    27
#define OS_CPU_LINUX_AARCH64_VM_COPY_LINUX_AARCH64_INLINE_HPP
78af2a4d1ec3 8068055: AARCH64: os_cpu
aph
parents:
diff changeset
    28
36595
3322a76f3a00 8151502: optimize pd_disjoint_words and pd_conjoint_words
enevill
parents: 29182
diff changeset
    29
#define COPY_SMALL(from, to, count)                                     \
3322a76f3a00 8151502: optimize pd_disjoint_words and pd_conjoint_words
enevill
parents: 29182
diff changeset
    30
{                                                                       \
3322a76f3a00 8151502: optimize pd_disjoint_words and pd_conjoint_words
enevill
parents: 29182
diff changeset
    31
        long tmp0, tmp1, tmp2, tmp3;                                    \
3322a76f3a00 8151502: optimize pd_disjoint_words and pd_conjoint_words
enevill
parents: 29182
diff changeset
    32
        long tmp4, tmp5, tmp6, tmp7;                                    \
3322a76f3a00 8151502: optimize pd_disjoint_words and pd_conjoint_words
enevill
parents: 29182
diff changeset
    33
  __asm volatile(                                                       \
3322a76f3a00 8151502: optimize pd_disjoint_words and pd_conjoint_words
enevill
parents: 29182
diff changeset
    34
"       adr     %[t0], 0f;"                                             \
3322a76f3a00 8151502: optimize pd_disjoint_words and pd_conjoint_words
enevill
parents: 29182
diff changeset
    35
"       add     %[t0], %[t0], %[cnt], lsl #5;"                          \
3322a76f3a00 8151502: optimize pd_disjoint_words and pd_conjoint_words
enevill
parents: 29182
diff changeset
    36
"       br      %[t0];"                                                 \
3322a76f3a00 8151502: optimize pd_disjoint_words and pd_conjoint_words
enevill
parents: 29182
diff changeset
    37
"       .align  5;"                                                     \
3322a76f3a00 8151502: optimize pd_disjoint_words and pd_conjoint_words
enevill
parents: 29182
diff changeset
    38
"0:"                                                                    \
3322a76f3a00 8151502: optimize pd_disjoint_words and pd_conjoint_words
enevill
parents: 29182
diff changeset
    39
"       b       1f;"                                                    \
3322a76f3a00 8151502: optimize pd_disjoint_words and pd_conjoint_words
enevill
parents: 29182
diff changeset
    40
"       .align  5;"                                                     \
3322a76f3a00 8151502: optimize pd_disjoint_words and pd_conjoint_words
enevill
parents: 29182
diff changeset
    41
"       ldr     %[t0], [%[s], #0];"                                     \
3322a76f3a00 8151502: optimize pd_disjoint_words and pd_conjoint_words
enevill
parents: 29182
diff changeset
    42
"       str     %[t0], [%[d], #0];"                                     \
3322a76f3a00 8151502: optimize pd_disjoint_words and pd_conjoint_words
enevill
parents: 29182
diff changeset
    43
"       b       1f;"                                                    \
3322a76f3a00 8151502: optimize pd_disjoint_words and pd_conjoint_words
enevill
parents: 29182
diff changeset
    44
"       .align  5;"                                                     \
3322a76f3a00 8151502: optimize pd_disjoint_words and pd_conjoint_words
enevill
parents: 29182
diff changeset
    45
"       ldp     %[t0], %[t1], [%[s], #0];"                              \
3322a76f3a00 8151502: optimize pd_disjoint_words and pd_conjoint_words
enevill
parents: 29182
diff changeset
    46
"       stp     %[t0], %[t1], [%[d], #0];"                              \
3322a76f3a00 8151502: optimize pd_disjoint_words and pd_conjoint_words
enevill
parents: 29182
diff changeset
    47
"       b       1f;"                                                    \
3322a76f3a00 8151502: optimize pd_disjoint_words and pd_conjoint_words
enevill
parents: 29182
diff changeset
    48
"       .align  5;"                                                     \
3322a76f3a00 8151502: optimize pd_disjoint_words and pd_conjoint_words
enevill
parents: 29182
diff changeset
    49
"       ldp     %[t0], %[t1], [%[s], #0];"                              \
3322a76f3a00 8151502: optimize pd_disjoint_words and pd_conjoint_words
enevill
parents: 29182
diff changeset
    50
"       ldr     %[t2], [%[s], #16];"                                    \
3322a76f3a00 8151502: optimize pd_disjoint_words and pd_conjoint_words
enevill
parents: 29182
diff changeset
    51
"       stp     %[t0], %[t1], [%[d], #0];"                              \
3322a76f3a00 8151502: optimize pd_disjoint_words and pd_conjoint_words
enevill
parents: 29182
diff changeset
    52
"       str     %[t2], [%[d], #16];"                                    \
3322a76f3a00 8151502: optimize pd_disjoint_words and pd_conjoint_words
enevill
parents: 29182
diff changeset
    53
"       b       1f;"                                                    \
3322a76f3a00 8151502: optimize pd_disjoint_words and pd_conjoint_words
enevill
parents: 29182
diff changeset
    54
"       .align  5;"                                                     \
3322a76f3a00 8151502: optimize pd_disjoint_words and pd_conjoint_words
enevill
parents: 29182
diff changeset
    55
"       ldp     %[t0], %[t1], [%[s], #0];"                              \
3322a76f3a00 8151502: optimize pd_disjoint_words and pd_conjoint_words
enevill
parents: 29182
diff changeset
    56
"       ldp     %[t2], %[t3], [%[s], #16];"                             \
3322a76f3a00 8151502: optimize pd_disjoint_words and pd_conjoint_words
enevill
parents: 29182
diff changeset
    57
"       stp     %[t0], %[t1], [%[d], #0];"                              \
3322a76f3a00 8151502: optimize pd_disjoint_words and pd_conjoint_words
enevill
parents: 29182
diff changeset
    58
"       stp     %[t2], %[t3], [%[d], #16];"                             \
3322a76f3a00 8151502: optimize pd_disjoint_words and pd_conjoint_words
enevill
parents: 29182
diff changeset
    59
"       b       1f;"                                                    \
3322a76f3a00 8151502: optimize pd_disjoint_words and pd_conjoint_words
enevill
parents: 29182
diff changeset
    60
"       .align  5;"                                                     \
3322a76f3a00 8151502: optimize pd_disjoint_words and pd_conjoint_words
enevill
parents: 29182
diff changeset
    61
"       ldp     %[t0], %[t1], [%[s], #0];"                              \
3322a76f3a00 8151502: optimize pd_disjoint_words and pd_conjoint_words
enevill
parents: 29182
diff changeset
    62
"       ldp     %[t2], %[t3], [%[s], #16];"                             \
3322a76f3a00 8151502: optimize pd_disjoint_words and pd_conjoint_words
enevill
parents: 29182
diff changeset
    63
"       ldr     %[t4], [%[s], #32];"                                    \
3322a76f3a00 8151502: optimize pd_disjoint_words and pd_conjoint_words
enevill
parents: 29182
diff changeset
    64
"       stp     %[t0], %[t1], [%[d], #0];"                              \
3322a76f3a00 8151502: optimize pd_disjoint_words and pd_conjoint_words
enevill
parents: 29182
diff changeset
    65
"       stp     %[t2], %[t3], [%[d], #16];"                             \
3322a76f3a00 8151502: optimize pd_disjoint_words and pd_conjoint_words
enevill
parents: 29182
diff changeset
    66
"       str     %[t4], [%[d], #32];"                                    \
3322a76f3a00 8151502: optimize pd_disjoint_words and pd_conjoint_words
enevill
parents: 29182
diff changeset
    67
"       b       1f;"                                                    \
3322a76f3a00 8151502: optimize pd_disjoint_words and pd_conjoint_words
enevill
parents: 29182
diff changeset
    68
"       .align  5;"                                                     \
3322a76f3a00 8151502: optimize pd_disjoint_words and pd_conjoint_words
enevill
parents: 29182
diff changeset
    69
"       ldp     %[t0], %[t1], [%[s], #0];"                              \
3322a76f3a00 8151502: optimize pd_disjoint_words and pd_conjoint_words
enevill
parents: 29182
diff changeset
    70
"       ldp     %[t2], %[t3], [%[s], #16];"                             \
3322a76f3a00 8151502: optimize pd_disjoint_words and pd_conjoint_words
enevill
parents: 29182
diff changeset
    71
"       ldp     %[t4], %[t5], [%[s], #32];"                             \
3322a76f3a00 8151502: optimize pd_disjoint_words and pd_conjoint_words
enevill
parents: 29182
diff changeset
    72
"2:"                                                                    \
3322a76f3a00 8151502: optimize pd_disjoint_words and pd_conjoint_words
enevill
parents: 29182
diff changeset
    73
"       stp     %[t0], %[t1], [%[d], #0];"                              \
3322a76f3a00 8151502: optimize pd_disjoint_words and pd_conjoint_words
enevill
parents: 29182
diff changeset
    74
"       stp     %[t2], %[t3], [%[d], #16];"                             \
3322a76f3a00 8151502: optimize pd_disjoint_words and pd_conjoint_words
enevill
parents: 29182
diff changeset
    75
"       stp     %[t4], %[t5], [%[d], #32];"                             \
3322a76f3a00 8151502: optimize pd_disjoint_words and pd_conjoint_words
enevill
parents: 29182
diff changeset
    76
"       b       1f;"                                                    \
3322a76f3a00 8151502: optimize pd_disjoint_words and pd_conjoint_words
enevill
parents: 29182
diff changeset
    77
"       .align  5;"                                                     \
3322a76f3a00 8151502: optimize pd_disjoint_words and pd_conjoint_words
enevill
parents: 29182
diff changeset
    78
"       ldr     %[t6], [%[s], #0];"                                     \
3322a76f3a00 8151502: optimize pd_disjoint_words and pd_conjoint_words
enevill
parents: 29182
diff changeset
    79
"       ldp     %[t0], %[t1], [%[s], #8];"                              \
3322a76f3a00 8151502: optimize pd_disjoint_words and pd_conjoint_words
enevill
parents: 29182
diff changeset
    80
"       ldp     %[t2], %[t3], [%[s], #24];"                             \
3322a76f3a00 8151502: optimize pd_disjoint_words and pd_conjoint_words
enevill
parents: 29182
diff changeset
    81
"       ldp     %[t4], %[t5], [%[s], #40];"                             \
3322a76f3a00 8151502: optimize pd_disjoint_words and pd_conjoint_words
enevill
parents: 29182
diff changeset
    82
"       str     %[t6], [%[d]], #8;"                                     \
3322a76f3a00 8151502: optimize pd_disjoint_words and pd_conjoint_words
enevill
parents: 29182
diff changeset
    83
"       b       2b;"                                                    \
3322a76f3a00 8151502: optimize pd_disjoint_words and pd_conjoint_words
enevill
parents: 29182
diff changeset
    84
"       .align  5;"                                                     \
3322a76f3a00 8151502: optimize pd_disjoint_words and pd_conjoint_words
enevill
parents: 29182
diff changeset
    85
"       ldp     %[t0], %[t1], [%[s], #0];"                              \
3322a76f3a00 8151502: optimize pd_disjoint_words and pd_conjoint_words
enevill
parents: 29182
diff changeset
    86
"       ldp     %[t2], %[t3], [%[s], #16];"                             \
3322a76f3a00 8151502: optimize pd_disjoint_words and pd_conjoint_words
enevill
parents: 29182
diff changeset
    87
"       ldp     %[t4], %[t5], [%[s], #32];"                             \
3322a76f3a00 8151502: optimize pd_disjoint_words and pd_conjoint_words
enevill
parents: 29182
diff changeset
    88
"       ldp     %[t6], %[t7], [%[s], #48];"                             \
3322a76f3a00 8151502: optimize pd_disjoint_words and pd_conjoint_words
enevill
parents: 29182
diff changeset
    89
"       stp     %[t0], %[t1], [%[d], #0];"                              \
3322a76f3a00 8151502: optimize pd_disjoint_words and pd_conjoint_words
enevill
parents: 29182
diff changeset
    90
"       stp     %[t2], %[t3], [%[d], #16];"                             \
3322a76f3a00 8151502: optimize pd_disjoint_words and pd_conjoint_words
enevill
parents: 29182
diff changeset
    91
"       stp     %[t4], %[t5], [%[d], #32];"                             \
3322a76f3a00 8151502: optimize pd_disjoint_words and pd_conjoint_words
enevill
parents: 29182
diff changeset
    92
"       stp     %[t6], %[t7], [%[d], #48];"                             \
3322a76f3a00 8151502: optimize pd_disjoint_words and pd_conjoint_words
enevill
parents: 29182
diff changeset
    93
"1:"                                                                    \
3322a76f3a00 8151502: optimize pd_disjoint_words and pd_conjoint_words
enevill
parents: 29182
diff changeset
    94
                                                                        \
3322a76f3a00 8151502: optimize pd_disjoint_words and pd_conjoint_words
enevill
parents: 29182
diff changeset
    95
  : [s]"+r"(from), [d]"+r"(to), [cnt]"+r"(count),                       \
3322a76f3a00 8151502: optimize pd_disjoint_words and pd_conjoint_words
enevill
parents: 29182
diff changeset
    96
    [t0]"=&r"(tmp0), [t1]"=&r"(tmp1), [t2]"=&r"(tmp2), [t3]"=&r"(tmp3), \
3322a76f3a00 8151502: optimize pd_disjoint_words and pd_conjoint_words
enevill
parents: 29182
diff changeset
    97
    [t4]"=&r"(tmp4), [t5]"=&r"(tmp5), [t6]"=&r"(tmp6), [t7]"=&r"(tmp7)  \
3322a76f3a00 8151502: optimize pd_disjoint_words and pd_conjoint_words
enevill
parents: 29182
diff changeset
    98
  :                                                                     \
3322a76f3a00 8151502: optimize pd_disjoint_words and pd_conjoint_words
enevill
parents: 29182
diff changeset
    99
  : "memory", "cc");                                                    \
3322a76f3a00 8151502: optimize pd_disjoint_words and pd_conjoint_words
enevill
parents: 29182
diff changeset
   100
}
3322a76f3a00 8151502: optimize pd_disjoint_words and pd_conjoint_words
enevill
parents: 29182
diff changeset
   101
29182
78af2a4d1ec3 8068055: AARCH64: os_cpu
aph
parents:
diff changeset
   102
static void pd_conjoint_words(HeapWord* from, HeapWord* to, size_t count) {
36595
3322a76f3a00 8151502: optimize pd_disjoint_words and pd_conjoint_words
enevill
parents: 29182
diff changeset
   103
  __asm volatile( "prfm pldl1strm, [%[s], #0];" :: [s]"r"(from) : "memory");
3322a76f3a00 8151502: optimize pd_disjoint_words and pd_conjoint_words
enevill
parents: 29182
diff changeset
   104
  if (__builtin_expect(count <= 8, 1)) {
3322a76f3a00 8151502: optimize pd_disjoint_words and pd_conjoint_words
enevill
parents: 29182
diff changeset
   105
    COPY_SMALL(from, to, count);
3322a76f3a00 8151502: optimize pd_disjoint_words and pd_conjoint_words
enevill
parents: 29182
diff changeset
   106
    return;
3322a76f3a00 8151502: optimize pd_disjoint_words and pd_conjoint_words
enevill
parents: 29182
diff changeset
   107
  }
3322a76f3a00 8151502: optimize pd_disjoint_words and pd_conjoint_words
enevill
parents: 29182
diff changeset
   108
  _Copy_conjoint_words(from, to, count);
29182
78af2a4d1ec3 8068055: AARCH64: os_cpu
aph
parents:
diff changeset
   109
}
78af2a4d1ec3 8068055: AARCH64: os_cpu
aph
parents:
diff changeset
   110
78af2a4d1ec3 8068055: AARCH64: os_cpu
aph
parents:
diff changeset
   111
static void pd_disjoint_words(HeapWord* from, HeapWord* to, size_t count) {
36595
3322a76f3a00 8151502: optimize pd_disjoint_words and pd_conjoint_words
enevill
parents: 29182
diff changeset
   112
  if (__builtin_constant_p(count)) {
3322a76f3a00 8151502: optimize pd_disjoint_words and pd_conjoint_words
enevill
parents: 29182
diff changeset
   113
    memcpy(to, from, count * sizeof(HeapWord));
3322a76f3a00 8151502: optimize pd_disjoint_words and pd_conjoint_words
enevill
parents: 29182
diff changeset
   114
    return;
29182
78af2a4d1ec3 8068055: AARCH64: os_cpu
aph
parents:
diff changeset
   115
  }
36595
3322a76f3a00 8151502: optimize pd_disjoint_words and pd_conjoint_words
enevill
parents: 29182
diff changeset
   116
  __asm volatile( "prfm pldl1strm, [%[s], #0];" :: [s]"r"(from) : "memory");
3322a76f3a00 8151502: optimize pd_disjoint_words and pd_conjoint_words
enevill
parents: 29182
diff changeset
   117
  if (__builtin_expect(count <= 8, 1)) {
3322a76f3a00 8151502: optimize pd_disjoint_words and pd_conjoint_words
enevill
parents: 29182
diff changeset
   118
    COPY_SMALL(from, to, count);
3322a76f3a00 8151502: optimize pd_disjoint_words and pd_conjoint_words
enevill
parents: 29182
diff changeset
   119
    return;
3322a76f3a00 8151502: optimize pd_disjoint_words and pd_conjoint_words
enevill
parents: 29182
diff changeset
   120
  }
3322a76f3a00 8151502: optimize pd_disjoint_words and pd_conjoint_words
enevill
parents: 29182
diff changeset
   121
  _Copy_disjoint_words(from, to, count);
29182
78af2a4d1ec3 8068055: AARCH64: os_cpu
aph
parents:
diff changeset
   122
}
78af2a4d1ec3 8068055: AARCH64: os_cpu
aph
parents:
diff changeset
   123
78af2a4d1ec3 8068055: AARCH64: os_cpu
aph
parents:
diff changeset
   124
static void pd_disjoint_words_atomic(HeapWord* from, HeapWord* to, size_t count) {
36595
3322a76f3a00 8151502: optimize pd_disjoint_words and pd_conjoint_words
enevill
parents: 29182
diff changeset
   125
  __asm volatile( "prfm pldl1strm, [%[s], #0];" :: [s]"r"(from) : "memory");
3322a76f3a00 8151502: optimize pd_disjoint_words and pd_conjoint_words
enevill
parents: 29182
diff changeset
   126
  if (__builtin_expect(count <= 8, 1)) {
3322a76f3a00 8151502: optimize pd_disjoint_words and pd_conjoint_words
enevill
parents: 29182
diff changeset
   127
    COPY_SMALL(from, to, count);
3322a76f3a00 8151502: optimize pd_disjoint_words and pd_conjoint_words
enevill
parents: 29182
diff changeset
   128
    return;
29182
78af2a4d1ec3 8068055: AARCH64: os_cpu
aph
parents:
diff changeset
   129
  }
36595
3322a76f3a00 8151502: optimize pd_disjoint_words and pd_conjoint_words
enevill
parents: 29182
diff changeset
   130
  _Copy_disjoint_words(from, to, count);
29182
78af2a4d1ec3 8068055: AARCH64: os_cpu
aph
parents:
diff changeset
   131
}
78af2a4d1ec3 8068055: AARCH64: os_cpu
aph
parents:
diff changeset
   132
78af2a4d1ec3 8068055: AARCH64: os_cpu
aph
parents:
diff changeset
   133
static void pd_aligned_conjoint_words(HeapWord* from, HeapWord* to, size_t count) {
78af2a4d1ec3 8068055: AARCH64: os_cpu
aph
parents:
diff changeset
   134
  pd_conjoint_words(from, to, count);
78af2a4d1ec3 8068055: AARCH64: os_cpu
aph
parents:
diff changeset
   135
}
78af2a4d1ec3 8068055: AARCH64: os_cpu
aph
parents:
diff changeset
   136
78af2a4d1ec3 8068055: AARCH64: os_cpu
aph
parents:
diff changeset
   137
static void pd_aligned_disjoint_words(HeapWord* from, HeapWord* to, size_t count) {
78af2a4d1ec3 8068055: AARCH64: os_cpu
aph
parents:
diff changeset
   138
  pd_disjoint_words(from, to, count);
78af2a4d1ec3 8068055: AARCH64: os_cpu
aph
parents:
diff changeset
   139
}
78af2a4d1ec3 8068055: AARCH64: os_cpu
aph
parents:
diff changeset
   140
78af2a4d1ec3 8068055: AARCH64: os_cpu
aph
parents:
diff changeset
   141
static void pd_conjoint_bytes(void* from, void* to, size_t count) {
78af2a4d1ec3 8068055: AARCH64: os_cpu
aph
parents:
diff changeset
   142
  (void)memmove(to, from, count);
78af2a4d1ec3 8068055: AARCH64: os_cpu
aph
parents:
diff changeset
   143
}
78af2a4d1ec3 8068055: AARCH64: os_cpu
aph
parents:
diff changeset
   144
78af2a4d1ec3 8068055: AARCH64: os_cpu
aph
parents:
diff changeset
   145
static void pd_conjoint_bytes_atomic(void* from, void* to, size_t count) {
78af2a4d1ec3 8068055: AARCH64: os_cpu
aph
parents:
diff changeset
   146
  pd_conjoint_bytes(from, to, count);
78af2a4d1ec3 8068055: AARCH64: os_cpu
aph
parents:
diff changeset
   147
}
78af2a4d1ec3 8068055: AARCH64: os_cpu
aph
parents:
diff changeset
   148
78af2a4d1ec3 8068055: AARCH64: os_cpu
aph
parents:
diff changeset
   149
static void pd_conjoint_jshorts_atomic(jshort* from, jshort* to, size_t count) {
78af2a4d1ec3 8068055: AARCH64: os_cpu
aph
parents:
diff changeset
   150
  _Copy_conjoint_jshorts_atomic(from, to, count);
78af2a4d1ec3 8068055: AARCH64: os_cpu
aph
parents:
diff changeset
   151
}
78af2a4d1ec3 8068055: AARCH64: os_cpu
aph
parents:
diff changeset
   152
78af2a4d1ec3 8068055: AARCH64: os_cpu
aph
parents:
diff changeset
   153
static void pd_conjoint_jints_atomic(jint* from, jint* to, size_t count) {
78af2a4d1ec3 8068055: AARCH64: os_cpu
aph
parents:
diff changeset
   154
  _Copy_conjoint_jints_atomic(from, to, count);
78af2a4d1ec3 8068055: AARCH64: os_cpu
aph
parents:
diff changeset
   155
}
78af2a4d1ec3 8068055: AARCH64: os_cpu
aph
parents:
diff changeset
   156
78af2a4d1ec3 8068055: AARCH64: os_cpu
aph
parents:
diff changeset
   157
static void pd_conjoint_jlongs_atomic(jlong* from, jlong* to, size_t count) {
78af2a4d1ec3 8068055: AARCH64: os_cpu
aph
parents:
diff changeset
   158
  _Copy_conjoint_jlongs_atomic(from, to, count);
78af2a4d1ec3 8068055: AARCH64: os_cpu
aph
parents:
diff changeset
   159
}
78af2a4d1ec3 8068055: AARCH64: os_cpu
aph
parents:
diff changeset
   160
78af2a4d1ec3 8068055: AARCH64: os_cpu
aph
parents:
diff changeset
   161
static void pd_conjoint_oops_atomic(oop* from, oop* to, size_t count) {
78af2a4d1ec3 8068055: AARCH64: os_cpu
aph
parents:
diff changeset
   162
  assert(!UseCompressedOops, "foo!");
78af2a4d1ec3 8068055: AARCH64: os_cpu
aph
parents:
diff changeset
   163
  assert(BytesPerLong == BytesPerOop, "jlongs and oops must be the same size");
78af2a4d1ec3 8068055: AARCH64: os_cpu
aph
parents:
diff changeset
   164
  _Copy_conjoint_jlongs_atomic((jlong*)from, (jlong*)to, count);
78af2a4d1ec3 8068055: AARCH64: os_cpu
aph
parents:
diff changeset
   165
}
78af2a4d1ec3 8068055: AARCH64: os_cpu
aph
parents:
diff changeset
   166
78af2a4d1ec3 8068055: AARCH64: os_cpu
aph
parents:
diff changeset
   167
static void pd_arrayof_conjoint_bytes(HeapWord* from, HeapWord* to, size_t count) {
78af2a4d1ec3 8068055: AARCH64: os_cpu
aph
parents:
diff changeset
   168
  _Copy_arrayof_conjoint_bytes(from, to, count);
78af2a4d1ec3 8068055: AARCH64: os_cpu
aph
parents:
diff changeset
   169
}
78af2a4d1ec3 8068055: AARCH64: os_cpu
aph
parents:
diff changeset
   170
78af2a4d1ec3 8068055: AARCH64: os_cpu
aph
parents:
diff changeset
   171
static void pd_arrayof_conjoint_jshorts(HeapWord* from, HeapWord* to, size_t count) {
78af2a4d1ec3 8068055: AARCH64: os_cpu
aph
parents:
diff changeset
   172
  _Copy_arrayof_conjoint_jshorts(from, to, count);
78af2a4d1ec3 8068055: AARCH64: os_cpu
aph
parents:
diff changeset
   173
}
78af2a4d1ec3 8068055: AARCH64: os_cpu
aph
parents:
diff changeset
   174
78af2a4d1ec3 8068055: AARCH64: os_cpu
aph
parents:
diff changeset
   175
static void pd_arrayof_conjoint_jints(HeapWord* from, HeapWord* to, size_t count) {
78af2a4d1ec3 8068055: AARCH64: os_cpu
aph
parents:
diff changeset
   176
   _Copy_arrayof_conjoint_jints(from, to, count);
78af2a4d1ec3 8068055: AARCH64: os_cpu
aph
parents:
diff changeset
   177
}
78af2a4d1ec3 8068055: AARCH64: os_cpu
aph
parents:
diff changeset
   178
78af2a4d1ec3 8068055: AARCH64: os_cpu
aph
parents:
diff changeset
   179
static void pd_arrayof_conjoint_jlongs(HeapWord* from, HeapWord* to, size_t count) {
78af2a4d1ec3 8068055: AARCH64: os_cpu
aph
parents:
diff changeset
   180
  _Copy_arrayof_conjoint_jlongs(from, to, count);
78af2a4d1ec3 8068055: AARCH64: os_cpu
aph
parents:
diff changeset
   181
}
78af2a4d1ec3 8068055: AARCH64: os_cpu
aph
parents:
diff changeset
   182
78af2a4d1ec3 8068055: AARCH64: os_cpu
aph
parents:
diff changeset
   183
static void pd_arrayof_conjoint_oops(HeapWord* from, HeapWord* to, size_t count) {
78af2a4d1ec3 8068055: AARCH64: os_cpu
aph
parents:
diff changeset
   184
  assert(!UseCompressedOops, "foo!");
78af2a4d1ec3 8068055: AARCH64: os_cpu
aph
parents:
diff changeset
   185
  assert(BytesPerLong == BytesPerOop, "jlongs and oops must be the same size");
78af2a4d1ec3 8068055: AARCH64: os_cpu
aph
parents:
diff changeset
   186
  _Copy_arrayof_conjoint_jlongs(from, to, count);
78af2a4d1ec3 8068055: AARCH64: os_cpu
aph
parents:
diff changeset
   187
}
78af2a4d1ec3 8068055: AARCH64: os_cpu
aph
parents:
diff changeset
   188
78af2a4d1ec3 8068055: AARCH64: os_cpu
aph
parents:
diff changeset
   189
#endif // OS_CPU_LINUX_AARCH64_VM_COPY_LINUX_AARCH64_INLINE_HPP