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

Side by Side Diff: src/mips/lithium-codegen-mips.cc

Issue 23064017: Use V8_FINAL and V8_OVERRIDE in various places, fixing bugs revealed by them. (Closed) Base URL: https://v8.googlecode.com/svn/branches/bleeding_edge
Patch Set: Use V8_FINAL and V8_OVERRIDE instead. Created 7 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 unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « src/mips/lithium-codegen-mips.h ('k') | src/mips/lithium-gap-resolver-mips.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2012 the V8 project authors. All rights reserved. 1 // Copyright 2012 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 18 matching lines...) Expand all
29 29
30 #include "mips/lithium-codegen-mips.h" 30 #include "mips/lithium-codegen-mips.h"
31 #include "mips/lithium-gap-resolver-mips.h" 31 #include "mips/lithium-gap-resolver-mips.h"
32 #include "code-stubs.h" 32 #include "code-stubs.h"
33 #include "stub-cache.h" 33 #include "stub-cache.h"
34 34
35 namespace v8 { 35 namespace v8 {
36 namespace internal { 36 namespace internal {
37 37
38 38
39 class SafepointGenerator FINAL : public CallWrapper { 39 class SafepointGenerator V8_FINAL : public CallWrapper {
40 public: 40 public:
41 SafepointGenerator(LCodeGen* codegen, 41 SafepointGenerator(LCodeGen* codegen,
42 LPointerMap* pointers, 42 LPointerMap* pointers,
43 Safepoint::DeoptMode mode) 43 Safepoint::DeoptMode mode)
44 : codegen_(codegen), 44 : codegen_(codegen),
45 pointers_(pointers), 45 pointers_(pointers),
46 deopt_mode_(mode) { } 46 deopt_mode_(mode) { }
47 virtual ~SafepointGenerator() {} 47 virtual ~SafepointGenerator() {}
48 48
49 virtual void BeforeCall(int call_size) const OVERRIDE {} 49 virtual void BeforeCall(int call_size) const V8_OVERRIDE {}
50 50
51 virtual void AfterCall() const OVERRIDE { 51 virtual void AfterCall() const V8_OVERRIDE {
52 codegen_->RecordSafepoint(pointers_, deopt_mode_); 52 codegen_->RecordSafepoint(pointers_, deopt_mode_);
53 } 53 }
54 54
55 private: 55 private:
56 LCodeGen* codegen_; 56 LCodeGen* codegen_;
57 LPointerMap* pointers_; 57 LPointerMap* pointers_;
58 Safepoint::DeoptMode deopt_mode_; 58 Safepoint::DeoptMode deopt_mode_;
59 }; 59 };
60 60
61 61
(...skipping 2536 matching lines...) Expand 10 before | Expand all | Expand 10 after
2598 __ Branch(&true_label, eq, result, Operand(zero_reg)); 2598 __ Branch(&true_label, eq, result, Operand(zero_reg));
2599 __ li(result, Operand(factory()->false_value())); 2599 __ li(result, Operand(factory()->false_value()));
2600 __ Branch(&done); 2600 __ Branch(&done);
2601 __ bind(&true_label); 2601 __ bind(&true_label);
2602 __ li(result, Operand(factory()->true_value())); 2602 __ li(result, Operand(factory()->true_value()));
2603 __ bind(&done); 2603 __ bind(&done);
2604 } 2604 }
2605 2605
2606 2606
2607 void LCodeGen::DoInstanceOfKnownGlobal(LInstanceOfKnownGlobal* instr) { 2607 void LCodeGen::DoInstanceOfKnownGlobal(LInstanceOfKnownGlobal* instr) {
2608 class DeferredInstanceOfKnownGlobal FINAL : public LDeferredCode { 2608 class DeferredInstanceOfKnownGlobal V8_FINAL : public LDeferredCode {
2609 public: 2609 public:
2610 DeferredInstanceOfKnownGlobal(LCodeGen* codegen, 2610 DeferredInstanceOfKnownGlobal(LCodeGen* codegen,
2611 LInstanceOfKnownGlobal* instr) 2611 LInstanceOfKnownGlobal* instr)
2612 : LDeferredCode(codegen), instr_(instr) { } 2612 : LDeferredCode(codegen), instr_(instr) { }
2613 virtual void Generate() OVERRIDE { 2613 virtual void Generate() V8_OVERRIDE {
2614 codegen()->DoDeferredInstanceOfKnownGlobal(instr_, &map_check_); 2614 codegen()->DoDeferredInstanceOfKnownGlobal(instr_, &map_check_);
2615 } 2615 }
2616 virtual LInstruction* instr() OVERRIDE { return instr_; } 2616 virtual LInstruction* instr() V8_OVERRIDE { return instr_; }
2617 Label* map_check() { return &map_check_; } 2617 Label* map_check() { return &map_check_; }
2618 2618
2619 private: 2619 private:
2620 LInstanceOfKnownGlobal* instr_; 2620 LInstanceOfKnownGlobal* instr_;
2621 Label map_check_; 2621 Label map_check_;
2622 }; 2622 };
2623 2623
2624 DeferredInstanceOfKnownGlobal* deferred; 2624 DeferredInstanceOfKnownGlobal* deferred;
2625 deferred = new(zone()) DeferredInstanceOfKnownGlobal(this, instr); 2625 deferred = new(zone()) DeferredInstanceOfKnownGlobal(this, instr);
2626 2626
(...skipping 965 matching lines...) Expand 10 before | Expand all | Expand 10 after
3592 __ mov(result, input); 3592 __ mov(result, input);
3593 __ subu(result, zero_reg, input); 3593 __ subu(result, zero_reg, input);
3594 // Overflow if result is still negative, i.e. 0x80000000. 3594 // Overflow if result is still negative, i.e. 0x80000000.
3595 DeoptimizeIf(lt, instr->environment(), result, Operand(zero_reg)); 3595 DeoptimizeIf(lt, instr->environment(), result, Operand(zero_reg));
3596 __ bind(&done); 3596 __ bind(&done);
3597 } 3597 }
3598 3598
3599 3599
3600 void LCodeGen::DoMathAbs(LMathAbs* instr) { 3600 void LCodeGen::DoMathAbs(LMathAbs* instr) {
3601 // Class for deferred case. 3601 // Class for deferred case.
3602 class DeferredMathAbsTaggedHeapNumber FINAL : public LDeferredCode { 3602 class DeferredMathAbsTaggedHeapNumber V8_FINAL : public LDeferredCode {
3603 public: 3603 public:
3604 DeferredMathAbsTaggedHeapNumber(LCodeGen* codegen, LMathAbs* instr) 3604 DeferredMathAbsTaggedHeapNumber(LCodeGen* codegen, LMathAbs* instr)
3605 : LDeferredCode(codegen), instr_(instr) { } 3605 : LDeferredCode(codegen), instr_(instr) { }
3606 virtual void Generate() OVERRIDE { 3606 virtual void Generate() V8_OVERRIDE {
3607 codegen()->DoDeferredMathAbsTaggedHeapNumber(instr_); 3607 codegen()->DoDeferredMathAbsTaggedHeapNumber(instr_);
3608 } 3608 }
3609 virtual LInstruction* instr() OVERRIDE { return instr_; } 3609 virtual LInstruction* instr() V8_OVERRIDE { return instr_; }
3610 private: 3610 private:
3611 LMathAbs* instr_; 3611 LMathAbs* instr_;
3612 }; 3612 };
3613 3613
3614 Representation r = instr->hydrogen()->value()->representation(); 3614 Representation r = instr->hydrogen()->value()->representation();
3615 if (r.IsDouble()) { 3615 if (r.IsDouble()) {
3616 FPURegister input = ToDoubleRegister(instr->value()); 3616 FPURegister input = ToDoubleRegister(instr->value());
3617 FPURegister result = ToDoubleRegister(instr->result()); 3617 FPURegister result = ToDoubleRegister(instr->result());
3618 __ abs_d(result, input); 3618 __ abs_d(result, input);
3619 } else if (r.IsSmiOrInteger32()) { 3619 } else if (r.IsSmiOrInteger32()) {
(...skipping 174 matching lines...) Expand 10 before | Expand all | Expand 10 after
3794 __ CallStub(&stub); 3794 __ CallStub(&stub);
3795 } else { 3795 } else {
3796 ASSERT(exponent_type.IsDouble()); 3796 ASSERT(exponent_type.IsDouble());
3797 MathPowStub stub(MathPowStub::DOUBLE); 3797 MathPowStub stub(MathPowStub::DOUBLE);
3798 __ CallStub(&stub); 3798 __ CallStub(&stub);
3799 } 3799 }
3800 } 3800 }
3801 3801
3802 3802
3803 void LCodeGen::DoRandom(LRandom* instr) { 3803 void LCodeGen::DoRandom(LRandom* instr) {
3804 class DeferredDoRandom FINAL : public LDeferredCode { 3804 class DeferredDoRandom V8_FINAL : public LDeferredCode {
3805 public: 3805 public:
3806 DeferredDoRandom(LCodeGen* codegen, LRandom* instr) 3806 DeferredDoRandom(LCodeGen* codegen, LRandom* instr)
3807 : LDeferredCode(codegen), instr_(instr) { } 3807 : LDeferredCode(codegen), instr_(instr) { }
3808 virtual void Generate() OVERRIDE { codegen()->DoDeferredRandom(instr_); } 3808 virtual void Generate() V8_OVERRIDE { codegen()->DoDeferredRandom(instr_); }
3809 virtual LInstruction* instr() OVERRIDE { return instr_; } 3809 virtual LInstruction* instr() V8_OVERRIDE { return instr_; }
3810 private: 3810 private:
3811 LRandom* instr_; 3811 LRandom* instr_;
3812 }; 3812 };
3813 3813
3814 DeferredDoRandom* deferred = new(zone()) DeferredDoRandom(this, instr); 3814 DeferredDoRandom* deferred = new(zone()) DeferredDoRandom(this, instr);
3815 // Having marked this instruction as a call we can use any 3815 // Having marked this instruction as a call we can use any
3816 // registers. 3816 // registers.
3817 ASSERT(ToDoubleRegister(instr->result()).is(f0)); 3817 ASSERT(ToDoubleRegister(instr->result()).is(f0));
3818 ASSERT(ToRegister(instr->global_object()).is(a0)); 3818 ASSERT(ToRegister(instr->global_object()).is(a0));
3819 3819
(...skipping 634 matching lines...) Expand 10 before | Expand all | Expand 10 after
4454 4454
4455 void LCodeGen::DoStringAdd(LStringAdd* instr) { 4455 void LCodeGen::DoStringAdd(LStringAdd* instr) {
4456 __ push(ToRegister(instr->left())); 4456 __ push(ToRegister(instr->left()));
4457 __ push(ToRegister(instr->right())); 4457 __ push(ToRegister(instr->right()));
4458 StringAddStub stub(instr->hydrogen()->flags()); 4458 StringAddStub stub(instr->hydrogen()->flags());
4459 CallCode(stub.GetCode(isolate()), RelocInfo::CODE_TARGET, instr); 4459 CallCode(stub.GetCode(isolate()), RelocInfo::CODE_TARGET, instr);
4460 } 4460 }
4461 4461
4462 4462
4463 void LCodeGen::DoStringCharCodeAt(LStringCharCodeAt* instr) { 4463 void LCodeGen::DoStringCharCodeAt(LStringCharCodeAt* instr) {
4464 class DeferredStringCharCodeAt FINAL : public LDeferredCode { 4464 class DeferredStringCharCodeAt V8_FINAL : public LDeferredCode {
4465 public: 4465 public:
4466 DeferredStringCharCodeAt(LCodeGen* codegen, LStringCharCodeAt* instr) 4466 DeferredStringCharCodeAt(LCodeGen* codegen, LStringCharCodeAt* instr)
4467 : LDeferredCode(codegen), instr_(instr) { } 4467 : LDeferredCode(codegen), instr_(instr) { }
4468 virtual void Generate() OVERRIDE { 4468 virtual void Generate() V8_OVERRIDE {
4469 codegen()->DoDeferredStringCharCodeAt(instr_); 4469 codegen()->DoDeferredStringCharCodeAt(instr_);
4470 } 4470 }
4471 virtual LInstruction* instr() OVERRIDE { return instr_; } 4471 virtual LInstruction* instr() V8_OVERRIDE { return instr_; }
4472 private: 4472 private:
4473 LStringCharCodeAt* instr_; 4473 LStringCharCodeAt* instr_;
4474 }; 4474 };
4475 4475
4476 DeferredStringCharCodeAt* deferred = 4476 DeferredStringCharCodeAt* deferred =
4477 new(zone()) DeferredStringCharCodeAt(this, instr); 4477 new(zone()) DeferredStringCharCodeAt(this, instr);
4478 StringCharLoadGenerator::Generate(masm(), 4478 StringCharLoadGenerator::Generate(masm(),
4479 ToRegister(instr->string()), 4479 ToRegister(instr->string()),
4480 ToRegister(instr->index()), 4480 ToRegister(instr->index()),
4481 ToRegister(instr->result()), 4481 ToRegister(instr->result()),
(...skipping 26 matching lines...) Expand all
4508 __ push(index); 4508 __ push(index);
4509 } 4509 }
4510 CallRuntimeFromDeferred(Runtime::kStringCharCodeAt, 2, instr); 4510 CallRuntimeFromDeferred(Runtime::kStringCharCodeAt, 2, instr);
4511 __ AssertSmi(v0); 4511 __ AssertSmi(v0);
4512 __ SmiUntag(v0); 4512 __ SmiUntag(v0);
4513 __ StoreToSafepointRegisterSlot(v0, result); 4513 __ StoreToSafepointRegisterSlot(v0, result);
4514 } 4514 }
4515 4515
4516 4516
4517 void LCodeGen::DoStringCharFromCode(LStringCharFromCode* instr) { 4517 void LCodeGen::DoStringCharFromCode(LStringCharFromCode* instr) {
4518 class DeferredStringCharFromCode FINAL : public LDeferredCode { 4518 class DeferredStringCharFromCode V8_FINAL : public LDeferredCode {
4519 public: 4519 public:
4520 DeferredStringCharFromCode(LCodeGen* codegen, LStringCharFromCode* instr) 4520 DeferredStringCharFromCode(LCodeGen* codegen, LStringCharFromCode* instr)
4521 : LDeferredCode(codegen), instr_(instr) { } 4521 : LDeferredCode(codegen), instr_(instr) { }
4522 virtual void Generate() OVERRIDE { 4522 virtual void Generate() V8_OVERRIDE {
4523 codegen()->DoDeferredStringCharFromCode(instr_); 4523 codegen()->DoDeferredStringCharFromCode(instr_);
4524 } 4524 }
4525 virtual LInstruction* instr() OVERRIDE { return instr_; } 4525 virtual LInstruction* instr() V8_OVERRIDE { return instr_; }
4526 private: 4526 private:
4527 LStringCharFromCode* instr_; 4527 LStringCharFromCode* instr_;
4528 }; 4528 };
4529 4529
4530 DeferredStringCharFromCode* deferred = 4530 DeferredStringCharFromCode* deferred =
4531 new(zone()) DeferredStringCharFromCode(this, instr); 4531 new(zone()) DeferredStringCharFromCode(this, instr);
4532 4532
4533 ASSERT(instr->hydrogen()->value()->representation().IsInteger32()); 4533 ASSERT(instr->hydrogen()->value()->representation().IsInteger32());
4534 Register char_code = ToRegister(instr->char_code()); 4534 Register char_code = ToRegister(instr->char_code());
4535 Register result = ToRegister(instr->result()); 4535 Register result = ToRegister(instr->result());
(...skipping 65 matching lines...) Expand 10 before | Expand all | Expand 10 after
4601 LOperand* input = instr->value(); 4601 LOperand* input = instr->value();
4602 LOperand* output = instr->result(); 4602 LOperand* output = instr->result();
4603 4603
4604 FPURegister dbl_scratch = double_scratch0(); 4604 FPURegister dbl_scratch = double_scratch0();
4605 __ mtc1(ToRegister(input), dbl_scratch); 4605 __ mtc1(ToRegister(input), dbl_scratch);
4606 __ Cvt_d_uw(ToDoubleRegister(output), dbl_scratch, f22); 4606 __ Cvt_d_uw(ToDoubleRegister(output), dbl_scratch, f22);
4607 } 4607 }
4608 4608
4609 4609
4610 void LCodeGen::DoNumberTagI(LNumberTagI* instr) { 4610 void LCodeGen::DoNumberTagI(LNumberTagI* instr) {
4611 class DeferredNumberTagI FINAL : public LDeferredCode { 4611 class DeferredNumberTagI V8_FINAL : public LDeferredCode {
4612 public: 4612 public:
4613 DeferredNumberTagI(LCodeGen* codegen, LNumberTagI* instr) 4613 DeferredNumberTagI(LCodeGen* codegen, LNumberTagI* instr)
4614 : LDeferredCode(codegen), instr_(instr) { } 4614 : LDeferredCode(codegen), instr_(instr) { }
4615 virtual void Generate() OVERRIDE { 4615 virtual void Generate() V8_OVERRIDE {
4616 codegen()->DoDeferredNumberTagI(instr_, 4616 codegen()->DoDeferredNumberTagI(instr_,
4617 instr_->value(), 4617 instr_->value(),
4618 SIGNED_INT32); 4618 SIGNED_INT32);
4619 } 4619 }
4620 virtual LInstruction* instr() OVERRIDE { return instr_; } 4620 virtual LInstruction* instr() V8_OVERRIDE { return instr_; }
4621 private: 4621 private:
4622 LNumberTagI* instr_; 4622 LNumberTagI* instr_;
4623 }; 4623 };
4624 4624
4625 Register src = ToRegister(instr->value()); 4625 Register src = ToRegister(instr->value());
4626 Register dst = ToRegister(instr->result()); 4626 Register dst = ToRegister(instr->result());
4627 Register overflow = scratch0(); 4627 Register overflow = scratch0();
4628 4628
4629 DeferredNumberTagI* deferred = new(zone()) DeferredNumberTagI(this, instr); 4629 DeferredNumberTagI* deferred = new(zone()) DeferredNumberTagI(this, instr);
4630 __ SmiTagCheckOverflow(dst, src, overflow); 4630 __ SmiTagCheckOverflow(dst, src, overflow);
4631 __ BranchOnOverflow(deferred->entry(), overflow); 4631 __ BranchOnOverflow(deferred->entry(), overflow);
4632 __ bind(deferred->exit()); 4632 __ bind(deferred->exit());
4633 } 4633 }
4634 4634
4635 4635
4636 void LCodeGen::DoNumberTagU(LNumberTagU* instr) { 4636 void LCodeGen::DoNumberTagU(LNumberTagU* instr) {
4637 class DeferredNumberTagU FINAL : public LDeferredCode { 4637 class DeferredNumberTagU V8_FINAL : public LDeferredCode {
4638 public: 4638 public:
4639 DeferredNumberTagU(LCodeGen* codegen, LNumberTagU* instr) 4639 DeferredNumberTagU(LCodeGen* codegen, LNumberTagU* instr)
4640 : LDeferredCode(codegen), instr_(instr) { } 4640 : LDeferredCode(codegen), instr_(instr) { }
4641 virtual void Generate() OVERRIDE { 4641 virtual void Generate() V8_OVERRIDE {
4642 codegen()->DoDeferredNumberTagI(instr_, 4642 codegen()->DoDeferredNumberTagI(instr_,
4643 instr_->value(), 4643 instr_->value(),
4644 UNSIGNED_INT32); 4644 UNSIGNED_INT32);
4645 } 4645 }
4646 virtual LInstruction* instr() OVERRIDE { return instr_; } 4646 virtual LInstruction* instr() V8_OVERRIDE { return instr_; }
4647 private: 4647 private:
4648 LNumberTagU* instr_; 4648 LNumberTagU* instr_;
4649 }; 4649 };
4650 4650
4651 LOperand* input = instr->value(); 4651 LOperand* input = instr->value();
4652 ASSERT(input->IsRegister() && input->Equals(instr->result())); 4652 ASSERT(input->IsRegister() && input->Equals(instr->result()));
4653 Register reg = ToRegister(input); 4653 Register reg = ToRegister(input);
4654 4654
4655 DeferredNumberTagU* deferred = new(zone()) DeferredNumberTagU(this, instr); 4655 DeferredNumberTagU* deferred = new(zone()) DeferredNumberTagU(this, instr);
4656 __ Branch(deferred->entry(), hi, reg, Operand(Smi::kMaxValue)); 4656 __ Branch(deferred->entry(), hi, reg, Operand(Smi::kMaxValue));
(...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after
4707 // Done. Put the value in dbl_scratch into the value of the allocated heap 4707 // Done. Put the value in dbl_scratch into the value of the allocated heap
4708 // number. 4708 // number.
4709 __ bind(&done); 4709 __ bind(&done);
4710 __ sdc1(dbl_scratch, MemOperand(dst, HeapNumber::kValueOffset)); 4710 __ sdc1(dbl_scratch, MemOperand(dst, HeapNumber::kValueOffset));
4711 __ Addu(dst, dst, kHeapObjectTag); 4711 __ Addu(dst, dst, kHeapObjectTag);
4712 __ StoreToSafepointRegisterSlot(dst, dst); 4712 __ StoreToSafepointRegisterSlot(dst, dst);
4713 } 4713 }
4714 4714
4715 4715
4716 void LCodeGen::DoNumberTagD(LNumberTagD* instr) { 4716 void LCodeGen::DoNumberTagD(LNumberTagD* instr) {
4717 class DeferredNumberTagD FINAL : public LDeferredCode { 4717 class DeferredNumberTagD V8_FINAL : public LDeferredCode {
4718 public: 4718 public:
4719 DeferredNumberTagD(LCodeGen* codegen, LNumberTagD* instr) 4719 DeferredNumberTagD(LCodeGen* codegen, LNumberTagD* instr)
4720 : LDeferredCode(codegen), instr_(instr) { } 4720 : LDeferredCode(codegen), instr_(instr) { }
4721 virtual void Generate() OVERRIDE { 4721 virtual void Generate() V8_OVERRIDE {
4722 codegen()->DoDeferredNumberTagD(instr_); 4722 codegen()->DoDeferredNumberTagD(instr_);
4723 } 4723 }
4724 virtual LInstruction* instr() OVERRIDE { return instr_; } 4724 virtual LInstruction* instr() V8_OVERRIDE { return instr_; }
4725 private: 4725 private:
4726 LNumberTagD* instr_; 4726 LNumberTagD* instr_;
4727 }; 4727 };
4728 4728
4729 DoubleRegister input_reg = ToDoubleRegister(instr->value()); 4729 DoubleRegister input_reg = ToDoubleRegister(instr->value());
4730 Register scratch = scratch0(); 4730 Register scratch = scratch0();
4731 Register reg = ToRegister(instr->result()); 4731 Register reg = ToRegister(instr->result());
4732 Register temp1 = ToRegister(instr->temp()); 4732 Register temp1 = ToRegister(instr->temp());
4733 Register temp2 = ToRegister(instr->temp2()); 4733 Register temp2 = ToRegister(instr->temp2());
4734 4734
(...skipping 178 matching lines...) Expand 10 before | Expand all | Expand 10 after
4913 __ mfc1(scratch1, double_scratch.high()); 4913 __ mfc1(scratch1, double_scratch.high());
4914 __ And(scratch1, scratch1, Operand(HeapNumber::kSignMask)); 4914 __ And(scratch1, scratch1, Operand(HeapNumber::kSignMask));
4915 DeoptimizeIf(ne, instr->environment(), scratch1, Operand(zero_reg)); 4915 DeoptimizeIf(ne, instr->environment(), scratch1, Operand(zero_reg));
4916 } 4916 }
4917 } 4917 }
4918 __ bind(&done); 4918 __ bind(&done);
4919 } 4919 }
4920 4920
4921 4921
4922 void LCodeGen::DoTaggedToI(LTaggedToI* instr) { 4922 void LCodeGen::DoTaggedToI(LTaggedToI* instr) {
4923 class DeferredTaggedToI FINAL : public LDeferredCode { 4923 class DeferredTaggedToI V8_FINAL : public LDeferredCode {
4924 public: 4924 public:
4925 DeferredTaggedToI(LCodeGen* codegen, LTaggedToI* instr) 4925 DeferredTaggedToI(LCodeGen* codegen, LTaggedToI* instr)
4926 : LDeferredCode(codegen), instr_(instr) { } 4926 : LDeferredCode(codegen), instr_(instr) { }
4927 virtual void Generate() OVERRIDE { codegen()->DoDeferredTaggedToI(instr_); } 4927 virtual void Generate() V8_OVERRIDE {
4928 virtual LInstruction* instr() OVERRIDE { return instr_; } 4928 codegen()->DoDeferredTaggedToI(instr_);
4929 }
4930 virtual LInstruction* instr() V8_OVERRIDE { return instr_; }
4929 private: 4931 private:
4930 LTaggedToI* instr_; 4932 LTaggedToI* instr_;
4931 }; 4933 };
4932 4934
4933 LOperand* input = instr->value(); 4935 LOperand* input = instr->value();
4934 ASSERT(input->IsRegister()); 4936 ASSERT(input->IsRegister());
4935 ASSERT(input->Equals(instr->result())); 4937 ASSERT(input->Equals(instr->result()));
4936 4938
4937 Register input_reg = ToRegister(input); 4939 Register input_reg = ToRegister(input);
4938 4940
(...skipping 192 matching lines...) Expand 10 before | Expand all | Expand 10 after
5131 __ push(object); 5133 __ push(object);
5132 CallRuntimeFromDeferred(Runtime::kMigrateInstance, 1, instr); 5134 CallRuntimeFromDeferred(Runtime::kMigrateInstance, 1, instr);
5133 __ StoreToSafepointRegisterSlot(v0, scratch0()); 5135 __ StoreToSafepointRegisterSlot(v0, scratch0());
5134 } 5136 }
5135 __ And(at, scratch0(), Operand(kSmiTagMask)); 5137 __ And(at, scratch0(), Operand(kSmiTagMask));
5136 DeoptimizeIf(eq, instr->environment(), at, Operand(zero_reg)); 5138 DeoptimizeIf(eq, instr->environment(), at, Operand(zero_reg));
5137 } 5139 }
5138 5140
5139 5141
5140 void LCodeGen::DoCheckMaps(LCheckMaps* instr) { 5142 void LCodeGen::DoCheckMaps(LCheckMaps* instr) {
5141 class DeferredCheckMaps FINAL : public LDeferredCode { 5143 class DeferredCheckMaps V8_FINAL : public LDeferredCode {
5142 public: 5144 public:
5143 DeferredCheckMaps(LCodeGen* codegen, LCheckMaps* instr, Register object) 5145 DeferredCheckMaps(LCodeGen* codegen, LCheckMaps* instr, Register object)
5144 : LDeferredCode(codegen), instr_(instr), object_(object) { 5146 : LDeferredCode(codegen), instr_(instr), object_(object) {
5145 SetExit(check_maps()); 5147 SetExit(check_maps());
5146 } 5148 }
5147 virtual void Generate() OVERRIDE { 5149 virtual void Generate() V8_OVERRIDE {
5148 codegen()->DoDeferredInstanceMigration(instr_, object_); 5150 codegen()->DoDeferredInstanceMigration(instr_, object_);
5149 } 5151 }
5150 Label* check_maps() { return &check_maps_; } 5152 Label* check_maps() { return &check_maps_; }
5151 virtual LInstruction* instr() OVERRIDE { return instr_; } 5153 virtual LInstruction* instr() V8_OVERRIDE { return instr_; }
5152 private: 5154 private:
5153 LCheckMaps* instr_; 5155 LCheckMaps* instr_;
5154 Label check_maps_; 5156 Label check_maps_;
5155 Register object_; 5157 Register object_;
5156 }; 5158 };
5157 5159
5158 if (instr->hydrogen()->CanOmitMapChecks()) return; 5160 if (instr->hydrogen()->CanOmitMapChecks()) return;
5159 Register map_reg = scratch0(); 5161 Register map_reg = scratch0();
5160 LOperand* input = instr->value(); 5162 LOperand* input = instr->value();
5161 ASSERT(input->IsRegister()); 5163 ASSERT(input->IsRegister());
(...skipping 68 matching lines...) Expand 10 before | Expand all | Expand 10 after
5230 __ jmp(&done); 5232 __ jmp(&done);
5231 5233
5232 __ bind(&is_smi); 5234 __ bind(&is_smi);
5233 __ ClampUint8(result_reg, scratch); 5235 __ ClampUint8(result_reg, scratch);
5234 5236
5235 __ bind(&done); 5237 __ bind(&done);
5236 } 5238 }
5237 5239
5238 5240
5239 void LCodeGen::DoAllocate(LAllocate* instr) { 5241 void LCodeGen::DoAllocate(LAllocate* instr) {
5240 class DeferredAllocate FINAL : public LDeferredCode { 5242 class DeferredAllocate V8_FINAL : public LDeferredCode {
5241 public: 5243 public:
5242 DeferredAllocate(LCodeGen* codegen, LAllocate* instr) 5244 DeferredAllocate(LCodeGen* codegen, LAllocate* instr)
5243 : LDeferredCode(codegen), instr_(instr) { } 5245 : LDeferredCode(codegen), instr_(instr) { }
5244 virtual void Generate() OVERRIDE { codegen()->DoDeferredAllocate(instr_); } 5246 virtual void Generate() V8_OVERRIDE {
5245 virtual LInstruction* instr() OVERRIDE { return instr_; } 5247 codegen()->DoDeferredAllocate(instr_);
5248 }
5249 virtual LInstruction* instr() V8_OVERRIDE { return instr_; }
5246 private: 5250 private:
5247 LAllocate* instr_; 5251 LAllocate* instr_;
5248 }; 5252 };
5249 5253
5250 DeferredAllocate* deferred = 5254 DeferredAllocate* deferred =
5251 new(zone()) DeferredAllocate(this, instr); 5255 new(zone()) DeferredAllocate(this, instr);
5252 5256
5253 Register result = ToRegister(instr->result()); 5257 Register result = ToRegister(instr->result());
5254 Register scratch = ToRegister(instr->temp1()); 5258 Register scratch = ToRegister(instr->temp1());
5255 Register scratch2 = ToRegister(instr->temp2()); 5259 Register scratch2 = ToRegister(instr->temp2());
(...skipping 376 matching lines...) Expand 10 before | Expand all | Expand 10 after
5632 __ CallRuntimeSaveDoubles(Runtime::kStackGuard); 5636 __ CallRuntimeSaveDoubles(Runtime::kStackGuard);
5633 RecordSafepointWithLazyDeopt( 5637 RecordSafepointWithLazyDeopt(
5634 instr, RECORD_SAFEPOINT_WITH_REGISTERS_AND_NO_ARGUMENTS); 5638 instr, RECORD_SAFEPOINT_WITH_REGISTERS_AND_NO_ARGUMENTS);
5635 ASSERT(instr->HasEnvironment()); 5639 ASSERT(instr->HasEnvironment());
5636 LEnvironment* env = instr->environment(); 5640 LEnvironment* env = instr->environment();
5637 safepoints_.RecordLazyDeoptimizationIndex(env->deoptimization_index()); 5641 safepoints_.RecordLazyDeoptimizationIndex(env->deoptimization_index());
5638 } 5642 }
5639 5643
5640 5644
5641 void LCodeGen::DoStackCheck(LStackCheck* instr) { 5645 void LCodeGen::DoStackCheck(LStackCheck* instr) {
5642 class DeferredStackCheck FINAL : public LDeferredCode { 5646 class DeferredStackCheck V8_FINAL : public LDeferredCode {
5643 public: 5647 public:
5644 DeferredStackCheck(LCodeGen* codegen, LStackCheck* instr) 5648 DeferredStackCheck(LCodeGen* codegen, LStackCheck* instr)
5645 : LDeferredCode(codegen), instr_(instr) { } 5649 : LDeferredCode(codegen), instr_(instr) { }
5646 virtual void Generate() OVERRIDE { 5650 virtual void Generate() V8_OVERRIDE {
5647 codegen()->DoDeferredStackCheck(instr_); 5651 codegen()->DoDeferredStackCheck(instr_);
5648 } 5652 }
5649 virtual LInstruction* instr() OVERRIDE { return instr_; } 5653 virtual LInstruction* instr() V8_OVERRIDE { return instr_; }
5650 private: 5654 private:
5651 LStackCheck* instr_; 5655 LStackCheck* instr_;
5652 }; 5656 };
5653 5657
5654 ASSERT(instr->HasEnvironment()); 5658 ASSERT(instr->HasEnvironment());
5655 LEnvironment* env = instr->environment(); 5659 LEnvironment* env = instr->environment();
5656 // There is no LLazyBailout instruction for stack-checks. We have to 5660 // There is no LLazyBailout instruction for stack-checks. We have to
5657 // prepare for lazy deoptimization explicitly here. 5661 // prepare for lazy deoptimization explicitly here.
5658 if (instr->hydrogen()->is_function_entry()) { 5662 if (instr->hydrogen()->is_function_entry()) {
5659 // Perform stack overflow check. 5663 // Perform stack overflow check.
(...skipping 131 matching lines...) Expand 10 before | Expand all | Expand 10 after
5791 __ Subu(scratch, result, scratch); 5795 __ Subu(scratch, result, scratch);
5792 __ lw(result, FieldMemOperand(scratch, 5796 __ lw(result, FieldMemOperand(scratch,
5793 FixedArray::kHeaderSize - kPointerSize)); 5797 FixedArray::kHeaderSize - kPointerSize));
5794 __ bind(&done); 5798 __ bind(&done);
5795 } 5799 }
5796 5800
5797 5801
5798 #undef __ 5802 #undef __
5799 5803
5800 } } // namespace v8::internal 5804 } } // namespace v8::internal
OLDNEW
« no previous file with comments | « src/mips/lithium-codegen-mips.h ('k') | src/mips/lithium-gap-resolver-mips.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698