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