src/cpu/mips/vm/cppInterpreter_mips.cpp

Fri, 29 Apr 2016 00:06:10 +0800

author
aoqi
date
Fri, 29 Apr 2016 00:06:10 +0800
changeset 1
2d8a650513c2
permissions
-rw-r--r--

Added MIPS 64-bit port.

aoqi@1 1 /*
aoqi@1 2 * Copyright (c) 2007, 2013, Oracle and/or its affiliates. All rights reserved.
aoqi@1 3 * Copyright (c) 2015, 2016, Loongson Technology. All rights reserved.
aoqi@1 4 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
aoqi@1 5 *
aoqi@1 6 * This code is free software; you can redistribute it and/or modify it
aoqi@1 7 * under the terms of the GNU General Public License version 2 only, as
aoqi@1 8 * published by the Free Software Foundation.
aoqi@1 9 *
aoqi@1 10 * This code is distributed in the hope that it will be useful, but WITHOUT
aoqi@1 11 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
aoqi@1 12 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
aoqi@1 13 * version 2 for more details (a copy is included in the LICENSE file that
aoqi@1 14 * accompanied this code).
aoqi@1 15 *
aoqi@1 16 * You should have received a copy of the GNU General Public License version
aoqi@1 17 * 2 along with this work; if not, write to the Free Software Foundation,
aoqi@1 18 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
aoqi@1 19 *
aoqi@1 20 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
aoqi@1 21 * or visit www.oracle.com if you need additional information or have any
aoqi@1 22 * questions.
aoqi@1 23 *
aoqi@1 24 */
aoqi@1 25
aoqi@1 26 #include "precompiled.hpp"
aoqi@1 27 #include "asm/macroAssembler.hpp"
aoqi@1 28 #include "interpreter/bytecodeHistogram.hpp"
aoqi@1 29 #include "interpreter/cppInterpreter.hpp"
aoqi@1 30 #include "interpreter/interpreter.hpp"
aoqi@1 31 #include "interpreter/interpreterGenerator.hpp"
aoqi@1 32 #include "interpreter/interpreterRuntime.hpp"
aoqi@1 33 #include "oops/arrayOop.hpp"
aoqi@1 34 #include "oops/methodData.hpp"
aoqi@1 35 #include "oops/method.hpp"
aoqi@1 36 #include "oops/oop.inline.hpp"
aoqi@1 37 #include "prims/jvmtiExport.hpp"
aoqi@1 38 #include "prims/jvmtiThreadState.hpp"
aoqi@1 39 #include "runtime/arguments.hpp"
aoqi@1 40 #include "runtime/deoptimization.hpp"
aoqi@1 41 #include "runtime/frame.inline.hpp"
aoqi@1 42 #include "runtime/interfaceSupport.hpp"
aoqi@1 43 #include "runtime/sharedRuntime.hpp"
aoqi@1 44 #include "runtime/stubRoutines.hpp"
aoqi@1 45 #include "runtime/synchronizer.hpp"
aoqi@1 46 #include "runtime/timer.hpp"
aoqi@1 47 #include "runtime/vframeArray.hpp"
aoqi@1 48 #include "utilities/debug.hpp"
aoqi@1 49 #ifdef SHARK
aoqi@1 50 #include "shark/shark_globals.hpp"
aoqi@1 51 #endif
aoqi@1 52
aoqi@1 53 #ifdef CC_INTERP
aoqi@1 54
aoqi@1 55 // Routine exists to make tracebacks look decent in debugger
aoqi@1 56 // while "shadow" interpreter frames are on stack. It is also
aoqi@1 57 // used to distinguish interpreter frames.
aoqi@1 58
aoqi@1 59 extern "C" void RecursiveInterpreterActivation(interpreterState istate) {
aoqi@1 60 ShouldNotReachHere();
aoqi@1 61 }
aoqi@1 62
aoqi@1 63 bool CppInterpreter::contains(address pc) {
aoqi@1 64 Unimplemented();
aoqi@1 65 }
aoqi@1 66
aoqi@1 67 #define STATE(field_name) Lstate, in_bytes(byte_offset_of(BytecodeInterpreter, field_name))
aoqi@1 68 #define __ _masm->
aoqi@1 69
aoqi@1 70 Label frame_manager_entry;
aoqi@1 71 Label fast_accessor_slow_entry_path; // fast accessor methods need to be able to jmp to unsynchronized
aoqi@1 72 // c++ interpreter entry point this holds that entry point label.
aoqi@1 73
aoqi@1 74 static address unctrap_frame_manager_entry = NULL;
aoqi@1 75
aoqi@1 76 static address interpreter_return_address = NULL;
aoqi@1 77 static address deopt_frame_manager_return_atos = NULL;
aoqi@1 78 static address deopt_frame_manager_return_btos = NULL;
aoqi@1 79 static address deopt_frame_manager_return_itos = NULL;
aoqi@1 80 static address deopt_frame_manager_return_ltos = NULL;
aoqi@1 81 static address deopt_frame_manager_return_ftos = NULL;
aoqi@1 82 static address deopt_frame_manager_return_dtos = NULL;
aoqi@1 83 static address deopt_frame_manager_return_vtos = NULL;
aoqi@1 84
aoqi@1 85 const Register prevState = G1_scratch;
aoqi@1 86
aoqi@1 87 void InterpreterGenerator::save_native_result(void) {
aoqi@1 88 Unimplemented();
aoqi@1 89 }
aoqi@1 90
aoqi@1 91 void InterpreterGenerator::restore_native_result(void) {
aoqi@1 92 Unimplemented();
aoqi@1 93 }
aoqi@1 94
aoqi@1 95 // A result handler converts/unboxes a native call result into
aoqi@1 96 // a java interpreter/compiler result. The current frame is an
aoqi@1 97 // interpreter frame. The activation frame unwind code must be
aoqi@1 98 // consistent with that of TemplateTable::_return(...). In the
aoqi@1 99 // case of native methods, the caller's SP was not modified.
aoqi@1 100 address CppInterpreterGenerator::generate_result_handler_for(BasicType type) {
aoqi@1 101 Unimplemented();
aoqi@1 102 }
aoqi@1 103
aoqi@1 104 address CppInterpreterGenerator::generate_tosca_to_stack_converter(BasicType type) {
aoqi@1 105 Unimplemented();
aoqi@1 106 }
aoqi@1 107
aoqi@1 108 address CppInterpreterGenerator::generate_stack_to_stack_converter(BasicType type) {
aoqi@1 109 Unimplemented();
aoqi@1 110 }
aoqi@1 111
aoqi@1 112 address CppInterpreterGenerator::generate_stack_to_native_abi_converter(BasicType type) {
aoqi@1 113 Unimplemented();
aoqi@1 114 }
aoqi@1 115
aoqi@1 116 address CppInterpreter::return_entry(TosState state, int length) {
aoqi@1 117 Unimplemented();
aoqi@1 118 }
aoqi@1 119
aoqi@1 120 address CppInterpreter::deopt_entry(TosState state, int length) {
aoqi@1 121 Unimplemented();
aoqi@1 122 }
aoqi@1 123
aoqi@1 124 void InterpreterGenerator::generate_counter_incr(Label* overflow, Label* profile_method, Label* profile_method_continue) {
aoqi@1 125 Unimplemented();
aoqi@1 126 }
aoqi@1 127
aoqi@1 128 address InterpreterGenerator::generate_empty_entry(void) {
aoqi@1 129 Unimplemented();
aoqi@1 130 }
aoqi@1 131
aoqi@1 132 address InterpreterGenerator::generate_accessor_entry(void) {
aoqi@1 133 Unimplemented();
aoqi@1 134 }
aoqi@1 135
aoqi@1 136 address InterpreterGenerator::generate_native_entry(bool synchronized) {
aoqi@1 137 Unimplemented();
aoqi@1 138 }
aoqi@1 139
aoqi@1 140 void CppInterpreterGenerator::generate_compute_interpreter_state(const Register state,
aoqi@1 141 const Register prev_state,
aoqi@1 142 bool native) {
aoqi@1 143 Unimplemented();
aoqi@1 144 }
aoqi@1 145
aoqi@1 146 void InterpreterGenerator::lock_method(void) {
aoqi@1 147 Unimplemented();
aoqi@1 148 }
aoqi@1 149
aoqi@1 150 void CppInterpreterGenerator::generate_deopt_handling() {
aoqi@1 151 Unimplemented();
aoqi@1 152 }
aoqi@1 153
aoqi@1 154 void CppInterpreterGenerator::generate_more_monitors() {
aoqi@1 155 Unimplemented();
aoqi@1 156 }
aoqi@1 157
aoqi@1 158
aoqi@1 159 static address interpreter_frame_manager = NULL;
aoqi@1 160
aoqi@1 161 void CppInterpreterGenerator::adjust_callers_stack(Register args) {
aoqi@1 162 Unimplemented();
aoqi@1 163 }
aoqi@1 164
aoqi@1 165 address InterpreterGenerator::generate_normal_entry(bool synchronized) {
aoqi@1 166 Unimplemented();
aoqi@1 167 }
aoqi@1 168
aoqi@1 169 InterpreterGenerator::InterpreterGenerator(StubQueue* code)
aoqi@1 170 : CppInterpreterGenerator(code) {
aoqi@1 171 Unimplemented();
aoqi@1 172 }
aoqi@1 173
aoqi@1 174
aoqi@1 175 static int size_activation_helper(int callee_extra_locals, int max_stack, int monitor_size) {
aoqi@1 176 Unimplemented();
aoqi@1 177 }
aoqi@1 178
aoqi@1 179 int AbstractInterpreter::size_top_interpreter_activation(methodOop method) {
aoqi@1 180 Unimplemented();
aoqi@1 181 }
aoqi@1 182
aoqi@1 183 void BytecodeInterpreter::layout_interpreterState(interpreterState to_fill,
aoqi@1 184 frame* caller,
aoqi@1 185 frame* current,
aoqi@1 186 methodOop method,
aoqi@1 187 intptr_t* locals,
aoqi@1 188 intptr_t* stack,
aoqi@1 189 intptr_t* stack_base,
aoqi@1 190 intptr_t* monitor_base,
aoqi@1 191 intptr_t* frame_bottom,
aoqi@1 192 bool is_top_frame
aoqi@1 193 )
aoqi@1 194 {
aoqi@1 195 Unimplemented();
aoqi@1 196 }
aoqi@1 197
aoqi@1 198 void BytecodeInterpreter::pd_layout_interpreterState(interpreterState istate, address last_Java_pc, intptr_t* last_Java_fp) {
aoqi@1 199 Unimplemented();
aoqi@1 200 }
aoqi@1 201
aoqi@1 202
aoqi@1 203 int AbstractInterpreter::layout_activation(methodOop method,
aoqi@1 204 int tempcount, // Number of slots on java expression stack in use
aoqi@1 205 int popframe_extra_args,
aoqi@1 206 int moncount, // Number of active monitors
aoqi@1 207 int callee_param_size,
aoqi@1 208 int callee_locals_size,
aoqi@1 209 frame* caller,
aoqi@1 210 frame* interpreter_frame,
aoqi@1 211 bool is_top_frame) {
aoqi@1 212 Unimplemented();
aoqi@1 213 }
aoqi@1 214
aoqi@1 215 #endif // CC_INTERP

mercurial