| OLD | NEW |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 |
| OLD | NEW |