src/hotspot/cpu/ppc/jniFastGetField_ppc.cpp
author mdoerr
Tue, 30 Jul 2019 17:54:53 +0200
changeset 57594 61c2e3e7315d
parent 48626 9f6f48d4f9a1
permissions -rw-r--r--
8228743: [PPC64, s390] Implement FastJNIAccessors Reviewed-by: goetz, lucy
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
22824
28258dd5cb2e 8019972: PPC64 (part 9): platform files for interpreter only VM.
goetz
parents:
diff changeset
     1
/*
57594
61c2e3e7315d 8228743: [PPC64, s390] Implement FastJNIAccessors
mdoerr
parents: 48626
diff changeset
     2
 * Copyright (c) 1997, 2019, Oracle and/or its affiliates. All rights reserved.
61c2e3e7315d 8228743: [PPC64, s390] Implement FastJNIAccessors
mdoerr
parents: 48626
diff changeset
     3
 * Copyright (c) 2012, 2019 SAP SE. All rights reserved.
22824
28258dd5cb2e 8019972: PPC64 (part 9): platform files for interpreter only VM.
goetz
parents:
diff changeset
     4
 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
28258dd5cb2e 8019972: PPC64 (part 9): platform files for interpreter only VM.
goetz
parents:
diff changeset
     5
 *
28258dd5cb2e 8019972: PPC64 (part 9): platform files for interpreter only VM.
goetz
parents:
diff changeset
     6
 * This code is free software; you can redistribute it and/or modify it
28258dd5cb2e 8019972: PPC64 (part 9): platform files for interpreter only VM.
goetz
parents:
diff changeset
     7
 * under the terms of the GNU General Public License version 2 only, as
28258dd5cb2e 8019972: PPC64 (part 9): platform files for interpreter only VM.
goetz
parents:
diff changeset
     8
 * published by the Free Software Foundation.
28258dd5cb2e 8019972: PPC64 (part 9): platform files for interpreter only VM.
goetz
parents:
diff changeset
     9
 *
28258dd5cb2e 8019972: PPC64 (part 9): platform files for interpreter only VM.
goetz
parents:
diff changeset
    10
 * This code is distributed in the hope that it will be useful, but WITHOUT
28258dd5cb2e 8019972: PPC64 (part 9): platform files for interpreter only VM.
goetz
parents:
diff changeset
    11
 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
28258dd5cb2e 8019972: PPC64 (part 9): platform files for interpreter only VM.
goetz
parents:
diff changeset
    12
 * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
28258dd5cb2e 8019972: PPC64 (part 9): platform files for interpreter only VM.
goetz
parents:
diff changeset
    13
 * version 2 for more details (a copy is included in the LICENSE file that
28258dd5cb2e 8019972: PPC64 (part 9): platform files for interpreter only VM.
goetz
parents:
diff changeset
    14
 * accompanied this code).
28258dd5cb2e 8019972: PPC64 (part 9): platform files for interpreter only VM.
goetz
parents:
diff changeset
    15
 *
28258dd5cb2e 8019972: PPC64 (part 9): platform files for interpreter only VM.
goetz
parents:
diff changeset
    16
 * You should have received a copy of the GNU General Public License version
28258dd5cb2e 8019972: PPC64 (part 9): platform files for interpreter only VM.
goetz
parents:
diff changeset
    17
 * 2 along with this work; if not, write to the Free Software Foundation,
28258dd5cb2e 8019972: PPC64 (part 9): platform files for interpreter only VM.
goetz
parents:
diff changeset
    18
 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
28258dd5cb2e 8019972: PPC64 (part 9): platform files for interpreter only VM.
goetz
parents:
diff changeset
    19
 *
28258dd5cb2e 8019972: PPC64 (part 9): platform files for interpreter only VM.
goetz
parents:
diff changeset
    20
 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
28258dd5cb2e 8019972: PPC64 (part 9): platform files for interpreter only VM.
goetz
parents:
diff changeset
    21
 * or visit www.oracle.com if you need additional information or have any
28258dd5cb2e 8019972: PPC64 (part 9): platform files for interpreter only VM.
goetz
parents:
diff changeset
    22
 * questions.
28258dd5cb2e 8019972: PPC64 (part 9): platform files for interpreter only VM.
goetz
parents:
diff changeset
    23
 *
28258dd5cb2e 8019972: PPC64 (part 9): platform files for interpreter only VM.
goetz
parents:
diff changeset
    24
 */
28258dd5cb2e 8019972: PPC64 (part 9): platform files for interpreter only VM.
goetz
parents:
diff changeset
    25
28258dd5cb2e 8019972: PPC64 (part 9): platform files for interpreter only VM.
goetz
parents:
diff changeset
    26
#include "precompiled.hpp"
57594
61c2e3e7315d 8228743: [PPC64, s390] Implement FastJNIAccessors
mdoerr
parents: 48626
diff changeset
    27
#include "asm/macroAssembler.inline.hpp"
61c2e3e7315d 8228743: [PPC64, s390] Implement FastJNIAccessors
mdoerr
parents: 48626
diff changeset
    28
#include "gc/shared/barrierSet.hpp"
61c2e3e7315d 8228743: [PPC64, s390] Implement FastJNIAccessors
mdoerr
parents: 48626
diff changeset
    29
#include "gc/shared/barrierSetAssembler.hpp"
22824
28258dd5cb2e 8019972: PPC64 (part 9): platform files for interpreter only VM.
goetz
parents:
diff changeset
    30
#include "memory/resourceArea.hpp"
28258dd5cb2e 8019972: PPC64 (part 9): platform files for interpreter only VM.
goetz
parents:
diff changeset
    31
#include "prims/jniFastGetField.hpp"
28258dd5cb2e 8019972: PPC64 (part 9): platform files for interpreter only VM.
goetz
parents:
diff changeset
    32
#include "prims/jvm_misc.hpp"
28258dd5cb2e 8019972: PPC64 (part 9): platform files for interpreter only VM.
goetz
parents:
diff changeset
    33
#include "runtime/safepoint.hpp"
28258dd5cb2e 8019972: PPC64 (part 9): platform files for interpreter only VM.
goetz
parents:
diff changeset
    34
57594
61c2e3e7315d 8228743: [PPC64, s390] Implement FastJNIAccessors
mdoerr
parents: 48626
diff changeset
    35
#define __ masm->
61c2e3e7315d 8228743: [PPC64, s390] Implement FastJNIAccessors
mdoerr
parents: 48626
diff changeset
    36
61c2e3e7315d 8228743: [PPC64, s390] Implement FastJNIAccessors
mdoerr
parents: 48626
diff changeset
    37
#define BUFFER_SIZE 48*BytesPerInstWord
61c2e3e7315d 8228743: [PPC64, s390] Implement FastJNIAccessors
mdoerr
parents: 48626
diff changeset
    38
61c2e3e7315d 8228743: [PPC64, s390] Implement FastJNIAccessors
mdoerr
parents: 48626
diff changeset
    39
61c2e3e7315d 8228743: [PPC64, s390] Implement FastJNIAccessors
mdoerr
parents: 48626
diff changeset
    40
// Common register usage:
61c2e3e7315d 8228743: [PPC64, s390] Implement FastJNIAccessors
mdoerr
parents: 48626
diff changeset
    41
// R3/F0:      result
61c2e3e7315d 8228743: [PPC64, s390] Implement FastJNIAccessors
mdoerr
parents: 48626
diff changeset
    42
// R3_ARG1:    jni env
61c2e3e7315d 8228743: [PPC64, s390] Implement FastJNIAccessors
mdoerr
parents: 48626
diff changeset
    43
// R4_ARG2:    obj
61c2e3e7315d 8228743: [PPC64, s390] Implement FastJNIAccessors
mdoerr
parents: 48626
diff changeset
    44
// R5_ARG3:    jfield id
22824
28258dd5cb2e 8019972: PPC64 (part 9): platform files for interpreter only VM.
goetz
parents:
diff changeset
    45
28258dd5cb2e 8019972: PPC64 (part 9): platform files for interpreter only VM.
goetz
parents:
diff changeset
    46
address JNI_FastGetField::generate_fast_get_int_field0(BasicType type) {
57594
61c2e3e7315d 8228743: [PPC64, s390] Implement FastJNIAccessors
mdoerr
parents: 48626
diff changeset
    47
  const char *name;
61c2e3e7315d 8228743: [PPC64, s390] Implement FastJNIAccessors
mdoerr
parents: 48626
diff changeset
    48
  switch (type) {
61c2e3e7315d 8228743: [PPC64, s390] Implement FastJNIAccessors
mdoerr
parents: 48626
diff changeset
    49
    case T_BOOLEAN: name = "jni_fast_GetBooleanField"; break;
61c2e3e7315d 8228743: [PPC64, s390] Implement FastJNIAccessors
mdoerr
parents: 48626
diff changeset
    50
    case T_BYTE:    name = "jni_fast_GetByteField";    break;
61c2e3e7315d 8228743: [PPC64, s390] Implement FastJNIAccessors
mdoerr
parents: 48626
diff changeset
    51
    case T_CHAR:    name = "jni_fast_GetCharField";    break;
61c2e3e7315d 8228743: [PPC64, s390] Implement FastJNIAccessors
mdoerr
parents: 48626
diff changeset
    52
    case T_SHORT:   name = "jni_fast_GetShortField";   break;
61c2e3e7315d 8228743: [PPC64, s390] Implement FastJNIAccessors
mdoerr
parents: 48626
diff changeset
    53
    case T_INT:     name = "jni_fast_GetIntField";     break;
61c2e3e7315d 8228743: [PPC64, s390] Implement FastJNIAccessors
mdoerr
parents: 48626
diff changeset
    54
    case T_LONG:    name = "jni_fast_GetLongField";    break;
61c2e3e7315d 8228743: [PPC64, s390] Implement FastJNIAccessors
mdoerr
parents: 48626
diff changeset
    55
    case T_FLOAT:   name = "jni_fast_GetFloatField";   break;
61c2e3e7315d 8228743: [PPC64, s390] Implement FastJNIAccessors
mdoerr
parents: 48626
diff changeset
    56
    case T_DOUBLE:  name = "jni_fast_GetDoubleField";  break;
61c2e3e7315d 8228743: [PPC64, s390] Implement FastJNIAccessors
mdoerr
parents: 48626
diff changeset
    57
    default:        ShouldNotReachHere();
61c2e3e7315d 8228743: [PPC64, s390] Implement FastJNIAccessors
mdoerr
parents: 48626
diff changeset
    58
      name = NULL;  // unreachable
61c2e3e7315d 8228743: [PPC64, s390] Implement FastJNIAccessors
mdoerr
parents: 48626
diff changeset
    59
  }
61c2e3e7315d 8228743: [PPC64, s390] Implement FastJNIAccessors
mdoerr
parents: 48626
diff changeset
    60
  ResourceMark rm;
61c2e3e7315d 8228743: [PPC64, s390] Implement FastJNIAccessors
mdoerr
parents: 48626
diff changeset
    61
  BufferBlob* blob = BufferBlob::create(name, BUFFER_SIZE);
61c2e3e7315d 8228743: [PPC64, s390] Implement FastJNIAccessors
mdoerr
parents: 48626
diff changeset
    62
  CodeBuffer cbuf(blob);
61c2e3e7315d 8228743: [PPC64, s390] Implement FastJNIAccessors
mdoerr
parents: 48626
diff changeset
    63
  MacroAssembler* masm = new MacroAssembler(&cbuf);
61c2e3e7315d 8228743: [PPC64, s390] Implement FastJNIAccessors
mdoerr
parents: 48626
diff changeset
    64
  address fast_entry = __ function_entry();
61c2e3e7315d 8228743: [PPC64, s390] Implement FastJNIAccessors
mdoerr
parents: 48626
diff changeset
    65
61c2e3e7315d 8228743: [PPC64, s390] Implement FastJNIAccessors
mdoerr
parents: 48626
diff changeset
    66
  Label slow;
61c2e3e7315d 8228743: [PPC64, s390] Implement FastJNIAccessors
mdoerr
parents: 48626
diff changeset
    67
61c2e3e7315d 8228743: [PPC64, s390] Implement FastJNIAccessors
mdoerr
parents: 48626
diff changeset
    68
  const Register Rcounter_addr = R6_ARG4,
61c2e3e7315d 8228743: [PPC64, s390] Implement FastJNIAccessors
mdoerr
parents: 48626
diff changeset
    69
                 Rcounter      = R7_ARG5,
61c2e3e7315d 8228743: [PPC64, s390] Implement FastJNIAccessors
mdoerr
parents: 48626
diff changeset
    70
                 Robj          = R8_ARG6,
61c2e3e7315d 8228743: [PPC64, s390] Implement FastJNIAccessors
mdoerr
parents: 48626
diff changeset
    71
                 Rtmp          = R9_ARG7;
61c2e3e7315d 8228743: [PPC64, s390] Implement FastJNIAccessors
mdoerr
parents: 48626
diff changeset
    72
  const int counter_offs = __ load_const_optimized(Rcounter_addr,
61c2e3e7315d 8228743: [PPC64, s390] Implement FastJNIAccessors
mdoerr
parents: 48626
diff changeset
    73
                                                   SafepointSynchronize::safepoint_counter_addr(),
61c2e3e7315d 8228743: [PPC64, s390] Implement FastJNIAccessors
mdoerr
parents: 48626
diff changeset
    74
                                                   R0, true);
61c2e3e7315d 8228743: [PPC64, s390] Implement FastJNIAccessors
mdoerr
parents: 48626
diff changeset
    75
61c2e3e7315d 8228743: [PPC64, s390] Implement FastJNIAccessors
mdoerr
parents: 48626
diff changeset
    76
  __ ld(Rcounter, counter_offs, Rcounter_addr);
61c2e3e7315d 8228743: [PPC64, s390] Implement FastJNIAccessors
mdoerr
parents: 48626
diff changeset
    77
  __ andi_(R0, Rcounter, 1);
61c2e3e7315d 8228743: [PPC64, s390] Implement FastJNIAccessors
mdoerr
parents: 48626
diff changeset
    78
  __ bne(CCR0, slow);
61c2e3e7315d 8228743: [PPC64, s390] Implement FastJNIAccessors
mdoerr
parents: 48626
diff changeset
    79
61c2e3e7315d 8228743: [PPC64, s390] Implement FastJNIAccessors
mdoerr
parents: 48626
diff changeset
    80
  if (support_IRIW_for_not_multiple_copy_atomic_cpu) {
61c2e3e7315d 8228743: [PPC64, s390] Implement FastJNIAccessors
mdoerr
parents: 48626
diff changeset
    81
    // Field may be volatile.
61c2e3e7315d 8228743: [PPC64, s390] Implement FastJNIAccessors
mdoerr
parents: 48626
diff changeset
    82
    __ fence();
61c2e3e7315d 8228743: [PPC64, s390] Implement FastJNIAccessors
mdoerr
parents: 48626
diff changeset
    83
  } else {
61c2e3e7315d 8228743: [PPC64, s390] Implement FastJNIAccessors
mdoerr
parents: 48626
diff changeset
    84
    // Using acquire to order wrt. JVMTI check and load of result.
61c2e3e7315d 8228743: [PPC64, s390] Implement FastJNIAccessors
mdoerr
parents: 48626
diff changeset
    85
    __ isync(); // order wrt. to following load(s)
61c2e3e7315d 8228743: [PPC64, s390] Implement FastJNIAccessors
mdoerr
parents: 48626
diff changeset
    86
  }
61c2e3e7315d 8228743: [PPC64, s390] Implement FastJNIAccessors
mdoerr
parents: 48626
diff changeset
    87
61c2e3e7315d 8228743: [PPC64, s390] Implement FastJNIAccessors
mdoerr
parents: 48626
diff changeset
    88
  if (JvmtiExport::can_post_field_access()) {
61c2e3e7315d 8228743: [PPC64, s390] Implement FastJNIAccessors
mdoerr
parents: 48626
diff changeset
    89
    // Check to see if a field access watch has been set before we
61c2e3e7315d 8228743: [PPC64, s390] Implement FastJNIAccessors
mdoerr
parents: 48626
diff changeset
    90
    // take the fast path.
61c2e3e7315d 8228743: [PPC64, s390] Implement FastJNIAccessors
mdoerr
parents: 48626
diff changeset
    91
    int fac_offs = __ load_const_optimized(Rtmp, JvmtiExport::get_field_access_count_addr(),
61c2e3e7315d 8228743: [PPC64, s390] Implement FastJNIAccessors
mdoerr
parents: 48626
diff changeset
    92
                                           R0, true);
61c2e3e7315d 8228743: [PPC64, s390] Implement FastJNIAccessors
mdoerr
parents: 48626
diff changeset
    93
    __ lwa(Rtmp, fac_offs, Rtmp);
61c2e3e7315d 8228743: [PPC64, s390] Implement FastJNIAccessors
mdoerr
parents: 48626
diff changeset
    94
    __ cmpwi(CCR0, Rtmp, 0);
61c2e3e7315d 8228743: [PPC64, s390] Implement FastJNIAccessors
mdoerr
parents: 48626
diff changeset
    95
    __ bne(CCR0, slow);
61c2e3e7315d 8228743: [PPC64, s390] Implement FastJNIAccessors
mdoerr
parents: 48626
diff changeset
    96
  }
61c2e3e7315d 8228743: [PPC64, s390] Implement FastJNIAccessors
mdoerr
parents: 48626
diff changeset
    97
61c2e3e7315d 8228743: [PPC64, s390] Implement FastJNIAccessors
mdoerr
parents: 48626
diff changeset
    98
  BarrierSetAssembler* bs = BarrierSet::barrier_set()->barrier_set_assembler();
61c2e3e7315d 8228743: [PPC64, s390] Implement FastJNIAccessors
mdoerr
parents: 48626
diff changeset
    99
  bs->try_resolve_jobject_in_native(masm, Robj, R3_ARG1, R4_ARG2, Rtmp, slow);
61c2e3e7315d 8228743: [PPC64, s390] Implement FastJNIAccessors
mdoerr
parents: 48626
diff changeset
   100
61c2e3e7315d 8228743: [PPC64, s390] Implement FastJNIAccessors
mdoerr
parents: 48626
diff changeset
   101
  __ srwi(Rtmp, R5_ARG3, 2); // offset
61c2e3e7315d 8228743: [PPC64, s390] Implement FastJNIAccessors
mdoerr
parents: 48626
diff changeset
   102
61c2e3e7315d 8228743: [PPC64, s390] Implement FastJNIAccessors
mdoerr
parents: 48626
diff changeset
   103
  assert(count < LIST_CAPACITY, "LIST_CAPACITY too small");
61c2e3e7315d 8228743: [PPC64, s390] Implement FastJNIAccessors
mdoerr
parents: 48626
diff changeset
   104
  speculative_load_pclist[count] = __ pc();   // Used by the segfault handler
61c2e3e7315d 8228743: [PPC64, s390] Implement FastJNIAccessors
mdoerr
parents: 48626
diff changeset
   105
  bool is_fp = false;
61c2e3e7315d 8228743: [PPC64, s390] Implement FastJNIAccessors
mdoerr
parents: 48626
diff changeset
   106
  switch (type) {
61c2e3e7315d 8228743: [PPC64, s390] Implement FastJNIAccessors
mdoerr
parents: 48626
diff changeset
   107
    case T_BOOLEAN: __ lbzx(Rtmp, Rtmp, Robj); break;
61c2e3e7315d 8228743: [PPC64, s390] Implement FastJNIAccessors
mdoerr
parents: 48626
diff changeset
   108
    case T_BYTE:    __ lbzx(Rtmp, Rtmp, Robj); __ extsb(Rtmp, Rtmp); break;
61c2e3e7315d 8228743: [PPC64, s390] Implement FastJNIAccessors
mdoerr
parents: 48626
diff changeset
   109
    case T_CHAR:    __ lhzx(Rtmp, Rtmp, Robj); break;
61c2e3e7315d 8228743: [PPC64, s390] Implement FastJNIAccessors
mdoerr
parents: 48626
diff changeset
   110
    case T_SHORT:   __ lhax(Rtmp, Rtmp, Robj); break;
61c2e3e7315d 8228743: [PPC64, s390] Implement FastJNIAccessors
mdoerr
parents: 48626
diff changeset
   111
    case T_INT:     __ lwax(Rtmp, Rtmp, Robj); break;
61c2e3e7315d 8228743: [PPC64, s390] Implement FastJNIAccessors
mdoerr
parents: 48626
diff changeset
   112
    case T_LONG:    __ ldx( Rtmp, Rtmp, Robj); break;
61c2e3e7315d 8228743: [PPC64, s390] Implement FastJNIAccessors
mdoerr
parents: 48626
diff changeset
   113
    case T_FLOAT:   __ lfsx(F1_RET, Rtmp, Robj); is_fp = true; break;
61c2e3e7315d 8228743: [PPC64, s390] Implement FastJNIAccessors
mdoerr
parents: 48626
diff changeset
   114
    case T_DOUBLE:  __ lfdx(F1_RET, Rtmp, Robj); is_fp = true; break;
61c2e3e7315d 8228743: [PPC64, s390] Implement FastJNIAccessors
mdoerr
parents: 48626
diff changeset
   115
    default:        ShouldNotReachHere();
61c2e3e7315d 8228743: [PPC64, s390] Implement FastJNIAccessors
mdoerr
parents: 48626
diff changeset
   116
  }
61c2e3e7315d 8228743: [PPC64, s390] Implement FastJNIAccessors
mdoerr
parents: 48626
diff changeset
   117
61c2e3e7315d 8228743: [PPC64, s390] Implement FastJNIAccessors
mdoerr
parents: 48626
diff changeset
   118
  // Order preceding load(s) wrt. succeeding check (LoadStore for volatile field).
61c2e3e7315d 8228743: [PPC64, s390] Implement FastJNIAccessors
mdoerr
parents: 48626
diff changeset
   119
  if (is_fp) {
61c2e3e7315d 8228743: [PPC64, s390] Implement FastJNIAccessors
mdoerr
parents: 48626
diff changeset
   120
    Label next;
61c2e3e7315d 8228743: [PPC64, s390] Implement FastJNIAccessors
mdoerr
parents: 48626
diff changeset
   121
    __ fcmpu(CCR0, F1_RET, F1_RET);
61c2e3e7315d 8228743: [PPC64, s390] Implement FastJNIAccessors
mdoerr
parents: 48626
diff changeset
   122
    __ bne(CCR0, next);
61c2e3e7315d 8228743: [PPC64, s390] Implement FastJNIAccessors
mdoerr
parents: 48626
diff changeset
   123
    __ bind(next);
61c2e3e7315d 8228743: [PPC64, s390] Implement FastJNIAccessors
mdoerr
parents: 48626
diff changeset
   124
  } else {
61c2e3e7315d 8228743: [PPC64, s390] Implement FastJNIAccessors
mdoerr
parents: 48626
diff changeset
   125
    __ twi_0(Rtmp);
61c2e3e7315d 8228743: [PPC64, s390] Implement FastJNIAccessors
mdoerr
parents: 48626
diff changeset
   126
  }
61c2e3e7315d 8228743: [PPC64, s390] Implement FastJNIAccessors
mdoerr
parents: 48626
diff changeset
   127
  __ isync();
61c2e3e7315d 8228743: [PPC64, s390] Implement FastJNIAccessors
mdoerr
parents: 48626
diff changeset
   128
61c2e3e7315d 8228743: [PPC64, s390] Implement FastJNIAccessors
mdoerr
parents: 48626
diff changeset
   129
  __ ld(R0, counter_offs, Rcounter_addr);
61c2e3e7315d 8228743: [PPC64, s390] Implement FastJNIAccessors
mdoerr
parents: 48626
diff changeset
   130
  __ cmpd(CCR0, R0, Rcounter);
61c2e3e7315d 8228743: [PPC64, s390] Implement FastJNIAccessors
mdoerr
parents: 48626
diff changeset
   131
  __ bne(CCR0, slow);
61c2e3e7315d 8228743: [PPC64, s390] Implement FastJNIAccessors
mdoerr
parents: 48626
diff changeset
   132
61c2e3e7315d 8228743: [PPC64, s390] Implement FastJNIAccessors
mdoerr
parents: 48626
diff changeset
   133
  if (!is_fp) {
61c2e3e7315d 8228743: [PPC64, s390] Implement FastJNIAccessors
mdoerr
parents: 48626
diff changeset
   134
    __ mr(R3_RET, Rtmp);
61c2e3e7315d 8228743: [PPC64, s390] Implement FastJNIAccessors
mdoerr
parents: 48626
diff changeset
   135
  }
61c2e3e7315d 8228743: [PPC64, s390] Implement FastJNIAccessors
mdoerr
parents: 48626
diff changeset
   136
  __ blr();
61c2e3e7315d 8228743: [PPC64, s390] Implement FastJNIAccessors
mdoerr
parents: 48626
diff changeset
   137
61c2e3e7315d 8228743: [PPC64, s390] Implement FastJNIAccessors
mdoerr
parents: 48626
diff changeset
   138
  slowcase_entry_pclist[count++] = __ pc();
61c2e3e7315d 8228743: [PPC64, s390] Implement FastJNIAccessors
mdoerr
parents: 48626
diff changeset
   139
  __ bind(slow);
61c2e3e7315d 8228743: [PPC64, s390] Implement FastJNIAccessors
mdoerr
parents: 48626
diff changeset
   140
  address slow_case_addr;
61c2e3e7315d 8228743: [PPC64, s390] Implement FastJNIAccessors
mdoerr
parents: 48626
diff changeset
   141
  switch (type) {
61c2e3e7315d 8228743: [PPC64, s390] Implement FastJNIAccessors
mdoerr
parents: 48626
diff changeset
   142
    case T_BOOLEAN: slow_case_addr = jni_GetBooleanField_addr(); break;
61c2e3e7315d 8228743: [PPC64, s390] Implement FastJNIAccessors
mdoerr
parents: 48626
diff changeset
   143
    case T_BYTE:    slow_case_addr = jni_GetByteField_addr();    break;
61c2e3e7315d 8228743: [PPC64, s390] Implement FastJNIAccessors
mdoerr
parents: 48626
diff changeset
   144
    case T_CHAR:    slow_case_addr = jni_GetCharField_addr();    break;
61c2e3e7315d 8228743: [PPC64, s390] Implement FastJNIAccessors
mdoerr
parents: 48626
diff changeset
   145
    case T_SHORT:   slow_case_addr = jni_GetShortField_addr();   break;
61c2e3e7315d 8228743: [PPC64, s390] Implement FastJNIAccessors
mdoerr
parents: 48626
diff changeset
   146
    case T_INT:     slow_case_addr = jni_GetIntField_addr();     break;
61c2e3e7315d 8228743: [PPC64, s390] Implement FastJNIAccessors
mdoerr
parents: 48626
diff changeset
   147
    case T_LONG:    slow_case_addr = jni_GetLongField_addr();    break;
61c2e3e7315d 8228743: [PPC64, s390] Implement FastJNIAccessors
mdoerr
parents: 48626
diff changeset
   148
    case T_FLOAT:   slow_case_addr = jni_GetFloatField_addr();   break;
61c2e3e7315d 8228743: [PPC64, s390] Implement FastJNIAccessors
mdoerr
parents: 48626
diff changeset
   149
    case T_DOUBLE:  slow_case_addr = jni_GetDoubleField_addr();  break;
61c2e3e7315d 8228743: [PPC64, s390] Implement FastJNIAccessors
mdoerr
parents: 48626
diff changeset
   150
    default:        ShouldNotReachHere();
61c2e3e7315d 8228743: [PPC64, s390] Implement FastJNIAccessors
mdoerr
parents: 48626
diff changeset
   151
      slow_case_addr = NULL;  // unreachable
61c2e3e7315d 8228743: [PPC64, s390] Implement FastJNIAccessors
mdoerr
parents: 48626
diff changeset
   152
  }
61c2e3e7315d 8228743: [PPC64, s390] Implement FastJNIAccessors
mdoerr
parents: 48626
diff changeset
   153
  __ load_const_optimized(R12, slow_case_addr, R0);
61c2e3e7315d 8228743: [PPC64, s390] Implement FastJNIAccessors
mdoerr
parents: 48626
diff changeset
   154
  __ call_c_and_return_to_caller(R12); // tail call
61c2e3e7315d 8228743: [PPC64, s390] Implement FastJNIAccessors
mdoerr
parents: 48626
diff changeset
   155
61c2e3e7315d 8228743: [PPC64, s390] Implement FastJNIAccessors
mdoerr
parents: 48626
diff changeset
   156
  __ flush();
61c2e3e7315d 8228743: [PPC64, s390] Implement FastJNIAccessors
mdoerr
parents: 48626
diff changeset
   157
61c2e3e7315d 8228743: [PPC64, s390] Implement FastJNIAccessors
mdoerr
parents: 48626
diff changeset
   158
  return fast_entry;
22824
28258dd5cb2e 8019972: PPC64 (part 9): platform files for interpreter only VM.
goetz
parents:
diff changeset
   159
}
28258dd5cb2e 8019972: PPC64 (part 9): platform files for interpreter only VM.
goetz
parents:
diff changeset
   160
28258dd5cb2e 8019972: PPC64 (part 9): platform files for interpreter only VM.
goetz
parents:
diff changeset
   161
address JNI_FastGetField::generate_fast_get_boolean_field() {
28258dd5cb2e 8019972: PPC64 (part 9): platform files for interpreter only VM.
goetz
parents:
diff changeset
   162
  return generate_fast_get_int_field0(T_BOOLEAN);
28258dd5cb2e 8019972: PPC64 (part 9): platform files for interpreter only VM.
goetz
parents:
diff changeset
   163
}
28258dd5cb2e 8019972: PPC64 (part 9): platform files for interpreter only VM.
goetz
parents:
diff changeset
   164
28258dd5cb2e 8019972: PPC64 (part 9): platform files for interpreter only VM.
goetz
parents:
diff changeset
   165
address JNI_FastGetField::generate_fast_get_byte_field() {
28258dd5cb2e 8019972: PPC64 (part 9): platform files for interpreter only VM.
goetz
parents:
diff changeset
   166
  return generate_fast_get_int_field0(T_BYTE);
28258dd5cb2e 8019972: PPC64 (part 9): platform files for interpreter only VM.
goetz
parents:
diff changeset
   167
}
28258dd5cb2e 8019972: PPC64 (part 9): platform files for interpreter only VM.
goetz
parents:
diff changeset
   168
28258dd5cb2e 8019972: PPC64 (part 9): platform files for interpreter only VM.
goetz
parents:
diff changeset
   169
address JNI_FastGetField::generate_fast_get_char_field() {
28258dd5cb2e 8019972: PPC64 (part 9): platform files for interpreter only VM.
goetz
parents:
diff changeset
   170
  return generate_fast_get_int_field0(T_CHAR);
28258dd5cb2e 8019972: PPC64 (part 9): platform files for interpreter only VM.
goetz
parents:
diff changeset
   171
}
28258dd5cb2e 8019972: PPC64 (part 9): platform files for interpreter only VM.
goetz
parents:
diff changeset
   172
28258dd5cb2e 8019972: PPC64 (part 9): platform files for interpreter only VM.
goetz
parents:
diff changeset
   173
address JNI_FastGetField::generate_fast_get_short_field() {
28258dd5cb2e 8019972: PPC64 (part 9): platform files for interpreter only VM.
goetz
parents:
diff changeset
   174
  return generate_fast_get_int_field0(T_SHORT);
28258dd5cb2e 8019972: PPC64 (part 9): platform files for interpreter only VM.
goetz
parents:
diff changeset
   175
}
28258dd5cb2e 8019972: PPC64 (part 9): platform files for interpreter only VM.
goetz
parents:
diff changeset
   176
28258dd5cb2e 8019972: PPC64 (part 9): platform files for interpreter only VM.
goetz
parents:
diff changeset
   177
address JNI_FastGetField::generate_fast_get_int_field() {
28258dd5cb2e 8019972: PPC64 (part 9): platform files for interpreter only VM.
goetz
parents:
diff changeset
   178
  return generate_fast_get_int_field0(T_INT);
28258dd5cb2e 8019972: PPC64 (part 9): platform files for interpreter only VM.
goetz
parents:
diff changeset
   179
}
28258dd5cb2e 8019972: PPC64 (part 9): platform files for interpreter only VM.
goetz
parents:
diff changeset
   180
28258dd5cb2e 8019972: PPC64 (part 9): platform files for interpreter only VM.
goetz
parents:
diff changeset
   181
address JNI_FastGetField::generate_fast_get_long_field() {
57594
61c2e3e7315d 8228743: [PPC64, s390] Implement FastJNIAccessors
mdoerr
parents: 48626
diff changeset
   182
  return generate_fast_get_int_field0(T_LONG);
22824
28258dd5cb2e 8019972: PPC64 (part 9): platform files for interpreter only VM.
goetz
parents:
diff changeset
   183
}
28258dd5cb2e 8019972: PPC64 (part 9): platform files for interpreter only VM.
goetz
parents:
diff changeset
   184
28258dd5cb2e 8019972: PPC64 (part 9): platform files for interpreter only VM.
goetz
parents:
diff changeset
   185
address JNI_FastGetField::generate_fast_get_float_field() {
57594
61c2e3e7315d 8228743: [PPC64, s390] Implement FastJNIAccessors
mdoerr
parents: 48626
diff changeset
   186
  return generate_fast_get_int_field0(T_FLOAT);
22824
28258dd5cb2e 8019972: PPC64 (part 9): platform files for interpreter only VM.
goetz
parents:
diff changeset
   187
}
28258dd5cb2e 8019972: PPC64 (part 9): platform files for interpreter only VM.
goetz
parents:
diff changeset
   188
28258dd5cb2e 8019972: PPC64 (part 9): platform files for interpreter only VM.
goetz
parents:
diff changeset
   189
address JNI_FastGetField::generate_fast_get_double_field() {
57594
61c2e3e7315d 8228743: [PPC64, s390] Implement FastJNIAccessors
mdoerr
parents: 48626
diff changeset
   190
  return generate_fast_get_int_field0(T_DOUBLE);
22824
28258dd5cb2e 8019972: PPC64 (part 9): platform files for interpreter only VM.
goetz
parents:
diff changeset
   191
}