Path: blob/aarch64-shenandoah-jdk8u272-b10/hotspot/src/share/vm/interpreter/templateTable.cpp
32285 views
/*1* Copyright (c) 1997, 2016, Oracle and/or its affiliates. All rights reserved.2* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.3*4* This code is free software; you can redistribute it and/or modify it5* under the terms of the GNU General Public License version 2 only, as6* published by the Free Software Foundation.7*8* This code is distributed in the hope that it will be useful, but WITHOUT9* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or10* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License11* version 2 for more details (a copy is included in the LICENSE file that12* accompanied this code).13*14* You should have received a copy of the GNU General Public License version15* 2 along with this work; if not, write to the Free Software Foundation,16* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.17*18* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA19* or visit www.oracle.com if you need additional information or have any20* questions.21*22*/2324#include "precompiled.hpp"25#include "gc_interface/collectedHeap.hpp"26#include "interpreter/templateTable.hpp"27#include "runtime/timer.hpp"282930#ifdef CC_INTERP3132void templateTable_init() {33}3435#else3637//----------------------------------------------------------------------------------------------------38// Implementation of Template394041void Template::initialize(int flags, TosState tos_in, TosState tos_out, generator gen, int arg) {42_flags = flags;43_tos_in = tos_in;44_tos_out = tos_out;45_gen = gen;46_arg = arg;47}484950Bytecodes::Code Template::bytecode() const {51int i = this - TemplateTable::_template_table;52if (i < 0 || i >= Bytecodes::number_of_codes) i = this - TemplateTable::_template_table_wide;53return Bytecodes::cast(i);54}555657void Template::generate(InterpreterMacroAssembler* masm) {58// parameter passing59TemplateTable::_desc = this;60TemplateTable::_masm = masm;61// code generation62_gen(_arg);63masm->flush();64}656667//----------------------------------------------------------------------------------------------------68// Implementation of TemplateTable: Platform-independent helper routines6970void TemplateTable::call_VM(Register oop_result, address entry_point) {71assert(_desc->calls_vm(), "inconsistent calls_vm information");72_masm->call_VM(oop_result, entry_point);73}747576void TemplateTable::call_VM(Register oop_result, address entry_point, Register arg_1) {77assert(_desc->calls_vm(), "inconsistent calls_vm information");78_masm->call_VM(oop_result, entry_point, arg_1);79}808182void TemplateTable::call_VM(Register oop_result, address entry_point, Register arg_1, Register arg_2) {83assert(_desc->calls_vm(), "inconsistent calls_vm information");84_masm->call_VM(oop_result, entry_point, arg_1, arg_2);85}868788void TemplateTable::call_VM(Register oop_result, address entry_point, Register arg_1, Register arg_2, Register arg_3) {89assert(_desc->calls_vm(), "inconsistent calls_vm information");90_masm->call_VM(oop_result, entry_point, arg_1, arg_2, arg_3);91}929394void TemplateTable::call_VM(Register oop_result, Register last_java_sp, address entry_point) {95assert(_desc->calls_vm(), "inconsistent calls_vm information");96_masm->call_VM(oop_result, last_java_sp, entry_point);97}9899100void TemplateTable::call_VM(Register oop_result, Register last_java_sp, address entry_point, Register arg_1) {101assert(_desc->calls_vm(), "inconsistent calls_vm information");102_masm->call_VM(oop_result, last_java_sp, entry_point, arg_1);103}104105106void TemplateTable::call_VM(Register oop_result, Register last_java_sp, address entry_point, Register arg_1, Register arg_2) {107assert(_desc->calls_vm(), "inconsistent calls_vm information");108_masm->call_VM(oop_result, last_java_sp, entry_point, arg_1, arg_2);109}110111112void TemplateTable::call_VM(Register oop_result, Register last_java_sp, address entry_point, Register arg_1, Register arg_2, Register arg_3) {113assert(_desc->calls_vm(), "inconsistent calls_vm information");114_masm->call_VM(oop_result, last_java_sp, entry_point, arg_1, arg_2, arg_3);115}116117118//----------------------------------------------------------------------------------------------------119// Implementation of TemplateTable: Platform-independent bytecodes120121void TemplateTable::float_cmp(int unordered_result) {122transition(ftos, itos);123float_cmp(true, unordered_result);124}125126127void TemplateTable::double_cmp(int unordered_result) {128transition(dtos, itos);129float_cmp(false, unordered_result);130}131132133void TemplateTable::_goto() {134transition(vtos, vtos);135branch(false, false);136}137138139void TemplateTable::goto_w() {140transition(vtos, vtos);141branch(false, true);142}143144145void TemplateTable::jsr_w() {146transition(vtos, vtos); // result is not an oop, so do not transition to atos147branch(true, true);148}149150151void TemplateTable::jsr() {152transition(vtos, vtos); // result is not an oop, so do not transition to atos153branch(true, false);154}155156157158//----------------------------------------------------------------------------------------------------159// Implementation of TemplateTable: Debugging160161void TemplateTable::transition(TosState tos_in, TosState tos_out) {162assert(_desc->tos_in() == tos_in , "inconsistent tos_in information");163assert(_desc->tos_out() == tos_out, "inconsistent tos_out information");164}165166167//----------------------------------------------------------------------------------------------------168// Implementation of TemplateTable: Initialization169170bool TemplateTable::_is_initialized = false;171Template TemplateTable::_template_table [Bytecodes::number_of_codes];172Template TemplateTable::_template_table_wide[Bytecodes::number_of_codes];173174Template* TemplateTable::_desc;175InterpreterMacroAssembler* TemplateTable::_masm;176BarrierSet* TemplateTable::_bs;177178179void TemplateTable::def(Bytecodes::Code code, int flags, TosState in, TosState out, void (*gen)(), char filler) {180assert(filler == ' ', "just checkin'");181def(code, flags, in, out, (Template::generator)gen, 0);182}183184185void TemplateTable::def(Bytecodes::Code code, int flags, TosState in, TosState out, void (*gen)(int arg), int arg) {186// should factor out these constants187const int ubcp = 1 << Template::uses_bcp_bit;188const int disp = 1 << Template::does_dispatch_bit;189const int clvm = 1 << Template::calls_vm_bit;190const int iswd = 1 << Template::wide_bit;191// determine which table to use192bool is_wide = (flags & iswd) != 0;193// make sure that wide instructions have a vtos entry point194// (since they are executed extremely rarely, it doesn't pay out to have an195// extra set of 5 dispatch tables for the wide instructions - for simplicity196// they all go with one table)197assert(in == vtos || !is_wide, "wide instructions have vtos entry point only");198Template* t = is_wide ? template_for_wide(code) : template_for(code);199// setup entry200t->initialize(flags, in, out, gen, arg);201assert(t->bytecode() == code, "just checkin'");202}203204205void TemplateTable::def(Bytecodes::Code code, int flags, TosState in, TosState out, void (*gen)(Operation op), Operation op) {206def(code, flags, in, out, (Template::generator)gen, (int)op);207}208209210void TemplateTable::def(Bytecodes::Code code, int flags, TosState in, TosState out, void (*gen)(bool arg ), bool arg) {211def(code, flags, in, out, (Template::generator)gen, (int)arg);212}213214215void TemplateTable::def(Bytecodes::Code code, int flags, TosState in, TosState out, void (*gen)(TosState tos), TosState tos) {216def(code, flags, in, out, (Template::generator)gen, (int)tos);217}218219220void TemplateTable::def(Bytecodes::Code code, int flags, TosState in, TosState out, void (*gen)(Condition cc), Condition cc) {221def(code, flags, in, out, (Template::generator)gen, (int)cc);222}223224#if defined(TEMPLATE_TABLE_BUG)225//226// It appears that gcc (version 2.91) generates bad code for the template227// table init if this macro is not defined. My symptom was an assertion228// assert(Universe::heap()->is_in(obj), "sanity check") in handles.cpp line 24.229// when called from interpreterRuntime.resolve_invoke().230//231#define iload TemplateTable::iload232#define lload TemplateTable::lload233#define fload TemplateTable::fload234#define dload TemplateTable::dload235#define aload TemplateTable::aload236#define istore TemplateTable::istore237#define lstore TemplateTable::lstore238#define fstore TemplateTable::fstore239#define dstore TemplateTable::dstore240#define astore TemplateTable::astore241#endif // TEMPLATE_TABLE_BUG242243void TemplateTable::initialize() {244if (_is_initialized) return;245246// Initialize table247TraceTime timer("TemplateTable initialization", TraceStartupTime);248249_bs = Universe::heap()->barrier_set();250251// For better readability252const char _ = ' ';253const int ____ = 0;254const int ubcp = 1 << Template::uses_bcp_bit;255const int disp = 1 << Template::does_dispatch_bit;256const int clvm = 1 << Template::calls_vm_bit;257const int iswd = 1 << Template::wide_bit;258// interpr. templates259// Java spec bytecodes ubcp|disp|clvm|iswd in out generator argument260def(Bytecodes::_nop , ____|____|____|____, vtos, vtos, nop , _ );261def(Bytecodes::_aconst_null , ____|____|____|____, vtos, atos, aconst_null , _ );262def(Bytecodes::_iconst_m1 , ____|____|____|____, vtos, itos, iconst , -1 );263def(Bytecodes::_iconst_0 , ____|____|____|____, vtos, itos, iconst , 0 );264def(Bytecodes::_iconst_1 , ____|____|____|____, vtos, itos, iconst , 1 );265def(Bytecodes::_iconst_2 , ____|____|____|____, vtos, itos, iconst , 2 );266def(Bytecodes::_iconst_3 , ____|____|____|____, vtos, itos, iconst , 3 );267def(Bytecodes::_iconst_4 , ____|____|____|____, vtos, itos, iconst , 4 );268def(Bytecodes::_iconst_5 , ____|____|____|____, vtos, itos, iconst , 5 );269def(Bytecodes::_lconst_0 , ____|____|____|____, vtos, ltos, lconst , 0 );270def(Bytecodes::_lconst_1 , ____|____|____|____, vtos, ltos, lconst , 1 );271def(Bytecodes::_fconst_0 , ____|____|____|____, vtos, ftos, fconst , 0 );272def(Bytecodes::_fconst_1 , ____|____|____|____, vtos, ftos, fconst , 1 );273def(Bytecodes::_fconst_2 , ____|____|____|____, vtos, ftos, fconst , 2 );274def(Bytecodes::_dconst_0 , ____|____|____|____, vtos, dtos, dconst , 0 );275def(Bytecodes::_dconst_1 , ____|____|____|____, vtos, dtos, dconst , 1 );276def(Bytecodes::_bipush , ubcp|____|____|____, vtos, itos, bipush , _ );277def(Bytecodes::_sipush , ubcp|____|____|____, vtos, itos, sipush , _ );278def(Bytecodes::_ldc , ubcp|____|clvm|____, vtos, vtos, ldc , false );279def(Bytecodes::_ldc_w , ubcp|____|clvm|____, vtos, vtos, ldc , true );280def(Bytecodes::_ldc2_w , ubcp|____|____|____, vtos, vtos, ldc2_w , _ );281def(Bytecodes::_iload , ubcp|____|clvm|____, vtos, itos, iload , _ );282def(Bytecodes::_lload , ubcp|____|____|____, vtos, ltos, lload , _ );283def(Bytecodes::_fload , ubcp|____|____|____, vtos, ftos, fload , _ );284def(Bytecodes::_dload , ubcp|____|____|____, vtos, dtos, dload , _ );285def(Bytecodes::_aload , ubcp|____|clvm|____, vtos, atos, aload , _ );286def(Bytecodes::_iload_0 , ____|____|____|____, vtos, itos, iload , 0 );287def(Bytecodes::_iload_1 , ____|____|____|____, vtos, itos, iload , 1 );288def(Bytecodes::_iload_2 , ____|____|____|____, vtos, itos, iload , 2 );289def(Bytecodes::_iload_3 , ____|____|____|____, vtos, itos, iload , 3 );290def(Bytecodes::_lload_0 , ____|____|____|____, vtos, ltos, lload , 0 );291def(Bytecodes::_lload_1 , ____|____|____|____, vtos, ltos, lload , 1 );292def(Bytecodes::_lload_2 , ____|____|____|____, vtos, ltos, lload , 2 );293def(Bytecodes::_lload_3 , ____|____|____|____, vtos, ltos, lload , 3 );294def(Bytecodes::_fload_0 , ____|____|____|____, vtos, ftos, fload , 0 );295def(Bytecodes::_fload_1 , ____|____|____|____, vtos, ftos, fload , 1 );296def(Bytecodes::_fload_2 , ____|____|____|____, vtos, ftos, fload , 2 );297def(Bytecodes::_fload_3 , ____|____|____|____, vtos, ftos, fload , 3 );298def(Bytecodes::_dload_0 , ____|____|____|____, vtos, dtos, dload , 0 );299def(Bytecodes::_dload_1 , ____|____|____|____, vtos, dtos, dload , 1 );300def(Bytecodes::_dload_2 , ____|____|____|____, vtos, dtos, dload , 2 );301def(Bytecodes::_dload_3 , ____|____|____|____, vtos, dtos, dload , 3 );302def(Bytecodes::_aload_0 , ubcp|____|clvm|____, vtos, atos, aload_0 , _ );303def(Bytecodes::_aload_1 , ____|____|____|____, vtos, atos, aload , 1 );304def(Bytecodes::_aload_2 , ____|____|____|____, vtos, atos, aload , 2 );305def(Bytecodes::_aload_3 , ____|____|____|____, vtos, atos, aload , 3 );306def(Bytecodes::_iaload , ____|____|____|____, itos, itos, iaload , _ );307def(Bytecodes::_laload , ____|____|____|____, itos, ltos, laload , _ );308def(Bytecodes::_faload , ____|____|____|____, itos, ftos, faload , _ );309def(Bytecodes::_daload , ____|____|____|____, itos, dtos, daload , _ );310def(Bytecodes::_aaload , ____|____|____|____, itos, atos, aaload , _ );311def(Bytecodes::_baload , ____|____|____|____, itos, itos, baload , _ );312def(Bytecodes::_caload , ____|____|____|____, itos, itos, caload , _ );313def(Bytecodes::_saload , ____|____|____|____, itos, itos, saload , _ );314def(Bytecodes::_istore , ubcp|____|clvm|____, itos, vtos, istore , _ );315def(Bytecodes::_lstore , ubcp|____|____|____, ltos, vtos, lstore , _ );316def(Bytecodes::_fstore , ubcp|____|____|____, ftos, vtos, fstore , _ );317def(Bytecodes::_dstore , ubcp|____|____|____, dtos, vtos, dstore , _ );318def(Bytecodes::_astore , ubcp|____|clvm|____, vtos, vtos, astore , _ );319def(Bytecodes::_istore_0 , ____|____|____|____, itos, vtos, istore , 0 );320def(Bytecodes::_istore_1 , ____|____|____|____, itos, vtos, istore , 1 );321def(Bytecodes::_istore_2 , ____|____|____|____, itos, vtos, istore , 2 );322def(Bytecodes::_istore_3 , ____|____|____|____, itos, vtos, istore , 3 );323def(Bytecodes::_lstore_0 , ____|____|____|____, ltos, vtos, lstore , 0 );324def(Bytecodes::_lstore_1 , ____|____|____|____, ltos, vtos, lstore , 1 );325def(Bytecodes::_lstore_2 , ____|____|____|____, ltos, vtos, lstore , 2 );326def(Bytecodes::_lstore_3 , ____|____|____|____, ltos, vtos, lstore , 3 );327def(Bytecodes::_fstore_0 , ____|____|____|____, ftos, vtos, fstore , 0 );328def(Bytecodes::_fstore_1 , ____|____|____|____, ftos, vtos, fstore , 1 );329def(Bytecodes::_fstore_2 , ____|____|____|____, ftos, vtos, fstore , 2 );330def(Bytecodes::_fstore_3 , ____|____|____|____, ftos, vtos, fstore , 3 );331def(Bytecodes::_dstore_0 , ____|____|____|____, dtos, vtos, dstore , 0 );332def(Bytecodes::_dstore_1 , ____|____|____|____, dtos, vtos, dstore , 1 );333def(Bytecodes::_dstore_2 , ____|____|____|____, dtos, vtos, dstore , 2 );334def(Bytecodes::_dstore_3 , ____|____|____|____, dtos, vtos, dstore , 3 );335def(Bytecodes::_astore_0 , ____|____|____|____, vtos, vtos, astore , 0 );336def(Bytecodes::_astore_1 , ____|____|____|____, vtos, vtos, astore , 1 );337def(Bytecodes::_astore_2 , ____|____|____|____, vtos, vtos, astore , 2 );338def(Bytecodes::_astore_3 , ____|____|____|____, vtos, vtos, astore , 3 );339def(Bytecodes::_iastore , ____|____|____|____, itos, vtos, iastore , _ );340def(Bytecodes::_lastore , ____|____|____|____, ltos, vtos, lastore , _ );341def(Bytecodes::_fastore , ____|____|____|____, ftos, vtos, fastore , _ );342def(Bytecodes::_dastore , ____|____|____|____, dtos, vtos, dastore , _ );343def(Bytecodes::_aastore , ____|____|clvm|____, vtos, vtos, aastore , _ );344def(Bytecodes::_bastore , ____|____|____|____, itos, vtos, bastore , _ );345def(Bytecodes::_castore , ____|____|____|____, itos, vtos, castore , _ );346def(Bytecodes::_sastore , ____|____|____|____, itos, vtos, sastore , _ );347def(Bytecodes::_pop , ____|____|____|____, vtos, vtos, pop , _ );348def(Bytecodes::_pop2 , ____|____|____|____, vtos, vtos, pop2 , _ );349def(Bytecodes::_dup , ____|____|____|____, vtos, vtos, dup , _ );350def(Bytecodes::_dup_x1 , ____|____|____|____, vtos, vtos, dup_x1 , _ );351def(Bytecodes::_dup_x2 , ____|____|____|____, vtos, vtos, dup_x2 , _ );352def(Bytecodes::_dup2 , ____|____|____|____, vtos, vtos, dup2 , _ );353def(Bytecodes::_dup2_x1 , ____|____|____|____, vtos, vtos, dup2_x1 , _ );354def(Bytecodes::_dup2_x2 , ____|____|____|____, vtos, vtos, dup2_x2 , _ );355def(Bytecodes::_swap , ____|____|____|____, vtos, vtos, swap , _ );356def(Bytecodes::_iadd , ____|____|____|____, itos, itos, iop2 , add );357def(Bytecodes::_ladd , ____|____|____|____, ltos, ltos, lop2 , add );358def(Bytecodes::_fadd , ____|____|____|____, ftos, ftos, fop2 , add );359def(Bytecodes::_dadd , ____|____|____|____, dtos, dtos, dop2 , add );360def(Bytecodes::_isub , ____|____|____|____, itos, itos, iop2 , sub );361def(Bytecodes::_lsub , ____|____|____|____, ltos, ltos, lop2 , sub );362def(Bytecodes::_fsub , ____|____|____|____, ftos, ftos, fop2 , sub );363def(Bytecodes::_dsub , ____|____|____|____, dtos, dtos, dop2 , sub );364def(Bytecodes::_imul , ____|____|____|____, itos, itos, iop2 , mul );365def(Bytecodes::_lmul , ____|____|____|____, ltos, ltos, lmul , _ );366def(Bytecodes::_fmul , ____|____|____|____, ftos, ftos, fop2 , mul );367def(Bytecodes::_dmul , ____|____|____|____, dtos, dtos, dop2 , mul );368def(Bytecodes::_idiv , ____|____|____|____, itos, itos, idiv , _ );369def(Bytecodes::_ldiv , ____|____|____|____, ltos, ltos, ldiv , _ );370def(Bytecodes::_fdiv , ____|____|____|____, ftos, ftos, fop2 , div );371def(Bytecodes::_ddiv , ____|____|____|____, dtos, dtos, dop2 , div );372def(Bytecodes::_irem , ____|____|____|____, itos, itos, irem , _ );373def(Bytecodes::_lrem , ____|____|____|____, ltos, ltos, lrem , _ );374def(Bytecodes::_frem , ____|____|____|____, ftos, ftos, fop2 , rem );375def(Bytecodes::_drem , ____|____|____|____, dtos, dtos, dop2 , rem );376def(Bytecodes::_ineg , ____|____|____|____, itos, itos, ineg , _ );377def(Bytecodes::_lneg , ____|____|____|____, ltos, ltos, lneg , _ );378def(Bytecodes::_fneg , ____|____|____|____, ftos, ftos, fneg , _ );379def(Bytecodes::_dneg , ____|____|____|____, dtos, dtos, dneg , _ );380def(Bytecodes::_ishl , ____|____|____|____, itos, itos, iop2 , shl );381def(Bytecodes::_lshl , ____|____|____|____, itos, ltos, lshl , _ );382def(Bytecodes::_ishr , ____|____|____|____, itos, itos, iop2 , shr );383def(Bytecodes::_lshr , ____|____|____|____, itos, ltos, lshr , _ );384def(Bytecodes::_iushr , ____|____|____|____, itos, itos, iop2 , ushr );385def(Bytecodes::_lushr , ____|____|____|____, itos, ltos, lushr , _ );386def(Bytecodes::_iand , ____|____|____|____, itos, itos, iop2 , _and );387def(Bytecodes::_land , ____|____|____|____, ltos, ltos, lop2 , _and );388def(Bytecodes::_ior , ____|____|____|____, itos, itos, iop2 , _or );389def(Bytecodes::_lor , ____|____|____|____, ltos, ltos, lop2 , _or );390def(Bytecodes::_ixor , ____|____|____|____, itos, itos, iop2 , _xor );391def(Bytecodes::_lxor , ____|____|____|____, ltos, ltos, lop2 , _xor );392def(Bytecodes::_iinc , ubcp|____|clvm|____, vtos, vtos, iinc , _ );393def(Bytecodes::_i2l , ____|____|____|____, itos, ltos, convert , _ );394def(Bytecodes::_i2f , ____|____|____|____, itos, ftos, convert , _ );395def(Bytecodes::_i2d , ____|____|____|____, itos, dtos, convert , _ );396def(Bytecodes::_l2i , ____|____|____|____, ltos, itos, convert , _ );397def(Bytecodes::_l2f , ____|____|____|____, ltos, ftos, convert , _ );398def(Bytecodes::_l2d , ____|____|____|____, ltos, dtos, convert , _ );399def(Bytecodes::_f2i , ____|____|____|____, ftos, itos, convert , _ );400def(Bytecodes::_f2l , ____|____|____|____, ftos, ltos, convert , _ );401def(Bytecodes::_f2d , ____|____|____|____, ftos, dtos, convert , _ );402def(Bytecodes::_d2i , ____|____|____|____, dtos, itos, convert , _ );403def(Bytecodes::_d2l , ____|____|____|____, dtos, ltos, convert , _ );404def(Bytecodes::_d2f , ____|____|____|____, dtos, ftos, convert , _ );405def(Bytecodes::_i2b , ____|____|____|____, itos, itos, convert , _ );406def(Bytecodes::_i2c , ____|____|____|____, itos, itos, convert , _ );407def(Bytecodes::_i2s , ____|____|____|____, itos, itos, convert , _ );408def(Bytecodes::_lcmp , ____|____|____|____, ltos, itos, lcmp , _ );409def(Bytecodes::_fcmpl , ____|____|____|____, ftos, itos, float_cmp , -1 );410def(Bytecodes::_fcmpg , ____|____|____|____, ftos, itos, float_cmp , 1 );411def(Bytecodes::_dcmpl , ____|____|____|____, dtos, itos, double_cmp , -1 );412def(Bytecodes::_dcmpg , ____|____|____|____, dtos, itos, double_cmp , 1 );413def(Bytecodes::_ifeq , ubcp|____|clvm|____, itos, vtos, if_0cmp , equal );414def(Bytecodes::_ifne , ubcp|____|clvm|____, itos, vtos, if_0cmp , not_equal );415def(Bytecodes::_iflt , ubcp|____|clvm|____, itos, vtos, if_0cmp , less );416def(Bytecodes::_ifge , ubcp|____|clvm|____, itos, vtos, if_0cmp , greater_equal);417def(Bytecodes::_ifgt , ubcp|____|clvm|____, itos, vtos, if_0cmp , greater );418def(Bytecodes::_ifle , ubcp|____|clvm|____, itos, vtos, if_0cmp , less_equal );419def(Bytecodes::_if_icmpeq , ubcp|____|clvm|____, itos, vtos, if_icmp , equal );420def(Bytecodes::_if_icmpne , ubcp|____|clvm|____, itos, vtos, if_icmp , not_equal );421def(Bytecodes::_if_icmplt , ubcp|____|clvm|____, itos, vtos, if_icmp , less );422def(Bytecodes::_if_icmpge , ubcp|____|clvm|____, itos, vtos, if_icmp , greater_equal);423def(Bytecodes::_if_icmpgt , ubcp|____|clvm|____, itos, vtos, if_icmp , greater );424def(Bytecodes::_if_icmple , ubcp|____|clvm|____, itos, vtos, if_icmp , less_equal );425def(Bytecodes::_if_acmpeq , ubcp|____|clvm|____, atos, vtos, if_acmp , equal );426def(Bytecodes::_if_acmpne , ubcp|____|clvm|____, atos, vtos, if_acmp , not_equal );427def(Bytecodes::_goto , ubcp|disp|clvm|____, vtos, vtos, _goto , _ );428def(Bytecodes::_jsr , ubcp|disp|____|____, vtos, vtos, jsr , _ ); // result is not an oop, so do not transition to atos429def(Bytecodes::_ret , ubcp|disp|____|____, vtos, vtos, ret , _ );430def(Bytecodes::_tableswitch , ubcp|disp|____|____, itos, vtos, tableswitch , _ );431def(Bytecodes::_lookupswitch , ubcp|disp|____|____, itos, itos, lookupswitch , _ );432def(Bytecodes::_ireturn , ____|disp|clvm|____, itos, itos, _return , itos );433def(Bytecodes::_lreturn , ____|disp|clvm|____, ltos, ltos, _return , ltos );434def(Bytecodes::_freturn , ____|disp|clvm|____, ftos, ftos, _return , ftos );435def(Bytecodes::_dreturn , ____|disp|clvm|____, dtos, dtos, _return , dtos );436def(Bytecodes::_areturn , ____|disp|clvm|____, atos, atos, _return , atos );437def(Bytecodes::_return , ____|disp|clvm|____, vtos, vtos, _return , vtos );438def(Bytecodes::_getstatic , ubcp|____|clvm|____, vtos, vtos, getstatic , f1_byte );439def(Bytecodes::_putstatic , ubcp|____|clvm|____, vtos, vtos, putstatic , f2_byte );440def(Bytecodes::_getfield , ubcp|____|clvm|____, vtos, vtos, getfield , f1_byte );441def(Bytecodes::_putfield , ubcp|____|clvm|____, vtos, vtos, putfield , f2_byte );442def(Bytecodes::_invokevirtual , ubcp|disp|clvm|____, vtos, vtos, invokevirtual , f2_byte );443def(Bytecodes::_invokespecial , ubcp|disp|clvm|____, vtos, vtos, invokespecial , f1_byte );444def(Bytecodes::_invokestatic , ubcp|disp|clvm|____, vtos, vtos, invokestatic , f1_byte );445def(Bytecodes::_invokeinterface , ubcp|disp|clvm|____, vtos, vtos, invokeinterface , f1_byte );446def(Bytecodes::_invokedynamic , ubcp|disp|clvm|____, vtos, vtos, invokedynamic , f1_byte );447def(Bytecodes::_new , ubcp|____|clvm|____, vtos, atos, _new , _ );448def(Bytecodes::_newarray , ubcp|____|clvm|____, itos, atos, newarray , _ );449def(Bytecodes::_anewarray , ubcp|____|clvm|____, itos, atos, anewarray , _ );450def(Bytecodes::_arraylength , ____|____|____|____, atos, itos, arraylength , _ );451def(Bytecodes::_athrow , ____|disp|____|____, atos, vtos, athrow , _ );452def(Bytecodes::_checkcast , ubcp|____|clvm|____, atos, atos, checkcast , _ );453def(Bytecodes::_instanceof , ubcp|____|clvm|____, atos, itos, instanceof , _ );454def(Bytecodes::_monitorenter , ____|disp|clvm|____, atos, vtos, monitorenter , _ );455def(Bytecodes::_monitorexit , ____|____|clvm|____, atos, vtos, monitorexit , _ );456def(Bytecodes::_wide , ubcp|disp|____|____, vtos, vtos, wide , _ );457def(Bytecodes::_multianewarray , ubcp|____|clvm|____, vtos, atos, multianewarray , _ );458def(Bytecodes::_ifnull , ubcp|____|clvm|____, atos, vtos, if_nullcmp , equal );459def(Bytecodes::_ifnonnull , ubcp|____|clvm|____, atos, vtos, if_nullcmp , not_equal );460def(Bytecodes::_goto_w , ubcp|____|clvm|____, vtos, vtos, goto_w , _ );461def(Bytecodes::_jsr_w , ubcp|____|____|____, vtos, vtos, jsr_w , _ );462463// wide Java spec bytecodes464def(Bytecodes::_iload , ubcp|____|____|iswd, vtos, itos, wide_iload , _ );465def(Bytecodes::_lload , ubcp|____|____|iswd, vtos, ltos, wide_lload , _ );466def(Bytecodes::_fload , ubcp|____|____|iswd, vtos, ftos, wide_fload , _ );467def(Bytecodes::_dload , ubcp|____|____|iswd, vtos, dtos, wide_dload , _ );468def(Bytecodes::_aload , ubcp|____|____|iswd, vtos, atos, wide_aload , _ );469def(Bytecodes::_istore , ubcp|____|____|iswd, vtos, vtos, wide_istore , _ );470def(Bytecodes::_lstore , ubcp|____|____|iswd, vtos, vtos, wide_lstore , _ );471def(Bytecodes::_fstore , ubcp|____|____|iswd, vtos, vtos, wide_fstore , _ );472def(Bytecodes::_dstore , ubcp|____|____|iswd, vtos, vtos, wide_dstore , _ );473def(Bytecodes::_astore , ubcp|____|____|iswd, vtos, vtos, wide_astore , _ );474def(Bytecodes::_iinc , ubcp|____|____|iswd, vtos, vtos, wide_iinc , _ );475def(Bytecodes::_ret , ubcp|disp|____|iswd, vtos, vtos, wide_ret , _ );476def(Bytecodes::_breakpoint , ubcp|disp|clvm|____, vtos, vtos, _breakpoint , _ );477478// JVM bytecodes479def(Bytecodes::_fast_agetfield , ubcp|____|____|____, atos, atos, fast_accessfield , atos );480def(Bytecodes::_fast_bgetfield , ubcp|____|____|____, atos, itos, fast_accessfield , itos );481def(Bytecodes::_fast_cgetfield , ubcp|____|____|____, atos, itos, fast_accessfield , itos );482def(Bytecodes::_fast_dgetfield , ubcp|____|____|____, atos, dtos, fast_accessfield , dtos );483def(Bytecodes::_fast_fgetfield , ubcp|____|____|____, atos, ftos, fast_accessfield , ftos );484def(Bytecodes::_fast_igetfield , ubcp|____|____|____, atos, itos, fast_accessfield , itos );485def(Bytecodes::_fast_lgetfield , ubcp|____|____|____, atos, ltos, fast_accessfield , ltos );486def(Bytecodes::_fast_sgetfield , ubcp|____|____|____, atos, itos, fast_accessfield , itos );487488def(Bytecodes::_fast_aputfield , ubcp|____|____|____, atos, vtos, fast_storefield , atos );489def(Bytecodes::_fast_bputfield , ubcp|____|____|____, itos, vtos, fast_storefield , itos );490def(Bytecodes::_fast_zputfield , ubcp|____|____|____, itos, vtos, fast_storefield , itos );491def(Bytecodes::_fast_cputfield , ubcp|____|____|____, itos, vtos, fast_storefield , itos );492def(Bytecodes::_fast_dputfield , ubcp|____|____|____, dtos, vtos, fast_storefield , dtos );493def(Bytecodes::_fast_fputfield , ubcp|____|____|____, ftos, vtos, fast_storefield , ftos );494def(Bytecodes::_fast_iputfield , ubcp|____|____|____, itos, vtos, fast_storefield , itos );495def(Bytecodes::_fast_lputfield , ubcp|____|____|____, ltos, vtos, fast_storefield , ltos );496def(Bytecodes::_fast_sputfield , ubcp|____|____|____, itos, vtos, fast_storefield , itos );497498def(Bytecodes::_fast_aload_0 , ____|____|____|____, vtos, atos, aload , 0 );499def(Bytecodes::_fast_iaccess_0 , ubcp|____|____|____, vtos, itos, fast_xaccess , itos );500def(Bytecodes::_fast_aaccess_0 , ubcp|____|____|____, vtos, atos, fast_xaccess , atos );501def(Bytecodes::_fast_faccess_0 , ubcp|____|____|____, vtos, ftos, fast_xaccess , ftos );502503def(Bytecodes::_fast_iload , ubcp|____|____|____, vtos, itos, fast_iload , _ );504def(Bytecodes::_fast_iload2 , ubcp|____|____|____, vtos, itos, fast_iload2 , _ );505def(Bytecodes::_fast_icaload , ubcp|____|____|____, vtos, itos, fast_icaload , _ );506507def(Bytecodes::_fast_invokevfinal , ubcp|disp|clvm|____, vtos, vtos, fast_invokevfinal , f2_byte );508509def(Bytecodes::_fast_linearswitch , ubcp|disp|____|____, itos, vtos, fast_linearswitch , _ );510def(Bytecodes::_fast_binaryswitch , ubcp|disp|____|____, itos, vtos, fast_binaryswitch , _ );511512def(Bytecodes::_fast_aldc , ubcp|____|clvm|____, vtos, atos, fast_aldc , false );513def(Bytecodes::_fast_aldc_w , ubcp|____|clvm|____, vtos, atos, fast_aldc , true );514515def(Bytecodes::_return_register_finalizer , ____|disp|clvm|____, vtos, vtos, _return , vtos );516517def(Bytecodes::_invokehandle , ubcp|disp|clvm|____, vtos, vtos, invokehandle , f1_byte );518519def(Bytecodes::_shouldnotreachhere , ____|____|____|____, vtos, vtos, shouldnotreachhere , _ );520// platform specific bytecodes521pd_initialize();522523_is_initialized = true;524}525526#if defined(TEMPLATE_TABLE_BUG)527#undef iload528#undef lload529#undef fload530#undef dload531#undef aload532#undef istore533#undef lstore534#undef fstore535#undef dstore536#undef astore537#endif // TEMPLATE_TABLE_BUG538539540void templateTable_init() {541TemplateTable::initialize();542}543544545void TemplateTable::unimplemented_bc() {546_masm->unimplemented( Bytecodes::name(_desc->bytecode()));547}548#endif /* !CC_INTERP */549550551