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();