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

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

Issue 10534006: Remove TLS access for current Zone. (Closed) Base URL: https://v8.googlecode.com/svn/branches/bleeding_edge
Patch Set: Address review. Created 8 years, 6 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/x64/lithium-codegen-x64.h ('k') | src/x64/lithium-gap-resolver-x64.cc » ('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 535 matching lines...) Expand 10 before | Expand all | Expand 10 after
546 return; 546 return;
547 } 547 }
548 548
549 if (cc == no_condition) { 549 if (cc == no_condition) {
550 __ Jump(entry, RelocInfo::RUNTIME_ENTRY); 550 __ Jump(entry, RelocInfo::RUNTIME_ENTRY);
551 } else { 551 } else {
552 // We often have several deopts to the same entry, reuse the last 552 // We often have several deopts to the same entry, reuse the last
553 // jump entry if this is the case. 553 // jump entry if this is the case.
554 if (jump_table_.is_empty() || 554 if (jump_table_.is_empty() ||
555 jump_table_.last().address != entry) { 555 jump_table_.last().address != entry) {
556 jump_table_.Add(JumpTableEntry(entry)); 556 jump_table_.Add(JumpTableEntry(entry), zone());
557 } 557 }
558 __ j(cc, &jump_table_.last().label); 558 __ j(cc, &jump_table_.last().label);
559 } 559 }
560 } 560 }
561 561
562 562
563 void LCodeGen::PopulateDeoptimizationData(Handle<Code> code) { 563 void LCodeGen::PopulateDeoptimizationData(Handle<Code> code) {
564 int length = deoptimizations_.length(); 564 int length = deoptimizations_.length();
565 if (length == 0) return; 565 if (length == 0) return;
566 Handle<DeoptimizationInputData> data = 566 Handle<DeoptimizationInputData> data =
(...skipping 24 matching lines...) Expand all
591 } 591 }
592 code->set_deoptimization_data(*data); 592 code->set_deoptimization_data(*data);
593 } 593 }
594 594
595 595
596 int LCodeGen::DefineDeoptimizationLiteral(Handle<Object> literal) { 596 int LCodeGen::DefineDeoptimizationLiteral(Handle<Object> literal) {
597 int result = deoptimization_literals_.length(); 597 int result = deoptimization_literals_.length();
598 for (int i = 0; i < deoptimization_literals_.length(); ++i) { 598 for (int i = 0; i < deoptimization_literals_.length(); ++i) {
599 if (deoptimization_literals_[i].is_identical_to(literal)) return i; 599 if (deoptimization_literals_[i].is_identical_to(literal)) return i;
600 } 600 }
601 deoptimization_literals_.Add(literal); 601 deoptimization_literals_.Add(literal, zone());
602 return result; 602 return result;
603 } 603 }
604 604
605 605
606 void LCodeGen::PopulateDeoptimizationLiteralsWithInlinedFunctions() { 606 void LCodeGen::PopulateDeoptimizationLiteralsWithInlinedFunctions() {
607 ASSERT(deoptimization_literals_.length() == 0); 607 ASSERT(deoptimization_literals_.length() == 0);
608 608
609 const ZoneList<Handle<JSFunction> >* inlined_closures = 609 const ZoneList<Handle<JSFunction> >* inlined_closures =
610 chunk()->inlined_closures(); 610 chunk()->inlined_closures();
611 611
(...skipping 28 matching lines...) Expand all
640 640
641 const ZoneList<LOperand*>* operands = pointers->GetNormalizedOperands(); 641 const ZoneList<LOperand*>* operands = pointers->GetNormalizedOperands();
642 642
643 Safepoint safepoint = safepoints_.DefineSafepoint(masm(), 643 Safepoint safepoint = safepoints_.DefineSafepoint(masm(),
644 kind, arguments, deopt_mode); 644 kind, arguments, deopt_mode);
645 for (int i = 0; i < operands->length(); i++) { 645 for (int i = 0; i < operands->length(); i++) {
646 LOperand* pointer = operands->at(i); 646 LOperand* pointer = operands->at(i);
647 if (pointer->IsStackSlot()) { 647 if (pointer->IsStackSlot()) {
648 safepoint.DefinePointerSlot(pointer->index(), zone()); 648 safepoint.DefinePointerSlot(pointer->index(), zone());
649 } else if (pointer->IsRegister() && (kind & Safepoint::kWithRegisters)) { 649 } else if (pointer->IsRegister() && (kind & Safepoint::kWithRegisters)) {
650 safepoint.DefinePointerRegister(ToRegister(pointer)); 650 safepoint.DefinePointerRegister(ToRegister(pointer), zone());
651 } 651 }
652 } 652 }
653 if (kind & Safepoint::kWithRegisters) { 653 if (kind & Safepoint::kWithRegisters) {
654 // Register rsi always contains a pointer to the context. 654 // Register rsi always contains a pointer to the context.
655 safepoint.DefinePointerRegister(rsi); 655 safepoint.DefinePointerRegister(rsi, zone());
656 } 656 }
657 } 657 }
658 658
659 659
660 void LCodeGen::RecordSafepoint(LPointerMap* pointers, 660 void LCodeGen::RecordSafepoint(LPointerMap* pointers,
661 Safepoint::DeoptMode deopt_mode) { 661 Safepoint::DeoptMode deopt_mode) {
662 RecordSafepoint(pointers, Safepoint::kSimple, 0, deopt_mode); 662 RecordSafepoint(pointers, Safepoint::kSimple, 0, deopt_mode);
663 } 663 }
664 664
665 665
666 void LCodeGen::RecordSafepoint(Safepoint::DeoptMode deopt_mode) { 666 void LCodeGen::RecordSafepoint(Safepoint::DeoptMode deopt_mode) {
667 LPointerMap empty_pointers(RelocInfo::kNoPosition); 667 LPointerMap empty_pointers(RelocInfo::kNoPosition, zone());
668 RecordSafepoint(&empty_pointers, deopt_mode); 668 RecordSafepoint(&empty_pointers, deopt_mode);
669 } 669 }
670 670
671 671
672 void LCodeGen::RecordSafepointWithRegisters(LPointerMap* pointers, 672 void LCodeGen::RecordSafepointWithRegisters(LPointerMap* pointers,
673 int arguments, 673 int arguments,
674 Safepoint::DeoptMode deopt_mode) { 674 Safepoint::DeoptMode deopt_mode) {
675 RecordSafepoint(pointers, Safepoint::kWithRegisters, arguments, deopt_mode); 675 RecordSafepoint(pointers, Safepoint::kWithRegisters, arguments, deopt_mode);
676 } 676 }
677 677
(...skipping 1257 matching lines...) Expand 10 before | Expand all | Expand 10 after
1935 } 1935 }
1936 virtual LInstruction* instr() { return instr_; } 1936 virtual LInstruction* instr() { return instr_; }
1937 Label* map_check() { return &map_check_; } 1937 Label* map_check() { return &map_check_; }
1938 private: 1938 private:
1939 LInstanceOfKnownGlobal* instr_; 1939 LInstanceOfKnownGlobal* instr_;
1940 Label map_check_; 1940 Label map_check_;
1941 }; 1941 };
1942 1942
1943 1943
1944 DeferredInstanceOfKnownGlobal* deferred; 1944 DeferredInstanceOfKnownGlobal* deferred;
1945 deferred = new DeferredInstanceOfKnownGlobal(this, instr); 1945 deferred = new(zone()) DeferredInstanceOfKnownGlobal(this, instr);
1946 1946
1947 Label done, false_result; 1947 Label done, false_result;
1948 Register object = ToRegister(instr->InputAt(0)); 1948 Register object = ToRegister(instr->InputAt(0));
1949 1949
1950 // A Smi is not an instance of anything. 1950 // A Smi is not an instance of anything.
1951 __ JumpIfSmi(object, &false_result); 1951 __ JumpIfSmi(object, &false_result);
1952 1952
1953 // This is the inlined call site instanceof cache. The two occurences of the 1953 // This is the inlined call site instanceof cache. The two occurences of the
1954 // hole value will be patched to the last map/result pair generated by the 1954 // hole value will be patched to the last map/result pair generated by the
1955 // instanceof stub. 1955 // instanceof stub.
(...skipping 917 matching lines...) Expand 10 before | Expand all | Expand 10 after
2873 if (r.IsDouble()) { 2873 if (r.IsDouble()) {
2874 XMMRegister scratch = xmm0; 2874 XMMRegister scratch = xmm0;
2875 XMMRegister input_reg = ToDoubleRegister(instr->InputAt(0)); 2875 XMMRegister input_reg = ToDoubleRegister(instr->InputAt(0));
2876 __ xorps(scratch, scratch); 2876 __ xorps(scratch, scratch);
2877 __ subsd(scratch, input_reg); 2877 __ subsd(scratch, input_reg);
2878 __ andpd(input_reg, scratch); 2878 __ andpd(input_reg, scratch);
2879 } else if (r.IsInteger32()) { 2879 } else if (r.IsInteger32()) {
2880 EmitIntegerMathAbs(instr); 2880 EmitIntegerMathAbs(instr);
2881 } else { // Tagged case. 2881 } else { // Tagged case.
2882 DeferredMathAbsTaggedHeapNumber* deferred = 2882 DeferredMathAbsTaggedHeapNumber* deferred =
2883 new DeferredMathAbsTaggedHeapNumber(this, instr); 2883 new(zone()) DeferredMathAbsTaggedHeapNumber(this, instr);
2884 Register input_reg = ToRegister(instr->InputAt(0)); 2884 Register input_reg = ToRegister(instr->InputAt(0));
2885 // Smi check. 2885 // Smi check.
2886 __ JumpIfNotSmi(input_reg, deferred->entry()); 2886 __ JumpIfNotSmi(input_reg, deferred->entry());
2887 __ SmiToInteger32(input_reg, input_reg); 2887 __ SmiToInteger32(input_reg, input_reg);
2888 EmitIntegerMathAbs(instr); 2888 EmitIntegerMathAbs(instr);
2889 __ Integer32ToSmi(input_reg, input_reg); 2889 __ Integer32ToSmi(input_reg, input_reg);
2890 __ bind(deferred->exit()); 2890 __ bind(deferred->exit());
2891 } 2891 }
2892 } 2892 }
2893 2893
(...skipping 171 matching lines...) Expand 10 before | Expand all | Expand 10 after
3065 class DeferredDoRandom: public LDeferredCode { 3065 class DeferredDoRandom: public LDeferredCode {
3066 public: 3066 public:
3067 DeferredDoRandom(LCodeGen* codegen, LRandom* instr) 3067 DeferredDoRandom(LCodeGen* codegen, LRandom* instr)
3068 : LDeferredCode(codegen), instr_(instr) { } 3068 : LDeferredCode(codegen), instr_(instr) { }
3069 virtual void Generate() { codegen()->DoDeferredRandom(instr_); } 3069 virtual void Generate() { codegen()->DoDeferredRandom(instr_); }
3070 virtual LInstruction* instr() { return instr_; } 3070 virtual LInstruction* instr() { return instr_; }
3071 private: 3071 private:
3072 LRandom* instr_; 3072 LRandom* instr_;
3073 }; 3073 };
3074 3074
3075 DeferredDoRandom* deferred = new DeferredDoRandom(this, instr); 3075 DeferredDoRandom* deferred = new(zone()) DeferredDoRandom(this, instr);
3076 3076
3077 // Having marked this instruction as a call we can use any 3077 // Having marked this instruction as a call we can use any
3078 // registers. 3078 // registers.
3079 ASSERT(ToDoubleRegister(instr->result()).is(xmm1)); 3079 ASSERT(ToDoubleRegister(instr->result()).is(xmm1));
3080 3080
3081 // Choose the right register for the first argument depending on 3081 // Choose the right register for the first argument depending on
3082 // calling convention. 3082 // calling convention.
3083 #ifdef _WIN64 3083 #ifdef _WIN64
3084 ASSERT(ToRegister(instr->InputAt(0)).is(rcx)); 3084 ASSERT(ToRegister(instr->InputAt(0)).is(rcx));
3085 Register global_object = rcx; 3085 Register global_object = rcx;
(...skipping 521 matching lines...) Expand 10 before | Expand all | Expand 10 after
3607 public: 3607 public:
3608 DeferredStringCharCodeAt(LCodeGen* codegen, LStringCharCodeAt* instr) 3608 DeferredStringCharCodeAt(LCodeGen* codegen, LStringCharCodeAt* instr)
3609 : LDeferredCode(codegen), instr_(instr) { } 3609 : LDeferredCode(codegen), instr_(instr) { }
3610 virtual void Generate() { codegen()->DoDeferredStringCharCodeAt(instr_); } 3610 virtual void Generate() { codegen()->DoDeferredStringCharCodeAt(instr_); }
3611 virtual LInstruction* instr() { return instr_; } 3611 virtual LInstruction* instr() { return instr_; }
3612 private: 3612 private:
3613 LStringCharCodeAt* instr_; 3613 LStringCharCodeAt* instr_;
3614 }; 3614 };
3615 3615
3616 DeferredStringCharCodeAt* deferred = 3616 DeferredStringCharCodeAt* deferred =
3617 new DeferredStringCharCodeAt(this, instr); 3617 new(zone()) DeferredStringCharCodeAt(this, instr);
3618 3618
3619 StringCharLoadGenerator::Generate(masm(), 3619 StringCharLoadGenerator::Generate(masm(),
3620 ToRegister(instr->string()), 3620 ToRegister(instr->string()),
3621 ToRegister(instr->index()), 3621 ToRegister(instr->index()),
3622 ToRegister(instr->result()), 3622 ToRegister(instr->result()),
3623 deferred->entry()); 3623 deferred->entry());
3624 __ bind(deferred->exit()); 3624 __ bind(deferred->exit());
3625 } 3625 }
3626 3626
3627 3627
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after
3661 public: 3661 public:
3662 DeferredStringCharFromCode(LCodeGen* codegen, LStringCharFromCode* instr) 3662 DeferredStringCharFromCode(LCodeGen* codegen, LStringCharFromCode* instr)
3663 : LDeferredCode(codegen), instr_(instr) { } 3663 : LDeferredCode(codegen), instr_(instr) { }
3664 virtual void Generate() { codegen()->DoDeferredStringCharFromCode(instr_); } 3664 virtual void Generate() { codegen()->DoDeferredStringCharFromCode(instr_); }
3665 virtual LInstruction* instr() { return instr_; } 3665 virtual LInstruction* instr() { return instr_; }
3666 private: 3666 private:
3667 LStringCharFromCode* instr_; 3667 LStringCharFromCode* instr_;
3668 }; 3668 };
3669 3669
3670 DeferredStringCharFromCode* deferred = 3670 DeferredStringCharFromCode* deferred =
3671 new DeferredStringCharFromCode(this, instr); 3671 new(zone()) DeferredStringCharFromCode(this, instr);
3672 3672
3673 ASSERT(instr->hydrogen()->value()->representation().IsInteger32()); 3673 ASSERT(instr->hydrogen()->value()->representation().IsInteger32());
3674 Register char_code = ToRegister(instr->char_code()); 3674 Register char_code = ToRegister(instr->char_code());
3675 Register result = ToRegister(instr->result()); 3675 Register result = ToRegister(instr->result());
3676 ASSERT(!char_code.is(result)); 3676 ASSERT(!char_code.is(result));
3677 3677
3678 __ cmpl(char_code, Immediate(String::kMaxAsciiCharCode)); 3678 __ cmpl(char_code, Immediate(String::kMaxAsciiCharCode));
3679 __ j(above, deferred->entry()); 3679 __ j(above, deferred->entry());
3680 __ LoadRoot(result, Heap::kSingleCharacterStringCacheRootIndex); 3680 __ LoadRoot(result, Heap::kSingleCharacterStringCacheRootIndex);
3681 __ movq(result, FieldOperand(result, 3681 __ movq(result, FieldOperand(result,
(...skipping 59 matching lines...) Expand 10 before | Expand all | Expand 10 after
3741 virtual void Generate() { codegen()->DoDeferredNumberTagD(instr_); } 3741 virtual void Generate() { codegen()->DoDeferredNumberTagD(instr_); }
3742 virtual LInstruction* instr() { return instr_; } 3742 virtual LInstruction* instr() { return instr_; }
3743 private: 3743 private:
3744 LNumberTagD* instr_; 3744 LNumberTagD* instr_;
3745 }; 3745 };
3746 3746
3747 XMMRegister input_reg = ToDoubleRegister(instr->InputAt(0)); 3747 XMMRegister input_reg = ToDoubleRegister(instr->InputAt(0));
3748 Register reg = ToRegister(instr->result()); 3748 Register reg = ToRegister(instr->result());
3749 Register tmp = ToRegister(instr->TempAt(0)); 3749 Register tmp = ToRegister(instr->TempAt(0));
3750 3750
3751 DeferredNumberTagD* deferred = new DeferredNumberTagD(this, instr); 3751 DeferredNumberTagD* deferred = new(zone()) DeferredNumberTagD(this, instr);
3752 if (FLAG_inline_new) { 3752 if (FLAG_inline_new) {
3753 __ AllocateHeapNumber(reg, tmp, deferred->entry()); 3753 __ AllocateHeapNumber(reg, tmp, deferred->entry());
3754 } else { 3754 } else {
3755 __ jmp(deferred->entry()); 3755 __ jmp(deferred->entry());
3756 } 3756 }
3757 __ bind(deferred->exit()); 3757 __ bind(deferred->exit());
3758 __ movsd(FieldOperand(reg, HeapNumber::kValueOffset), input_reg); 3758 __ movsd(FieldOperand(reg, HeapNumber::kValueOffset), input_reg);
3759 } 3759 }
3760 3760
3761 3761
(...skipping 139 matching lines...) Expand 10 before | Expand all | Expand 10 after
3901 virtual LInstruction* instr() { return instr_; } 3901 virtual LInstruction* instr() { return instr_; }
3902 private: 3902 private:
3903 LTaggedToI* instr_; 3903 LTaggedToI* instr_;
3904 }; 3904 };
3905 3905
3906 LOperand* input = instr->InputAt(0); 3906 LOperand* input = instr->InputAt(0);
3907 ASSERT(input->IsRegister()); 3907 ASSERT(input->IsRegister());
3908 ASSERT(input->Equals(instr->result())); 3908 ASSERT(input->Equals(instr->result()));
3909 3909
3910 Register input_reg = ToRegister(input); 3910 Register input_reg = ToRegister(input);
3911 DeferredTaggedToI* deferred = new DeferredTaggedToI(this, instr); 3911 DeferredTaggedToI* deferred = new(zone()) DeferredTaggedToI(this, instr);
3912 __ JumpIfNotSmi(input_reg, deferred->entry()); 3912 __ JumpIfNotSmi(input_reg, deferred->entry());
3913 __ SmiToInteger32(input_reg, input_reg); 3913 __ SmiToInteger32(input_reg, input_reg);
3914 __ bind(deferred->exit()); 3914 __ bind(deferred->exit());
3915 } 3915 }
3916 3916
3917 3917
3918 void LCodeGen::DoNumberUntagD(LNumberUntagD* instr) { 3918 void LCodeGen::DoNumberUntagD(LNumberUntagD* instr) {
3919 LOperand* input = instr->InputAt(0); 3919 LOperand* input = instr->InputAt(0);
3920 ASSERT(input->IsRegister()); 3920 ASSERT(input->IsRegister());
3921 LOperand* result = instr->result(); 3921 LOperand* result = instr->result();
(...skipping 233 matching lines...) Expand 10 before | Expand all | Expand 10 after
4155 class DeferredAllocateObject: public LDeferredCode { 4155 class DeferredAllocateObject: public LDeferredCode {
4156 public: 4156 public:
4157 DeferredAllocateObject(LCodeGen* codegen, LAllocateObject* instr) 4157 DeferredAllocateObject(LCodeGen* codegen, LAllocateObject* instr)
4158 : LDeferredCode(codegen), instr_(instr) { } 4158 : LDeferredCode(codegen), instr_(instr) { }
4159 virtual void Generate() { codegen()->DoDeferredAllocateObject(instr_); } 4159 virtual void Generate() { codegen()->DoDeferredAllocateObject(instr_); }
4160 virtual LInstruction* instr() { return instr_; } 4160 virtual LInstruction* instr() { return instr_; }
4161 private: 4161 private:
4162 LAllocateObject* instr_; 4162 LAllocateObject* instr_;
4163 }; 4163 };
4164 4164
4165 DeferredAllocateObject* deferred = new DeferredAllocateObject(this, instr); 4165 DeferredAllocateObject* deferred =
4166 new(zone()) DeferredAllocateObject(this, instr);
4166 4167
4167 Register result = ToRegister(instr->result()); 4168 Register result = ToRegister(instr->result());
4168 Register scratch = ToRegister(instr->TempAt(0)); 4169 Register scratch = ToRegister(instr->TempAt(0));
4169 Handle<JSFunction> constructor = instr->hydrogen()->constructor(); 4170 Handle<JSFunction> constructor = instr->hydrogen()->constructor();
4170 Handle<Map> initial_map(constructor->initial_map()); 4171 Handle<Map> initial_map(constructor->initial_map());
4171 int instance_size = initial_map->instance_size(); 4172 int instance_size = initial_map->instance_size();
4172 ASSERT(initial_map->pre_allocated_property_fields() + 4173 ASSERT(initial_map->pre_allocated_property_fields() +
4173 initial_map->unused_property_fields() - 4174 initial_map->unused_property_fields() -
4174 initial_map->inobject_properties() == 0); 4175 initial_map->inobject_properties() == 0);
4175 4176
(...skipping 601 matching lines...) Expand 10 before | Expand all | Expand 10 after
4777 CallCode(stub.GetCode(), RelocInfo::CODE_TARGET, instr); 4778 CallCode(stub.GetCode(), RelocInfo::CODE_TARGET, instr);
4778 EnsureSpaceForLazyDeopt(Deoptimizer::patch_size()); 4779 EnsureSpaceForLazyDeopt(Deoptimizer::patch_size());
4779 last_lazy_deopt_pc_ = masm()->pc_offset(); 4780 last_lazy_deopt_pc_ = masm()->pc_offset();
4780 __ bind(&done); 4781 __ bind(&done);
4781 RegisterEnvironmentForDeoptimization(env, Safepoint::kLazyDeopt); 4782 RegisterEnvironmentForDeoptimization(env, Safepoint::kLazyDeopt);
4782 safepoints_.RecordLazyDeoptimizationIndex(env->deoptimization_index()); 4783 safepoints_.RecordLazyDeoptimizationIndex(env->deoptimization_index());
4783 } else { 4784 } else {
4784 ASSERT(instr->hydrogen()->is_backwards_branch()); 4785 ASSERT(instr->hydrogen()->is_backwards_branch());
4785 // Perform stack overflow check if this goto needs it before jumping. 4786 // Perform stack overflow check if this goto needs it before jumping.
4786 DeferredStackCheck* deferred_stack_check = 4787 DeferredStackCheck* deferred_stack_check =
4787 new DeferredStackCheck(this, instr); 4788 new(zone()) DeferredStackCheck(this, instr);
4788 __ CompareRoot(rsp, Heap::kStackLimitRootIndex); 4789 __ CompareRoot(rsp, Heap::kStackLimitRootIndex);
4789 __ j(below, deferred_stack_check->entry()); 4790 __ j(below, deferred_stack_check->entry());
4790 EnsureSpaceForLazyDeopt(Deoptimizer::patch_size()); 4791 EnsureSpaceForLazyDeopt(Deoptimizer::patch_size());
4791 last_lazy_deopt_pc_ = masm()->pc_offset(); 4792 last_lazy_deopt_pc_ = masm()->pc_offset();
4792 __ bind(instr->done_label()); 4793 __ bind(instr->done_label());
4793 deferred_stack_check->SetExit(instr->done_label()); 4794 deferred_stack_check->SetExit(instr->done_label());
4794 RegisterEnvironmentForDeoptimization(env, Safepoint::kLazyDeopt); 4795 RegisterEnvironmentForDeoptimization(env, Safepoint::kLazyDeopt);
4795 // Don't record a deoptimization index for the safepoint here. 4796 // Don't record a deoptimization index for the safepoint here.
4796 // This will be done explicitly when emitting call and the safepoint in 4797 // This will be done explicitly when emitting call and the safepoint in
4797 // the deferred code. 4798 // the deferred code.
(...skipping 97 matching lines...) Expand 10 before | Expand all | Expand 10 after
4895 FixedArray::kHeaderSize - kPointerSize)); 4896 FixedArray::kHeaderSize - kPointerSize));
4896 __ bind(&done); 4897 __ bind(&done);
4897 } 4898 }
4898 4899
4899 4900
4900 #undef __ 4901 #undef __
4901 4902
4902 } } // namespace v8::internal 4903 } } // namespace v8::internal
4903 4904
4904 #endif // V8_TARGET_ARCH_X64 4905 #endif // V8_TARGET_ARCH_X64
OLDNEW
« no previous file with comments | « src/x64/lithium-codegen-x64.h ('k') | src/x64/lithium-gap-resolver-x64.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698