src/hotspot/share/jvmci/jvmciCompilerToVM.hpp
author dlong
Mon, 24 Jun 2019 18:51:54 -0400
changeset 55487 79c32c7b0992
parent 54732 2d012a75d35c
permissions -rw-r--r--
8225369: [AOT] vm/classfmt/cpl/cplres001/cplres00101m004/cplres00101m004.html fails Reviewed-by: kvn, never
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
33160
c59f1676d27e 8136421: JEP 243: Java-Level JVM Compiler Interface
twisti
parents:
diff changeset
     1
/*
53244
9807daeb47c4 8216167: Update include guards to reflect correct directories
coleenp
parents: 52645
diff changeset
     2
 * Copyright (c) 2011, 2019, Oracle and/or its affiliates. All rights reserved.
33160
c59f1676d27e 8136421: JEP 243: Java-Level JVM Compiler Interface
twisti
parents:
diff changeset
     3
 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
c59f1676d27e 8136421: JEP 243: Java-Level JVM Compiler Interface
twisti
parents:
diff changeset
     4
 *
c59f1676d27e 8136421: JEP 243: Java-Level JVM Compiler Interface
twisti
parents:
diff changeset
     5
 * This code is free software; you can redistribute it and/or modify it
c59f1676d27e 8136421: JEP 243: Java-Level JVM Compiler Interface
twisti
parents:
diff changeset
     6
 * under the terms of the GNU General Public License version 2 only, as
c59f1676d27e 8136421: JEP 243: Java-Level JVM Compiler Interface
twisti
parents:
diff changeset
     7
 * published by the Free Software Foundation.
c59f1676d27e 8136421: JEP 243: Java-Level JVM Compiler Interface
twisti
parents:
diff changeset
     8
 *
c59f1676d27e 8136421: JEP 243: Java-Level JVM Compiler Interface
twisti
parents:
diff changeset
     9
 * This code is distributed in the hope that it will be useful, but WITHOUT
c59f1676d27e 8136421: JEP 243: Java-Level JVM Compiler Interface
twisti
parents:
diff changeset
    10
 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
c59f1676d27e 8136421: JEP 243: Java-Level JVM Compiler Interface
twisti
parents:
diff changeset
    11
 * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
c59f1676d27e 8136421: JEP 243: Java-Level JVM Compiler Interface
twisti
parents:
diff changeset
    12
 * version 2 for more details (a copy is included in the LICENSE file that
c59f1676d27e 8136421: JEP 243: Java-Level JVM Compiler Interface
twisti
parents:
diff changeset
    13
 * accompanied this code).
c59f1676d27e 8136421: JEP 243: Java-Level JVM Compiler Interface
twisti
parents:
diff changeset
    14
 *
c59f1676d27e 8136421: JEP 243: Java-Level JVM Compiler Interface
twisti
parents:
diff changeset
    15
 * You should have received a copy of the GNU General Public License version
c59f1676d27e 8136421: JEP 243: Java-Level JVM Compiler Interface
twisti
parents:
diff changeset
    16
 * 2 along with this work; if not, write to the Free Software Foundation,
c59f1676d27e 8136421: JEP 243: Java-Level JVM Compiler Interface
twisti
parents:
diff changeset
    17
 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
c59f1676d27e 8136421: JEP 243: Java-Level JVM Compiler Interface
twisti
parents:
diff changeset
    18
 *
c59f1676d27e 8136421: JEP 243: Java-Level JVM Compiler Interface
twisti
parents:
diff changeset
    19
 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
c59f1676d27e 8136421: JEP 243: Java-Level JVM Compiler Interface
twisti
parents:
diff changeset
    20
 * or visit www.oracle.com if you need additional information or have any
c59f1676d27e 8136421: JEP 243: Java-Level JVM Compiler Interface
twisti
parents:
diff changeset
    21
 * questions.
c59f1676d27e 8136421: JEP 243: Java-Level JVM Compiler Interface
twisti
parents:
diff changeset
    22
 */
c59f1676d27e 8136421: JEP 243: Java-Level JVM Compiler Interface
twisti
parents:
diff changeset
    23
53244
9807daeb47c4 8216167: Update include guards to reflect correct directories
coleenp
parents: 52645
diff changeset
    24
#ifndef SHARE_JVMCI_JVMCICOMPILERTOVM_HPP
9807daeb47c4 8216167: Update include guards to reflect correct directories
coleenp
parents: 52645
diff changeset
    25
#define SHARE_JVMCI_JVMCICOMPILERTOVM_HPP
33160
c59f1676d27e 8136421: JEP 243: Java-Level JVM Compiler Interface
twisti
parents:
diff changeset
    26
54669
ad45b3802d4e 8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents: 54110
diff changeset
    27
#include "gc/shared/cardTable.hpp"
ad45b3802d4e 8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents: 54110
diff changeset
    28
#include "jvmci/jvmciExceptions.hpp"
33160
c59f1676d27e 8136421: JEP 243: Java-Level JVM Compiler Interface
twisti
parents:
diff changeset
    29
#include "runtime/javaCalls.hpp"
54669
ad45b3802d4e 8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents: 54110
diff changeset
    30
#include "runtime/signature.hpp"
50746
85789fb05154 8198909: [Graal] compiler/codecache/stress/UnexpectedDeoptimizationTest.java crashed with SIGSEGV
never
parents: 49752
diff changeset
    31
54669
ad45b3802d4e 8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents: 54110
diff changeset
    32
class JVMCIObjectArray;
50746
85789fb05154 8198909: [Graal] compiler/codecache/stress/UnexpectedDeoptimizationTest.java crashed with SIGSEGV
never
parents: 49752
diff changeset
    33
33160
c59f1676d27e 8136421: JEP 243: Java-Level JVM Compiler Interface
twisti
parents:
diff changeset
    34
class CompilerToVM {
35123
b0b89d83bcf5 8134994: use separate VMStructs databases for SA and JVMCI
twisti
parents: 35092
diff changeset
    35
 public:
b0b89d83bcf5 8134994: use separate VMStructs databases for SA and JVMCI
twisti
parents: 35092
diff changeset
    36
  class Data {
b0b89d83bcf5 8134994: use separate VMStructs databases for SA and JVMCI
twisti
parents: 35092
diff changeset
    37
    friend class JVMCIVMStructs;
b0b89d83bcf5 8134994: use separate VMStructs databases for SA and JVMCI
twisti
parents: 35092
diff changeset
    38
b0b89d83bcf5 8134994: use separate VMStructs databases for SA and JVMCI
twisti
parents: 35092
diff changeset
    39
   private:
35899
0dbc821628fc 8148047: Move the vtable length field to Klass
mgerdin
parents: 35123
diff changeset
    40
    static int Klass_vtable_start_offset;
0dbc821628fc 8148047: Move the vtable length field to Klass
mgerdin
parents: 35123
diff changeset
    41
    static int Klass_vtable_length_offset;
35123
b0b89d83bcf5 8134994: use separate VMStructs databases for SA and JVMCI
twisti
parents: 35092
diff changeset
    42
b0b89d83bcf5 8134994: use separate VMStructs databases for SA and JVMCI
twisti
parents: 35092
diff changeset
    43
    static int Method_extra_stack_entries;
b0b89d83bcf5 8134994: use separate VMStructs databases for SA and JVMCI
twisti
parents: 35092
diff changeset
    44
b0b89d83bcf5 8134994: use separate VMStructs databases for SA and JVMCI
twisti
parents: 35092
diff changeset
    45
    static address SharedRuntime_ic_miss_stub;
b0b89d83bcf5 8134994: use separate VMStructs databases for SA and JVMCI
twisti
parents: 35092
diff changeset
    46
    static address SharedRuntime_handle_wrong_method_stub;
b0b89d83bcf5 8134994: use separate VMStructs databases for SA and JVMCI
twisti
parents: 35092
diff changeset
    47
    static address SharedRuntime_deopt_blob_unpack;
b0b89d83bcf5 8134994: use separate VMStructs databases for SA and JVMCI
twisti
parents: 35092
diff changeset
    48
    static address SharedRuntime_deopt_blob_uncommon_trap;
b0b89d83bcf5 8134994: use separate VMStructs databases for SA and JVMCI
twisti
parents: 35092
diff changeset
    49
b0b89d83bcf5 8134994: use separate VMStructs databases for SA and JVMCI
twisti
parents: 35092
diff changeset
    50
    static size_t ThreadLocalAllocBuffer_alignment_reserve;
b0b89d83bcf5 8134994: use separate VMStructs databases for SA and JVMCI
twisti
parents: 35092
diff changeset
    51
b0b89d83bcf5 8134994: use separate VMStructs databases for SA and JVMCI
twisti
parents: 35092
diff changeset
    52
    static CollectedHeap* Universe_collectedHeap;
b0b89d83bcf5 8134994: use separate VMStructs databases for SA and JVMCI
twisti
parents: 35092
diff changeset
    53
    static int Universe_base_vtable_size;
b0b89d83bcf5 8134994: use separate VMStructs databases for SA and JVMCI
twisti
parents: 35092
diff changeset
    54
    static address Universe_narrow_oop_base;
b0b89d83bcf5 8134994: use separate VMStructs databases for SA and JVMCI
twisti
parents: 35092
diff changeset
    55
    static int Universe_narrow_oop_shift;
b0b89d83bcf5 8134994: use separate VMStructs databases for SA and JVMCI
twisti
parents: 35092
diff changeset
    56
    static address Universe_narrow_klass_base;
b0b89d83bcf5 8134994: use separate VMStructs databases for SA and JVMCI
twisti
parents: 35092
diff changeset
    57
    static int Universe_narrow_klass_shift;
b0b89d83bcf5 8134994: use separate VMStructs databases for SA and JVMCI
twisti
parents: 35092
diff changeset
    58
    static uintptr_t Universe_verify_oop_mask;
b0b89d83bcf5 8134994: use separate VMStructs databases for SA and JVMCI
twisti
parents: 35092
diff changeset
    59
    static uintptr_t Universe_verify_oop_bits;
b0b89d83bcf5 8134994: use separate VMStructs databases for SA and JVMCI
twisti
parents: 35092
diff changeset
    60
    static void* Universe_non_oop_bits;
b0b89d83bcf5 8134994: use separate VMStructs databases for SA and JVMCI
twisti
parents: 35092
diff changeset
    61
b0b89d83bcf5 8134994: use separate VMStructs databases for SA and JVMCI
twisti
parents: 35092
diff changeset
    62
    static bool _supports_inline_contig_alloc;
b0b89d83bcf5 8134994: use separate VMStructs databases for SA and JVMCI
twisti
parents: 35092
diff changeset
    63
    static HeapWord** _heap_end_addr;
41283
2615c024f3eb 8033552: Fix missing missing volatile specifiers in CAS operations in GC code
eosterlund
parents: 40878
diff changeset
    64
    static HeapWord* volatile* _heap_top_addr;
39441
7464b1552bf7 8158850: [JVMCI] be more precise when enforcing OopMapValue encoding limitations
never
parents: 38283
diff changeset
    65
    static int _max_oop_map_stack_offset;
52645
74cf02d5f6e2 8213907: [JVMCI] avoid Class.getDeclared* methods when converting JVMCI objects to reflection objects
dnsimon
parents: 50746
diff changeset
    66
    static int _fields_annotations_base_offset;
35123
b0b89d83bcf5 8134994: use separate VMStructs databases for SA and JVMCI
twisti
parents: 35092
diff changeset
    67
54110
f4f0dce5d0bb 8220301: Remove jbyte use in CardTable
tschatzl
parents: 53244
diff changeset
    68
    static CardTable::CardValue* cardtable_start_address;
35123
b0b89d83bcf5 8134994: use separate VMStructs databases for SA and JVMCI
twisti
parents: 35092
diff changeset
    69
    static int cardtable_shift;
b0b89d83bcf5 8134994: use separate VMStructs databases for SA and JVMCI
twisti
parents: 35092
diff changeset
    70
35593
c733fd198e6e 8146424: runtime/ReservedStack/ReservedStackTest.java triggers: assert(thread->deopt_mark() == __null) failed: no stack overflow from deopt blob/uncommon trap
never
parents: 35123
diff changeset
    71
    static int vm_page_size;
c733fd198e6e 8146424: runtime/ReservedStack/ReservedStackTest.java triggers: assert(thread->deopt_mark() == __null) failed: no stack overflow from deopt blob/uncommon trap
never
parents: 35123
diff changeset
    72
43939
39f5b59549de 8173912: [JVMCI] fix memory overhead of JVMCI
dnsimon
parents: 42650
diff changeset
    73
    static int sizeof_vtableEntry;
39f5b59549de 8173912: [JVMCI] fix memory overhead of JVMCI
dnsimon
parents: 42650
diff changeset
    74
    static int sizeof_ExceptionTableElement;
39f5b59549de 8173912: [JVMCI] fix memory overhead of JVMCI
dnsimon
parents: 42650
diff changeset
    75
    static int sizeof_LocalVariableTableElement;
39f5b59549de 8173912: [JVMCI] fix memory overhead of JVMCI
dnsimon
parents: 42650
diff changeset
    76
    static int sizeof_ConstantPool;
39f5b59549de 8173912: [JVMCI] fix memory overhead of JVMCI
dnsimon
parents: 42650
diff changeset
    77
    static int sizeof_narrowKlass;
39f5b59549de 8173912: [JVMCI] fix memory overhead of JVMCI
dnsimon
parents: 42650
diff changeset
    78
    static int sizeof_arrayOopDesc;
39f5b59549de 8173912: [JVMCI] fix memory overhead of JVMCI
dnsimon
parents: 42650
diff changeset
    79
    static int sizeof_BasicLock;
39f5b59549de 8173912: [JVMCI] fix memory overhead of JVMCI
dnsimon
parents: 42650
diff changeset
    80
38283
4fb93f7c26fe 8156178: [JVMCI] expose StubRoutines trig functions
never
parents: 35913
diff changeset
    81
    static address dsin;
4fb93f7c26fe 8156178: [JVMCI] expose StubRoutines trig functions
never
parents: 35913
diff changeset
    82
    static address dcos;
4fb93f7c26fe 8156178: [JVMCI] expose StubRoutines trig functions
never
parents: 35913
diff changeset
    83
    static address dtan;
4fb93f7c26fe 8156178: [JVMCI] expose StubRoutines trig functions
never
parents: 35913
diff changeset
    84
    static address dexp;
4fb93f7c26fe 8156178: [JVMCI] expose StubRoutines trig functions
never
parents: 35913
diff changeset
    85
    static address dlog;
4fb93f7c26fe 8156178: [JVMCI] expose StubRoutines trig functions
never
parents: 35913
diff changeset
    86
    static address dlog10;
4fb93f7c26fe 8156178: [JVMCI] expose StubRoutines trig functions
never
parents: 35913
diff changeset
    87
    static address dpow;
4fb93f7c26fe 8156178: [JVMCI] expose StubRoutines trig functions
never
parents: 35913
diff changeset
    88
43939
39f5b59549de 8173912: [JVMCI] fix memory overhead of JVMCI
dnsimon
parents: 42650
diff changeset
    89
    static address symbol_init;
39f5b59549de 8173912: [JVMCI] fix memory overhead of JVMCI
dnsimon
parents: 42650
diff changeset
    90
    static address symbol_clinit;
39f5b59549de 8173912: [JVMCI] fix memory overhead of JVMCI
dnsimon
parents: 42650
diff changeset
    91
35123
b0b89d83bcf5 8134994: use separate VMStructs databases for SA and JVMCI
twisti
parents: 35092
diff changeset
    92
   public:
54669
ad45b3802d4e 8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents: 54110
diff changeset
    93
     static void initialize(JVMCI_TRAPS);
39441
7464b1552bf7 8158850: [JVMCI] be more precise when enforcing OopMapValue encoding limitations
never
parents: 38283
diff changeset
    94
7464b1552bf7 8158850: [JVMCI] be more precise when enforcing OopMapValue encoding limitations
never
parents: 38283
diff changeset
    95
    static int max_oop_map_stack_offset() {
7464b1552bf7 8158850: [JVMCI] be more precise when enforcing OopMapValue encoding limitations
never
parents: 38283
diff changeset
    96
      assert(_max_oop_map_stack_offset > 0, "must be initialized");
7464b1552bf7 8158850: [JVMCI] be more precise when enforcing OopMapValue encoding limitations
never
parents: 38283
diff changeset
    97
      return Data::_max_oop_map_stack_offset;
7464b1552bf7 8158850: [JVMCI] be more precise when enforcing OopMapValue encoding limitations
never
parents: 38283
diff changeset
    98
    }
33160
c59f1676d27e 8136421: JEP 243: Java-Level JVM Compiler Interface
twisti
parents:
diff changeset
    99
  };
c59f1676d27e 8136421: JEP 243: Java-Level JVM Compiler Interface
twisti
parents:
diff changeset
   100
43939
39f5b59549de 8173912: [JVMCI] fix memory overhead of JVMCI
dnsimon
parents: 42650
diff changeset
   101
  static bool cstring_equals(const char* const& s0, const char* const& s1) {
39f5b59549de 8173912: [JVMCI] fix memory overhead of JVMCI
dnsimon
parents: 42650
diff changeset
   102
    return strcmp(s0, s1) == 0;
39f5b59549de 8173912: [JVMCI] fix memory overhead of JVMCI
dnsimon
parents: 42650
diff changeset
   103
  }
39f5b59549de 8173912: [JVMCI] fix memory overhead of JVMCI
dnsimon
parents: 42650
diff changeset
   104
39f5b59549de 8173912: [JVMCI] fix memory overhead of JVMCI
dnsimon
parents: 42650
diff changeset
   105
  static unsigned cstring_hash(const char* const& s) {
39f5b59549de 8173912: [JVMCI] fix memory overhead of JVMCI
dnsimon
parents: 42650
diff changeset
   106
    int h = 0;
39f5b59549de 8173912: [JVMCI] fix memory overhead of JVMCI
dnsimon
parents: 42650
diff changeset
   107
    const char* p = s;
39f5b59549de 8173912: [JVMCI] fix memory overhead of JVMCI
dnsimon
parents: 42650
diff changeset
   108
    while (*p != '\0') {
39f5b59549de 8173912: [JVMCI] fix memory overhead of JVMCI
dnsimon
parents: 42650
diff changeset
   109
      h = 31 * h + *p;
39f5b59549de 8173912: [JVMCI] fix memory overhead of JVMCI
dnsimon
parents: 42650
diff changeset
   110
      p++;
39f5b59549de 8173912: [JVMCI] fix memory overhead of JVMCI
dnsimon
parents: 42650
diff changeset
   111
    }
39f5b59549de 8173912: [JVMCI] fix memory overhead of JVMCI
dnsimon
parents: 42650
diff changeset
   112
    return h;
39f5b59549de 8173912: [JVMCI] fix memory overhead of JVMCI
dnsimon
parents: 42650
diff changeset
   113
  }
39f5b59549de 8173912: [JVMCI] fix memory overhead of JVMCI
dnsimon
parents: 42650
diff changeset
   114
40878
5d87104b10d5 8164358: [JVMCI] expose Hotspot intrinsics and HotSpotIntrinsicCandidate info to JVMCI
dnsimon
parents: 39441
diff changeset
   115
  static JNINativeMethod methods[];
54669
ad45b3802d4e 8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents: 54110
diff changeset
   116
  static JNINativeMethod jni_methods[];
40878
5d87104b10d5 8164358: [JVMCI] expose Hotspot intrinsics and HotSpotIntrinsicCandidate info to JVMCI
dnsimon
parents: 39441
diff changeset
   117
54669
ad45b3802d4e 8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents: 54110
diff changeset
   118
  static JVMCIObjectArray initialize_intrinsics(JVMCI_TRAPS);
35123
b0b89d83bcf5 8134994: use separate VMStructs databases for SA and JVMCI
twisti
parents: 35092
diff changeset
   119
 public:
33160
c59f1676d27e 8136421: JEP 243: Java-Level JVM Compiler Interface
twisti
parents:
diff changeset
   120
  static int methods_count();
c59f1676d27e 8136421: JEP 243: Java-Level JVM Compiler Interface
twisti
parents:
diff changeset
   121
54669
ad45b3802d4e 8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents: 54110
diff changeset
   122
};
33160
c59f1676d27e 8136421: JEP 243: Java-Level JVM Compiler Interface
twisti
parents:
diff changeset
   123
c59f1676d27e 8136421: JEP 243: Java-Level JVM Compiler Interface
twisti
parents:
diff changeset
   124
c59f1676d27e 8136421: JEP 243: Java-Level JVM Compiler Interface
twisti
parents:
diff changeset
   125
class JavaArgumentUnboxer : public SignatureIterator {
c59f1676d27e 8136421: JEP 243: Java-Level JVM Compiler Interface
twisti
parents:
diff changeset
   126
 protected:
c59f1676d27e 8136421: JEP 243: Java-Level JVM Compiler Interface
twisti
parents:
diff changeset
   127
  JavaCallArguments*  _jca;
c59f1676d27e 8136421: JEP 243: Java-Level JVM Compiler Interface
twisti
parents:
diff changeset
   128
  arrayOop _args;
c59f1676d27e 8136421: JEP 243: Java-Level JVM Compiler Interface
twisti
parents:
diff changeset
   129
  int _index;
c59f1676d27e 8136421: JEP 243: Java-Level JVM Compiler Interface
twisti
parents:
diff changeset
   130
49449
ef5d5d343e2a 8199263: Split interfaceSupport.hpp to not require including .inline.hpp files
coleenp
parents: 47659
diff changeset
   131
  Handle next_arg(BasicType expectedType);
33160
c59f1676d27e 8136421: JEP 243: Java-Level JVM Compiler Interface
twisti
parents:
diff changeset
   132
c59f1676d27e 8136421: JEP 243: Java-Level JVM Compiler Interface
twisti
parents:
diff changeset
   133
 public:
c59f1676d27e 8136421: JEP 243: Java-Level JVM Compiler Interface
twisti
parents:
diff changeset
   134
  JavaArgumentUnboxer(Symbol* signature, JavaCallArguments*  jca, arrayOop args, bool is_static) : SignatureIterator(signature) {
c59f1676d27e 8136421: JEP 243: Java-Level JVM Compiler Interface
twisti
parents:
diff changeset
   135
    this->_return_type = T_ILLEGAL;
c59f1676d27e 8136421: JEP 243: Java-Level JVM Compiler Interface
twisti
parents:
diff changeset
   136
    _jca = jca;
c59f1676d27e 8136421: JEP 243: Java-Level JVM Compiler Interface
twisti
parents:
diff changeset
   137
    _index = 0;
c59f1676d27e 8136421: JEP 243: Java-Level JVM Compiler Interface
twisti
parents:
diff changeset
   138
    _args = args;
c59f1676d27e 8136421: JEP 243: Java-Level JVM Compiler Interface
twisti
parents:
diff changeset
   139
    if (!is_static) {
c59f1676d27e 8136421: JEP 243: Java-Level JVM Compiler Interface
twisti
parents:
diff changeset
   140
      _jca->push_oop(next_arg(T_OBJECT));
c59f1676d27e 8136421: JEP 243: Java-Level JVM Compiler Interface
twisti
parents:
diff changeset
   141
    }
c59f1676d27e 8136421: JEP 243: Java-Level JVM Compiler Interface
twisti
parents:
diff changeset
   142
    iterate();
c59f1676d27e 8136421: JEP 243: Java-Level JVM Compiler Interface
twisti
parents:
diff changeset
   143
    assert(_index == args->length(), "arg count mismatch with signature");
c59f1676d27e 8136421: JEP 243: Java-Level JVM Compiler Interface
twisti
parents:
diff changeset
   144
  }
c59f1676d27e 8136421: JEP 243: Java-Level JVM Compiler Interface
twisti
parents:
diff changeset
   145
c59f1676d27e 8136421: JEP 243: Java-Level JVM Compiler Interface
twisti
parents:
diff changeset
   146
  inline void do_bool()   { if (!is_return_type()) _jca->push_int(next_arg(T_BOOLEAN)->bool_field(java_lang_boxing_object::value_offset_in_bytes(T_BOOLEAN))); }
c59f1676d27e 8136421: JEP 243: Java-Level JVM Compiler Interface
twisti
parents:
diff changeset
   147
  inline void do_char()   { if (!is_return_type()) _jca->push_int(next_arg(T_CHAR)->char_field(java_lang_boxing_object::value_offset_in_bytes(T_CHAR))); }
c59f1676d27e 8136421: JEP 243: Java-Level JVM Compiler Interface
twisti
parents:
diff changeset
   148
  inline void do_short()  { if (!is_return_type()) _jca->push_int(next_arg(T_SHORT)->short_field(java_lang_boxing_object::value_offset_in_bytes(T_SHORT))); }
c59f1676d27e 8136421: JEP 243: Java-Level JVM Compiler Interface
twisti
parents:
diff changeset
   149
  inline void do_byte()   { if (!is_return_type()) _jca->push_int(next_arg(T_BYTE)->byte_field(java_lang_boxing_object::value_offset_in_bytes(T_BYTE))); }
c59f1676d27e 8136421: JEP 243: Java-Level JVM Compiler Interface
twisti
parents:
diff changeset
   150
  inline void do_int()    { if (!is_return_type()) _jca->push_int(next_arg(T_INT)->int_field(java_lang_boxing_object::value_offset_in_bytes(T_INT))); }
c59f1676d27e 8136421: JEP 243: Java-Level JVM Compiler Interface
twisti
parents:
diff changeset
   151
c59f1676d27e 8136421: JEP 243: Java-Level JVM Compiler Interface
twisti
parents:
diff changeset
   152
  inline void do_long()   { if (!is_return_type()) _jca->push_long(next_arg(T_LONG)->long_field(java_lang_boxing_object::value_offset_in_bytes(T_LONG))); }
c59f1676d27e 8136421: JEP 243: Java-Level JVM Compiler Interface
twisti
parents:
diff changeset
   153
  inline void do_float()  { if (!is_return_type()) _jca->push_float(next_arg(T_FLOAT)->float_field(java_lang_boxing_object::value_offset_in_bytes(T_FLOAT))); }
c59f1676d27e 8136421: JEP 243: Java-Level JVM Compiler Interface
twisti
parents:
diff changeset
   154
  inline void do_double() { if (!is_return_type()) _jca->push_double(next_arg(T_DOUBLE)->double_field(java_lang_boxing_object::value_offset_in_bytes(T_DOUBLE))); }
c59f1676d27e 8136421: JEP 243: Java-Level JVM Compiler Interface
twisti
parents:
diff changeset
   155
c59f1676d27e 8136421: JEP 243: Java-Level JVM Compiler Interface
twisti
parents:
diff changeset
   156
  inline void do_object() { _jca->push_oop(next_arg(T_OBJECT)); }
c59f1676d27e 8136421: JEP 243: Java-Level JVM Compiler Interface
twisti
parents:
diff changeset
   157
  inline void do_object(int begin, int end) { if (!is_return_type()) _jca->push_oop(next_arg(T_OBJECT)); }
c59f1676d27e 8136421: JEP 243: Java-Level JVM Compiler Interface
twisti
parents:
diff changeset
   158
  inline void do_array(int begin, int end)  { if (!is_return_type()) _jca->push_oop(next_arg(T_OBJECT)); }
c59f1676d27e 8136421: JEP 243: Java-Level JVM Compiler Interface
twisti
parents:
diff changeset
   159
  inline void do_void()                     { }
c59f1676d27e 8136421: JEP 243: Java-Level JVM Compiler Interface
twisti
parents:
diff changeset
   160
};
c59f1676d27e 8136421: JEP 243: Java-Level JVM Compiler Interface
twisti
parents:
diff changeset
   161
44092
bc842cc2356b 8175917: [JVMCI] Avoid long JNI handle chains
chaeubl
parents: 43939
diff changeset
   162
class JNIHandleMark : public StackObj {
54732
2d012a75d35c 8223332: Update JVMCI
kvn
parents: 54669
diff changeset
   163
  JavaThread* _thread;
44092
bc842cc2356b 8175917: [JVMCI] Avoid long JNI handle chains
chaeubl
parents: 43939
diff changeset
   164
  public:
54732
2d012a75d35c 8223332: Update JVMCI
kvn
parents: 54669
diff changeset
   165
    JNIHandleMark(JavaThread* thread) : _thread(thread) { push_jni_handle_block(thread); }
2d012a75d35c 8223332: Update JVMCI
kvn
parents: 54669
diff changeset
   166
    ~JNIHandleMark() { pop_jni_handle_block(_thread); }
44092
bc842cc2356b 8175917: [JVMCI] Avoid long JNI handle chains
chaeubl
parents: 43939
diff changeset
   167
bc842cc2356b 8175917: [JVMCI] Avoid long JNI handle chains
chaeubl
parents: 43939
diff changeset
   168
  private:
54732
2d012a75d35c 8223332: Update JVMCI
kvn
parents: 54669
diff changeset
   169
    static void push_jni_handle_block(JavaThread* thread);
2d012a75d35c 8223332: Update JVMCI
kvn
parents: 54669
diff changeset
   170
    static void pop_jni_handle_block(JavaThread* thread);
44092
bc842cc2356b 8175917: [JVMCI] Avoid long JNI handle chains
chaeubl
parents: 43939
diff changeset
   171
};
bc842cc2356b 8175917: [JVMCI] Avoid long JNI handle chains
chaeubl
parents: 43939
diff changeset
   172
53244
9807daeb47c4 8216167: Update include guards to reflect correct directories
coleenp
parents: 52645
diff changeset
   173
#endif // SHARE_JVMCI_JVMCICOMPILERTOVM_HPP