annotate src/share/vm/interpreter/templateTable.cpp @ 12356:359f7e70ae7f

Reduce HotSpot diff and fix previous merge
author Gilles Duboscq <duboscq@ssw.jku.at>
date Fri, 11 Oct 2013 15:41:33 +0200
parents 5d0bb7d52783
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
a61af66fc99e Initial load
duke
parents:
diff changeset
1 /*
6725
da91efe96a93 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 6266
diff changeset
2 * Copyright (c) 1997, 2012, Oracle and/or its affiliates. All rights reserved.
0
a61af66fc99e Initial load
duke
parents:
diff changeset
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
a61af66fc99e Initial load
duke
parents:
diff changeset
4 *
a61af66fc99e Initial load
duke
parents:
diff changeset
5 * This code is free software; you can redistribute it and/or modify it
a61af66fc99e Initial load
duke
parents:
diff changeset
6 * under the terms of the GNU General Public License version 2 only, as
a61af66fc99e Initial load
duke
parents:
diff changeset
7 * published by the Free Software Foundation.
a61af66fc99e Initial load
duke
parents:
diff changeset
8 *
a61af66fc99e Initial load
duke
parents:
diff changeset
9 * This code is distributed in the hope that it will be useful, but WITHOUT
a61af66fc99e Initial load
duke
parents:
diff changeset
10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
a61af66fc99e Initial load
duke
parents:
diff changeset
11 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
a61af66fc99e Initial load
duke
parents:
diff changeset
12 * version 2 for more details (a copy is included in the LICENSE file that
a61af66fc99e Initial load
duke
parents:
diff changeset
13 * accompanied this code).
a61af66fc99e Initial load
duke
parents:
diff changeset
14 *
a61af66fc99e Initial load
duke
parents:
diff changeset
15 * You should have received a copy of the GNU General Public License version
a61af66fc99e Initial load
duke
parents:
diff changeset
16 * 2 along with this work; if not, write to the Free Software Foundation,
a61af66fc99e Initial load
duke
parents:
diff changeset
17 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
a61af66fc99e Initial load
duke
parents:
diff changeset
18 *
1552
c18cbe5936b8 6941466: Oracle rebranding changes for Hotspot repositories
trims
parents: 844
diff changeset
19 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
c18cbe5936b8 6941466: Oracle rebranding changes for Hotspot repositories
trims
parents: 844
diff changeset
20 * or visit www.oracle.com if you need additional information or have any
c18cbe5936b8 6941466: Oracle rebranding changes for Hotspot repositories
trims
parents: 844
diff changeset
21 * questions.
0
a61af66fc99e Initial load
duke
parents:
diff changeset
22 *
a61af66fc99e Initial load
duke
parents:
diff changeset
23 */
a61af66fc99e Initial load
duke
parents:
diff changeset
24
1972
f95d63e2154a 6989984: Use standard include model for Hospot
stefank
parents: 1602
diff changeset
25 #include "precompiled.hpp"
f95d63e2154a 6989984: Use standard include model for Hospot
stefank
parents: 1602
diff changeset
26 #include "gc_interface/collectedHeap.hpp"
f95d63e2154a 6989984: Use standard include model for Hospot
stefank
parents: 1602
diff changeset
27 #include "interpreter/templateTable.hpp"
f95d63e2154a 6989984: Use standard include model for Hospot
stefank
parents: 1602
diff changeset
28 #include "runtime/timer.hpp"
0
a61af66fc99e Initial load
duke
parents:
diff changeset
29
a61af66fc99e Initial load
duke
parents:
diff changeset
30
a61af66fc99e Initial load
duke
parents:
diff changeset
31 #ifdef CC_INTERP
a61af66fc99e Initial load
duke
parents:
diff changeset
32
a61af66fc99e Initial load
duke
parents:
diff changeset
33 void templateTable_init() {
a61af66fc99e Initial load
duke
parents:
diff changeset
34 }
a61af66fc99e Initial load
duke
parents:
diff changeset
35
a61af66fc99e Initial load
duke
parents:
diff changeset
36 #else
a61af66fc99e Initial load
duke
parents:
diff changeset
37
a61af66fc99e Initial load
duke
parents:
diff changeset
38 //----------------------------------------------------------------------------------------------------
a61af66fc99e Initial load
duke
parents:
diff changeset
39 // Implementation of Template
a61af66fc99e Initial load
duke
parents:
diff changeset
40
a61af66fc99e Initial load
duke
parents:
diff changeset
41
a61af66fc99e Initial load
duke
parents:
diff changeset
42 void Template::initialize(int flags, TosState tos_in, TosState tos_out, generator gen, int arg) {
a61af66fc99e Initial load
duke
parents:
diff changeset
43 _flags = flags;
a61af66fc99e Initial load
duke
parents:
diff changeset
44 _tos_in = tos_in;
a61af66fc99e Initial load
duke
parents:
diff changeset
45 _tos_out = tos_out;
a61af66fc99e Initial load
duke
parents:
diff changeset
46 _gen = gen;
a61af66fc99e Initial load
duke
parents:
diff changeset
47 _arg = arg;
a61af66fc99e Initial load
duke
parents:
diff changeset
48 }
a61af66fc99e Initial load
duke
parents:
diff changeset
49
a61af66fc99e Initial load
duke
parents:
diff changeset
50
a61af66fc99e Initial load
duke
parents:
diff changeset
51 Bytecodes::Code Template::bytecode() const {
a61af66fc99e Initial load
duke
parents:
diff changeset
52 int i = this - TemplateTable::_template_table;
a61af66fc99e Initial load
duke
parents:
diff changeset
53 if (i < 0 || i >= Bytecodes::number_of_codes) i = this - TemplateTable::_template_table_wide;
a61af66fc99e Initial load
duke
parents:
diff changeset
54 return Bytecodes::cast(i);
a61af66fc99e Initial load
duke
parents:
diff changeset
55 }
a61af66fc99e Initial load
duke
parents:
diff changeset
56
a61af66fc99e Initial load
duke
parents:
diff changeset
57
a61af66fc99e Initial load
duke
parents:
diff changeset
58 void Template::generate(InterpreterMacroAssembler* masm) {
a61af66fc99e Initial load
duke
parents:
diff changeset
59 // parameter passing
a61af66fc99e Initial load
duke
parents:
diff changeset
60 TemplateTable::_desc = this;
a61af66fc99e Initial load
duke
parents:
diff changeset
61 TemplateTable::_masm = masm;
a61af66fc99e Initial load
duke
parents:
diff changeset
62 // code generation
a61af66fc99e Initial load
duke
parents:
diff changeset
63 _gen(_arg);
a61af66fc99e Initial load
duke
parents:
diff changeset
64 masm->flush();
a61af66fc99e Initial load
duke
parents:
diff changeset
65 }
a61af66fc99e Initial load
duke
parents:
diff changeset
66
a61af66fc99e Initial load
duke
parents:
diff changeset
67
a61af66fc99e Initial load
duke
parents:
diff changeset
68 //----------------------------------------------------------------------------------------------------
a61af66fc99e Initial load
duke
parents:
diff changeset
69 // Implementation of TemplateTable: Platform-independent helper routines
a61af66fc99e Initial load
duke
parents:
diff changeset
70
a61af66fc99e Initial load
duke
parents:
diff changeset
71 void TemplateTable::call_VM(Register oop_result, address entry_point) {
a61af66fc99e Initial load
duke
parents:
diff changeset
72 assert(_desc->calls_vm(), "inconsistent calls_vm information");
a61af66fc99e Initial load
duke
parents:
diff changeset
73 _masm->call_VM(oop_result, entry_point);
a61af66fc99e Initial load
duke
parents:
diff changeset
74 }
a61af66fc99e Initial load
duke
parents:
diff changeset
75
a61af66fc99e Initial load
duke
parents:
diff changeset
76
a61af66fc99e Initial load
duke
parents:
diff changeset
77 void TemplateTable::call_VM(Register oop_result, address entry_point, Register arg_1) {
a61af66fc99e Initial load
duke
parents:
diff changeset
78 assert(_desc->calls_vm(), "inconsistent calls_vm information");
a61af66fc99e Initial load
duke
parents:
diff changeset
79 _masm->call_VM(oop_result, entry_point, arg_1);
a61af66fc99e Initial load
duke
parents:
diff changeset
80 }
a61af66fc99e Initial load
duke
parents:
diff changeset
81
a61af66fc99e Initial load
duke
parents:
diff changeset
82
a61af66fc99e Initial load
duke
parents:
diff changeset
83 void TemplateTable::call_VM(Register oop_result, address entry_point, Register arg_1, Register arg_2) {
a61af66fc99e Initial load
duke
parents:
diff changeset
84 assert(_desc->calls_vm(), "inconsistent calls_vm information");
a61af66fc99e Initial load
duke
parents:
diff changeset
85 _masm->call_VM(oop_result, entry_point, arg_1, arg_2);
a61af66fc99e Initial load
duke
parents:
diff changeset
86 }
a61af66fc99e Initial load
duke
parents:
diff changeset
87
a61af66fc99e Initial load
duke
parents:
diff changeset
88
a61af66fc99e Initial load
duke
parents:
diff changeset
89 void TemplateTable::call_VM(Register oop_result, address entry_point, Register arg_1, Register arg_2, Register arg_3) {
a61af66fc99e Initial load
duke
parents:
diff changeset
90 assert(_desc->calls_vm(), "inconsistent calls_vm information");
a61af66fc99e Initial load
duke
parents:
diff changeset
91 _masm->call_VM(oop_result, entry_point, arg_1, arg_2, arg_3);
a61af66fc99e Initial load
duke
parents:
diff changeset
92 }
a61af66fc99e Initial load
duke
parents:
diff changeset
93
a61af66fc99e Initial load
duke
parents:
diff changeset
94
a61af66fc99e Initial load
duke
parents:
diff changeset
95 void TemplateTable::call_VM(Register oop_result, Register last_java_sp, address entry_point) {
a61af66fc99e Initial load
duke
parents:
diff changeset
96 assert(_desc->calls_vm(), "inconsistent calls_vm information");
a61af66fc99e Initial load
duke
parents:
diff changeset
97 _masm->call_VM(oop_result, last_java_sp, entry_point);
a61af66fc99e Initial load
duke
parents:
diff changeset
98 }
a61af66fc99e Initial load
duke
parents:
diff changeset
99
a61af66fc99e Initial load
duke
parents:
diff changeset
100
a61af66fc99e Initial load
duke
parents:
diff changeset
101 void TemplateTable::call_VM(Register oop_result, Register last_java_sp, address entry_point, Register arg_1) {
a61af66fc99e Initial load
duke
parents:
diff changeset
102 assert(_desc->calls_vm(), "inconsistent calls_vm information");
a61af66fc99e Initial load
duke
parents:
diff changeset
103 _masm->call_VM(oop_result, last_java_sp, entry_point, arg_1);
a61af66fc99e Initial load
duke
parents:
diff changeset
104 }
a61af66fc99e Initial load
duke
parents:
diff changeset
105
a61af66fc99e Initial load
duke
parents:
diff changeset
106
a61af66fc99e Initial load
duke
parents:
diff changeset
107 void TemplateTable::call_VM(Register oop_result, Register last_java_sp, address entry_point, Register arg_1, Register arg_2) {
a61af66fc99e Initial load
duke
parents:
diff changeset
108 assert(_desc->calls_vm(), "inconsistent calls_vm information");
a61af66fc99e Initial load
duke
parents:
diff changeset
109 _masm->call_VM(oop_result, last_java_sp, entry_point, arg_1, arg_2);
a61af66fc99e Initial load
duke
parents:
diff changeset
110 }
a61af66fc99e Initial load
duke
parents:
diff changeset
111
a61af66fc99e Initial load
duke
parents:
diff changeset
112
a61af66fc99e Initial load
duke
parents:
diff changeset
113 void TemplateTable::call_VM(Register oop_result, Register last_java_sp, address entry_point, Register arg_1, Register arg_2, Register arg_3) {
a61af66fc99e Initial load
duke
parents:
diff changeset
114 assert(_desc->calls_vm(), "inconsistent calls_vm information");
a61af66fc99e Initial load
duke
parents:
diff changeset
115 _masm->call_VM(oop_result, last_java_sp, entry_point, arg_1, arg_2, arg_3);
a61af66fc99e Initial load
duke
parents:
diff changeset
116 }
a61af66fc99e Initial load
duke
parents:
diff changeset
117
a61af66fc99e Initial load
duke
parents:
diff changeset
118
a61af66fc99e Initial load
duke
parents:
diff changeset
119 //----------------------------------------------------------------------------------------------------
a61af66fc99e Initial load
duke
parents:
diff changeset
120 // Implementation of TemplateTable: Platform-independent bytecodes
a61af66fc99e Initial load
duke
parents:
diff changeset
121
a61af66fc99e Initial load
duke
parents:
diff changeset
122 void TemplateTable::float_cmp(int unordered_result) {
a61af66fc99e Initial load
duke
parents:
diff changeset
123 transition(ftos, itos);
a61af66fc99e Initial load
duke
parents:
diff changeset
124 float_cmp(true, unordered_result);
a61af66fc99e Initial load
duke
parents:
diff changeset
125 }
a61af66fc99e Initial load
duke
parents:
diff changeset
126
a61af66fc99e Initial load
duke
parents:
diff changeset
127
a61af66fc99e Initial load
duke
parents:
diff changeset
128 void TemplateTable::double_cmp(int unordered_result) {
a61af66fc99e Initial load
duke
parents:
diff changeset
129 transition(dtos, itos);
a61af66fc99e Initial load
duke
parents:
diff changeset
130 float_cmp(false, unordered_result);
a61af66fc99e Initial load
duke
parents:
diff changeset
131 }
a61af66fc99e Initial load
duke
parents:
diff changeset
132
a61af66fc99e Initial load
duke
parents:
diff changeset
133
a61af66fc99e Initial load
duke
parents:
diff changeset
134 void TemplateTable::_goto() {
a61af66fc99e Initial load
duke
parents:
diff changeset
135 transition(vtos, vtos);
a61af66fc99e Initial load
duke
parents:
diff changeset
136 branch(false, false);
a61af66fc99e Initial load
duke
parents:
diff changeset
137 }
a61af66fc99e Initial load
duke
parents:
diff changeset
138
a61af66fc99e Initial load
duke
parents:
diff changeset
139
a61af66fc99e Initial load
duke
parents:
diff changeset
140 void TemplateTable::goto_w() {
a61af66fc99e Initial load
duke
parents:
diff changeset
141 transition(vtos, vtos);
a61af66fc99e Initial load
duke
parents:
diff changeset
142 branch(false, true);
a61af66fc99e Initial load
duke
parents:
diff changeset
143 }
a61af66fc99e Initial load
duke
parents:
diff changeset
144
a61af66fc99e Initial load
duke
parents:
diff changeset
145
a61af66fc99e Initial load
duke
parents:
diff changeset
146 void TemplateTable::jsr_w() {
a61af66fc99e Initial load
duke
parents:
diff changeset
147 transition(vtos, vtos); // result is not an oop, so do not transition to atos
a61af66fc99e Initial load
duke
parents:
diff changeset
148 branch(true, true);
a61af66fc99e Initial load
duke
parents:
diff changeset
149 }
a61af66fc99e Initial load
duke
parents:
diff changeset
150
a61af66fc99e Initial load
duke
parents:
diff changeset
151
a61af66fc99e Initial load
duke
parents:
diff changeset
152 void TemplateTable::jsr() {
a61af66fc99e Initial load
duke
parents:
diff changeset
153 transition(vtos, vtos); // result is not an oop, so do not transition to atos
a61af66fc99e Initial load
duke
parents:
diff changeset
154 branch(true, false);
a61af66fc99e Initial load
duke
parents:
diff changeset
155 }
a61af66fc99e Initial load
duke
parents:
diff changeset
156
a61af66fc99e Initial load
duke
parents:
diff changeset
157
a61af66fc99e Initial load
duke
parents:
diff changeset
158
a61af66fc99e Initial load
duke
parents:
diff changeset
159 //----------------------------------------------------------------------------------------------------
a61af66fc99e Initial load
duke
parents:
diff changeset
160 // Implementation of TemplateTable: Debugging
a61af66fc99e Initial load
duke
parents:
diff changeset
161
a61af66fc99e Initial load
duke
parents:
diff changeset
162 void TemplateTable::transition(TosState tos_in, TosState tos_out) {
a61af66fc99e Initial load
duke
parents:
diff changeset
163 assert(_desc->tos_in() == tos_in , "inconsistent tos_in information");
a61af66fc99e Initial load
duke
parents:
diff changeset
164 assert(_desc->tos_out() == tos_out, "inconsistent tos_out information");
a61af66fc99e Initial load
duke
parents:
diff changeset
165 }
a61af66fc99e Initial load
duke
parents:
diff changeset
166
a61af66fc99e Initial load
duke
parents:
diff changeset
167
a61af66fc99e Initial load
duke
parents:
diff changeset
168 //----------------------------------------------------------------------------------------------------
a61af66fc99e Initial load
duke
parents:
diff changeset
169 // Implementation of TemplateTable: Initialization
a61af66fc99e Initial load
duke
parents:
diff changeset
170
a61af66fc99e Initial load
duke
parents:
diff changeset
171 bool TemplateTable::_is_initialized = false;
a61af66fc99e Initial load
duke
parents:
diff changeset
172 Template TemplateTable::_template_table [Bytecodes::number_of_codes];
a61af66fc99e Initial load
duke
parents:
diff changeset
173 Template TemplateTable::_template_table_wide[Bytecodes::number_of_codes];
a61af66fc99e Initial load
duke
parents:
diff changeset
174
a61af66fc99e Initial load
duke
parents:
diff changeset
175 Template* TemplateTable::_desc;
a61af66fc99e Initial load
duke
parents:
diff changeset
176 InterpreterMacroAssembler* TemplateTable::_masm;
342
37f87013dfd8 6711316: Open source the Garbage-First garbage collector
ysr
parents: 0
diff changeset
177 BarrierSet* TemplateTable::_bs;
0
a61af66fc99e Initial load
duke
parents:
diff changeset
178
a61af66fc99e Initial load
duke
parents:
diff changeset
179
a61af66fc99e Initial load
duke
parents:
diff changeset
180 void TemplateTable::def(Bytecodes::Code code, int flags, TosState in, TosState out, void (*gen)(), char filler) {
a61af66fc99e Initial load
duke
parents:
diff changeset
181 assert(filler == ' ', "just checkin'");
a61af66fc99e Initial load
duke
parents:
diff changeset
182 def(code, flags, in, out, (Template::generator)gen, 0);
a61af66fc99e Initial load
duke
parents:
diff changeset
183 }
a61af66fc99e Initial load
duke
parents:
diff changeset
184
a61af66fc99e Initial load
duke
parents:
diff changeset
185
a61af66fc99e Initial load
duke
parents:
diff changeset
186 void TemplateTable::def(Bytecodes::Code code, int flags, TosState in, TosState out, void (*gen)(int arg), int arg) {
a61af66fc99e Initial load
duke
parents:
diff changeset
187 // should factor out these constants
a61af66fc99e Initial load
duke
parents:
diff changeset
188 const int ubcp = 1 << Template::uses_bcp_bit;
a61af66fc99e Initial load
duke
parents:
diff changeset
189 const int disp = 1 << Template::does_dispatch_bit;
a61af66fc99e Initial load
duke
parents:
diff changeset
190 const int clvm = 1 << Template::calls_vm_bit;
a61af66fc99e Initial load
duke
parents:
diff changeset
191 const int iswd = 1 << Template::wide_bit;
a61af66fc99e Initial load
duke
parents:
diff changeset
192 // determine which table to use
a61af66fc99e Initial load
duke
parents:
diff changeset
193 bool is_wide = (flags & iswd) != 0;
a61af66fc99e Initial load
duke
parents:
diff changeset
194 // make sure that wide instructions have a vtos entry point
a61af66fc99e Initial load
duke
parents:
diff changeset
195 // (since they are executed extremely rarely, it doesn't pay out to have an
a61af66fc99e Initial load
duke
parents:
diff changeset
196 // extra set of 5 dispatch tables for the wide instructions - for simplicity
a61af66fc99e Initial load
duke
parents:
diff changeset
197 // they all go with one table)
a61af66fc99e Initial load
duke
parents:
diff changeset
198 assert(in == vtos || !is_wide, "wide instructions have vtos entry point only");
a61af66fc99e Initial load
duke
parents:
diff changeset
199 Template* t = is_wide ? template_for_wide(code) : template_for(code);
a61af66fc99e Initial load
duke
parents:
diff changeset
200 // setup entry
a61af66fc99e Initial load
duke
parents:
diff changeset
201 t->initialize(flags, in, out, gen, arg);
a61af66fc99e Initial load
duke
parents:
diff changeset
202 assert(t->bytecode() == code, "just checkin'");
a61af66fc99e Initial load
duke
parents:
diff changeset
203 }
a61af66fc99e Initial load
duke
parents:
diff changeset
204
a61af66fc99e Initial load
duke
parents:
diff changeset
205
a61af66fc99e Initial load
duke
parents:
diff changeset
206 void TemplateTable::def(Bytecodes::Code code, int flags, TosState in, TosState out, void (*gen)(Operation op), Operation op) {
a61af66fc99e Initial load
duke
parents:
diff changeset
207 def(code, flags, in, out, (Template::generator)gen, (int)op);
a61af66fc99e Initial load
duke
parents:
diff changeset
208 }
a61af66fc99e Initial load
duke
parents:
diff changeset
209
a61af66fc99e Initial load
duke
parents:
diff changeset
210
a61af66fc99e Initial load
duke
parents:
diff changeset
211 void TemplateTable::def(Bytecodes::Code code, int flags, TosState in, TosState out, void (*gen)(bool arg ), bool arg) {
a61af66fc99e Initial load
duke
parents:
diff changeset
212 def(code, flags, in, out, (Template::generator)gen, (int)arg);
a61af66fc99e Initial load
duke
parents:
diff changeset
213 }
a61af66fc99e Initial load
duke
parents:
diff changeset
214
a61af66fc99e Initial load
duke
parents:
diff changeset
215
a61af66fc99e Initial load
duke
parents:
diff changeset
216 void TemplateTable::def(Bytecodes::Code code, int flags, TosState in, TosState out, void (*gen)(TosState tos), TosState tos) {
a61af66fc99e Initial load
duke
parents:
diff changeset
217 def(code, flags, in, out, (Template::generator)gen, (int)tos);
a61af66fc99e Initial load
duke
parents:
diff changeset
218 }
a61af66fc99e Initial load
duke
parents:
diff changeset
219
a61af66fc99e Initial load
duke
parents:
diff changeset
220
a61af66fc99e Initial load
duke
parents:
diff changeset
221 void TemplateTable::def(Bytecodes::Code code, int flags, TosState in, TosState out, void (*gen)(Condition cc), Condition cc) {
a61af66fc99e Initial load
duke
parents:
diff changeset
222 def(code, flags, in, out, (Template::generator)gen, (int)cc);
a61af66fc99e Initial load
duke
parents:
diff changeset
223 }
a61af66fc99e Initial load
duke
parents:
diff changeset
224
a61af66fc99e Initial load
duke
parents:
diff changeset
225 #if defined(TEMPLATE_TABLE_BUG)
a61af66fc99e Initial load
duke
parents:
diff changeset
226 //
a61af66fc99e Initial load
duke
parents:
diff changeset
227 // It appears that gcc (version 2.91) generates bad code for the template
a61af66fc99e Initial load
duke
parents:
diff changeset
228 // table init if this macro is not defined. My symptom was an assertion
a61af66fc99e Initial load
duke
parents:
diff changeset
229 // assert(Universe::heap()->is_in(obj), "sanity check") in handles.cpp line 24.
a61af66fc99e Initial load
duke
parents:
diff changeset
230 // when called from interpreterRuntime.resolve_invoke().
a61af66fc99e Initial load
duke
parents:
diff changeset
231 //
a61af66fc99e Initial load
duke
parents:
diff changeset
232 #define iload TemplateTable::iload
a61af66fc99e Initial load
duke
parents:
diff changeset
233 #define lload TemplateTable::lload
a61af66fc99e Initial load
duke
parents:
diff changeset
234 #define fload TemplateTable::fload
a61af66fc99e Initial load
duke
parents:
diff changeset
235 #define dload TemplateTable::dload
a61af66fc99e Initial load
duke
parents:
diff changeset
236 #define aload TemplateTable::aload
a61af66fc99e Initial load
duke
parents:
diff changeset
237 #define istore TemplateTable::istore
a61af66fc99e Initial load
duke
parents:
diff changeset
238 #define lstore TemplateTable::lstore
a61af66fc99e Initial load
duke
parents:
diff changeset
239 #define fstore TemplateTable::fstore
a61af66fc99e Initial load
duke
parents:
diff changeset
240 #define dstore TemplateTable::dstore
a61af66fc99e Initial load
duke
parents:
diff changeset
241 #define astore TemplateTable::astore
a61af66fc99e Initial load
duke
parents:
diff changeset
242 #endif // TEMPLATE_TABLE_BUG
a61af66fc99e Initial load
duke
parents:
diff changeset
243
a61af66fc99e Initial load
duke
parents:
diff changeset
244 void TemplateTable::initialize() {
a61af66fc99e Initial load
duke
parents:
diff changeset
245 if (_is_initialized) return;
a61af66fc99e Initial load
duke
parents:
diff changeset
246
a61af66fc99e Initial load
duke
parents:
diff changeset
247 // Initialize table
a61af66fc99e Initial load
duke
parents:
diff changeset
248 TraceTime timer("TemplateTable initialization", TraceStartupTime);
a61af66fc99e Initial load
duke
parents:
diff changeset
249
342
37f87013dfd8 6711316: Open source the Garbage-First garbage collector
ysr
parents: 0
diff changeset
250 _bs = Universe::heap()->barrier_set();
37f87013dfd8 6711316: Open source the Garbage-First garbage collector
ysr
parents: 0
diff changeset
251
0
a61af66fc99e Initial load
duke
parents:
diff changeset
252 // For better readability
a61af66fc99e Initial load
duke
parents:
diff changeset
253 const char _ = ' ';
a61af66fc99e Initial load
duke
parents:
diff changeset
254 const int ____ = 0;
a61af66fc99e Initial load
duke
parents:
diff changeset
255 const int ubcp = 1 << Template::uses_bcp_bit;
a61af66fc99e Initial load
duke
parents:
diff changeset
256 const int disp = 1 << Template::does_dispatch_bit;
a61af66fc99e Initial load
duke
parents:
diff changeset
257 const int clvm = 1 << Template::calls_vm_bit;
a61af66fc99e Initial load
duke
parents:
diff changeset
258 const int iswd = 1 << Template::wide_bit;
a61af66fc99e Initial load
duke
parents:
diff changeset
259 // interpr. templates
a61af66fc99e Initial load
duke
parents:
diff changeset
260 // Java spec bytecodes ubcp|disp|clvm|iswd in out generator argument
a61af66fc99e Initial load
duke
parents:
diff changeset
261 def(Bytecodes::_nop , ____|____|____|____, vtos, vtos, nop , _ );
a61af66fc99e Initial load
duke
parents:
diff changeset
262 def(Bytecodes::_aconst_null , ____|____|____|____, vtos, atos, aconst_null , _ );
a61af66fc99e Initial load
duke
parents:
diff changeset
263 def(Bytecodes::_iconst_m1 , ____|____|____|____, vtos, itos, iconst , -1 );
a61af66fc99e Initial load
duke
parents:
diff changeset
264 def(Bytecodes::_iconst_0 , ____|____|____|____, vtos, itos, iconst , 0 );
a61af66fc99e Initial load
duke
parents:
diff changeset
265 def(Bytecodes::_iconst_1 , ____|____|____|____, vtos, itos, iconst , 1 );
a61af66fc99e Initial load
duke
parents:
diff changeset
266 def(Bytecodes::_iconst_2 , ____|____|____|____, vtos, itos, iconst , 2 );
a61af66fc99e Initial load
duke
parents:
diff changeset
267 def(Bytecodes::_iconst_3 , ____|____|____|____, vtos, itos, iconst , 3 );
a61af66fc99e Initial load
duke
parents:
diff changeset
268 def(Bytecodes::_iconst_4 , ____|____|____|____, vtos, itos, iconst , 4 );
a61af66fc99e Initial load
duke
parents:
diff changeset
269 def(Bytecodes::_iconst_5 , ____|____|____|____, vtos, itos, iconst , 5 );
a61af66fc99e Initial load
duke
parents:
diff changeset
270 def(Bytecodes::_lconst_0 , ____|____|____|____, vtos, ltos, lconst , 0 );
a61af66fc99e Initial load
duke
parents:
diff changeset
271 def(Bytecodes::_lconst_1 , ____|____|____|____, vtos, ltos, lconst , 1 );
a61af66fc99e Initial load
duke
parents:
diff changeset
272 def(Bytecodes::_fconst_0 , ____|____|____|____, vtos, ftos, fconst , 0 );
a61af66fc99e Initial load
duke
parents:
diff changeset
273 def(Bytecodes::_fconst_1 , ____|____|____|____, vtos, ftos, fconst , 1 );
a61af66fc99e Initial load
duke
parents:
diff changeset
274 def(Bytecodes::_fconst_2 , ____|____|____|____, vtos, ftos, fconst , 2 );
a61af66fc99e Initial load
duke
parents:
diff changeset
275 def(Bytecodes::_dconst_0 , ____|____|____|____, vtos, dtos, dconst , 0 );
a61af66fc99e Initial load
duke
parents:
diff changeset
276 def(Bytecodes::_dconst_1 , ____|____|____|____, vtos, dtos, dconst , 1 );
a61af66fc99e Initial load
duke
parents:
diff changeset
277 def(Bytecodes::_bipush , ubcp|____|____|____, vtos, itos, bipush , _ );
a61af66fc99e Initial load
duke
parents:
diff changeset
278 def(Bytecodes::_sipush , ubcp|____|____|____, vtos, itos, sipush , _ );
a61af66fc99e Initial load
duke
parents:
diff changeset
279 def(Bytecodes::_ldc , ubcp|____|clvm|____, vtos, vtos, ldc , false );
a61af66fc99e Initial load
duke
parents:
diff changeset
280 def(Bytecodes::_ldc_w , ubcp|____|clvm|____, vtos, vtos, ldc , true );
a61af66fc99e Initial load
duke
parents:
diff changeset
281 def(Bytecodes::_ldc2_w , ubcp|____|____|____, vtos, vtos, ldc2_w , _ );
a61af66fc99e Initial load
duke
parents:
diff changeset
282 def(Bytecodes::_iload , ubcp|____|clvm|____, vtos, itos, iload , _ );
a61af66fc99e Initial load
duke
parents:
diff changeset
283 def(Bytecodes::_lload , ubcp|____|____|____, vtos, ltos, lload , _ );
a61af66fc99e Initial load
duke
parents:
diff changeset
284 def(Bytecodes::_fload , ubcp|____|____|____, vtos, ftos, fload , _ );
a61af66fc99e Initial load
duke
parents:
diff changeset
285 def(Bytecodes::_dload , ubcp|____|____|____, vtos, dtos, dload , _ );
a61af66fc99e Initial load
duke
parents:
diff changeset
286 def(Bytecodes::_aload , ubcp|____|clvm|____, vtos, atos, aload , _ );
a61af66fc99e Initial load
duke
parents:
diff changeset
287 def(Bytecodes::_iload_0 , ____|____|____|____, vtos, itos, iload , 0 );
a61af66fc99e Initial load
duke
parents:
diff changeset
288 def(Bytecodes::_iload_1 , ____|____|____|____, vtos, itos, iload , 1 );
a61af66fc99e Initial load
duke
parents:
diff changeset
289 def(Bytecodes::_iload_2 , ____|____|____|____, vtos, itos, iload , 2 );
a61af66fc99e Initial load
duke
parents:
diff changeset
290 def(Bytecodes::_iload_3 , ____|____|____|____, vtos, itos, iload , 3 );
a61af66fc99e Initial load
duke
parents:
diff changeset
291 def(Bytecodes::_lload_0 , ____|____|____|____, vtos, ltos, lload , 0 );
a61af66fc99e Initial load
duke
parents:
diff changeset
292 def(Bytecodes::_lload_1 , ____|____|____|____, vtos, ltos, lload , 1 );
a61af66fc99e Initial load
duke
parents:
diff changeset
293 def(Bytecodes::_lload_2 , ____|____|____|____, vtos, ltos, lload , 2 );
a61af66fc99e Initial load
duke
parents:
diff changeset
294 def(Bytecodes::_lload_3 , ____|____|____|____, vtos, ltos, lload , 3 );
a61af66fc99e Initial load
duke
parents:
diff changeset
295 def(Bytecodes::_fload_0 , ____|____|____|____, vtos, ftos, fload , 0 );
a61af66fc99e Initial load
duke
parents:
diff changeset
296 def(Bytecodes::_fload_1 , ____|____|____|____, vtos, ftos, fload , 1 );
a61af66fc99e Initial load
duke
parents:
diff changeset
297 def(Bytecodes::_fload_2 , ____|____|____|____, vtos, ftos, fload , 2 );
a61af66fc99e Initial load
duke
parents:
diff changeset
298 def(Bytecodes::_fload_3 , ____|____|____|____, vtos, ftos, fload , 3 );
a61af66fc99e Initial load
duke
parents:
diff changeset
299 def(Bytecodes::_dload_0 , ____|____|____|____, vtos, dtos, dload , 0 );
a61af66fc99e Initial load
duke
parents:
diff changeset
300 def(Bytecodes::_dload_1 , ____|____|____|____, vtos, dtos, dload , 1 );
a61af66fc99e Initial load
duke
parents:
diff changeset
301 def(Bytecodes::_dload_2 , ____|____|____|____, vtos, dtos, dload , 2 );
a61af66fc99e Initial load
duke
parents:
diff changeset
302 def(Bytecodes::_dload_3 , ____|____|____|____, vtos, dtos, dload , 3 );
a61af66fc99e Initial load
duke
parents:
diff changeset
303 def(Bytecodes::_aload_0 , ubcp|____|clvm|____, vtos, atos, aload_0 , _ );
a61af66fc99e Initial load
duke
parents:
diff changeset
304 def(Bytecodes::_aload_1 , ____|____|____|____, vtos, atos, aload , 1 );
a61af66fc99e Initial load
duke
parents:
diff changeset
305 def(Bytecodes::_aload_2 , ____|____|____|____, vtos, atos, aload , 2 );
a61af66fc99e Initial load
duke
parents:
diff changeset
306 def(Bytecodes::_aload_3 , ____|____|____|____, vtos, atos, aload , 3 );
a61af66fc99e Initial load
duke
parents:
diff changeset
307 def(Bytecodes::_iaload , ____|____|____|____, itos, itos, iaload , _ );
a61af66fc99e Initial load
duke
parents:
diff changeset
308 def(Bytecodes::_laload , ____|____|____|____, itos, ltos, laload , _ );
a61af66fc99e Initial load
duke
parents:
diff changeset
309 def(Bytecodes::_faload , ____|____|____|____, itos, ftos, faload , _ );
a61af66fc99e Initial load
duke
parents:
diff changeset
310 def(Bytecodes::_daload , ____|____|____|____, itos, dtos, daload , _ );
a61af66fc99e Initial load
duke
parents:
diff changeset
311 def(Bytecodes::_aaload , ____|____|____|____, itos, atos, aaload , _ );
a61af66fc99e Initial load
duke
parents:
diff changeset
312 def(Bytecodes::_baload , ____|____|____|____, itos, itos, baload , _ );
a61af66fc99e Initial load
duke
parents:
diff changeset
313 def(Bytecodes::_caload , ____|____|____|____, itos, itos, caload , _ );
a61af66fc99e Initial load
duke
parents:
diff changeset
314 def(Bytecodes::_saload , ____|____|____|____, itos, itos, saload , _ );
a61af66fc99e Initial load
duke
parents:
diff changeset
315 def(Bytecodes::_istore , ubcp|____|clvm|____, itos, vtos, istore , _ );
a61af66fc99e Initial load
duke
parents:
diff changeset
316 def(Bytecodes::_lstore , ubcp|____|____|____, ltos, vtos, lstore , _ );
a61af66fc99e Initial load
duke
parents:
diff changeset
317 def(Bytecodes::_fstore , ubcp|____|____|____, ftos, vtos, fstore , _ );
a61af66fc99e Initial load
duke
parents:
diff changeset
318 def(Bytecodes::_dstore , ubcp|____|____|____, dtos, vtos, dstore , _ );
a61af66fc99e Initial load
duke
parents:
diff changeset
319 def(Bytecodes::_astore , ubcp|____|clvm|____, vtos, vtos, astore , _ );
a61af66fc99e Initial load
duke
parents:
diff changeset
320 def(Bytecodes::_istore_0 , ____|____|____|____, itos, vtos, istore , 0 );
a61af66fc99e Initial load
duke
parents:
diff changeset
321 def(Bytecodes::_istore_1 , ____|____|____|____, itos, vtos, istore , 1 );
a61af66fc99e Initial load
duke
parents:
diff changeset
322 def(Bytecodes::_istore_2 , ____|____|____|____, itos, vtos, istore , 2 );
a61af66fc99e Initial load
duke
parents:
diff changeset
323 def(Bytecodes::_istore_3 , ____|____|____|____, itos, vtos, istore , 3 );
a61af66fc99e Initial load
duke
parents:
diff changeset
324 def(Bytecodes::_lstore_0 , ____|____|____|____, ltos, vtos, lstore , 0 );
a61af66fc99e Initial load
duke
parents:
diff changeset
325 def(Bytecodes::_lstore_1 , ____|____|____|____, ltos, vtos, lstore , 1 );
a61af66fc99e Initial load
duke
parents:
diff changeset
326 def(Bytecodes::_lstore_2 , ____|____|____|____, ltos, vtos, lstore , 2 );
a61af66fc99e Initial load
duke
parents:
diff changeset
327 def(Bytecodes::_lstore_3 , ____|____|____|____, ltos, vtos, lstore , 3 );
a61af66fc99e Initial load
duke
parents:
diff changeset
328 def(Bytecodes::_fstore_0 , ____|____|____|____, ftos, vtos, fstore , 0 );
a61af66fc99e Initial load
duke
parents:
diff changeset
329 def(Bytecodes::_fstore_1 , ____|____|____|____, ftos, vtos, fstore , 1 );
a61af66fc99e Initial load
duke
parents:
diff changeset
330 def(Bytecodes::_fstore_2 , ____|____|____|____, ftos, vtos, fstore , 2 );
a61af66fc99e Initial load
duke
parents:
diff changeset
331 def(Bytecodes::_fstore_3 , ____|____|____|____, ftos, vtos, fstore , 3 );
a61af66fc99e Initial load
duke
parents:
diff changeset
332 def(Bytecodes::_dstore_0 , ____|____|____|____, dtos, vtos, dstore , 0 );
a61af66fc99e Initial load
duke
parents:
diff changeset
333 def(Bytecodes::_dstore_1 , ____|____|____|____, dtos, vtos, dstore , 1 );
a61af66fc99e Initial load
duke
parents:
diff changeset
334 def(Bytecodes::_dstore_2 , ____|____|____|____, dtos, vtos, dstore , 2 );
a61af66fc99e Initial load
duke
parents:
diff changeset
335 def(Bytecodes::_dstore_3 , ____|____|____|____, dtos, vtos, dstore , 3 );
a61af66fc99e Initial load
duke
parents:
diff changeset
336 def(Bytecodes::_astore_0 , ____|____|____|____, vtos, vtos, astore , 0 );
a61af66fc99e Initial load
duke
parents:
diff changeset
337 def(Bytecodes::_astore_1 , ____|____|____|____, vtos, vtos, astore , 1 );
a61af66fc99e Initial load
duke
parents:
diff changeset
338 def(Bytecodes::_astore_2 , ____|____|____|____, vtos, vtos, astore , 2 );
a61af66fc99e Initial load
duke
parents:
diff changeset
339 def(Bytecodes::_astore_3 , ____|____|____|____, vtos, vtos, astore , 3 );
a61af66fc99e Initial load
duke
parents:
diff changeset
340 def(Bytecodes::_iastore , ____|____|____|____, itos, vtos, iastore , _ );
a61af66fc99e Initial load
duke
parents:
diff changeset
341 def(Bytecodes::_lastore , ____|____|____|____, ltos, vtos, lastore , _ );
a61af66fc99e Initial load
duke
parents:
diff changeset
342 def(Bytecodes::_fastore , ____|____|____|____, ftos, vtos, fastore , _ );
a61af66fc99e Initial load
duke
parents:
diff changeset
343 def(Bytecodes::_dastore , ____|____|____|____, dtos, vtos, dastore , _ );
a61af66fc99e Initial load
duke
parents:
diff changeset
344 def(Bytecodes::_aastore , ____|____|clvm|____, vtos, vtos, aastore , _ );
a61af66fc99e Initial load
duke
parents:
diff changeset
345 def(Bytecodes::_bastore , ____|____|____|____, itos, vtos, bastore , _ );
a61af66fc99e Initial load
duke
parents:
diff changeset
346 def(Bytecodes::_castore , ____|____|____|____, itos, vtos, castore , _ );
a61af66fc99e Initial load
duke
parents:
diff changeset
347 def(Bytecodes::_sastore , ____|____|____|____, itos, vtos, sastore , _ );
a61af66fc99e Initial load
duke
parents:
diff changeset
348 def(Bytecodes::_pop , ____|____|____|____, vtos, vtos, pop , _ );
a61af66fc99e Initial load
duke
parents:
diff changeset
349 def(Bytecodes::_pop2 , ____|____|____|____, vtos, vtos, pop2 , _ );
a61af66fc99e Initial load
duke
parents:
diff changeset
350 def(Bytecodes::_dup , ____|____|____|____, vtos, vtos, dup , _ );
a61af66fc99e Initial load
duke
parents:
diff changeset
351 def(Bytecodes::_dup_x1 , ____|____|____|____, vtos, vtos, dup_x1 , _ );
a61af66fc99e Initial load
duke
parents:
diff changeset
352 def(Bytecodes::_dup_x2 , ____|____|____|____, vtos, vtos, dup_x2 , _ );
a61af66fc99e Initial load
duke
parents:
diff changeset
353 def(Bytecodes::_dup2 , ____|____|____|____, vtos, vtos, dup2 , _ );
a61af66fc99e Initial load
duke
parents:
diff changeset
354 def(Bytecodes::_dup2_x1 , ____|____|____|____, vtos, vtos, dup2_x1 , _ );
a61af66fc99e Initial load
duke
parents:
diff changeset
355 def(Bytecodes::_dup2_x2 , ____|____|____|____, vtos, vtos, dup2_x2 , _ );
a61af66fc99e Initial load
duke
parents:
diff changeset
356 def(Bytecodes::_swap , ____|____|____|____, vtos, vtos, swap , _ );
a61af66fc99e Initial load
duke
parents:
diff changeset
357 def(Bytecodes::_iadd , ____|____|____|____, itos, itos, iop2 , add );
a61af66fc99e Initial load
duke
parents:
diff changeset
358 def(Bytecodes::_ladd , ____|____|____|____, ltos, ltos, lop2 , add );
a61af66fc99e Initial load
duke
parents:
diff changeset
359 def(Bytecodes::_fadd , ____|____|____|____, ftos, ftos, fop2 , add );
a61af66fc99e Initial load
duke
parents:
diff changeset
360 def(Bytecodes::_dadd , ____|____|____|____, dtos, dtos, dop2 , add );
a61af66fc99e Initial load
duke
parents:
diff changeset
361 def(Bytecodes::_isub , ____|____|____|____, itos, itos, iop2 , sub );
a61af66fc99e Initial load
duke
parents:
diff changeset
362 def(Bytecodes::_lsub , ____|____|____|____, ltos, ltos, lop2 , sub );
a61af66fc99e Initial load
duke
parents:
diff changeset
363 def(Bytecodes::_fsub , ____|____|____|____, ftos, ftos, fop2 , sub );
a61af66fc99e Initial load
duke
parents:
diff changeset
364 def(Bytecodes::_dsub , ____|____|____|____, dtos, dtos, dop2 , sub );
a61af66fc99e Initial load
duke
parents:
diff changeset
365 def(Bytecodes::_imul , ____|____|____|____, itos, itos, iop2 , mul );
a61af66fc99e Initial load
duke
parents:
diff changeset
366 def(Bytecodes::_lmul , ____|____|____|____, ltos, ltos, lmul , _ );
a61af66fc99e Initial load
duke
parents:
diff changeset
367 def(Bytecodes::_fmul , ____|____|____|____, ftos, ftos, fop2 , mul );
a61af66fc99e Initial load
duke
parents:
diff changeset
368 def(Bytecodes::_dmul , ____|____|____|____, dtos, dtos, dop2 , mul );
a61af66fc99e Initial load
duke
parents:
diff changeset
369 def(Bytecodes::_idiv , ____|____|____|____, itos, itos, idiv , _ );
a61af66fc99e Initial load
duke
parents:
diff changeset
370 def(Bytecodes::_ldiv , ____|____|____|____, ltos, ltos, ldiv , _ );
a61af66fc99e Initial load
duke
parents:
diff changeset
371 def(Bytecodes::_fdiv , ____|____|____|____, ftos, ftos, fop2 , div );
a61af66fc99e Initial load
duke
parents:
diff changeset
372 def(Bytecodes::_ddiv , ____|____|____|____, dtos, dtos, dop2 , div );
a61af66fc99e Initial load
duke
parents:
diff changeset
373 def(Bytecodes::_irem , ____|____|____|____, itos, itos, irem , _ );
a61af66fc99e Initial load
duke
parents:
diff changeset
374 def(Bytecodes::_lrem , ____|____|____|____, ltos, ltos, lrem , _ );
a61af66fc99e Initial load
duke
parents:
diff changeset
375 def(Bytecodes::_frem , ____|____|____|____, ftos, ftos, fop2 , rem );
a61af66fc99e Initial load
duke
parents:
diff changeset
376 def(Bytecodes::_drem , ____|____|____|____, dtos, dtos, dop2 , rem );
a61af66fc99e Initial load
duke
parents:
diff changeset
377 def(Bytecodes::_ineg , ____|____|____|____, itos, itos, ineg , _ );
a61af66fc99e Initial load
duke
parents:
diff changeset
378 def(Bytecodes::_lneg , ____|____|____|____, ltos, ltos, lneg , _ );
a61af66fc99e Initial load
duke
parents:
diff changeset
379 def(Bytecodes::_fneg , ____|____|____|____, ftos, ftos, fneg , _ );
a61af66fc99e Initial load
duke
parents:
diff changeset
380 def(Bytecodes::_dneg , ____|____|____|____, dtos, dtos, dneg , _ );
a61af66fc99e Initial load
duke
parents:
diff changeset
381 def(Bytecodes::_ishl , ____|____|____|____, itos, itos, iop2 , shl );
a61af66fc99e Initial load
duke
parents:
diff changeset
382 def(Bytecodes::_lshl , ____|____|____|____, itos, ltos, lshl , _ );
a61af66fc99e Initial load
duke
parents:
diff changeset
383 def(Bytecodes::_ishr , ____|____|____|____, itos, itos, iop2 , shr );
a61af66fc99e Initial load
duke
parents:
diff changeset
384 def(Bytecodes::_lshr , ____|____|____|____, itos, ltos, lshr , _ );
a61af66fc99e Initial load
duke
parents:
diff changeset
385 def(Bytecodes::_iushr , ____|____|____|____, itos, itos, iop2 , ushr );
a61af66fc99e Initial load
duke
parents:
diff changeset
386 def(Bytecodes::_lushr , ____|____|____|____, itos, ltos, lushr , _ );
a61af66fc99e Initial load
duke
parents:
diff changeset
387 def(Bytecodes::_iand , ____|____|____|____, itos, itos, iop2 , _and );
a61af66fc99e Initial load
duke
parents:
diff changeset
388 def(Bytecodes::_land , ____|____|____|____, ltos, ltos, lop2 , _and );
a61af66fc99e Initial load
duke
parents:
diff changeset
389 def(Bytecodes::_ior , ____|____|____|____, itos, itos, iop2 , _or );
a61af66fc99e Initial load
duke
parents:
diff changeset
390 def(Bytecodes::_lor , ____|____|____|____, ltos, ltos, lop2 , _or );
a61af66fc99e Initial load
duke
parents:
diff changeset
391 def(Bytecodes::_ixor , ____|____|____|____, itos, itos, iop2 , _xor );
a61af66fc99e Initial load
duke
parents:
diff changeset
392 def(Bytecodes::_lxor , ____|____|____|____, ltos, ltos, lop2 , _xor );
a61af66fc99e Initial load
duke
parents:
diff changeset
393 def(Bytecodes::_iinc , ubcp|____|clvm|____, vtos, vtos, iinc , _ );
a61af66fc99e Initial load
duke
parents:
diff changeset
394 def(Bytecodes::_i2l , ____|____|____|____, itos, ltos, convert , _ );
a61af66fc99e Initial load
duke
parents:
diff changeset
395 def(Bytecodes::_i2f , ____|____|____|____, itos, ftos, convert , _ );
a61af66fc99e Initial load
duke
parents:
diff changeset
396 def(Bytecodes::_i2d , ____|____|____|____, itos, dtos, convert , _ );
a61af66fc99e Initial load
duke
parents:
diff changeset
397 def(Bytecodes::_l2i , ____|____|____|____, ltos, itos, convert , _ );
a61af66fc99e Initial load
duke
parents:
diff changeset
398 def(Bytecodes::_l2f , ____|____|____|____, ltos, ftos, convert , _ );
a61af66fc99e Initial load
duke
parents:
diff changeset
399 def(Bytecodes::_l2d , ____|____|____|____, ltos, dtos, convert , _ );
a61af66fc99e Initial load
duke
parents:
diff changeset
400 def(Bytecodes::_f2i , ____|____|____|____, ftos, itos, convert , _ );
a61af66fc99e Initial load
duke
parents:
diff changeset
401 def(Bytecodes::_f2l , ____|____|____|____, ftos, ltos, convert , _ );
a61af66fc99e Initial load
duke
parents:
diff changeset
402 def(Bytecodes::_f2d , ____|____|____|____, ftos, dtos, convert , _ );
a61af66fc99e Initial load
duke
parents:
diff changeset
403 def(Bytecodes::_d2i , ____|____|____|____, dtos, itos, convert , _ );
a61af66fc99e Initial load
duke
parents:
diff changeset
404 def(Bytecodes::_d2l , ____|____|____|____, dtos, ltos, convert , _ );
a61af66fc99e Initial load
duke
parents:
diff changeset
405 def(Bytecodes::_d2f , ____|____|____|____, dtos, ftos, convert , _ );
a61af66fc99e Initial load
duke
parents:
diff changeset
406 def(Bytecodes::_i2b , ____|____|____|____, itos, itos, convert , _ );
a61af66fc99e Initial load
duke
parents:
diff changeset
407 def(Bytecodes::_i2c , ____|____|____|____, itos, itos, convert , _ );
a61af66fc99e Initial load
duke
parents:
diff changeset
408 def(Bytecodes::_i2s , ____|____|____|____, itos, itos, convert , _ );
a61af66fc99e Initial load
duke
parents:
diff changeset
409 def(Bytecodes::_lcmp , ____|____|____|____, ltos, itos, lcmp , _ );
a61af66fc99e Initial load
duke
parents:
diff changeset
410 def(Bytecodes::_fcmpl , ____|____|____|____, ftos, itos, float_cmp , -1 );
a61af66fc99e Initial load
duke
parents:
diff changeset
411 def(Bytecodes::_fcmpg , ____|____|____|____, ftos, itos, float_cmp , 1 );
a61af66fc99e Initial load
duke
parents:
diff changeset
412 def(Bytecodes::_dcmpl , ____|____|____|____, dtos, itos, double_cmp , -1 );
a61af66fc99e Initial load
duke
parents:
diff changeset
413 def(Bytecodes::_dcmpg , ____|____|____|____, dtos, itos, double_cmp , 1 );
a61af66fc99e Initial load
duke
parents:
diff changeset
414 def(Bytecodes::_ifeq , ubcp|____|clvm|____, itos, vtos, if_0cmp , equal );
a61af66fc99e Initial load
duke
parents:
diff changeset
415 def(Bytecodes::_ifne , ubcp|____|clvm|____, itos, vtos, if_0cmp , not_equal );
a61af66fc99e Initial load
duke
parents:
diff changeset
416 def(Bytecodes::_iflt , ubcp|____|clvm|____, itos, vtos, if_0cmp , less );
a61af66fc99e Initial load
duke
parents:
diff changeset
417 def(Bytecodes::_ifge , ubcp|____|clvm|____, itos, vtos, if_0cmp , greater_equal);
a61af66fc99e Initial load
duke
parents:
diff changeset
418 def(Bytecodes::_ifgt , ubcp|____|clvm|____, itos, vtos, if_0cmp , greater );
a61af66fc99e Initial load
duke
parents:
diff changeset
419 def(Bytecodes::_ifle , ubcp|____|clvm|____, itos, vtos, if_0cmp , less_equal );
a61af66fc99e Initial load
duke
parents:
diff changeset
420 def(Bytecodes::_if_icmpeq , ubcp|____|clvm|____, itos, vtos, if_icmp , equal );
a61af66fc99e Initial load
duke
parents:
diff changeset
421 def(Bytecodes::_if_icmpne , ubcp|____|clvm|____, itos, vtos, if_icmp , not_equal );
a61af66fc99e Initial load
duke
parents:
diff changeset
422 def(Bytecodes::_if_icmplt , ubcp|____|clvm|____, itos, vtos, if_icmp , less );
a61af66fc99e Initial load
duke
parents:
diff changeset
423 def(Bytecodes::_if_icmpge , ubcp|____|clvm|____, itos, vtos, if_icmp , greater_equal);
a61af66fc99e Initial load
duke
parents:
diff changeset
424 def(Bytecodes::_if_icmpgt , ubcp|____|clvm|____, itos, vtos, if_icmp , greater );
a61af66fc99e Initial load
duke
parents:
diff changeset
425 def(Bytecodes::_if_icmple , ubcp|____|clvm|____, itos, vtos, if_icmp , less_equal );
a61af66fc99e Initial load
duke
parents:
diff changeset
426 def(Bytecodes::_if_acmpeq , ubcp|____|clvm|____, atos, vtos, if_acmp , equal );
a61af66fc99e Initial load
duke
parents:
diff changeset
427 def(Bytecodes::_if_acmpne , ubcp|____|clvm|____, atos, vtos, if_acmp , not_equal );
a61af66fc99e Initial load
duke
parents:
diff changeset
428 def(Bytecodes::_goto , ubcp|disp|clvm|____, vtos, vtos, _goto , _ );
a61af66fc99e Initial load
duke
parents:
diff changeset
429 def(Bytecodes::_jsr , ubcp|disp|____|____, vtos, vtos, jsr , _ ); // result is not an oop, so do not transition to atos
a61af66fc99e Initial load
duke
parents:
diff changeset
430 def(Bytecodes::_ret , ubcp|disp|____|____, vtos, vtos, ret , _ );
a61af66fc99e Initial load
duke
parents:
diff changeset
431 def(Bytecodes::_tableswitch , ubcp|disp|____|____, itos, vtos, tableswitch , _ );
a61af66fc99e Initial load
duke
parents:
diff changeset
432 def(Bytecodes::_lookupswitch , ubcp|disp|____|____, itos, itos, lookupswitch , _ );
a61af66fc99e Initial load
duke
parents:
diff changeset
433 def(Bytecodes::_ireturn , ____|disp|clvm|____, itos, itos, _return , itos );
a61af66fc99e Initial load
duke
parents:
diff changeset
434 def(Bytecodes::_lreturn , ____|disp|clvm|____, ltos, ltos, _return , ltos );
a61af66fc99e Initial load
duke
parents:
diff changeset
435 def(Bytecodes::_freturn , ____|disp|clvm|____, ftos, ftos, _return , ftos );
a61af66fc99e Initial load
duke
parents:
diff changeset
436 def(Bytecodes::_dreturn , ____|disp|clvm|____, dtos, dtos, _return , dtos );
a61af66fc99e Initial load
duke
parents:
diff changeset
437 def(Bytecodes::_areturn , ____|disp|clvm|____, atos, atos, _return , atos );
a61af66fc99e Initial load
duke
parents:
diff changeset
438 def(Bytecodes::_return , ____|disp|clvm|____, vtos, vtos, _return , vtos );
1565
ab102d5d923e 6939207: refactor constant pool index processing
jrose
parents: 844
diff changeset
439 def(Bytecodes::_getstatic , ubcp|____|clvm|____, vtos, vtos, getstatic , f1_byte );
ab102d5d923e 6939207: refactor constant pool index processing
jrose
parents: 844
diff changeset
440 def(Bytecodes::_putstatic , ubcp|____|clvm|____, vtos, vtos, putstatic , f2_byte );
ab102d5d923e 6939207: refactor constant pool index processing
jrose
parents: 844
diff changeset
441 def(Bytecodes::_getfield , ubcp|____|clvm|____, vtos, vtos, getfield , f1_byte );
ab102d5d923e 6939207: refactor constant pool index processing
jrose
parents: 844
diff changeset
442 def(Bytecodes::_putfield , ubcp|____|clvm|____, vtos, vtos, putfield , f2_byte );
ab102d5d923e 6939207: refactor constant pool index processing
jrose
parents: 844
diff changeset
443 def(Bytecodes::_invokevirtual , ubcp|disp|clvm|____, vtos, vtos, invokevirtual , f2_byte );
ab102d5d923e 6939207: refactor constant pool index processing
jrose
parents: 844
diff changeset
444 def(Bytecodes::_invokespecial , ubcp|disp|clvm|____, vtos, vtos, invokespecial , f1_byte );
ab102d5d923e 6939207: refactor constant pool index processing
jrose
parents: 844
diff changeset
445 def(Bytecodes::_invokestatic , ubcp|disp|clvm|____, vtos, vtos, invokestatic , f1_byte );
ab102d5d923e 6939207: refactor constant pool index processing
jrose
parents: 844
diff changeset
446 def(Bytecodes::_invokeinterface , ubcp|disp|clvm|____, vtos, vtos, invokeinterface , f1_byte );
6725
da91efe96a93 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 6266
diff changeset
447 def(Bytecodes::_invokedynamic , ubcp|disp|clvm|____, vtos, vtos, invokedynamic , f1_byte );
0
a61af66fc99e Initial load
duke
parents:
diff changeset
448 def(Bytecodes::_new , ubcp|____|clvm|____, vtos, atos, _new , _ );
a61af66fc99e Initial load
duke
parents:
diff changeset
449 def(Bytecodes::_newarray , ubcp|____|clvm|____, itos, atos, newarray , _ );
a61af66fc99e Initial load
duke
parents:
diff changeset
450 def(Bytecodes::_anewarray , ubcp|____|clvm|____, itos, atos, anewarray , _ );
a61af66fc99e Initial load
duke
parents:
diff changeset
451 def(Bytecodes::_arraylength , ____|____|____|____, atos, itos, arraylength , _ );
a61af66fc99e Initial load
duke
parents:
diff changeset
452 def(Bytecodes::_athrow , ____|disp|____|____, atos, vtos, athrow , _ );
a61af66fc99e Initial load
duke
parents:
diff changeset
453 def(Bytecodes::_checkcast , ubcp|____|clvm|____, atos, atos, checkcast , _ );
a61af66fc99e Initial load
duke
parents:
diff changeset
454 def(Bytecodes::_instanceof , ubcp|____|clvm|____, atos, itos, instanceof , _ );
a61af66fc99e Initial load
duke
parents:
diff changeset
455 def(Bytecodes::_monitorenter , ____|disp|clvm|____, atos, vtos, monitorenter , _ );
a61af66fc99e Initial load
duke
parents:
diff changeset
456 def(Bytecodes::_monitorexit , ____|____|clvm|____, atos, vtos, monitorexit , _ );
a61af66fc99e Initial load
duke
parents:
diff changeset
457 def(Bytecodes::_wide , ubcp|disp|____|____, vtos, vtos, wide , _ );
a61af66fc99e Initial load
duke
parents:
diff changeset
458 def(Bytecodes::_multianewarray , ubcp|____|clvm|____, vtos, atos, multianewarray , _ );
a61af66fc99e Initial load
duke
parents:
diff changeset
459 def(Bytecodes::_ifnull , ubcp|____|clvm|____, atos, vtos, if_nullcmp , equal );
a61af66fc99e Initial load
duke
parents:
diff changeset
460 def(Bytecodes::_ifnonnull , ubcp|____|clvm|____, atos, vtos, if_nullcmp , not_equal );
a61af66fc99e Initial load
duke
parents:
diff changeset
461 def(Bytecodes::_goto_w , ubcp|____|clvm|____, vtos, vtos, goto_w , _ );
a61af66fc99e Initial load
duke
parents:
diff changeset
462 def(Bytecodes::_jsr_w , ubcp|____|____|____, vtos, vtos, jsr_w , _ );
a61af66fc99e Initial load
duke
parents:
diff changeset
463
a61af66fc99e Initial load
duke
parents:
diff changeset
464 // wide Java spec bytecodes
a61af66fc99e Initial load
duke
parents:
diff changeset
465 def(Bytecodes::_iload , ubcp|____|____|iswd, vtos, itos, wide_iload , _ );
a61af66fc99e Initial load
duke
parents:
diff changeset
466 def(Bytecodes::_lload , ubcp|____|____|iswd, vtos, ltos, wide_lload , _ );
a61af66fc99e Initial load
duke
parents:
diff changeset
467 def(Bytecodes::_fload , ubcp|____|____|iswd, vtos, ftos, wide_fload , _ );
a61af66fc99e Initial load
duke
parents:
diff changeset
468 def(Bytecodes::_dload , ubcp|____|____|iswd, vtos, dtos, wide_dload , _ );
a61af66fc99e Initial load
duke
parents:
diff changeset
469 def(Bytecodes::_aload , ubcp|____|____|iswd, vtos, atos, wide_aload , _ );
a61af66fc99e Initial load
duke
parents:
diff changeset
470 def(Bytecodes::_istore , ubcp|____|____|iswd, vtos, vtos, wide_istore , _ );
a61af66fc99e Initial load
duke
parents:
diff changeset
471 def(Bytecodes::_lstore , ubcp|____|____|iswd, vtos, vtos, wide_lstore , _ );
a61af66fc99e Initial load
duke
parents:
diff changeset
472 def(Bytecodes::_fstore , ubcp|____|____|iswd, vtos, vtos, wide_fstore , _ );
a61af66fc99e Initial load
duke
parents:
diff changeset
473 def(Bytecodes::_dstore , ubcp|____|____|iswd, vtos, vtos, wide_dstore , _ );
a61af66fc99e Initial load
duke
parents:
diff changeset
474 def(Bytecodes::_astore , ubcp|____|____|iswd, vtos, vtos, wide_astore , _ );
a61af66fc99e Initial load
duke
parents:
diff changeset
475 def(Bytecodes::_iinc , ubcp|____|____|iswd, vtos, vtos, wide_iinc , _ );
a61af66fc99e Initial load
duke
parents:
diff changeset
476 def(Bytecodes::_ret , ubcp|disp|____|iswd, vtos, vtos, wide_ret , _ );
a61af66fc99e Initial load
duke
parents:
diff changeset
477 def(Bytecodes::_breakpoint , ubcp|disp|clvm|____, vtos, vtos, _breakpoint , _ );
a61af66fc99e Initial load
duke
parents:
diff changeset
478
a61af66fc99e Initial load
duke
parents:
diff changeset
479 // JVM bytecodes
a61af66fc99e Initial load
duke
parents:
diff changeset
480 def(Bytecodes::_fast_agetfield , ubcp|____|____|____, atos, atos, fast_accessfield , atos );
a61af66fc99e Initial load
duke
parents:
diff changeset
481 def(Bytecodes::_fast_bgetfield , ubcp|____|____|____, atos, itos, fast_accessfield , itos );
a61af66fc99e Initial load
duke
parents:
diff changeset
482 def(Bytecodes::_fast_cgetfield , ubcp|____|____|____, atos, itos, fast_accessfield , itos );
a61af66fc99e Initial load
duke
parents:
diff changeset
483 def(Bytecodes::_fast_dgetfield , ubcp|____|____|____, atos, dtos, fast_accessfield , dtos );
a61af66fc99e Initial load
duke
parents:
diff changeset
484 def(Bytecodes::_fast_fgetfield , ubcp|____|____|____, atos, ftos, fast_accessfield , ftos );
a61af66fc99e Initial load
duke
parents:
diff changeset
485 def(Bytecodes::_fast_igetfield , ubcp|____|____|____, atos, itos, fast_accessfield , itos );
a61af66fc99e Initial load
duke
parents:
diff changeset
486 def(Bytecodes::_fast_lgetfield , ubcp|____|____|____, atos, ltos, fast_accessfield , ltos );
a61af66fc99e Initial load
duke
parents:
diff changeset
487 def(Bytecodes::_fast_sgetfield , ubcp|____|____|____, atos, itos, fast_accessfield , itos );
a61af66fc99e Initial load
duke
parents:
diff changeset
488
a61af66fc99e Initial load
duke
parents:
diff changeset
489 def(Bytecodes::_fast_aputfield , ubcp|____|____|____, atos, vtos, fast_storefield , atos );
a61af66fc99e Initial load
duke
parents:
diff changeset
490 def(Bytecodes::_fast_bputfield , ubcp|____|____|____, itos, vtos, fast_storefield , itos );
a61af66fc99e Initial load
duke
parents:
diff changeset
491 def(Bytecodes::_fast_cputfield , ubcp|____|____|____, itos, vtos, fast_storefield , itos );
a61af66fc99e Initial load
duke
parents:
diff changeset
492 def(Bytecodes::_fast_dputfield , ubcp|____|____|____, dtos, vtos, fast_storefield , dtos );
a61af66fc99e Initial load
duke
parents:
diff changeset
493 def(Bytecodes::_fast_fputfield , ubcp|____|____|____, ftos, vtos, fast_storefield , ftos );
a61af66fc99e Initial load
duke
parents:
diff changeset
494 def(Bytecodes::_fast_iputfield , ubcp|____|____|____, itos, vtos, fast_storefield , itos );
a61af66fc99e Initial load
duke
parents:
diff changeset
495 def(Bytecodes::_fast_lputfield , ubcp|____|____|____, ltos, vtos, fast_storefield , ltos );
a61af66fc99e Initial load
duke
parents:
diff changeset
496 def(Bytecodes::_fast_sputfield , ubcp|____|____|____, itos, vtos, fast_storefield , itos );
a61af66fc99e Initial load
duke
parents:
diff changeset
497
a61af66fc99e Initial load
duke
parents:
diff changeset
498 def(Bytecodes::_fast_aload_0 , ____|____|____|____, vtos, atos, aload , 0 );
a61af66fc99e Initial load
duke
parents:
diff changeset
499 def(Bytecodes::_fast_iaccess_0 , ubcp|____|____|____, vtos, itos, fast_xaccess , itos );
a61af66fc99e Initial load
duke
parents:
diff changeset
500 def(Bytecodes::_fast_aaccess_0 , ubcp|____|____|____, vtos, atos, fast_xaccess , atos );
a61af66fc99e Initial load
duke
parents:
diff changeset
501 def(Bytecodes::_fast_faccess_0 , ubcp|____|____|____, vtos, ftos, fast_xaccess , ftos );
a61af66fc99e Initial load
duke
parents:
diff changeset
502
a61af66fc99e Initial load
duke
parents:
diff changeset
503 def(Bytecodes::_fast_iload , ubcp|____|____|____, vtos, itos, fast_iload , _ );
a61af66fc99e Initial load
duke
parents:
diff changeset
504 def(Bytecodes::_fast_iload2 , ubcp|____|____|____, vtos, itos, fast_iload2 , _ );
a61af66fc99e Initial load
duke
parents:
diff changeset
505 def(Bytecodes::_fast_icaload , ubcp|____|____|____, vtos, itos, fast_icaload , _ );
a61af66fc99e Initial load
duke
parents:
diff changeset
506
1565
ab102d5d923e 6939207: refactor constant pool index processing
jrose
parents: 844
diff changeset
507 def(Bytecodes::_fast_invokevfinal , ubcp|disp|clvm|____, vtos, vtos, fast_invokevfinal , f2_byte );
0
a61af66fc99e Initial load
duke
parents:
diff changeset
508
a61af66fc99e Initial load
duke
parents:
diff changeset
509 def(Bytecodes::_fast_linearswitch , ubcp|disp|____|____, itos, vtos, fast_linearswitch , _ );
a61af66fc99e Initial load
duke
parents:
diff changeset
510 def(Bytecodes::_fast_binaryswitch , ubcp|disp|____|____, itos, vtos, fast_binaryswitch , _ );
a61af66fc99e Initial load
duke
parents:
diff changeset
511
1602
136b78722a08 6939203: JSR 292 needs method handle constants
jrose
parents: 1579
diff changeset
512 def(Bytecodes::_fast_aldc , ubcp|____|clvm|____, vtos, atos, fast_aldc , false );
136b78722a08 6939203: JSR 292 needs method handle constants
jrose
parents: 1579
diff changeset
513 def(Bytecodes::_fast_aldc_w , ubcp|____|clvm|____, vtos, atos, fast_aldc , true );
136b78722a08 6939203: JSR 292 needs method handle constants
jrose
parents: 1579
diff changeset
514
0
a61af66fc99e Initial load
duke
parents:
diff changeset
515 def(Bytecodes::_return_register_finalizer , ____|disp|clvm|____, vtos, vtos, _return , vtos );
a61af66fc99e Initial load
duke
parents:
diff changeset
516
6725
da91efe96a93 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 6266
diff changeset
517 def(Bytecodes::_invokehandle , ubcp|disp|clvm|____, vtos, vtos, invokehandle , f1_byte );
6266
1d7922586cf6 7023639: JSR 292 method handle invocation needs a fast path for compiled code
twisti
parents: 1972
diff changeset
518
0
a61af66fc99e Initial load
duke
parents:
diff changeset
519 def(Bytecodes::_shouldnotreachhere , ____|____|____|____, vtos, vtos, shouldnotreachhere , _ );
a61af66fc99e Initial load
duke
parents:
diff changeset
520 // platform specific bytecodes
a61af66fc99e Initial load
duke
parents:
diff changeset
521 pd_initialize();
a61af66fc99e Initial load
duke
parents:
diff changeset
522
a61af66fc99e Initial load
duke
parents:
diff changeset
523 _is_initialized = true;
a61af66fc99e Initial load
duke
parents:
diff changeset
524 }
a61af66fc99e Initial load
duke
parents:
diff changeset
525
a61af66fc99e Initial load
duke
parents:
diff changeset
526 #if defined(TEMPLATE_TABLE_BUG)
a61af66fc99e Initial load
duke
parents:
diff changeset
527 #undef iload
a61af66fc99e Initial load
duke
parents:
diff changeset
528 #undef lload
a61af66fc99e Initial load
duke
parents:
diff changeset
529 #undef fload
a61af66fc99e Initial load
duke
parents:
diff changeset
530 #undef dload
a61af66fc99e Initial load
duke
parents:
diff changeset
531 #undef aload
a61af66fc99e Initial load
duke
parents:
diff changeset
532 #undef istore
a61af66fc99e Initial load
duke
parents:
diff changeset
533 #undef lstore
a61af66fc99e Initial load
duke
parents:
diff changeset
534 #undef fstore
a61af66fc99e Initial load
duke
parents:
diff changeset
535 #undef dstore
a61af66fc99e Initial load
duke
parents:
diff changeset
536 #undef astore
a61af66fc99e Initial load
duke
parents:
diff changeset
537 #endif // TEMPLATE_TABLE_BUG
a61af66fc99e Initial load
duke
parents:
diff changeset
538
a61af66fc99e Initial load
duke
parents:
diff changeset
539
a61af66fc99e Initial load
duke
parents:
diff changeset
540 void templateTable_init() {
a61af66fc99e Initial load
duke
parents:
diff changeset
541 TemplateTable::initialize();
a61af66fc99e Initial load
duke
parents:
diff changeset
542 }
a61af66fc99e Initial load
duke
parents:
diff changeset
543
a61af66fc99e Initial load
duke
parents:
diff changeset
544
a61af66fc99e Initial load
duke
parents:
diff changeset
545 void TemplateTable::unimplemented_bc() {
a61af66fc99e Initial load
duke
parents:
diff changeset
546 _masm->unimplemented( Bytecodes::name(_desc->bytecode()));
a61af66fc99e Initial load
duke
parents:
diff changeset
547 }
a61af66fc99e Initial load
duke
parents:
diff changeset
548 #endif /* !CC_INTERP */