Mercurial > hg > truffle
annotate graal/com.oracle.graal.java/src/com/oracle/graal/java/AbstractBytecodeParser.java @ 18187:9619ba4daf4c
Rename Constant to JavaConstant.
author | Roland Schatz <roland.schatz@oracle.com> |
---|---|
date | Thu, 30 Oct 2014 12:21:07 +0100 |
parents | e3f3233ec6cd |
children | 6ac7e9c85be6 |
rev | line source |
---|---|
14854 | 1 /* |
2 * Copyright (c) 2014, 2014, 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 | |
14818
3d04915a55c6
added kindinterface for valuenode and variable and started to generalize some methods used for bytecodeparsing
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
24 package com.oracle.graal.java; |
3d04915a55c6
added kindinterface for valuenode and variable and started to generalize some methods used for bytecodeparsing
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
25 |
14893
f97c85e6366d
Finished cleaning up BytecodeParseHelper abstract base class.
Josef Eisl <josef.eisl@jku.at>
parents:
14892
diff
changeset
|
26 import static com.oracle.graal.api.code.TypeCheckHints.*; |
14818
3d04915a55c6
added kindinterface for valuenode and variable and started to generalize some methods used for bytecodeparsing
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
27 import static com.oracle.graal.bytecode.Bytecodes.*; |
16841
cbd42807a31f
moved NodeInfo and friends into separate com.oracle.graal.nodeinfo project so that annotation processor can be applied to the base Node class
Doug Simon <doug.simon@oracle.com>
parents:
16036
diff
changeset
|
28 |
14892
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
29 import java.util.*; |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
30 |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
31 import com.oracle.graal.api.code.*; |
14818
3d04915a55c6
added kindinterface for valuenode and variable and started to generalize some methods used for bytecodeparsing
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
32 import com.oracle.graal.api.meta.*; |
14892
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
33 import com.oracle.graal.api.meta.ProfilingInfo.TriState; |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
34 import com.oracle.graal.api.meta.ResolvedJavaType.Representation; |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
35 import com.oracle.graal.bytecode.*; |
15193
96bb07a5d667
Spit up and move GraalInternalError.
Josef Eisl <josef.eisl@jku.at>
parents:
15031
diff
changeset
|
36 import com.oracle.graal.compiler.common.*; |
15200
97eed257999b
Move Condition to graal.compiler.common.
Josef Eisl <josef.eisl@jku.at>
parents:
15193
diff
changeset
|
37 import com.oracle.graal.compiler.common.calc.*; |
14892
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
38 import com.oracle.graal.debug.*; |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
39 import com.oracle.graal.java.BciBlockMapping.BciBlock; |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
40 import com.oracle.graal.nodes.*; |
14922
ea57ed7085cf
Move options from GraphBuilderPhase to AbstractBytecodeParser.
Josef Eisl <josef.eisl@jku.at>
parents:
14902
diff
changeset
|
41 import com.oracle.graal.options.*; |
14893
f97c85e6366d
Finished cleaning up BytecodeParseHelper abstract base class.
Josef Eisl <josef.eisl@jku.at>
parents:
14892
diff
changeset
|
42 import com.oracle.graal.phases.*; |
14818
3d04915a55c6
added kindinterface for valuenode and variable and started to generalize some methods used for bytecodeparsing
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
43 |
15031
14e542e27076
Lift implementation from HIRFrameStateBuilder up to AbstractFrameStateBuilder if possible.
Josef Eisl <josef.eisl@jku.at>
parents:
15030
diff
changeset
|
44 public abstract class AbstractBytecodeParser<T extends KindProvider, F extends AbstractFrameStateBuilder<T, F>> { |
14818
3d04915a55c6
added kindinterface for valuenode and variable and started to generalize some methods used for bytecodeparsing
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
45 |
14922
ea57ed7085cf
Move options from GraphBuilderPhase to AbstractBytecodeParser.
Josef Eisl <josef.eisl@jku.at>
parents:
14902
diff
changeset
|
46 static class Options { |
ea57ed7085cf
Move options from GraphBuilderPhase to AbstractBytecodeParser.
Josef Eisl <josef.eisl@jku.at>
parents:
14902
diff
changeset
|
47 // @formatter:off |
ea57ed7085cf
Move options from GraphBuilderPhase to AbstractBytecodeParser.
Josef Eisl <josef.eisl@jku.at>
parents:
14902
diff
changeset
|
48 @Option(help = "The trace level for the bytecode parser used when building a graph from bytecode") |
ea57ed7085cf
Move options from GraphBuilderPhase to AbstractBytecodeParser.
Josef Eisl <josef.eisl@jku.at>
parents:
14902
diff
changeset
|
49 public static final OptionValue<Integer> TraceBytecodeParserLevel = new OptionValue<>(0); |
ea57ed7085cf
Move options from GraphBuilderPhase to AbstractBytecodeParser.
Josef Eisl <josef.eisl@jku.at>
parents:
14902
diff
changeset
|
50 // @formatter:on |
ea57ed7085cf
Move options from GraphBuilderPhase to AbstractBytecodeParser.
Josef Eisl <josef.eisl@jku.at>
parents:
14902
diff
changeset
|
51 } |
ea57ed7085cf
Move options from GraphBuilderPhase to AbstractBytecodeParser.
Josef Eisl <josef.eisl@jku.at>
parents:
14902
diff
changeset
|
52 |
ea57ed7085cf
Move options from GraphBuilderPhase to AbstractBytecodeParser.
Josef Eisl <josef.eisl@jku.at>
parents:
14902
diff
changeset
|
53 /** |
ea57ed7085cf
Move options from GraphBuilderPhase to AbstractBytecodeParser.
Josef Eisl <josef.eisl@jku.at>
parents:
14902
diff
changeset
|
54 * The minimum value to which {@link Options#TraceBytecodeParserLevel} must be set to trace the |
ea57ed7085cf
Move options from GraphBuilderPhase to AbstractBytecodeParser.
Josef Eisl <josef.eisl@jku.at>
parents:
14902
diff
changeset
|
55 * bytecode instructions as they are parsed. |
ea57ed7085cf
Move options from GraphBuilderPhase to AbstractBytecodeParser.
Josef Eisl <josef.eisl@jku.at>
parents:
14902
diff
changeset
|
56 */ |
ea57ed7085cf
Move options from GraphBuilderPhase to AbstractBytecodeParser.
Josef Eisl <josef.eisl@jku.at>
parents:
14902
diff
changeset
|
57 public static final int TRACELEVEL_INSTRUCTIONS = 1; |
ea57ed7085cf
Move options from GraphBuilderPhase to AbstractBytecodeParser.
Josef Eisl <josef.eisl@jku.at>
parents:
14902
diff
changeset
|
58 |
ea57ed7085cf
Move options from GraphBuilderPhase to AbstractBytecodeParser.
Josef Eisl <josef.eisl@jku.at>
parents:
14902
diff
changeset
|
59 /** |
ea57ed7085cf
Move options from GraphBuilderPhase to AbstractBytecodeParser.
Josef Eisl <josef.eisl@jku.at>
parents:
14902
diff
changeset
|
60 * The minimum value to which {@link Options#TraceBytecodeParserLevel} must be set to trace the |
ea57ed7085cf
Move options from GraphBuilderPhase to AbstractBytecodeParser.
Josef Eisl <josef.eisl@jku.at>
parents:
14902
diff
changeset
|
61 * frame state before each bytecode instruction as it is parsed. |
ea57ed7085cf
Move options from GraphBuilderPhase to AbstractBytecodeParser.
Josef Eisl <josef.eisl@jku.at>
parents:
14902
diff
changeset
|
62 */ |
ea57ed7085cf
Move options from GraphBuilderPhase to AbstractBytecodeParser.
Josef Eisl <josef.eisl@jku.at>
parents:
14902
diff
changeset
|
63 public static final int TRACELEVEL_STATE = 2; |
ea57ed7085cf
Move options from GraphBuilderPhase to AbstractBytecodeParser.
Josef Eisl <josef.eisl@jku.at>
parents:
14902
diff
changeset
|
64 |
14900
be4c28683c08
Moved bytecode parsing from GraphBuilderPhase to BytecodeParseHelper.
Josef Eisl <josef.eisl@jku.at>
parents:
14899
diff
changeset
|
65 protected F frameState; |
14928
302d7b447d38
Rename KindInterface to KindProvider.
Josef Eisl <josef.eisl@jku.at>
parents:
14922
diff
changeset
|
66 protected BytecodeStream stream; |
17131
4e15850b67bb
Make liveness analysis configurable by graph builder configuration
Christian Wimmer <christian.wimmer@oracle.com>
parents:
16886
diff
changeset
|
67 protected GraphBuilderConfiguration graphBuilderConfig; |
14900
be4c28683c08
Moved bytecode parsing from GraphBuilderPhase to BytecodeParseHelper.
Josef Eisl <josef.eisl@jku.at>
parents:
14899
diff
changeset
|
68 protected ResolvedJavaMethod method; |
be4c28683c08
Moved bytecode parsing from GraphBuilderPhase to BytecodeParseHelper.
Josef Eisl <josef.eisl@jku.at>
parents:
14899
diff
changeset
|
69 protected BciBlock currentBlock; |
be4c28683c08
Moved bytecode parsing from GraphBuilderPhase to BytecodeParseHelper.
Josef Eisl <josef.eisl@jku.at>
parents:
14899
diff
changeset
|
70 protected ProfilingInfo profilingInfo; |
be4c28683c08
Moved bytecode parsing from GraphBuilderPhase to BytecodeParseHelper.
Josef Eisl <josef.eisl@jku.at>
parents:
14899
diff
changeset
|
71 protected OptimisticOptimizations optimisticOpts; |
be4c28683c08
Moved bytecode parsing from GraphBuilderPhase to BytecodeParseHelper.
Josef Eisl <josef.eisl@jku.at>
parents:
14899
diff
changeset
|
72 protected ConstantPool constantPool; |
14893
f97c85e6366d
Finished cleaning up BytecodeParseHelper abstract base class.
Josef Eisl <josef.eisl@jku.at>
parents:
14892
diff
changeset
|
73 private final MetaAccessProvider metaAccess; |
14900
be4c28683c08
Moved bytecode parsing from GraphBuilderPhase to BytecodeParseHelper.
Josef Eisl <josef.eisl@jku.at>
parents:
14899
diff
changeset
|
74 protected int entryBCI; |
14892
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
75 |
14922
ea57ed7085cf
Move options from GraphBuilderPhase to AbstractBytecodeParser.
Josef Eisl <josef.eisl@jku.at>
parents:
14902
diff
changeset
|
76 /** |
ea57ed7085cf
Move options from GraphBuilderPhase to AbstractBytecodeParser.
Josef Eisl <josef.eisl@jku.at>
parents:
14902
diff
changeset
|
77 * Meters the number of actual bytecodes parsed. |
ea57ed7085cf
Move options from GraphBuilderPhase to AbstractBytecodeParser.
Josef Eisl <josef.eisl@jku.at>
parents:
14902
diff
changeset
|
78 */ |
ea57ed7085cf
Move options from GraphBuilderPhase to AbstractBytecodeParser.
Josef Eisl <josef.eisl@jku.at>
parents:
14902
diff
changeset
|
79 public static final DebugMetric BytecodesParsed = Debug.metric("BytecodesParsed"); |
ea57ed7085cf
Move options from GraphBuilderPhase to AbstractBytecodeParser.
Josef Eisl <josef.eisl@jku.at>
parents:
14902
diff
changeset
|
80 |
14902
c25b121d36ec
Rename BytecodeParseHelper to AbstractBytecodeParser.
Josef Eisl <josef.eisl@jku.at>
parents:
14901
diff
changeset
|
81 public AbstractBytecodeParser(MetaAccessProvider metaAccess, ResolvedJavaMethod method, GraphBuilderConfiguration graphBuilderConfig, OptimisticOptimizations optimisticOpts, F frameState, |
14900
be4c28683c08
Moved bytecode parsing from GraphBuilderPhase to BytecodeParseHelper.
Josef Eisl <josef.eisl@jku.at>
parents:
14899
diff
changeset
|
82 BytecodeStream stream, ProfilingInfo profilingInfo, ConstantPool constantPool, int entryBCI) { |
14818
3d04915a55c6
added kindinterface for valuenode and variable and started to generalize some methods used for bytecodeparsing
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
83 this.frameState = frameState; |
14893
f97c85e6366d
Finished cleaning up BytecodeParseHelper abstract base class.
Josef Eisl <josef.eisl@jku.at>
parents:
14892
diff
changeset
|
84 this.graphBuilderConfig = graphBuilderConfig; |
f97c85e6366d
Finished cleaning up BytecodeParseHelper abstract base class.
Josef Eisl <josef.eisl@jku.at>
parents:
14892
diff
changeset
|
85 this.optimisticOpts = optimisticOpts; |
f97c85e6366d
Finished cleaning up BytecodeParseHelper abstract base class.
Josef Eisl <josef.eisl@jku.at>
parents:
14892
diff
changeset
|
86 this.metaAccess = metaAccess; |
14896
89be1673acd8
BytecodeParseHelper initialize members.
Josef Eisl <josef.eisl@jku.at>
parents:
14895
diff
changeset
|
87 this.stream = stream; |
89be1673acd8
BytecodeParseHelper initialize members.
Josef Eisl <josef.eisl@jku.at>
parents:
14895
diff
changeset
|
88 this.profilingInfo = profilingInfo; |
89be1673acd8
BytecodeParseHelper initialize members.
Josef Eisl <josef.eisl@jku.at>
parents:
14895
diff
changeset
|
89 this.constantPool = constantPool; |
14900
be4c28683c08
Moved bytecode parsing from GraphBuilderPhase to BytecodeParseHelper.
Josef Eisl <josef.eisl@jku.at>
parents:
14899
diff
changeset
|
90 this.entryBCI = entryBCI; |
be4c28683c08
Moved bytecode parsing from GraphBuilderPhase to BytecodeParseHelper.
Josef Eisl <josef.eisl@jku.at>
parents:
14899
diff
changeset
|
91 this.method = method; |
14893
f97c85e6366d
Finished cleaning up BytecodeParseHelper abstract base class.
Josef Eisl <josef.eisl@jku.at>
parents:
14892
diff
changeset
|
92 assert metaAccess != null; |
14818
3d04915a55c6
added kindinterface for valuenode and variable and started to generalize some methods used for bytecodeparsing
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
93 } |
3d04915a55c6
added kindinterface for valuenode and variable and started to generalize some methods used for bytecodeparsing
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
94 |
14900
be4c28683c08
Moved bytecode parsing from GraphBuilderPhase to BytecodeParseHelper.
Josef Eisl <josef.eisl@jku.at>
parents:
14899
diff
changeset
|
95 /** |
be4c28683c08
Moved bytecode parsing from GraphBuilderPhase to BytecodeParseHelper.
Josef Eisl <josef.eisl@jku.at>
parents:
14899
diff
changeset
|
96 * Start the bytecode parser. |
be4c28683c08
Moved bytecode parsing from GraphBuilderPhase to BytecodeParseHelper.
Josef Eisl <josef.eisl@jku.at>
parents:
14899
diff
changeset
|
97 */ |
14899 | 98 protected abstract void build(); |
99 | |
14900
be4c28683c08
Moved bytecode parsing from GraphBuilderPhase to BytecodeParseHelper.
Josef Eisl <josef.eisl@jku.at>
parents:
14899
diff
changeset
|
100 public void setCurrentFrameState(F frameState) { |
14818
3d04915a55c6
added kindinterface for valuenode and variable and started to generalize some methods used for bytecodeparsing
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
101 this.frameState = frameState; |
3d04915a55c6
added kindinterface for valuenode and variable and started to generalize some methods used for bytecodeparsing
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
102 } |
3d04915a55c6
added kindinterface for valuenode and variable and started to generalize some methods used for bytecodeparsing
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
103 |
14892
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
104 public final void setStream(BytecodeStream stream) { |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
105 this.stream = stream; |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
106 } |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
107 |
14900
be4c28683c08
Moved bytecode parsing from GraphBuilderPhase to BytecodeParseHelper.
Josef Eisl <josef.eisl@jku.at>
parents:
14899
diff
changeset
|
108 protected final BytecodeStream getStream() { |
14892
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
109 return stream; |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
110 } |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
111 |
14893
f97c85e6366d
Finished cleaning up BytecodeParseHelper abstract base class.
Josef Eisl <josef.eisl@jku.at>
parents:
14892
diff
changeset
|
112 protected int bci() { |
f97c85e6366d
Finished cleaning up BytecodeParseHelper abstract base class.
Josef Eisl <josef.eisl@jku.at>
parents:
14892
diff
changeset
|
113 return stream.currentBCI(); |
f97c85e6366d
Finished cleaning up BytecodeParseHelper abstract base class.
Josef Eisl <josef.eisl@jku.at>
parents:
14892
diff
changeset
|
114 } |
f97c85e6366d
Finished cleaning up BytecodeParseHelper abstract base class.
Josef Eisl <josef.eisl@jku.at>
parents:
14892
diff
changeset
|
115 |
14818
3d04915a55c6
added kindinterface for valuenode and variable and started to generalize some methods used for bytecodeparsing
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
116 public void loadLocal(int index, Kind kind) { |
3d04915a55c6
added kindinterface for valuenode and variable and started to generalize some methods used for bytecodeparsing
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
117 frameState.push(kind, frameState.loadLocal(index)); |
3d04915a55c6
added kindinterface for valuenode and variable and started to generalize some methods used for bytecodeparsing
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
118 } |
3d04915a55c6
added kindinterface for valuenode and variable and started to generalize some methods used for bytecodeparsing
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
119 |
14895
d76fce67b49d
Created BaselineCompiler BytecodeParser inner class.
Josef Eisl <josef.eisl@jku.at>
parents:
14894
diff
changeset
|
120 public void storeLocal(Kind kind, int index) { |
14818
3d04915a55c6
added kindinterface for valuenode and variable and started to generalize some methods used for bytecodeparsing
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
121 T value; |
3d04915a55c6
added kindinterface for valuenode and variable and started to generalize some methods used for bytecodeparsing
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
122 if (kind == Kind.Object) { |
3d04915a55c6
added kindinterface for valuenode and variable and started to generalize some methods used for bytecodeparsing
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
123 value = frameState.xpop(); |
3d04915a55c6
added kindinterface for valuenode and variable and started to generalize some methods used for bytecodeparsing
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
124 // astore and astore_<n> may be used to store a returnAddress (jsr) |
3d04915a55c6
added kindinterface for valuenode and variable and started to generalize some methods used for bytecodeparsing
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
125 assert value.getKind() == Kind.Object || value.getKind() == Kind.Int; |
3d04915a55c6
added kindinterface for valuenode and variable and started to generalize some methods used for bytecodeparsing
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
126 } else { |
3d04915a55c6
added kindinterface for valuenode and variable and started to generalize some methods used for bytecodeparsing
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
127 value = frameState.pop(kind); |
3d04915a55c6
added kindinterface for valuenode and variable and started to generalize some methods used for bytecodeparsing
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
128 } |
3d04915a55c6
added kindinterface for valuenode and variable and started to generalize some methods used for bytecodeparsing
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
129 frameState.storeLocal(index, value); |
3d04915a55c6
added kindinterface for valuenode and variable and started to generalize some methods used for bytecodeparsing
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
130 } |
3d04915a55c6
added kindinterface for valuenode and variable and started to generalize some methods used for bytecodeparsing
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
131 |
14892
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
132 /** |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
133 * @param type the unresolved type of the constant |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
134 */ |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
135 protected abstract void handleUnresolvedLoadConstant(JavaType type); |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
136 |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
137 /** |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
138 * @param type the unresolved type of the type check |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
139 * @param object the object value whose type is being checked against {@code type} |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
140 */ |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
141 protected abstract void handleUnresolvedCheckCast(JavaType type, T object); |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
142 |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
143 /** |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
144 * @param type the unresolved type of the type check |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
145 * @param object the object value whose type is being checked against {@code type} |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
146 */ |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
147 protected abstract void handleUnresolvedInstanceOf(JavaType type, T object); |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
148 |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
149 /** |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
150 * @param type the type being instantiated |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
151 */ |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
152 protected abstract void handleUnresolvedNewInstance(JavaType type); |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
153 |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
154 /** |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
155 * @param type the type of the array being instantiated |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
156 * @param length the length of the array |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
157 */ |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
158 protected abstract void handleUnresolvedNewObjectArray(JavaType type, T length); |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
159 |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
160 /** |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
161 * @param type the type being instantiated |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
162 * @param dims the dimensions for the multi-array |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
163 */ |
14893
f97c85e6366d
Finished cleaning up BytecodeParseHelper abstract base class.
Josef Eisl <josef.eisl@jku.at>
parents:
14892
diff
changeset
|
164 protected abstract void handleUnresolvedNewMultiArray(JavaType type, List<T> dims); |
14892
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
165 |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
166 /** |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
167 * @param field the unresolved field |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
168 * @param receiver the object containing the field or {@code null} if {@code field} is static |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
169 */ |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
170 protected abstract void handleUnresolvedLoadField(JavaField field, T receiver); |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
171 |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
172 /** |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
173 * @param field the unresolved field |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
174 * @param value the value being stored to the field |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
175 * @param receiver the object containing the field or {@code null} if {@code field} is static |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
176 */ |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
177 protected abstract void handleUnresolvedStoreField(JavaField field, T value, T receiver); |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
178 |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
179 /** |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
180 * @param representation |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
181 * @param type |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
182 */ |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
183 protected abstract void handleUnresolvedExceptionType(Representation representation, JavaType type); |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
184 |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
185 // protected abstract void handleUnresolvedInvoke(JavaMethod javaMethod, InvokeKind invokeKind); |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
186 |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
187 // protected abstract DispatchBeginNode handleException(T exceptionObject, int bci); |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
188 |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
189 private void genLoadConstant(int cpi, int opcode) { |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
190 Object con = lookupConstant(cpi, opcode); |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
191 |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
192 if (con instanceof JavaType) { |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
193 // this is a load of class constant which might be unresolved |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
194 JavaType type = (JavaType) con; |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
195 if (type instanceof ResolvedJavaType) { |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
196 frameState.push(Kind.Object, appendConstant(((ResolvedJavaType) type).getEncoding(Representation.JavaClass))); |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
197 } else { |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
198 handleUnresolvedLoadConstant(type); |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
199 } |
18187
9619ba4daf4c
Rename Constant to JavaConstant.
Roland Schatz <roland.schatz@oracle.com>
parents:
17341
diff
changeset
|
200 } else if (con instanceof JavaConstant) { |
9619ba4daf4c
Rename Constant to JavaConstant.
Roland Schatz <roland.schatz@oracle.com>
parents:
17341
diff
changeset
|
201 JavaConstant constant = (JavaConstant) con; |
14892
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
202 frameState.push(constant.getKind().getStackKind(), appendConstant(constant)); |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
203 } else { |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
204 throw new Error("lookupConstant returned an object of incorrect type"); |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
205 } |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
206 } |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
207 |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
208 protected abstract T genLoadIndexed(T index, T array, Kind kind); |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
209 |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
210 private void genLoadIndexed(Kind kind) { |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
211 emitExplicitExceptions(frameState.peek(1), frameState.peek(0)); |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
212 |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
213 T index = frameState.ipop(); |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
214 T array = frameState.apop(); |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
215 frameState.push(kind.getStackKind(), append(genLoadIndexed(array, index, kind))); |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
216 } |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
217 |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
218 protected abstract T genStoreIndexed(T array, T index, Kind kind, T value); |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
219 |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
220 private void genStoreIndexed(Kind kind) { |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
221 emitExplicitExceptions(frameState.peek(2), frameState.peek(1)); |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
222 |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
223 T value = frameState.pop(kind.getStackKind()); |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
224 T index = frameState.ipop(); |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
225 T array = frameState.apop(); |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
226 append(genStoreIndexed(array, index, kind, value)); |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
227 } |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
228 |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
229 private void stackOp(int opcode) { |
14818
3d04915a55c6
added kindinterface for valuenode and variable and started to generalize some methods used for bytecodeparsing
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
230 switch (opcode) { |
3d04915a55c6
added kindinterface for valuenode and variable and started to generalize some methods used for bytecodeparsing
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
231 case POP: { |
3d04915a55c6
added kindinterface for valuenode and variable and started to generalize some methods used for bytecodeparsing
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
232 frameState.xpop(); |
3d04915a55c6
added kindinterface for valuenode and variable and started to generalize some methods used for bytecodeparsing
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
233 break; |
3d04915a55c6
added kindinterface for valuenode and variable and started to generalize some methods used for bytecodeparsing
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
234 } |
3d04915a55c6
added kindinterface for valuenode and variable and started to generalize some methods used for bytecodeparsing
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
235 case POP2: { |
3d04915a55c6
added kindinterface for valuenode and variable and started to generalize some methods used for bytecodeparsing
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
236 frameState.xpop(); |
3d04915a55c6
added kindinterface for valuenode and variable and started to generalize some methods used for bytecodeparsing
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
237 frameState.xpop(); |
3d04915a55c6
added kindinterface for valuenode and variable and started to generalize some methods used for bytecodeparsing
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
238 break; |
3d04915a55c6
added kindinterface for valuenode and variable and started to generalize some methods used for bytecodeparsing
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
239 } |
3d04915a55c6
added kindinterface for valuenode and variable and started to generalize some methods used for bytecodeparsing
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
240 case DUP: { |
3d04915a55c6
added kindinterface for valuenode and variable and started to generalize some methods used for bytecodeparsing
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
241 T w = frameState.xpop(); |
3d04915a55c6
added kindinterface for valuenode and variable and started to generalize some methods used for bytecodeparsing
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
242 frameState.xpush(w); |
3d04915a55c6
added kindinterface for valuenode and variable and started to generalize some methods used for bytecodeparsing
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
243 frameState.xpush(w); |
3d04915a55c6
added kindinterface for valuenode and variable and started to generalize some methods used for bytecodeparsing
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
244 break; |
3d04915a55c6
added kindinterface for valuenode and variable and started to generalize some methods used for bytecodeparsing
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
245 } |
3d04915a55c6
added kindinterface for valuenode and variable and started to generalize some methods used for bytecodeparsing
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
246 case DUP_X1: { |
3d04915a55c6
added kindinterface for valuenode and variable and started to generalize some methods used for bytecodeparsing
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
247 T w1 = frameState.xpop(); |
3d04915a55c6
added kindinterface for valuenode and variable and started to generalize some methods used for bytecodeparsing
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
248 T w2 = frameState.xpop(); |
3d04915a55c6
added kindinterface for valuenode and variable and started to generalize some methods used for bytecodeparsing
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
249 frameState.xpush(w1); |
3d04915a55c6
added kindinterface for valuenode and variable and started to generalize some methods used for bytecodeparsing
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
250 frameState.xpush(w2); |
3d04915a55c6
added kindinterface for valuenode and variable and started to generalize some methods used for bytecodeparsing
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
251 frameState.xpush(w1); |
3d04915a55c6
added kindinterface for valuenode and variable and started to generalize some methods used for bytecodeparsing
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
252 break; |
3d04915a55c6
added kindinterface for valuenode and variable and started to generalize some methods used for bytecodeparsing
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
253 } |
3d04915a55c6
added kindinterface for valuenode and variable and started to generalize some methods used for bytecodeparsing
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
254 case DUP_X2: { |
3d04915a55c6
added kindinterface for valuenode and variable and started to generalize some methods used for bytecodeparsing
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
255 T w1 = frameState.xpop(); |
3d04915a55c6
added kindinterface for valuenode and variable and started to generalize some methods used for bytecodeparsing
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
256 T w2 = frameState.xpop(); |
3d04915a55c6
added kindinterface for valuenode and variable and started to generalize some methods used for bytecodeparsing
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
257 T w3 = frameState.xpop(); |
3d04915a55c6
added kindinterface for valuenode and variable and started to generalize some methods used for bytecodeparsing
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
258 frameState.xpush(w1); |
3d04915a55c6
added kindinterface for valuenode and variable and started to generalize some methods used for bytecodeparsing
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
259 frameState.xpush(w3); |
3d04915a55c6
added kindinterface for valuenode and variable and started to generalize some methods used for bytecodeparsing
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
260 frameState.xpush(w2); |
3d04915a55c6
added kindinterface for valuenode and variable and started to generalize some methods used for bytecodeparsing
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
261 frameState.xpush(w1); |
3d04915a55c6
added kindinterface for valuenode and variable and started to generalize some methods used for bytecodeparsing
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
262 break; |
3d04915a55c6
added kindinterface for valuenode and variable and started to generalize some methods used for bytecodeparsing
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
263 } |
3d04915a55c6
added kindinterface for valuenode and variable and started to generalize some methods used for bytecodeparsing
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
264 case DUP2: { |
3d04915a55c6
added kindinterface for valuenode and variable and started to generalize some methods used for bytecodeparsing
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
265 T w1 = frameState.xpop(); |
3d04915a55c6
added kindinterface for valuenode and variable and started to generalize some methods used for bytecodeparsing
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
266 T w2 = frameState.xpop(); |
3d04915a55c6
added kindinterface for valuenode and variable and started to generalize some methods used for bytecodeparsing
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
267 frameState.xpush(w2); |
3d04915a55c6
added kindinterface for valuenode and variable and started to generalize some methods used for bytecodeparsing
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
268 frameState.xpush(w1); |
3d04915a55c6
added kindinterface for valuenode and variable and started to generalize some methods used for bytecodeparsing
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
269 frameState.xpush(w2); |
3d04915a55c6
added kindinterface for valuenode and variable and started to generalize some methods used for bytecodeparsing
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
270 frameState.xpush(w1); |
3d04915a55c6
added kindinterface for valuenode and variable and started to generalize some methods used for bytecodeparsing
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
271 break; |
3d04915a55c6
added kindinterface for valuenode and variable and started to generalize some methods used for bytecodeparsing
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
272 } |
3d04915a55c6
added kindinterface for valuenode and variable and started to generalize some methods used for bytecodeparsing
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
273 case DUP2_X1: { |
3d04915a55c6
added kindinterface for valuenode and variable and started to generalize some methods used for bytecodeparsing
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
274 T w1 = frameState.xpop(); |
3d04915a55c6
added kindinterface for valuenode and variable and started to generalize some methods used for bytecodeparsing
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
275 T w2 = frameState.xpop(); |
3d04915a55c6
added kindinterface for valuenode and variable and started to generalize some methods used for bytecodeparsing
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
276 T w3 = frameState.xpop(); |
3d04915a55c6
added kindinterface for valuenode and variable and started to generalize some methods used for bytecodeparsing
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
277 frameState.xpush(w2); |
3d04915a55c6
added kindinterface for valuenode and variable and started to generalize some methods used for bytecodeparsing
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
278 frameState.xpush(w1); |
3d04915a55c6
added kindinterface for valuenode and variable and started to generalize some methods used for bytecodeparsing
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
279 frameState.xpush(w3); |
3d04915a55c6
added kindinterface for valuenode and variable and started to generalize some methods used for bytecodeparsing
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
280 frameState.xpush(w2); |
3d04915a55c6
added kindinterface for valuenode and variable and started to generalize some methods used for bytecodeparsing
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
281 frameState.xpush(w1); |
3d04915a55c6
added kindinterface for valuenode and variable and started to generalize some methods used for bytecodeparsing
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
282 break; |
3d04915a55c6
added kindinterface for valuenode and variable and started to generalize some methods used for bytecodeparsing
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
283 } |
3d04915a55c6
added kindinterface for valuenode and variable and started to generalize some methods used for bytecodeparsing
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
284 case DUP2_X2: { |
3d04915a55c6
added kindinterface for valuenode and variable and started to generalize some methods used for bytecodeparsing
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
285 T w1 = frameState.xpop(); |
3d04915a55c6
added kindinterface for valuenode and variable and started to generalize some methods used for bytecodeparsing
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
286 T w2 = frameState.xpop(); |
3d04915a55c6
added kindinterface for valuenode and variable and started to generalize some methods used for bytecodeparsing
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
287 T w3 = frameState.xpop(); |
3d04915a55c6
added kindinterface for valuenode and variable and started to generalize some methods used for bytecodeparsing
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
288 T w4 = frameState.xpop(); |
3d04915a55c6
added kindinterface for valuenode and variable and started to generalize some methods used for bytecodeparsing
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
289 frameState.xpush(w2); |
3d04915a55c6
added kindinterface for valuenode and variable and started to generalize some methods used for bytecodeparsing
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
290 frameState.xpush(w1); |
3d04915a55c6
added kindinterface for valuenode and variable and started to generalize some methods used for bytecodeparsing
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
291 frameState.xpush(w4); |
3d04915a55c6
added kindinterface for valuenode and variable and started to generalize some methods used for bytecodeparsing
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
292 frameState.xpush(w3); |
3d04915a55c6
added kindinterface for valuenode and variable and started to generalize some methods used for bytecodeparsing
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
293 frameState.xpush(w2); |
3d04915a55c6
added kindinterface for valuenode and variable and started to generalize some methods used for bytecodeparsing
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
294 frameState.xpush(w1); |
3d04915a55c6
added kindinterface for valuenode and variable and started to generalize some methods used for bytecodeparsing
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
295 break; |
3d04915a55c6
added kindinterface for valuenode and variable and started to generalize some methods used for bytecodeparsing
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
296 } |
3d04915a55c6
added kindinterface for valuenode and variable and started to generalize some methods used for bytecodeparsing
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
297 case SWAP: { |
3d04915a55c6
added kindinterface for valuenode and variable and started to generalize some methods used for bytecodeparsing
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
298 T w1 = frameState.xpop(); |
3d04915a55c6
added kindinterface for valuenode and variable and started to generalize some methods used for bytecodeparsing
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
299 T w2 = frameState.xpop(); |
3d04915a55c6
added kindinterface for valuenode and variable and started to generalize some methods used for bytecodeparsing
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
300 frameState.xpush(w1); |
3d04915a55c6
added kindinterface for valuenode and variable and started to generalize some methods used for bytecodeparsing
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
301 frameState.xpush(w2); |
3d04915a55c6
added kindinterface for valuenode and variable and started to generalize some methods used for bytecodeparsing
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
302 break; |
3d04915a55c6
added kindinterface for valuenode and variable and started to generalize some methods used for bytecodeparsing
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
303 } |
3d04915a55c6
added kindinterface for valuenode and variable and started to generalize some methods used for bytecodeparsing
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
304 default: |
3d04915a55c6
added kindinterface for valuenode and variable and started to generalize some methods used for bytecodeparsing
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
305 throw GraalInternalError.shouldNotReachHere(); |
3d04915a55c6
added kindinterface for valuenode and variable and started to generalize some methods used for bytecodeparsing
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
306 } |
3d04915a55c6
added kindinterface for valuenode and variable and started to generalize some methods used for bytecodeparsing
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
307 } |
14892
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
308 |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
309 protected abstract T genIntegerAdd(Kind kind, T x, T y); |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
310 |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
311 protected abstract T genIntegerSub(Kind kind, T x, T y); |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
312 |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
313 protected abstract T genIntegerMul(Kind kind, T x, T y); |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
314 |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
315 protected abstract T genFloatAdd(Kind kind, T x, T y, boolean isStrictFP); |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
316 |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
317 protected abstract T genFloatSub(Kind kind, T x, T y, boolean isStrictFP); |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
318 |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
319 protected abstract T genFloatMul(Kind kind, T x, T y, boolean isStrictFP); |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
320 |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
321 protected abstract T genFloatDiv(Kind kind, T x, T y, boolean isStrictFP); |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
322 |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
323 protected abstract T genFloatRem(Kind kind, T x, T y, boolean isStrictFP); |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
324 |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
325 private void genArithmeticOp(Kind result, int opcode) { |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
326 T y = frameState.pop(result); |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
327 T x = frameState.pop(result); |
15311
820c6d353358
added ModifiersProvider as superinterface for ResolvedJava[Method|Field|Type] and implemented all checks against modifiers as default methods
Doug Simon <doug.simon@oracle.com>
parents:
15294
diff
changeset
|
328 boolean isStrictFP = method.isStrict(); |
14892
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
329 T v; |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
330 switch (opcode) { |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
331 case IADD: |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
332 case LADD: |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
333 v = genIntegerAdd(result, x, y); |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
334 break; |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
335 case FADD: |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
336 case DADD: |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
337 v = genFloatAdd(result, x, y, isStrictFP); |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
338 break; |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
339 case ISUB: |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
340 case LSUB: |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
341 v = genIntegerSub(result, x, y); |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
342 break; |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
343 case FSUB: |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
344 case DSUB: |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
345 v = genFloatSub(result, x, y, isStrictFP); |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
346 break; |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
347 case IMUL: |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
348 case LMUL: |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
349 v = genIntegerMul(result, x, y); |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
350 break; |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
351 case FMUL: |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
352 case DMUL: |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
353 v = genFloatMul(result, x, y, isStrictFP); |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
354 break; |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
355 case FDIV: |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
356 case DDIV: |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
357 v = genFloatDiv(result, x, y, isStrictFP); |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
358 break; |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
359 case FREM: |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
360 case DREM: |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
361 v = genFloatRem(result, x, y, isStrictFP); |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
362 break; |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
363 default: |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
364 throw new GraalInternalError("should not reach"); |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
365 } |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
366 frameState.push(result, append(v)); |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
367 } |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
368 |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
369 protected abstract T genIntegerDiv(Kind kind, T x, T y); |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
370 |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
371 protected abstract T genIntegerRem(Kind kind, T x, T y); |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
372 |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
373 private void genIntegerDivOp(Kind result, int opcode) { |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
374 T y = frameState.pop(result); |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
375 T x = frameState.pop(result); |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
376 T v; |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
377 switch (opcode) { |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
378 case IDIV: |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
379 case LDIV: |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
380 v = genIntegerDiv(result, x, y); |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
381 break; |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
382 case IREM: |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
383 case LREM: |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
384 v = genIntegerRem(result, x, y); |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
385 break; |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
386 default: |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
387 throw new GraalInternalError("should not reach"); |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
388 } |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
389 frameState.push(result, append(v)); |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
390 } |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
391 |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
392 protected abstract T genNegateOp(T x); |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
393 |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
394 private void genNegateOp(Kind kind) { |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
395 frameState.push(kind, append(genNegateOp(frameState.pop(kind)))); |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
396 } |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
397 |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
398 protected abstract T genLeftShift(Kind kind, T x, T y); |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
399 |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
400 protected abstract T genRightShift(Kind kind, T x, T y); |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
401 |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
402 protected abstract T genUnsignedRightShift(Kind kind, T x, T y); |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
403 |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
404 private void genShiftOp(Kind kind, int opcode) { |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
405 T s = frameState.ipop(); |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
406 T x = frameState.pop(kind); |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
407 T v; |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
408 switch (opcode) { |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
409 case ISHL: |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
410 case LSHL: |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
411 v = genLeftShift(kind, x, s); |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
412 break; |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
413 case ISHR: |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
414 case LSHR: |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
415 v = genRightShift(kind, x, s); |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
416 break; |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
417 case IUSHR: |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
418 case LUSHR: |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
419 v = genUnsignedRightShift(kind, x, s); |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
420 break; |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
421 default: |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
422 throw new GraalInternalError("should not reach"); |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
423 } |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
424 frameState.push(kind, append(v)); |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
425 } |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
426 |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
427 protected abstract T genAnd(Kind kind, T x, T y); |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
428 |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
429 protected abstract T genOr(Kind kind, T x, T y); |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
430 |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
431 protected abstract T genXor(Kind kind, T x, T y); |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
432 |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
433 private void genLogicOp(Kind kind, int opcode) { |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
434 T y = frameState.pop(kind); |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
435 T x = frameState.pop(kind); |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
436 T v; |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
437 switch (opcode) { |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
438 case IAND: |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
439 case LAND: |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
440 v = genAnd(kind, x, y); |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
441 break; |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
442 case IOR: |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
443 case LOR: |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
444 v = genOr(kind, x, y); |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
445 break; |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
446 case IXOR: |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
447 case LXOR: |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
448 v = genXor(kind, x, y); |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
449 break; |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
450 default: |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
451 throw new GraalInternalError("should not reach"); |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
452 } |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
453 frameState.push(kind, append(v)); |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
454 } |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
455 |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
456 protected abstract T genNormalizeCompare(T x, T y, boolean isUnorderedLess); |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
457 |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
458 private void genCompareOp(Kind kind, boolean isUnorderedLess) { |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
459 T y = frameState.pop(kind); |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
460 T x = frameState.pop(kind); |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
461 frameState.ipush(append(genNormalizeCompare(x, y, isUnorderedLess))); |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
462 } |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
463 |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
464 protected abstract T genFloatConvert(FloatConvert op, T input); |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
465 |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
466 private void genFloatConvert(FloatConvert op, Kind from, Kind to) { |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
467 T input = frameState.pop(from.getStackKind()); |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
468 frameState.push(to.getStackKind(), append(genFloatConvert(op, input))); |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
469 } |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
470 |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
471 protected abstract T genNarrow(T input, int bitCount); |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
472 |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
473 protected abstract T genSignExtend(T input, int bitCount); |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
474 |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
475 protected abstract T genZeroExtend(T input, int bitCount); |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
476 |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
477 private void genSignExtend(Kind from, Kind to) { |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
478 T input = frameState.pop(from.getStackKind()); |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
479 if (from != from.getStackKind()) { |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
480 input = append(genNarrow(input, from.getBitCount())); |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
481 } |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
482 frameState.push(to.getStackKind(), append(genSignExtend(input, to.getBitCount()))); |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
483 } |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
484 |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
485 private void genZeroExtend(Kind from, Kind to) { |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
486 T input = frameState.pop(from.getStackKind()); |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
487 if (from != from.getStackKind()) { |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
488 input = append(genNarrow(input, from.getBitCount())); |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
489 } |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
490 frameState.push(to.getStackKind(), append(genZeroExtend(input, to.getBitCount()))); |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
491 } |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
492 |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
493 private void genNarrow(Kind from, Kind to) { |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
494 T input = frameState.pop(from.getStackKind()); |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
495 frameState.push(to.getStackKind(), append(genNarrow(input, to.getBitCount()))); |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
496 } |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
497 |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
498 private void genIncrement() { |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
499 int index = getStream().readLocalIndex(); |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
500 int delta = getStream().readIncrement(); |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
501 T x = frameState.loadLocal(index); |
18187
9619ba4daf4c
Rename Constant to JavaConstant.
Roland Schatz <roland.schatz@oracle.com>
parents:
17341
diff
changeset
|
502 T y = appendConstant(JavaConstant.forInt(delta)); |
14892
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
503 frameState.storeLocal(index, append(genIntegerAdd(Kind.Int, x, y))); |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
504 } |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
505 |
15030
e098038093d5
AbstractBytecodeParser: move createTarget to GraphBuilderPhase.
Josef Eisl <josef.eisl@jku.at>
parents:
15029
diff
changeset
|
506 protected abstract void genGoto(); |
14892
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
507 |
14893
f97c85e6366d
Finished cleaning up BytecodeParseHelper abstract base class.
Josef Eisl <josef.eisl@jku.at>
parents:
14892
diff
changeset
|
508 protected abstract T genObjectEquals(T x, T y); |
f97c85e6366d
Finished cleaning up BytecodeParseHelper abstract base class.
Josef Eisl <josef.eisl@jku.at>
parents:
14892
diff
changeset
|
509 |
f97c85e6366d
Finished cleaning up BytecodeParseHelper abstract base class.
Josef Eisl <josef.eisl@jku.at>
parents:
14892
diff
changeset
|
510 protected abstract T genIntegerEquals(T x, T y); |
f97c85e6366d
Finished cleaning up BytecodeParseHelper abstract base class.
Josef Eisl <josef.eisl@jku.at>
parents:
14892
diff
changeset
|
511 |
f97c85e6366d
Finished cleaning up BytecodeParseHelper abstract base class.
Josef Eisl <josef.eisl@jku.at>
parents:
14892
diff
changeset
|
512 protected abstract T genIntegerLessThan(T x, T y); |
f97c85e6366d
Finished cleaning up BytecodeParseHelper abstract base class.
Josef Eisl <josef.eisl@jku.at>
parents:
14892
diff
changeset
|
513 |
f97c85e6366d
Finished cleaning up BytecodeParseHelper abstract base class.
Josef Eisl <josef.eisl@jku.at>
parents:
14892
diff
changeset
|
514 protected abstract T genUnique(T x); |
f97c85e6366d
Finished cleaning up BytecodeParseHelper abstract base class.
Josef Eisl <josef.eisl@jku.at>
parents:
14892
diff
changeset
|
515 |
14948
bc72e5ed9752
AbstractBytecodeParser: rename ifNode to genIf.
Josef Eisl <josef.eisl@jku.at>
parents:
14947
diff
changeset
|
516 protected abstract void genIf(T x, Condition cond, T y); |
14892
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
517 |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
518 private void genIfZero(Condition cond) { |
18187
9619ba4daf4c
Rename Constant to JavaConstant.
Roland Schatz <roland.schatz@oracle.com>
parents:
17341
diff
changeset
|
519 T y = appendConstant(JavaConstant.INT_0); |
14892
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
520 T x = frameState.ipop(); |
14948
bc72e5ed9752
AbstractBytecodeParser: rename ifNode to genIf.
Josef Eisl <josef.eisl@jku.at>
parents:
14947
diff
changeset
|
521 genIf(x, cond, y); |
14892
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
522 } |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
523 |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
524 private void genIfNull(Condition cond) { |
18187
9619ba4daf4c
Rename Constant to JavaConstant.
Roland Schatz <roland.schatz@oracle.com>
parents:
17341
diff
changeset
|
525 T y = appendConstant(JavaConstant.NULL_OBJECT); |
14892
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
526 T x = frameState.apop(); |
14948
bc72e5ed9752
AbstractBytecodeParser: rename ifNode to genIf.
Josef Eisl <josef.eisl@jku.at>
parents:
14947
diff
changeset
|
527 genIf(x, cond, y); |
14892
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
528 } |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
529 |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
530 private void genIfSame(Kind kind, Condition cond) { |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
531 T y = frameState.pop(kind); |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
532 T x = frameState.pop(kind); |
14893
f97c85e6366d
Finished cleaning up BytecodeParseHelper abstract base class.
Josef Eisl <josef.eisl@jku.at>
parents:
14892
diff
changeset
|
533 // assert !x.isDeleted() && !y.isDeleted(); |
14948
bc72e5ed9752
AbstractBytecodeParser: rename ifNode to genIf.
Josef Eisl <josef.eisl@jku.at>
parents:
14947
diff
changeset
|
534 genIf(x, cond, y); |
14892
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
535 } |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
536 |
14893
f97c85e6366d
Finished cleaning up BytecodeParseHelper abstract base class.
Josef Eisl <josef.eisl@jku.at>
parents:
14892
diff
changeset
|
537 protected abstract void genThrow(); |
14892
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
538 |
14900
be4c28683c08
Moved bytecode parsing from GraphBuilderPhase to BytecodeParseHelper.
Josef Eisl <josef.eisl@jku.at>
parents:
14899
diff
changeset
|
539 protected JavaType lookupType(int cpi, int bytecode) { |
14892
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
540 eagerResolvingForSnippets(cpi, bytecode); |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
541 JavaType result = constantPool.lookupType(cpi, bytecode); |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
542 assert !graphBuilderConfig.unresolvedIsError() || result instanceof ResolvedJavaType; |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
543 return result; |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
544 } |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
545 |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
546 private JavaMethod lookupMethod(int cpi, int opcode) { |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
547 eagerResolvingForSnippets(cpi, opcode); |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
548 JavaMethod result = constantPool.lookupMethod(cpi, opcode); |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
549 /* |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
550 * In general, one cannot assume that the declaring class being initialized is useful, since |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
551 * the actual concrete receiver may be a different class (except for static calls). Also, |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
552 * interfaces are initialized only under special circumstances, so that this assertion would |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
553 * often fail for interface calls. |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
554 */ |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
555 assert !graphBuilderConfig.unresolvedIsError() || (result instanceof ResolvedJavaMethod && (opcode != INVOKESTATIC || ((ResolvedJavaMethod) result).getDeclaringClass().isInitialized())) : result; |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
556 return result; |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
557 } |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
558 |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
559 private JavaField lookupField(int cpi, int opcode) { |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
560 eagerResolvingForSnippets(cpi, opcode); |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
561 JavaField result = constantPool.lookupField(cpi, opcode); |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
562 assert !graphBuilderConfig.unresolvedIsError() || (result instanceof ResolvedJavaField && ((ResolvedJavaField) result).getDeclaringClass().isInitialized()) : result; |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
563 return result; |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
564 } |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
565 |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
566 private Object lookupConstant(int cpi, int opcode) { |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
567 eagerResolvingForSnippets(cpi, opcode); |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
568 Object result = constantPool.lookupConstant(cpi); |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
569 assert !graphBuilderConfig.eagerResolving() || !(result instanceof JavaType) || (result instanceof ResolvedJavaType) : result; |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
570 return result; |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
571 } |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
572 |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
573 private void eagerResolvingForSnippets(int cpi, int bytecode) { |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
574 if (graphBuilderConfig.eagerResolving()) { |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
575 constantPool.loadReferencedType(cpi, bytecode); |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
576 } |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
577 } |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
578 |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
579 private JavaTypeProfile getProfileForTypeCheck(ResolvedJavaType type) { |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
580 if (!optimisticOpts.useTypeCheckHints() || !canHaveSubtype(type)) { |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
581 return null; |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
582 } else { |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
583 return profilingInfo.getTypeProfile(bci()); |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
584 } |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
585 } |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
586 |
15837
6fe57ff3f02c
Rename methods to have consistent names, allow subclasses of bytecode parsers
Christian Wimmer <christian.wimmer@oracle.com>
parents:
15311
diff
changeset
|
587 protected abstract T createCheckCast(ResolvedJavaType type, T object, JavaTypeProfile profileForTypeCheck, boolean forStoreCheck); |
14893
f97c85e6366d
Finished cleaning up BytecodeParseHelper abstract base class.
Josef Eisl <josef.eisl@jku.at>
parents:
14892
diff
changeset
|
588 |
14892
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
589 private void genCheckCast() { |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
590 int cpi = getStream().readCPI(); |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
591 JavaType type = lookupType(cpi, CHECKCAST); |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
592 T object = frameState.apop(); |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
593 if (type instanceof ResolvedJavaType) { |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
594 JavaTypeProfile profileForTypeCheck = getProfileForTypeCheck((ResolvedJavaType) type); |
15837
6fe57ff3f02c
Rename methods to have consistent names, allow subclasses of bytecode parsers
Christian Wimmer <christian.wimmer@oracle.com>
parents:
15311
diff
changeset
|
595 T checkCastNode = append(createCheckCast((ResolvedJavaType) type, object, profileForTypeCheck, false)); |
14892
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
596 frameState.apush(checkCastNode); |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
597 } else { |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
598 handleUnresolvedCheckCast(type, object); |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
599 } |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
600 } |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
601 |
15837
6fe57ff3f02c
Rename methods to have consistent names, allow subclasses of bytecode parsers
Christian Wimmer <christian.wimmer@oracle.com>
parents:
15311
diff
changeset
|
602 protected abstract T createInstanceOf(ResolvedJavaType type, T object, JavaTypeProfile profileForTypeCheck); |
14893
f97c85e6366d
Finished cleaning up BytecodeParseHelper abstract base class.
Josef Eisl <josef.eisl@jku.at>
parents:
14892
diff
changeset
|
603 |
f97c85e6366d
Finished cleaning up BytecodeParseHelper abstract base class.
Josef Eisl <josef.eisl@jku.at>
parents:
14892
diff
changeset
|
604 protected abstract T genConditional(T x); |
f97c85e6366d
Finished cleaning up BytecodeParseHelper abstract base class.
Josef Eisl <josef.eisl@jku.at>
parents:
14892
diff
changeset
|
605 |
14892
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
606 private void genInstanceOf() { |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
607 int cpi = getStream().readCPI(); |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
608 JavaType type = lookupType(cpi, INSTANCEOF); |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
609 T object = frameState.apop(); |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
610 if (type instanceof ResolvedJavaType) { |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
611 ResolvedJavaType resolvedType = (ResolvedJavaType) type; |
15837
6fe57ff3f02c
Rename methods to have consistent names, allow subclasses of bytecode parsers
Christian Wimmer <christian.wimmer@oracle.com>
parents:
15311
diff
changeset
|
612 T instanceOfNode = createInstanceOf((ResolvedJavaType) type, object, getProfileForTypeCheck(resolvedType)); |
14893
f97c85e6366d
Finished cleaning up BytecodeParseHelper abstract base class.
Josef Eisl <josef.eisl@jku.at>
parents:
14892
diff
changeset
|
613 frameState.ipush(append(genConditional(genUnique(instanceOfNode)))); |
14892
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
614 } else { |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
615 handleUnresolvedInstanceOf(type, object); |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
616 } |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
617 } |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
618 |
14893
f97c85e6366d
Finished cleaning up BytecodeParseHelper abstract base class.
Josef Eisl <josef.eisl@jku.at>
parents:
14892
diff
changeset
|
619 protected abstract T createNewInstance(ResolvedJavaType type, boolean fillContents); |
f97c85e6366d
Finished cleaning up BytecodeParseHelper abstract base class.
Josef Eisl <josef.eisl@jku.at>
parents:
14892
diff
changeset
|
620 |
14892
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
621 void genNewInstance(int cpi) { |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
622 JavaType type = lookupType(cpi, NEW); |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
623 if (type instanceof ResolvedJavaType && ((ResolvedJavaType) type).isInitialized()) { |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
624 frameState.apush(append(createNewInstance((ResolvedJavaType) type, true))); |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
625 } else { |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
626 handleUnresolvedNewInstance(type); |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
627 } |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
628 } |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
629 |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
630 /** |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
631 * Gets the kind of array elements for the array type code that appears in a |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
632 * {@link Bytecodes#NEWARRAY} bytecode. |
14899 | 633 * |
14892
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
634 * @param code the array type code |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
635 * @return the kind from the array type code |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
636 */ |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
637 public static Class<?> arrayTypeCodeToClass(int code) { |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
638 // Checkstyle: stop |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
639 switch (code) { |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
640 case 4: |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
641 return boolean.class; |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
642 case 5: |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
643 return char.class; |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
644 case 6: |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
645 return float.class; |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
646 case 7: |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
647 return double.class; |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
648 case 8: |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
649 return byte.class; |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
650 case 9: |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
651 return short.class; |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
652 case 10: |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
653 return int.class; |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
654 case 11: |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
655 return long.class; |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
656 default: |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
657 throw new IllegalArgumentException("unknown array type code: " + code); |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
658 } |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
659 // Checkstyle: resume |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
660 } |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
661 |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
662 private void genNewPrimitiveArray(int typeCode) { |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
663 Class<?> clazz = arrayTypeCodeToClass(typeCode); |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
664 ResolvedJavaType elementType = metaAccess.lookupJavaType(clazz); |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
665 frameState.apush(append(createNewArray(elementType, frameState.ipop(), true))); |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
666 } |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
667 |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
668 private void genNewObjectArray(int cpi) { |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
669 JavaType type = lookupType(cpi, ANEWARRAY); |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
670 T length = frameState.ipop(); |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
671 if (type instanceof ResolvedJavaType) { |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
672 frameState.apush(append(createNewArray((ResolvedJavaType) type, length, true))); |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
673 } else { |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
674 handleUnresolvedNewObjectArray(type, length); |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
675 } |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
676 |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
677 } |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
678 |
14893
f97c85e6366d
Finished cleaning up BytecodeParseHelper abstract base class.
Josef Eisl <josef.eisl@jku.at>
parents:
14892
diff
changeset
|
679 protected abstract T createNewArray(ResolvedJavaType elementType, T length, boolean fillContents); |
14892
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
680 |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
681 private void genNewMultiArray(int cpi) { |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
682 JavaType type = lookupType(cpi, MULTIANEWARRAY); |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
683 int rank = getStream().readUByte(bci() + 3); |
14900
be4c28683c08
Moved bytecode parsing from GraphBuilderPhase to BytecodeParseHelper.
Josef Eisl <josef.eisl@jku.at>
parents:
14899
diff
changeset
|
684 List<T> dims = new ArrayList<>(Collections.nCopies(rank, null)); |
14892
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
685 for (int i = rank - 1; i >= 0; i--) { |
14893
f97c85e6366d
Finished cleaning up BytecodeParseHelper abstract base class.
Josef Eisl <josef.eisl@jku.at>
parents:
14892
diff
changeset
|
686 dims.set(i, frameState.ipop()); |
14892
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
687 } |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
688 if (type instanceof ResolvedJavaType) { |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
689 frameState.apush(append(createNewMultiArray((ResolvedJavaType) type, dims))); |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
690 } else { |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
691 handleUnresolvedNewMultiArray(type, dims); |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
692 } |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
693 } |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
694 |
14893
f97c85e6366d
Finished cleaning up BytecodeParseHelper abstract base class.
Josef Eisl <josef.eisl@jku.at>
parents:
14892
diff
changeset
|
695 protected abstract T createNewMultiArray(ResolvedJavaType type, List<T> dims); |
f97c85e6366d
Finished cleaning up BytecodeParseHelper abstract base class.
Josef Eisl <josef.eisl@jku.at>
parents:
14892
diff
changeset
|
696 |
f97c85e6366d
Finished cleaning up BytecodeParseHelper abstract base class.
Josef Eisl <josef.eisl@jku.at>
parents:
14892
diff
changeset
|
697 protected abstract T genLoadField(T receiver, ResolvedJavaField field); |
14892
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
698 |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
699 private void genGetField(JavaField field) { |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
700 emitExplicitExceptions(frameState.peek(0), null); |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
701 |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
702 Kind kind = field.getKind(); |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
703 T receiver = frameState.apop(); |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
704 if ((field instanceof ResolvedJavaField) && ((ResolvedJavaField) field).getDeclaringClass().isInitialized()) { |
14893
f97c85e6366d
Finished cleaning up BytecodeParseHelper abstract base class.
Josef Eisl <josef.eisl@jku.at>
parents:
14892
diff
changeset
|
705 appendOptimizedLoadField(kind, genLoadField(receiver, (ResolvedJavaField) field)); |
14892
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
706 } else { |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
707 handleUnresolvedLoadField(field, receiver); |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
708 } |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
709 } |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
710 |
14893
f97c85e6366d
Finished cleaning up BytecodeParseHelper abstract base class.
Josef Eisl <josef.eisl@jku.at>
parents:
14892
diff
changeset
|
711 protected abstract void emitNullCheck(T receiver); |
14892
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
712 |
14893
f97c85e6366d
Finished cleaning up BytecodeParseHelper abstract base class.
Josef Eisl <josef.eisl@jku.at>
parents:
14892
diff
changeset
|
713 protected abstract void emitBoundsCheck(T index, T length); |
14892
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
714 |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
715 private static final DebugMetric EXPLICIT_EXCEPTIONS = Debug.metric("ExplicitExceptions"); |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
716 |
14893
f97c85e6366d
Finished cleaning up BytecodeParseHelper abstract base class.
Josef Eisl <josef.eisl@jku.at>
parents:
14892
diff
changeset
|
717 protected abstract T genArrayLength(T x); |
f97c85e6366d
Finished cleaning up BytecodeParseHelper abstract base class.
Josef Eisl <josef.eisl@jku.at>
parents:
14892
diff
changeset
|
718 |
14892
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
719 protected void emitExplicitExceptions(T receiver, T outOfBoundsIndex) { |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
720 assert receiver != null; |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
721 if (graphBuilderConfig.omitAllExceptionEdges() || (optimisticOpts.useExceptionProbabilityForOperations() && profilingInfo.getExceptionSeen(bci()) == TriState.FALSE)) { |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
722 return; |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
723 } |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
724 |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
725 emitNullCheck(receiver); |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
726 if (outOfBoundsIndex != null) { |
14893
f97c85e6366d
Finished cleaning up BytecodeParseHelper abstract base class.
Josef Eisl <josef.eisl@jku.at>
parents:
14892
diff
changeset
|
727 T length = append(genArrayLength(receiver)); |
14892
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
728 emitBoundsCheck(outOfBoundsIndex, length); |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
729 } |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
730 EXPLICIT_EXCEPTIONS.increment(); |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
731 } |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
732 |
14893
f97c85e6366d
Finished cleaning up BytecodeParseHelper abstract base class.
Josef Eisl <josef.eisl@jku.at>
parents:
14892
diff
changeset
|
733 protected abstract T genStoreField(T receiver, ResolvedJavaField field, T value); |
f97c85e6366d
Finished cleaning up BytecodeParseHelper abstract base class.
Josef Eisl <josef.eisl@jku.at>
parents:
14892
diff
changeset
|
734 |
14892
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
735 private void genPutField(JavaField field) { |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
736 emitExplicitExceptions(frameState.peek(1), null); |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
737 |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
738 T value = frameState.pop(field.getKind().getStackKind()); |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
739 T receiver = frameState.apop(); |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
740 if (field instanceof ResolvedJavaField && ((ResolvedJavaField) field).getDeclaringClass().isInitialized()) { |
14893
f97c85e6366d
Finished cleaning up BytecodeParseHelper abstract base class.
Josef Eisl <josef.eisl@jku.at>
parents:
14892
diff
changeset
|
741 appendOptimizedStoreField(genStoreField(receiver, (ResolvedJavaField) field, value)); |
14892
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
742 } else { |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
743 handleUnresolvedStoreField(field, value, receiver); |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
744 } |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
745 } |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
746 |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
747 private void genGetStatic(JavaField field) { |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
748 Kind kind = field.getKind(); |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
749 if (field instanceof ResolvedJavaField && ((ResolvedJavaType) field.getDeclaringClass()).isInitialized()) { |
14893
f97c85e6366d
Finished cleaning up BytecodeParseHelper abstract base class.
Josef Eisl <josef.eisl@jku.at>
parents:
14892
diff
changeset
|
750 appendOptimizedLoadField(kind, genLoadField(null, (ResolvedJavaField) field)); |
14892
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
751 } else { |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
752 handleUnresolvedLoadField(field, null); |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
753 } |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
754 } |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
755 |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
756 private void genPutStatic(JavaField field) { |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
757 T value = frameState.pop(field.getKind().getStackKind()); |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
758 if (field instanceof ResolvedJavaField && ((ResolvedJavaType) field.getDeclaringClass()).isInitialized()) { |
14893
f97c85e6366d
Finished cleaning up BytecodeParseHelper abstract base class.
Josef Eisl <josef.eisl@jku.at>
parents:
14892
diff
changeset
|
759 appendOptimizedStoreField(genStoreField(null, (ResolvedJavaField) field, value)); |
14892
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
760 } else { |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
761 handleUnresolvedStoreField(field, value, null); |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
762 } |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
763 } |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
764 |
14893
f97c85e6366d
Finished cleaning up BytecodeParseHelper abstract base class.
Josef Eisl <josef.eisl@jku.at>
parents:
14892
diff
changeset
|
765 protected void appendOptimizedStoreField(T store) { |
14892
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
766 append(store); |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
767 } |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
768 |
14893
f97c85e6366d
Finished cleaning up BytecodeParseHelper abstract base class.
Josef Eisl <josef.eisl@jku.at>
parents:
14892
diff
changeset
|
769 protected void appendOptimizedLoadField(Kind kind, T load) { |
14892
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
770 // append the load to the instruction |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
771 T optimized = append(load); |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
772 frameState.push(kind.getStackKind(), optimized); |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
773 } |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
774 |
14893
f97c85e6366d
Finished cleaning up BytecodeParseHelper abstract base class.
Josef Eisl <josef.eisl@jku.at>
parents:
14892
diff
changeset
|
775 protected abstract void genInvokeStatic(JavaMethod target); |
14892
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
776 |
14893
f97c85e6366d
Finished cleaning up BytecodeParseHelper abstract base class.
Josef Eisl <josef.eisl@jku.at>
parents:
14892
diff
changeset
|
777 protected abstract void genInvokeInterface(JavaMethod target); |
14892
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
778 |
14893
f97c85e6366d
Finished cleaning up BytecodeParseHelper abstract base class.
Josef Eisl <josef.eisl@jku.at>
parents:
14892
diff
changeset
|
779 protected abstract void genInvokeDynamic(JavaMethod target); |
14892
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
780 |
14893
f97c85e6366d
Finished cleaning up BytecodeParseHelper abstract base class.
Josef Eisl <josef.eisl@jku.at>
parents:
14892
diff
changeset
|
781 protected abstract void genInvokeVirtual(JavaMethod target); |
14892
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
782 |
14893
f97c85e6366d
Finished cleaning up BytecodeParseHelper abstract base class.
Josef Eisl <josef.eisl@jku.at>
parents:
14892
diff
changeset
|
783 protected abstract void genInvokeSpecial(JavaMethod target); |
14892
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
784 |
14893
f97c85e6366d
Finished cleaning up BytecodeParseHelper abstract base class.
Josef Eisl <josef.eisl@jku.at>
parents:
14892
diff
changeset
|
785 protected abstract void genReturn(T x); |
14892
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
786 |
14893
f97c85e6366d
Finished cleaning up BytecodeParseHelper abstract base class.
Josef Eisl <josef.eisl@jku.at>
parents:
14892
diff
changeset
|
787 protected abstract T genMonitorEnter(T x); |
14892
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
788 |
14893
f97c85e6366d
Finished cleaning up BytecodeParseHelper abstract base class.
Josef Eisl <josef.eisl@jku.at>
parents:
14892
diff
changeset
|
789 protected abstract T genMonitorExit(T x, T returnValue); |
14892
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
790 |
14893
f97c85e6366d
Finished cleaning up BytecodeParseHelper abstract base class.
Josef Eisl <josef.eisl@jku.at>
parents:
14892
diff
changeset
|
791 protected abstract void genJsr(int dest); |
14892
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
792 |
14893
f97c85e6366d
Finished cleaning up BytecodeParseHelper abstract base class.
Josef Eisl <josef.eisl@jku.at>
parents:
14892
diff
changeset
|
793 protected abstract void genRet(int localIndex); |
14892
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
794 |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
795 private double[] switchProbability(int numberOfCases, int bci) { |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
796 double[] prob = profilingInfo.getSwitchProbabilities(bci); |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
797 if (prob != null) { |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
798 assert prob.length == numberOfCases; |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
799 } else { |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
800 Debug.log("Missing probability (switch) in %s at bci %d", method, bci); |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
801 prob = new double[numberOfCases]; |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
802 for (int i = 0; i < numberOfCases; i++) { |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
803 prob[i] = 1.0d / numberOfCases; |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
804 } |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
805 } |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
806 assert allPositive(prob); |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
807 return prob; |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
808 } |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
809 |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
810 private static boolean allPositive(double[] a) { |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
811 for (double d : a) { |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
812 if (d < 0) { |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
813 return false; |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
814 } |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
815 } |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
816 return true; |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
817 } |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
818 |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
819 /** |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
820 * Helper function that sums up the probabilities of all keys that lead to a specific successor. |
14899 | 821 * |
14892
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
822 * @return an array of size successorCount with the accumulated probability for each successor. |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
823 */ |
15028
7ee9decb2784
AbstractBytecodeParser: rework genIntegerSwitch.
Josef Eisl <josef.eisl@jku.at>
parents:
15027
diff
changeset
|
824 public static double[] successorProbabilites(int successorCount, int[] keySuccessors, double[] keyProbabilities) { |
14892
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
825 double[] probability = new double[successorCount]; |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
826 for (int i = 0; i < keySuccessors.length; i++) { |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
827 probability[keySuccessors[i]] += keyProbabilities[i]; |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
828 } |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
829 return probability; |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
830 } |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
831 |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
832 private void genSwitch(BytecodeSwitch bs) { |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
833 int bci = bci(); |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
834 T value = frameState.ipop(); |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
835 |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
836 int nofCases = bs.numberOfCases(); |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
837 double[] keyProbabilities = switchProbability(nofCases + 1, bci); |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
838 |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
839 Map<Integer, SuccessorInfo> bciToBlockSuccessorIndex = new HashMap<>(); |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
840 for (int i = 0; i < currentBlock.getSuccessorCount(); i++) { |
14893
f97c85e6366d
Finished cleaning up BytecodeParseHelper abstract base class.
Josef Eisl <josef.eisl@jku.at>
parents:
14892
diff
changeset
|
841 assert !bciToBlockSuccessorIndex.containsKey(currentBlock.getSuccessors().get(i).startBci); |
f97c85e6366d
Finished cleaning up BytecodeParseHelper abstract base class.
Josef Eisl <josef.eisl@jku.at>
parents:
14892
diff
changeset
|
842 if (!bciToBlockSuccessorIndex.containsKey(currentBlock.getSuccessors().get(i).startBci)) { |
f97c85e6366d
Finished cleaning up BytecodeParseHelper abstract base class.
Josef Eisl <josef.eisl@jku.at>
parents:
14892
diff
changeset
|
843 bciToBlockSuccessorIndex.put(currentBlock.getSuccessors().get(i).startBci, new SuccessorInfo(i)); |
14892
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
844 } |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
845 } |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
846 |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
847 ArrayList<BciBlock> actualSuccessors = new ArrayList<>(); |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
848 int[] keys = new int[nofCases]; |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
849 int[] keySuccessors = new int[nofCases + 1]; |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
850 int deoptSuccessorIndex = -1; |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
851 int nextSuccessorIndex = 0; |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
852 for (int i = 0; i < nofCases + 1; i++) { |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
853 if (i < nofCases) { |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
854 keys[i] = bs.keyAt(i); |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
855 } |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
856 |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
857 if (isNeverExecutedCode(keyProbabilities[i])) { |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
858 if (deoptSuccessorIndex < 0) { |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
859 deoptSuccessorIndex = nextSuccessorIndex++; |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
860 actualSuccessors.add(null); |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
861 } |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
862 keySuccessors[i] = deoptSuccessorIndex; |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
863 } else { |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
864 int targetBci = i >= nofCases ? bs.defaultTarget() : bs.targetAt(i); |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
865 SuccessorInfo info = bciToBlockSuccessorIndex.get(targetBci); |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
866 if (info.actualIndex < 0) { |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
867 info.actualIndex = nextSuccessorIndex++; |
14893
f97c85e6366d
Finished cleaning up BytecodeParseHelper abstract base class.
Josef Eisl <josef.eisl@jku.at>
parents:
14892
diff
changeset
|
868 actualSuccessors.add(currentBlock.getSuccessors().get(info.blockIndex)); |
14892
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
869 } |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
870 keySuccessors[i] = info.actualIndex; |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
871 } |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
872 } |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
873 |
15028
7ee9decb2784
AbstractBytecodeParser: rework genIntegerSwitch.
Josef Eisl <josef.eisl@jku.at>
parents:
15027
diff
changeset
|
874 genIntegerSwitch(value, actualSuccessors, keys, keyProbabilities, keySuccessors); |
14892
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
875 |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
876 } |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
877 |
15028
7ee9decb2784
AbstractBytecodeParser: rework genIntegerSwitch.
Josef Eisl <josef.eisl@jku.at>
parents:
15027
diff
changeset
|
878 protected abstract void genIntegerSwitch(T value, ArrayList<BciBlock> actualSuccessors, int[] keys, double[] keyProbabilities, int[] keySuccessors); |
14893
f97c85e6366d
Finished cleaning up BytecodeParseHelper abstract base class.
Josef Eisl <josef.eisl@jku.at>
parents:
14892
diff
changeset
|
879 |
14892
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
880 private static class SuccessorInfo { |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
881 |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
882 int blockIndex; |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
883 int actualIndex; |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
884 |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
885 public SuccessorInfo(int blockSuccessorIndex) { |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
886 this.blockIndex = blockSuccessorIndex; |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
887 actualIndex = -1; |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
888 } |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
889 } |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
890 |
18187
9619ba4daf4c
Rename Constant to JavaConstant.
Roland Schatz <roland.schatz@oracle.com>
parents:
17341
diff
changeset
|
891 protected abstract T appendConstant(JavaConstant constant); |
14892
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
892 |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
893 protected abstract T append(T v); |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
894 |
15030
e098038093d5
AbstractBytecodeParser: move createTarget to GraphBuilderPhase.
Josef Eisl <josef.eisl@jku.at>
parents:
15029
diff
changeset
|
895 protected boolean isNeverExecutedCode(double probability) { |
14892
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
896 return probability == 0 && optimisticOpts.removeNeverExecutedCode() && entryBCI == StructuredGraph.INVOCATION_ENTRY_BCI; |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
897 } |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
898 |
16886
b61b88c9c103
Make handling of removeNeverExecutedCode more consistent
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
16841
diff
changeset
|
899 protected double branchProbability() { |
b61b88c9c103
Make handling of removeNeverExecutedCode more consistent
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
16841
diff
changeset
|
900 double probability = profilingInfo.getBranchTakenProbability(bci()); |
b61b88c9c103
Make handling of removeNeverExecutedCode more consistent
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
16841
diff
changeset
|
901 if (probability < 0) { |
b61b88c9c103
Make handling of removeNeverExecutedCode more consistent
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
16841
diff
changeset
|
902 assert probability == -1 : "invalid probability"; |
b61b88c9c103
Make handling of removeNeverExecutedCode more consistent
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
16841
diff
changeset
|
903 Debug.log("missing probability in %s at bci %d", method, bci()); |
b61b88c9c103
Make handling of removeNeverExecutedCode more consistent
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
16841
diff
changeset
|
904 probability = 0.5; |
b61b88c9c103
Make handling of removeNeverExecutedCode more consistent
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
16841
diff
changeset
|
905 } |
b61b88c9c103
Make handling of removeNeverExecutedCode more consistent
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
16841
diff
changeset
|
906 |
b61b88c9c103
Make handling of removeNeverExecutedCode more consistent
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
16841
diff
changeset
|
907 if (!removeNeverExecutedCode()) { |
b61b88c9c103
Make handling of removeNeverExecutedCode more consistent
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
16841
diff
changeset
|
908 if (probability == 0) { |
b61b88c9c103
Make handling of removeNeverExecutedCode more consistent
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
16841
diff
changeset
|
909 probability = 0.0000001; |
b61b88c9c103
Make handling of removeNeverExecutedCode more consistent
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
16841
diff
changeset
|
910 } else if (probability == 1) { |
b61b88c9c103
Make handling of removeNeverExecutedCode more consistent
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
16841
diff
changeset
|
911 probability = 0.999999; |
b61b88c9c103
Make handling of removeNeverExecutedCode more consistent
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
16841
diff
changeset
|
912 } |
b61b88c9c103
Make handling of removeNeverExecutedCode more consistent
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
16841
diff
changeset
|
913 } |
b61b88c9c103
Make handling of removeNeverExecutedCode more consistent
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
16841
diff
changeset
|
914 return probability; |
b61b88c9c103
Make handling of removeNeverExecutedCode more consistent
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
16841
diff
changeset
|
915 } |
b61b88c9c103
Make handling of removeNeverExecutedCode more consistent
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
16841
diff
changeset
|
916 |
b61b88c9c103
Make handling of removeNeverExecutedCode more consistent
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
16841
diff
changeset
|
917 protected boolean removeNeverExecutedCode() { |
b61b88c9c103
Make handling of removeNeverExecutedCode more consistent
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
16841
diff
changeset
|
918 return optimisticOpts.removeNeverExecutedCode() && entryBCI == StructuredGraph.INVOCATION_ENTRY_BCI; |
b61b88c9c103
Make handling of removeNeverExecutedCode more consistent
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
16841
diff
changeset
|
919 } |
b61b88c9c103
Make handling of removeNeverExecutedCode more consistent
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
16841
diff
changeset
|
920 |
14894
3676333a46bb
Use BciBlock in BytecodeParseHelper.
Josef Eisl <josef.eisl@jku.at>
parents:
14893
diff
changeset
|
921 protected abstract void processBlock(BciBlock block); |
14892
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
922 |
14894
3676333a46bb
Use BciBlock in BytecodeParseHelper.
Josef Eisl <josef.eisl@jku.at>
parents:
14893
diff
changeset
|
923 protected abstract void iterateBytecodesForBlock(BciBlock block); |
14892
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
924 |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
925 public void processBytecode(int bci, int opcode) { |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
926 int cpi; |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
927 |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
928 // Checkstyle: stop |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
929 // @formatter:off |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
930 switch (opcode) { |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
931 case NOP : /* nothing to do */ break; |
18187
9619ba4daf4c
Rename Constant to JavaConstant.
Roland Schatz <roland.schatz@oracle.com>
parents:
17341
diff
changeset
|
932 case ACONST_NULL : frameState.apush(appendConstant(JavaConstant.NULL_OBJECT)); break; |
16036
4161a58e48cb
refactor/simplify Constant
Lukas Stadler <lukas.stadler@oracle.com>
parents:
15837
diff
changeset
|
933 case ICONST_M1 : // fall through |
4161a58e48cb
refactor/simplify Constant
Lukas Stadler <lukas.stadler@oracle.com>
parents:
15837
diff
changeset
|
934 case ICONST_0 : // fall through |
4161a58e48cb
refactor/simplify Constant
Lukas Stadler <lukas.stadler@oracle.com>
parents:
15837
diff
changeset
|
935 case ICONST_1 : // fall through |
4161a58e48cb
refactor/simplify Constant
Lukas Stadler <lukas.stadler@oracle.com>
parents:
15837
diff
changeset
|
936 case ICONST_2 : // fall through |
4161a58e48cb
refactor/simplify Constant
Lukas Stadler <lukas.stadler@oracle.com>
parents:
15837
diff
changeset
|
937 case ICONST_3 : // fall through |
4161a58e48cb
refactor/simplify Constant
Lukas Stadler <lukas.stadler@oracle.com>
parents:
15837
diff
changeset
|
938 case ICONST_4 : // fall through |
18187
9619ba4daf4c
Rename Constant to JavaConstant.
Roland Schatz <roland.schatz@oracle.com>
parents:
17341
diff
changeset
|
939 case ICONST_5 : frameState.ipush(appendConstant(JavaConstant.forInt(opcode - ICONST_0))); break; |
16036
4161a58e48cb
refactor/simplify Constant
Lukas Stadler <lukas.stadler@oracle.com>
parents:
15837
diff
changeset
|
940 case LCONST_0 : // fall through |
18187
9619ba4daf4c
Rename Constant to JavaConstant.
Roland Schatz <roland.schatz@oracle.com>
parents:
17341
diff
changeset
|
941 case LCONST_1 : frameState.lpush(appendConstant(JavaConstant.forLong(opcode - LCONST_0))); break; |
16036
4161a58e48cb
refactor/simplify Constant
Lukas Stadler <lukas.stadler@oracle.com>
parents:
15837
diff
changeset
|
942 case FCONST_0 : // fall through |
4161a58e48cb
refactor/simplify Constant
Lukas Stadler <lukas.stadler@oracle.com>
parents:
15837
diff
changeset
|
943 case FCONST_1 : // fall through |
18187
9619ba4daf4c
Rename Constant to JavaConstant.
Roland Schatz <roland.schatz@oracle.com>
parents:
17341
diff
changeset
|
944 case FCONST_2 : frameState.fpush(appendConstant(JavaConstant.forFloat(opcode - FCONST_0))); break; |
16036
4161a58e48cb
refactor/simplify Constant
Lukas Stadler <lukas.stadler@oracle.com>
parents:
15837
diff
changeset
|
945 case DCONST_0 : // fall through |
18187
9619ba4daf4c
Rename Constant to JavaConstant.
Roland Schatz <roland.schatz@oracle.com>
parents:
17341
diff
changeset
|
946 case DCONST_1 : frameState.dpush(appendConstant(JavaConstant.forDouble(opcode - DCONST_0))); break; |
9619ba4daf4c
Rename Constant to JavaConstant.
Roland Schatz <roland.schatz@oracle.com>
parents:
17341
diff
changeset
|
947 case BIPUSH : frameState.ipush(appendConstant(JavaConstant.forInt(stream.readByte()))); break; |
9619ba4daf4c
Rename Constant to JavaConstant.
Roland Schatz <roland.schatz@oracle.com>
parents:
17341
diff
changeset
|
948 case SIPUSH : frameState.ipush(appendConstant(JavaConstant.forInt(stream.readShort()))); break; |
14892
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
949 case LDC : // fall through |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
950 case LDC_W : // fall through |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
951 case LDC2_W : genLoadConstant(stream.readCPI(), opcode); break; |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
952 case ILOAD : loadLocal(stream.readLocalIndex(), Kind.Int); break; |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
953 case LLOAD : loadLocal(stream.readLocalIndex(), Kind.Long); break; |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
954 case FLOAD : loadLocal(stream.readLocalIndex(), Kind.Float); break; |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
955 case DLOAD : loadLocal(stream.readLocalIndex(), Kind.Double); break; |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
956 case ALOAD : loadLocal(stream.readLocalIndex(), Kind.Object); break; |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
957 case ILOAD_0 : // fall through |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
958 case ILOAD_1 : // fall through |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
959 case ILOAD_2 : // fall through |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
960 case ILOAD_3 : loadLocal(opcode - ILOAD_0, Kind.Int); break; |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
961 case LLOAD_0 : // fall through |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
962 case LLOAD_1 : // fall through |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
963 case LLOAD_2 : // fall through |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
964 case LLOAD_3 : loadLocal(opcode - LLOAD_0, Kind.Long); break; |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
965 case FLOAD_0 : // fall through |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
966 case FLOAD_1 : // fall through |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
967 case FLOAD_2 : // fall through |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
968 case FLOAD_3 : loadLocal(opcode - FLOAD_0, Kind.Float); break; |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
969 case DLOAD_0 : // fall through |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
970 case DLOAD_1 : // fall through |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
971 case DLOAD_2 : // fall through |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
972 case DLOAD_3 : loadLocal(opcode - DLOAD_0, Kind.Double); break; |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
973 case ALOAD_0 : // fall through |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
974 case ALOAD_1 : // fall through |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
975 case ALOAD_2 : // fall through |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
976 case ALOAD_3 : loadLocal(opcode - ALOAD_0, Kind.Object); break; |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
977 case IALOAD : genLoadIndexed(Kind.Int ); break; |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
978 case LALOAD : genLoadIndexed(Kind.Long ); break; |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
979 case FALOAD : genLoadIndexed(Kind.Float ); break; |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
980 case DALOAD : genLoadIndexed(Kind.Double); break; |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
981 case AALOAD : genLoadIndexed(Kind.Object); break; |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
982 case BALOAD : genLoadIndexed(Kind.Byte ); break; |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
983 case CALOAD : genLoadIndexed(Kind.Char ); break; |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
984 case SALOAD : genLoadIndexed(Kind.Short ); break; |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
985 case ISTORE : storeLocal(Kind.Int, stream.readLocalIndex()); break; |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
986 case LSTORE : storeLocal(Kind.Long, stream.readLocalIndex()); break; |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
987 case FSTORE : storeLocal(Kind.Float, stream.readLocalIndex()); break; |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
988 case DSTORE : storeLocal(Kind.Double, stream.readLocalIndex()); break; |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
989 case ASTORE : storeLocal(Kind.Object, stream.readLocalIndex()); break; |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
990 case ISTORE_0 : // fall through |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
991 case ISTORE_1 : // fall through |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
992 case ISTORE_2 : // fall through |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
993 case ISTORE_3 : storeLocal(Kind.Int, opcode - ISTORE_0); break; |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
994 case LSTORE_0 : // fall through |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
995 case LSTORE_1 : // fall through |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
996 case LSTORE_2 : // fall through |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
997 case LSTORE_3 : storeLocal(Kind.Long, opcode - LSTORE_0); break; |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
998 case FSTORE_0 : // fall through |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
999 case FSTORE_1 : // fall through |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
1000 case FSTORE_2 : // fall through |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
1001 case FSTORE_3 : storeLocal(Kind.Float, opcode - FSTORE_0); break; |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
1002 case DSTORE_0 : // fall through |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
1003 case DSTORE_1 : // fall through |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
1004 case DSTORE_2 : // fall through |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
1005 case DSTORE_3 : storeLocal(Kind.Double, opcode - DSTORE_0); break; |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
1006 case ASTORE_0 : // fall through |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
1007 case ASTORE_1 : // fall through |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
1008 case ASTORE_2 : // fall through |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
1009 case ASTORE_3 : storeLocal(Kind.Object, opcode - ASTORE_0); break; |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
1010 case IASTORE : genStoreIndexed(Kind.Int ); break; |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
1011 case LASTORE : genStoreIndexed(Kind.Long ); break; |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
1012 case FASTORE : genStoreIndexed(Kind.Float ); break; |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
1013 case DASTORE : genStoreIndexed(Kind.Double); break; |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
1014 case AASTORE : genStoreIndexed(Kind.Object); break; |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
1015 case BASTORE : genStoreIndexed(Kind.Byte ); break; |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
1016 case CASTORE : genStoreIndexed(Kind.Char ); break; |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
1017 case SASTORE : genStoreIndexed(Kind.Short ); break; |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
1018 case POP : // fall through |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
1019 case POP2 : // fall through |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
1020 case DUP : // fall through |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
1021 case DUP_X1 : // fall through |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
1022 case DUP_X2 : // fall through |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
1023 case DUP2 : // fall through |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
1024 case DUP2_X1 : // fall through |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
1025 case DUP2_X2 : // fall through |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
1026 case SWAP : stackOp(opcode); break; |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
1027 case IADD : // fall through |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
1028 case ISUB : // fall through |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
1029 case IMUL : genArithmeticOp(Kind.Int, opcode); break; |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
1030 case IDIV : // fall through |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
1031 case IREM : genIntegerDivOp(Kind.Int, opcode); break; |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
1032 case LADD : // fall through |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
1033 case LSUB : // fall through |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
1034 case LMUL : genArithmeticOp(Kind.Long, opcode); break; |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
1035 case LDIV : // fall through |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
1036 case LREM : genIntegerDivOp(Kind.Long, opcode); break; |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
1037 case FADD : // fall through |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
1038 case FSUB : // fall through |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
1039 case FMUL : // fall through |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
1040 case FDIV : // fall through |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
1041 case FREM : genArithmeticOp(Kind.Float, opcode); break; |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
1042 case DADD : // fall through |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
1043 case DSUB : // fall through |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
1044 case DMUL : // fall through |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
1045 case DDIV : // fall through |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
1046 case DREM : genArithmeticOp(Kind.Double, opcode); break; |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
1047 case INEG : genNegateOp(Kind.Int); break; |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
1048 case LNEG : genNegateOp(Kind.Long); break; |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
1049 case FNEG : genNegateOp(Kind.Float); break; |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
1050 case DNEG : genNegateOp(Kind.Double); break; |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
1051 case ISHL : // fall through |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
1052 case ISHR : // fall through |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
1053 case IUSHR : genShiftOp(Kind.Int, opcode); break; |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
1054 case IAND : // fall through |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
1055 case IOR : // fall through |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
1056 case IXOR : genLogicOp(Kind.Int, opcode); break; |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
1057 case LSHL : // fall through |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
1058 case LSHR : // fall through |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
1059 case LUSHR : genShiftOp(Kind.Long, opcode); break; |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
1060 case LAND : // fall through |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
1061 case LOR : // fall through |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
1062 case LXOR : genLogicOp(Kind.Long, opcode); break; |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
1063 case IINC : genIncrement(); break; |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
1064 case I2F : genFloatConvert(FloatConvert.I2F, Kind.Int, Kind.Float); break; |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
1065 case I2D : genFloatConvert(FloatConvert.I2D, Kind.Int, Kind.Double); break; |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
1066 case L2F : genFloatConvert(FloatConvert.L2F, Kind.Long, Kind.Float); break; |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
1067 case L2D : genFloatConvert(FloatConvert.L2D, Kind.Long, Kind.Double); break; |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
1068 case F2I : genFloatConvert(FloatConvert.F2I, Kind.Float, Kind.Int); break; |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
1069 case F2L : genFloatConvert(FloatConvert.F2L, Kind.Float, Kind.Long); break; |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
1070 case F2D : genFloatConvert(FloatConvert.F2D, Kind.Float, Kind.Double); break; |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
1071 case D2I : genFloatConvert(FloatConvert.D2I, Kind.Double, Kind.Int); break; |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
1072 case D2L : genFloatConvert(FloatConvert.D2L, Kind.Double, Kind.Long); break; |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
1073 case D2F : genFloatConvert(FloatConvert.D2F, Kind.Double, Kind.Float); break; |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
1074 case L2I : genNarrow(Kind.Long, Kind.Int); break; |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
1075 case I2L : genSignExtend(Kind.Int, Kind.Long); break; |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
1076 case I2B : genSignExtend(Kind.Byte, Kind.Int); break; |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
1077 case I2S : genSignExtend(Kind.Short, Kind.Int); break; |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
1078 case I2C : genZeroExtend(Kind.Char, Kind.Int); break; |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
1079 case LCMP : genCompareOp(Kind.Long, false); break; |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
1080 case FCMPL : genCompareOp(Kind.Float, true); break; |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
1081 case FCMPG : genCompareOp(Kind.Float, false); break; |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
1082 case DCMPL : genCompareOp(Kind.Double, true); break; |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
1083 case DCMPG : genCompareOp(Kind.Double, false); break; |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
1084 case IFEQ : genIfZero(Condition.EQ); break; |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
1085 case IFNE : genIfZero(Condition.NE); break; |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
1086 case IFLT : genIfZero(Condition.LT); break; |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
1087 case IFGE : genIfZero(Condition.GE); break; |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
1088 case IFGT : genIfZero(Condition.GT); break; |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
1089 case IFLE : genIfZero(Condition.LE); break; |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
1090 case IF_ICMPEQ : genIfSame(Kind.Int, Condition.EQ); break; |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
1091 case IF_ICMPNE : genIfSame(Kind.Int, Condition.NE); break; |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
1092 case IF_ICMPLT : genIfSame(Kind.Int, Condition.LT); break; |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
1093 case IF_ICMPGE : genIfSame(Kind.Int, Condition.GE); break; |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
1094 case IF_ICMPGT : genIfSame(Kind.Int, Condition.GT); break; |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
1095 case IF_ICMPLE : genIfSame(Kind.Int, Condition.LE); break; |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
1096 case IF_ACMPEQ : genIfSame(Kind.Object, Condition.EQ); break; |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
1097 case IF_ACMPNE : genIfSame(Kind.Object, Condition.NE); break; |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
1098 case GOTO : genGoto(); break; |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
1099 case JSR : genJsr(stream.readBranchDest()); break; |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
1100 case RET : genRet(stream.readLocalIndex()); break; |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
1101 case TABLESWITCH : genSwitch(new BytecodeTableSwitch(getStream(), bci())); break; |
14893
f97c85e6366d
Finished cleaning up BytecodeParseHelper abstract base class.
Josef Eisl <josef.eisl@jku.at>
parents:
14892
diff
changeset
|
1102 case LOOKUPSWITCH : genSwitch(new BytecodeLookupSwitch(getStream(), bci())); break; |
14892
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
1103 case IRETURN : genReturn(frameState.ipop()); break; |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
1104 case LRETURN : genReturn(frameState.lpop()); break; |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
1105 case FRETURN : genReturn(frameState.fpop()); break; |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
1106 case DRETURN : genReturn(frameState.dpop()); break; |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
1107 case ARETURN : genReturn(frameState.apop()); break; |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
1108 case RETURN : genReturn(null); break; |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
1109 case GETSTATIC : cpi = stream.readCPI(); genGetStatic(lookupField(cpi, opcode)); break; |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
1110 case PUTSTATIC : cpi = stream.readCPI(); genPutStatic(lookupField(cpi, opcode)); break; |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
1111 case GETFIELD : cpi = stream.readCPI(); genGetField(lookupField(cpi, opcode)); break; |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
1112 case PUTFIELD : cpi = stream.readCPI(); genPutField(lookupField(cpi, opcode)); break; |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
1113 case INVOKEVIRTUAL : cpi = stream.readCPI(); genInvokeVirtual(lookupMethod(cpi, opcode)); break; |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
1114 case INVOKESPECIAL : cpi = stream.readCPI(); genInvokeSpecial(lookupMethod(cpi, opcode)); break; |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
1115 case INVOKESTATIC : cpi = stream.readCPI(); genInvokeStatic(lookupMethod(cpi, opcode)); break; |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
1116 case INVOKEINTERFACE: cpi = stream.readCPI(); genInvokeInterface(lookupMethod(cpi, opcode)); break; |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
1117 case INVOKEDYNAMIC : cpi = stream.readCPI4(); genInvokeDynamic(lookupMethod(cpi, opcode)); break; |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
1118 case NEW : genNewInstance(stream.readCPI()); break; |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
1119 case NEWARRAY : genNewPrimitiveArray(stream.readLocalIndex()); break; |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
1120 case ANEWARRAY : genNewObjectArray(stream.readCPI()); break; |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
1121 case ARRAYLENGTH : genArrayLength(); break; |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
1122 case ATHROW : genThrow(); break; |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
1123 case CHECKCAST : genCheckCast(); break; |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
1124 case INSTANCEOF : genInstanceOf(); break; |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
1125 case MONITORENTER : genMonitorEnter(frameState.apop()); break; |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
1126 case MONITOREXIT : genMonitorExit(frameState.apop(), null); break; |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
1127 case MULTIANEWARRAY : genNewMultiArray(stream.readCPI()); break; |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
1128 case IFNULL : genIfNull(Condition.EQ); break; |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
1129 case IFNONNULL : genIfNull(Condition.NE); break; |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
1130 case GOTO_W : genGoto(); break; |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
1131 case JSR_W : genJsr(stream.readBranchDest()); break; |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
1132 case BREAKPOINT: |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
1133 throw new BailoutException("concurrent setting of breakpoint"); |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
1134 default: |
17341
e3f3233ec6cd
refactor BailoutException to include information about non-permanent errors
Lukas Stadler <lukas.stadler@oracle.com>
parents:
17131
diff
changeset
|
1135 throw new BailoutException("Unsupported opcode %d (%s) [bci=%d]", opcode, nameOf(opcode), bci); |
14892
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
1136 } |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
1137 // @formatter:on |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
1138 // Checkstyle: resume |
75104db5215e
Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents:
14830
diff
changeset
|
1139 } |
14893
f97c85e6366d
Finished cleaning up BytecodeParseHelper abstract base class.
Josef Eisl <josef.eisl@jku.at>
parents:
14892
diff
changeset
|
1140 |
f97c85e6366d
Finished cleaning up BytecodeParseHelper abstract base class.
Josef Eisl <josef.eisl@jku.at>
parents:
14892
diff
changeset
|
1141 private void genArrayLength() { |
f97c85e6366d
Finished cleaning up BytecodeParseHelper abstract base class.
Josef Eisl <josef.eisl@jku.at>
parents:
14892
diff
changeset
|
1142 frameState.ipush(append(genArrayLength(frameState.apop()))); |
f97c85e6366d
Finished cleaning up BytecodeParseHelper abstract base class.
Josef Eisl <josef.eisl@jku.at>
parents:
14892
diff
changeset
|
1143 } |
14899 | 1144 |
14900
be4c28683c08
Moved bytecode parsing from GraphBuilderPhase to BytecodeParseHelper.
Josef Eisl <josef.eisl@jku.at>
parents:
14899
diff
changeset
|
1145 public ResolvedJavaMethod getMethod() { |
be4c28683c08
Moved bytecode parsing from GraphBuilderPhase to BytecodeParseHelper.
Josef Eisl <josef.eisl@jku.at>
parents:
14899
diff
changeset
|
1146 return method; |
be4c28683c08
Moved bytecode parsing from GraphBuilderPhase to BytecodeParseHelper.
Josef Eisl <josef.eisl@jku.at>
parents:
14899
diff
changeset
|
1147 } |
be4c28683c08
Moved bytecode parsing from GraphBuilderPhase to BytecodeParseHelper.
Josef Eisl <josef.eisl@jku.at>
parents:
14899
diff
changeset
|
1148 |
be4c28683c08
Moved bytecode parsing from GraphBuilderPhase to BytecodeParseHelper.
Josef Eisl <josef.eisl@jku.at>
parents:
14899
diff
changeset
|
1149 public F getFrameState() { |
be4c28683c08
Moved bytecode parsing from GraphBuilderPhase to BytecodeParseHelper.
Josef Eisl <josef.eisl@jku.at>
parents:
14899
diff
changeset
|
1150 return frameState; |
be4c28683c08
Moved bytecode parsing from GraphBuilderPhase to BytecodeParseHelper.
Josef Eisl <josef.eisl@jku.at>
parents:
14899
diff
changeset
|
1151 } |
be4c28683c08
Moved bytecode parsing from GraphBuilderPhase to BytecodeParseHelper.
Josef Eisl <josef.eisl@jku.at>
parents:
14899
diff
changeset
|
1152 |
14922
ea57ed7085cf
Move options from GraphBuilderPhase to AbstractBytecodeParser.
Josef Eisl <josef.eisl@jku.at>
parents:
14902
diff
changeset
|
1153 protected final int traceLevel = Options.TraceBytecodeParserLevel.getValue(); |
ea57ed7085cf
Move options from GraphBuilderPhase to AbstractBytecodeParser.
Josef Eisl <josef.eisl@jku.at>
parents:
14902
diff
changeset
|
1154 |
ea57ed7085cf
Move options from GraphBuilderPhase to AbstractBytecodeParser.
Josef Eisl <josef.eisl@jku.at>
parents:
14902
diff
changeset
|
1155 protected void traceInstruction(int bci, int opcode, boolean blockStart) { |
ea57ed7085cf
Move options from GraphBuilderPhase to AbstractBytecodeParser.
Josef Eisl <josef.eisl@jku.at>
parents:
14902
diff
changeset
|
1156 if (traceLevel >= TRACELEVEL_INSTRUCTIONS && Debug.isLogEnabled()) { |
ea57ed7085cf
Move options from GraphBuilderPhase to AbstractBytecodeParser.
Josef Eisl <josef.eisl@jku.at>
parents:
14902
diff
changeset
|
1157 StringBuilder sb = new StringBuilder(40); |
ea57ed7085cf
Move options from GraphBuilderPhase to AbstractBytecodeParser.
Josef Eisl <josef.eisl@jku.at>
parents:
14902
diff
changeset
|
1158 sb.append(blockStart ? '+' : '|'); |
ea57ed7085cf
Move options from GraphBuilderPhase to AbstractBytecodeParser.
Josef Eisl <josef.eisl@jku.at>
parents:
14902
diff
changeset
|
1159 if (bci < 10) { |
ea57ed7085cf
Move options from GraphBuilderPhase to AbstractBytecodeParser.
Josef Eisl <josef.eisl@jku.at>
parents:
14902
diff
changeset
|
1160 sb.append(" "); |
ea57ed7085cf
Move options from GraphBuilderPhase to AbstractBytecodeParser.
Josef Eisl <josef.eisl@jku.at>
parents:
14902
diff
changeset
|
1161 } else if (bci < 100) { |
ea57ed7085cf
Move options from GraphBuilderPhase to AbstractBytecodeParser.
Josef Eisl <josef.eisl@jku.at>
parents:
14902
diff
changeset
|
1162 sb.append(' '); |
ea57ed7085cf
Move options from GraphBuilderPhase to AbstractBytecodeParser.
Josef Eisl <josef.eisl@jku.at>
parents:
14902
diff
changeset
|
1163 } |
ea57ed7085cf
Move options from GraphBuilderPhase to AbstractBytecodeParser.
Josef Eisl <josef.eisl@jku.at>
parents:
14902
diff
changeset
|
1164 sb.append(bci).append(": ").append(Bytecodes.nameOf(opcode)); |
ea57ed7085cf
Move options from GraphBuilderPhase to AbstractBytecodeParser.
Josef Eisl <josef.eisl@jku.at>
parents:
14902
diff
changeset
|
1165 for (int i = bci + 1; i < stream.nextBCI(); ++i) { |
ea57ed7085cf
Move options from GraphBuilderPhase to AbstractBytecodeParser.
Josef Eisl <josef.eisl@jku.at>
parents:
14902
diff
changeset
|
1166 sb.append(' ').append(stream.readUByte(i)); |
ea57ed7085cf
Move options from GraphBuilderPhase to AbstractBytecodeParser.
Josef Eisl <josef.eisl@jku.at>
parents:
14902
diff
changeset
|
1167 } |
ea57ed7085cf
Move options from GraphBuilderPhase to AbstractBytecodeParser.
Josef Eisl <josef.eisl@jku.at>
parents:
14902
diff
changeset
|
1168 if (!currentBlock.jsrScope.isEmpty()) { |
ea57ed7085cf
Move options from GraphBuilderPhase to AbstractBytecodeParser.
Josef Eisl <josef.eisl@jku.at>
parents:
14902
diff
changeset
|
1169 sb.append(' ').append(currentBlock.jsrScope); |
ea57ed7085cf
Move options from GraphBuilderPhase to AbstractBytecodeParser.
Josef Eisl <josef.eisl@jku.at>
parents:
14902
diff
changeset
|
1170 } |
ea57ed7085cf
Move options from GraphBuilderPhase to AbstractBytecodeParser.
Josef Eisl <josef.eisl@jku.at>
parents:
14902
diff
changeset
|
1171 Debug.log("%s", sb); |
ea57ed7085cf
Move options from GraphBuilderPhase to AbstractBytecodeParser.
Josef Eisl <josef.eisl@jku.at>
parents:
14902
diff
changeset
|
1172 } |
ea57ed7085cf
Move options from GraphBuilderPhase to AbstractBytecodeParser.
Josef Eisl <josef.eisl@jku.at>
parents:
14902
diff
changeset
|
1173 } |
ea57ed7085cf
Move options from GraphBuilderPhase to AbstractBytecodeParser.
Josef Eisl <josef.eisl@jku.at>
parents:
14902
diff
changeset
|
1174 |
14818
3d04915a55c6
added kindinterface for valuenode and variable and started to generalize some methods used for bytecodeparsing
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
1175 } |