Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(766)

Unified Diff: runtime/vm/flow_graph_compiler_ia32.cc

Issue 10855019: Add a function's initial stack check to the IL instruction stream. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Created 8 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: runtime/vm/flow_graph_compiler_ia32.cc
diff --git a/runtime/vm/flow_graph_compiler_ia32.cc b/runtime/vm/flow_graph_compiler_ia32.cc
index 829a78f674de5d9bc6f74165c5205104d647f511..9313d957f981c63fb8b811201bbf3f973af02704 100644
--- a/runtime/vm/flow_graph_compiler_ia32.cc
+++ b/runtime/vm/flow_graph_compiler_ia32.cc
@@ -665,6 +665,7 @@ void FlowGraphCompiler::EmitInstructionPrologue(Instruction* instr) {
void FlowGraphCompiler::CopyParameters() {
+ __ Comment("Copy parameters");
const Function& function = parsed_function().function();
const bool is_native_instance_closure =
function.is_native() && function.IsImplicitInstanceClosureFunction();
@@ -940,6 +941,7 @@ void FlowGraphCompiler::CompileGraph() {
const int parameter_count = function.num_fixed_parameters();
const int num_copied_params = parsed_function().copied_parameter_count();
const int local_count = parsed_function().stack_local_count();
+ __ Comment("Enter frame");
if (IsLeaf()) {
AssemblerMacros::EnterDartLeafFrame(assembler(), (StackSize() * kWordSize));
} else {
@@ -956,6 +958,7 @@ void FlowGraphCompiler::CompileGraph() {
const bool check_arguments = function.IsClosureFunction();
#endif
if (check_arguments) {
+ __ Comment("Check argument count");
// Check that num_fixed <= argc <= num_params.
Label argc_in_range;
// Total number of args is the first Smi in args descriptor array (EDX).
@@ -986,6 +989,7 @@ void FlowGraphCompiler::CompileGraph() {
// Initialize (non-argument) stack allocated locals to null.
if (stack_slot_count > 0) {
+ __ Comment("Initialize spill slots");
const Immediate raw_null =
Immediate(reinterpret_cast<intptr_t>(Object::null()));
__ movl(EAX, raw_null);
@@ -995,18 +999,6 @@ void FlowGraphCompiler::CompileGraph() {
}
}
- if (!IsLeaf()) {
- // Generate stack overflow check.
- __ cmpl(ESP,
- Address::Absolute(Isolate::Current()->stack_limit_address()));
- Label no_stack_overflow;
- __ j(ABOVE, &no_stack_overflow, Assembler::kNearJump);
- GenerateCallRuntime(Isolate::kNoDeoptId,
- function.token_pos(),
- CatchClauseNode::kInvalidTryIndex,
- kStackOverflowRuntimeEntry);
- __ Bind(&no_stack_overflow);
- }
if (FLAG_print_scopes) {
// Print the function scope (again) after generating the prologue in order
// to see annotations such as allocation indices of locals.

Powered by Google App Engine
This is Rietveld 408576698