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

Side by Side Diff: src/ia32/codegen-ia32.cc

Issue 1019006: Fix excessive stack usage by compiler due to local in recursive scope. (Closed) Base URL: http://v8.googlecode.com/svn/branches/bleeding_edge/
Patch Set: Created 10 years, 9 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 unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2010 the V8 project authors. All rights reserved. 1 // Copyright 2010 the V8 project authors. All rights reserved.
2 // Redistribution and use in source and binary forms, with or without 2 // Redistribution and use in source and binary forms, with or without
3 // modification, are permitted provided that the following conditions are 3 // modification, are permitted provided that the following conditions are
4 // met: 4 // met:
5 // 5 //
6 // * Redistributions of source code must retain the above copyright 6 // * Redistributions of source code must retain the above copyright
7 // notice, this list of conditions and the following disclaimer. 7 // notice, this list of conditions and the following disclaimer.
8 // * Redistributions in binary form must reproduce the above 8 // * Redistributions in binary form must reproduce the above
9 // copyright notice, this list of conditions and the following 9 // copyright notice, this list of conditions and the following
10 // disclaimer in the documentation and/or other materials provided 10 // disclaimer in the documentation and/or other materials provided
(...skipping 542 matching lines...) Expand 10 before | Expand all | Expand 10 after
553 } 553 }
554 value->set_untagged_int32(false); 554 value->set_untagged_int32(false);
555 } 555 }
556 556
557 557
558 void CodeGenerator::Load(Expression* expr) { 558 void CodeGenerator::Load(Expression* expr) {
559 #ifdef DEBUG 559 #ifdef DEBUG
560 int original_height = frame_->height(); 560 int original_height = frame_->height();
561 #endif 561 #endif
562 ASSERT(!in_spilled_code()); 562 ASSERT(!in_spilled_code());
563 JumpTarget done;
564 563
565 // If the expression should be a side-effect-free 32-bit int computation, 564 // If the expression should be a side-effect-free 32-bit int computation,
566 // compile that SafeInt32 path, and a bailout path. 565 // compile that SafeInt32 path, and a bailout path.
567 if (!in_safe_int32_mode() && 566 if (!in_safe_int32_mode() &&
568 safe_int32_mode_enabled() && 567 safe_int32_mode_enabled() &&
569 expr->side_effect_free() && 568 expr->side_effect_free() &&
570 expr->num_bit_ops() > 2 && 569 expr->num_bit_ops() > 2 &&
571 CpuFeatures::IsSupported(SSE2)) { 570 CpuFeatures::IsSupported(SSE2)) {
572 BreakTarget unsafe_bailout; 571 BreakTarget unsafe_bailout;
572 JumpTarget done;
573 unsafe_bailout.set_expected_height(frame_->height()); 573 unsafe_bailout.set_expected_height(frame_->height());
574 LoadInSafeInt32Mode(expr, &unsafe_bailout); 574 LoadInSafeInt32Mode(expr, &unsafe_bailout);
575 done.Jump(); 575 done.Jump();
576 576
577 if (unsafe_bailout.is_linked()) { 577 if (unsafe_bailout.is_linked()) {
578 unsafe_bailout.Bind(); 578 unsafe_bailout.Bind();
579 LoadWithSafeInt32ModeDisabled(expr); 579 LoadWithSafeInt32ModeDisabled(expr);
580 } 580 }
581 done.Bind();
581 } else { 582 } else {
582 JumpTarget true_target; 583 JumpTarget true_target;
583 JumpTarget false_target; 584 JumpTarget false_target;
584 585
585 ControlDestination dest(&true_target, &false_target, true); 586 ControlDestination dest(&true_target, &false_target, true);
586 LoadCondition(expr, &dest, false); 587 LoadCondition(expr, &dest, false);
587 588
588 if (dest.false_was_fall_through()) { 589 if (dest.false_was_fall_through()) {
589 // The false target was just bound. 590 // The false target was just bound.
590 JumpTarget loaded; 591 JumpTarget loaded;
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after
626 } 627 }
627 } 628 }
628 if (false_target.is_linked()) { 629 if (false_target.is_linked()) {
629 false_target.Bind(); 630 false_target.Bind();
630 frame_->Push(Factory::false_value()); 631 frame_->Push(Factory::false_value());
631 } 632 }
632 loaded.Bind(); 633 loaded.Bind();
633 } 634 }
634 } 635 }
635 } 636 }
636 done.Bind();
637 ASSERT(has_valid_frame()); 637 ASSERT(has_valid_frame());
638 ASSERT(frame_->height() == original_height + 1); 638 ASSERT(frame_->height() == original_height + 1);
639 } 639 }
640 640
641 641
642 void CodeGenerator::LoadGlobal() { 642 void CodeGenerator::LoadGlobal() {
643 if (in_spilled_code()) { 643 if (in_spilled_code()) {
644 frame_->EmitPush(GlobalObject()); 644 frame_->EmitPush(GlobalObject());
645 } else { 645 } else {
646 Result temp = allocator_->Allocate(); 646 Result temp = allocator_->Allocate();
(...skipping 11546 matching lines...) Expand 10 before | Expand all | Expand 10 after
12193 12193
12194 // Call the runtime; it returns -1 (less), 0 (equal), or 1 (greater) 12194 // Call the runtime; it returns -1 (less), 0 (equal), or 1 (greater)
12195 // tagged as a small integer. 12195 // tagged as a small integer.
12196 __ bind(&runtime); 12196 __ bind(&runtime);
12197 __ TailCallRuntime(Runtime::kStringCompare, 2, 1); 12197 __ TailCallRuntime(Runtime::kStringCompare, 2, 1);
12198 } 12198 }
12199 12199
12200 #undef __ 12200 #undef __
12201 12201
12202 } } // namespace v8::internal 12202 } } // namespace v8::internal
OLDNEW
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698