src/cpu/mips/vm/interpreter_mips.hpp

Tue, 31 May 2016 00:22:06 -0400

author
aoqi
date
Tue, 31 May 2016 00:22:06 -0400
changeset 16
3cedde979d75
parent 1
2d8a650513c2
child 6880
52ea28d233d2
permissions
-rw-r--r--

[Code Reorganization] load_two_bytes_from_at_bcp -> get_2_byte_integer_at_bcp
remove useless MacroAssembler::store_two_byts_to_at_bcp
change MacroAssembler::load_two_bytes_from_at_bcp to InterpreterMacroAssembler::get_2_byte_integer_at_bcp
change MacroAssembler::get_4_byte_integer_at_bcp to InterpreterMacroAssembler::get_4_byte_integer_at_bcp

aoqi@1 1 /*
aoqi@1 2 * Copyright (c) 1997, 2011, 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 #ifndef CPU_MIPS_VM_INTERPRETER_MIPS_HPP
aoqi@1 27 #define CPU_MIPS_VM_INTERPRETER_MIPS_HPP
aoqi@1 28
aoqi@1 29 public:
aoqi@1 30
aoqi@1 31 // Sentinel placed in the code for interpreter returns so
aoqi@1 32 // that i2c adapters and osr code can recognize an interpreter
aoqi@1 33 // return address and convert the return to a specialized
aoqi@1 34 // block of code to handle compiedl return values and cleaning
aoqi@1 35 // the fpu stack.
aoqi@1 36 static const int return_sentinel;
aoqi@1 37
aoqi@1 38 static Address::ScaleFactor stackElementScale() {
aoqi@1 39 // return TaggedStackInterpreter? Address::times_8 : Address::times_4;
aoqi@1 40 return NOT_LP64(Address::times_4)LP64_ONLY(Address::times_8);
aoqi@1 41 }
aoqi@1 42
aoqi@1 43 // Offset from rsp (which points to the last stack element)
aoqi@1 44 static int expr_offset_in_bytes(int i) { return stackElementSize*i ; }
aoqi@1 45 // Size of interpreter code. Increase if too small. Interpreter will
aoqi@1 46 // fail with a guarantee ("not enough space for interpreter generation");
aoqi@1 47 // if too small.
aoqi@1 48 // Run with +PrintInterpreterSize to get the VM to print out the size.
aoqi@1 49 // Max size with JVMTI and TaggedStackInterpreter
aoqi@1 50 const static int InterpreterCodeSize = 168 * 1024;
aoqi@1 51 #if 0
aoqi@1 52 // Support for Tagged Stacks
aoqi@1 53
aoqi@1 54 // Stack index relative to tos (which points at value)
aoqi@1 55 static int expr_index_at(int i) {
aoqi@1 56 return stackElementWords() * i;
aoqi@1 57 }
aoqi@1 58
aoqi@1 59 static int expr_tag_index_at(int i) {
aoqi@1 60 assert(TaggedStackInterpreter, "should not call this");
aoqi@1 61 // tag is one word above java stack element
aoqi@1 62 return stackElementWords() * i + 1;
aoqi@1 63 }
aoqi@1 64
aoqi@1 65 // Already negated by c++ interpreter
aoqi@1 66 static int local_index_at(int i) {
aoqi@1 67 assert(i<=0, "local direction already negated");
aoqi@1 68 return stackElementWords() * i + (value_offset_in_bytes()/wordSize);
aoqi@1 69 }
aoqi@1 70
aoqi@1 71 static int local_tag_index_at(int i) {
aoqi@1 72 assert(i<=0, "local direction already negated");
aoqi@1 73 assert(TaggedStackInterpreter, "should not call this");
aoqi@1 74 return stackElementWords() * i + (tag_offset_in_bytes()/wordSize);
aoqi@1 75 }
aoqi@1 76 #endif
aoqi@1 77 #endif // CPU_MIPS_VM_INTERPRETER_MIPS_HPP
aoqi@1 78

mercurial