Mercurial > hg > truffle
comparison graal/com.oracle.graal.hotspot.amd64/src/com/oracle/graal/hotspot/amd64/AMD64HotSpotLIRGenerator.java @ 8643:3d2c2b68fe93
lower ExceptionObjectNode with a snippet (GRAAL-133)
author | Doug Simon <doug.simon@oracle.com> |
---|---|
date | Fri, 05 Apr 2013 02:33:42 +0200 |
parents | bea614953503 |
children | 2c0c708a0ad6 |
comparison
equal
deleted
inserted
replaced
8642:1093255fd0d4 | 8643:3d2c2b68fe93 |
---|---|
31 | 31 |
32 import com.oracle.graal.amd64.*; | 32 import com.oracle.graal.amd64.*; |
33 import com.oracle.graal.api.code.*; | 33 import com.oracle.graal.api.code.*; |
34 import com.oracle.graal.api.meta.*; | 34 import com.oracle.graal.api.meta.*; |
35 import com.oracle.graal.asm.*; | 35 import com.oracle.graal.asm.*; |
36 import com.oracle.graal.asm.amd64.AMD64Address.*; | 36 import com.oracle.graal.asm.amd64.AMD64Address.Scale; |
37 import com.oracle.graal.compiler.amd64.*; | 37 import com.oracle.graal.compiler.amd64.*; |
38 import com.oracle.graal.compiler.gen.*; | 38 import com.oracle.graal.compiler.gen.*; |
39 import com.oracle.graal.graph.*; | 39 import com.oracle.graal.graph.*; |
40 import com.oracle.graal.hotspot.*; | 40 import com.oracle.graal.hotspot.*; |
41 import com.oracle.graal.hotspot.meta.*; | 41 import com.oracle.graal.hotspot.meta.*; |
42 import com.oracle.graal.hotspot.nodes.*; | 42 import com.oracle.graal.hotspot.nodes.*; |
43 import com.oracle.graal.hotspot.stubs.*; | 43 import com.oracle.graal.hotspot.stubs.*; |
44 import com.oracle.graal.lir.*; | 44 import com.oracle.graal.lir.*; |
45 import com.oracle.graal.lir.StandardOp.*; | 45 import com.oracle.graal.lir.StandardOp.ParametersOp; |
46 import com.oracle.graal.lir.amd64.*; | 46 import com.oracle.graal.lir.amd64.*; |
47 import com.oracle.graal.lir.amd64.AMD64Move.*; | 47 import com.oracle.graal.lir.amd64.AMD64Move.CompareAndSwapOp; |
48 import com.oracle.graal.lir.amd64.AMD64Move.MoveFromRegOp; | |
48 import com.oracle.graal.nodes.*; | 49 import com.oracle.graal.nodes.*; |
49 import com.oracle.graal.nodes.cfg.*; | 50 import com.oracle.graal.nodes.cfg.*; |
50 import com.oracle.graal.nodes.java.*; | 51 import com.oracle.graal.nodes.java.MethodCallTargetNode.InvokeKind; |
51 import com.oracle.graal.nodes.java.MethodCallTargetNode.*; | |
52 | 52 |
53 /** | 53 /** |
54 * LIR generator specialized for AMD64 HotSpot. | 54 * LIR generator specialized for AMD64 HotSpot. |
55 */ | 55 */ |
56 final class AMD64HotSpotLIRGenerator extends AMD64LIRGenerator implements HotSpotLIRGenerator { | 56 final class AMD64HotSpotLIRGenerator extends AMD64LIRGenerator implements HotSpotLIRGenerator { |
163 public void visitSafepointNode(SafepointNode i) { | 163 public void visitSafepointNode(SafepointNode i) { |
164 LIRFrameState info = state(); | 164 LIRFrameState info = state(); |
165 append(new AMD64SafepointOp(info, runtime().config, this)); | 165 append(new AMD64SafepointOp(info, runtime().config, this)); |
166 } | 166 } |
167 | 167 |
168 @Override | |
169 public void visitLoadException(LoadExceptionObjectNode x) { | |
170 HotSpotVMConfig config = runtime().config; | |
171 RegisterValue thread = runtime().threadRegister().asValue(); | |
172 Value exception = emitLoad(Kind.Object, thread, config.threadExceptionOopOffset, Value.ILLEGAL, 0, false); | |
173 emitStore(Kind.Object, thread, config.threadExceptionOopOffset, Value.ILLEGAL, 0, Constant.NULL_OBJECT, false); | |
174 emitStore(Kind.Long, thread, config.threadExceptionPcOffset, Value.ILLEGAL, 0, Constant.LONG_0, false); | |
175 setResult(x, exception); | |
176 } | |
177 | |
178 @SuppressWarnings("hiding") | 168 @SuppressWarnings("hiding") |
179 @Override | 169 @Override |
180 public void visitDirectCompareAndSwap(DirectCompareAndSwapNode x) { | 170 public void visitDirectCompareAndSwap(DirectCompareAndSwapNode x) { |
181 Kind kind = x.newValue().kind(); | 171 Kind kind = x.newValue().kind(); |
182 assert kind == x.expectedValue().kind(); | 172 assert kind == x.expectedValue().kind(); |