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