comparison src/share/vm/c1/c1_IR.hpp @ 1295:3cf667df43ef

6919934: JSR 292 needs to support x86 C1 Summary: This implements JSR 292 support for C1 x86. Reviewed-by: never, jrose, kvn
author twisti
date Tue, 09 Mar 2010 20:16:19 +0100
parents f70b0d9ab095
children c18cbe5936b8 61b2245abf36
comparison
equal deleted inserted replaced
1293:51db1e4b379d 1295:3cf667df43ef
1 /* 1 /*
2 * Copyright 1999-2009 Sun Microsystems, Inc. All Rights Reserved. 2 * Copyright 1999-2010 Sun Microsystems, Inc. All Rights Reserved.
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4 * 4 *
5 * This code is free software; you can redistribute it and/or modify it 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 6 * under the terms of the GNU General Public License version 2 only, as
7 * published by the Free Software Foundation. 7 * published by the Free Software Foundation.
240 IRScopeDebugInfo* caller() { return _caller; } 240 IRScopeDebugInfo* caller() { return _caller; }
241 241
242 //Whether we should reexecute this bytecode for deopt 242 //Whether we should reexecute this bytecode for deopt
243 bool should_reexecute(); 243 bool should_reexecute();
244 244
245 void record_debug_info(DebugInformationRecorder* recorder, int pc_offset, bool topmost) { 245 void record_debug_info(DebugInformationRecorder* recorder, int pc_offset, bool topmost, bool is_method_handle_invoke = false) {
246 if (caller() != NULL) { 246 if (caller() != NULL) {
247 // Order is significant: Must record caller first. 247 // Order is significant: Must record caller first.
248 caller()->record_debug_info(recorder, pc_offset, false/*topmost*/); 248 caller()->record_debug_info(recorder, pc_offset, false/*topmost*/);
249 } 249 }
250 DebugToken* locvals = recorder->create_scope_values(locals()); 250 DebugToken* locvals = recorder->create_scope_values(locals());
251 DebugToken* expvals = recorder->create_scope_values(expressions()); 251 DebugToken* expvals = recorder->create_scope_values(expressions());
252 DebugToken* monvals = recorder->create_monitor_values(monitors()); 252 DebugToken* monvals = recorder->create_monitor_values(monitors());
253 // reexecute allowed only for the topmost frame 253 // reexecute allowed only for the topmost frame
254 bool reexecute = topmost ? should_reexecute() : false; 254 bool reexecute = topmost ? should_reexecute() : false;
255 bool is_method_handle_invoke = false;
256 bool return_oop = false; // This flag will be ignored since it used only for C2 with escape analysis. 255 bool return_oop = false; // This flag will be ignored since it used only for C2 with escape analysis.
257 recorder->describe_scope(pc_offset, scope()->method(), bci(), reexecute, is_method_handle_invoke, return_oop, locvals, expvals, monvals); 256 recorder->describe_scope(pc_offset, scope()->method(), bci(), reexecute, is_method_handle_invoke, return_oop, locvals, expvals, monvals);
258 } 257 }
259 }; 258 };
260 259
301 XHandlers* exception_handlers() const { return _exception_handlers; } 300 XHandlers* exception_handlers() const { return _exception_handlers; }
302 ValueStack* stack() const { return _stack; } 301 ValueStack* stack() const { return _stack; }
303 int bci() const { return _bci; } 302 int bci() const { return _bci; }
304 303
305 void add_register_oop(LIR_Opr opr); 304 void add_register_oop(LIR_Opr opr);
306 void record_debug_info(DebugInformationRecorder* recorder, int pc_offset); 305 void record_debug_info(DebugInformationRecorder* recorder, int pc_offset, bool is_method_handle_invoke = false);
307 306
308 CodeEmitInfo* next() const { return _next; } 307 CodeEmitInfo* next() const { return _next; }
309 void set_next(CodeEmitInfo* next) { _next = next; } 308 void set_next(CodeEmitInfo* next) { _next = next; }
310 309
311 int id() const { return _id; } 310 int id() const { return _id; }