comparison graal/GraalCompiler/src/com/sun/c1x/asm/AbstractAssembler.java @ 2671:d8601d421b96

New Deoptimize node, remove ResolveClass node and replace it with deoptimization
author Gilles Duboscq <gilles.duboscq@oracle.com>
date Thu, 12 May 2011 17:17:50 +0200
parents 46586c77b129
children
comparison
equal deleted inserted replaced
2670:50b181d88c9f 2671:d8601d421b96
42 42
43 public final Buffer codeBuffer; 43 public final Buffer codeBuffer;
44 public final CiTarget target; 44 public final CiTarget target;
45 public final CiTargetMethod targetMethod; 45 public final CiTargetMethod targetMethod;
46 public List<ExceptionInfo> exceptionInfoList; 46 public List<ExceptionInfo> exceptionInfoList;
47 protected int lastSafepointPos;
47 48
48 public AbstractAssembler(CiTarget target) { 49 public AbstractAssembler(CiTarget target) {
49 this.target = target; 50 this.target = target;
50 this.targetMethod = new CiTargetMethod(); 51 this.targetMethod = new CiTargetMethod();
51 this.codeBuffer = new Buffer(target.arch.byteOrder); 52 this.codeBuffer = new Buffer(target.arch.byteOrder);
160 } 161 }
161 162
162 public void recordImplicitException(int pcOffset, LIRDebugInfo info) { 163 public void recordImplicitException(int pcOffset, LIRDebugInfo info) {
163 // record an implicit exception point 164 // record an implicit exception point
164 if (info != null) { 165 if (info != null) {
166 assert lastSafepointPos < pcOffset;
167 lastSafepointPos = pcOffset;
165 targetMethod.recordSafepoint(pcOffset, info.debugInfo()); 168 targetMethod.recordSafepoint(pcOffset, info.debugInfo());
166 recordExceptionHandlers(pcOffset, info); 169 recordExceptionHandlers(pcOffset, info);
167 } 170 }
168 } 171 }
169 172
170 protected void recordDirectCall(int posBefore, int posAfter, Object target, LIRDebugInfo info) { 173 protected void recordDirectCall(int posBefore, int posAfter, Object target, LIRDebugInfo info) {
171 CiDebugInfo debugInfo = info != null ? info.debugInfo() : null; 174 CiDebugInfo debugInfo = info != null ? info.debugInfo() : null;
175 assert lastSafepointPos < posAfter;
176 lastSafepointPos = posAfter;
172 targetMethod.recordCall(posBefore, target, debugInfo, true); 177 targetMethod.recordCall(posBefore, target, debugInfo, true);
173 } 178 }
174 179
175 protected void recordIndirectCall(int posBefore, int posAfter, Object target, LIRDebugInfo info) { 180 protected void recordIndirectCall(int posBefore, int posAfter, Object target, LIRDebugInfo info) {
176 CiDebugInfo debugInfo = info != null ? info.debugInfo() : null; 181 CiDebugInfo debugInfo = info != null ? info.debugInfo() : null;
182 assert lastSafepointPos < posAfter;
183 lastSafepointPos = posAfter;
177 targetMethod.recordCall(posBefore, target, debugInfo, false); 184 targetMethod.recordCall(posBefore, target, debugInfo, false);
178 } 185 }
179 186
180 public void recordSafepoint(int pos, LIRDebugInfo info) { 187 public void recordSafepoint(int pos, LIRDebugInfo info) {
181 // safepoints always need debug info 188 // safepoints always need debug info
182 CiDebugInfo debugInfo = info.debugInfo(); 189 CiDebugInfo debugInfo = info.debugInfo();
190 assert lastSafepointPos < pos;
191 lastSafepointPos = pos;
183 targetMethod.recordSafepoint(pos, debugInfo); 192 targetMethod.recordSafepoint(pos, debugInfo);
184 } 193 }
185 194
186 public CiAddress recordDataReferenceInCode(CiConstant data) { 195 public CiAddress recordDataReferenceInCode(CiConstant data) {
187 assert data != null; 196 assert data != null;
225 } 234 }
226 235
227 public void blockComment(String s) { 236 public void blockComment(String s) {
228 targetMethod.addAnnotation(new CodeComment(codeBuffer.position(), s)); 237 targetMethod.addAnnotation(new CodeComment(codeBuffer.position(), s));
229 } 238 }
239
240 public int lastSafepointPos() {
241 return lastSafepointPos;
242 }
230 } 243 }