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

Side by Side Diff: src/crankshaft/mips64/lithium-codegen-mips64.cc

Issue 1922553002: Get rid of AllocationFlags::TAG_OBJECT (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Remove TAG_OBJECT from AllocationFlags Created 4 years, 7 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
« no previous file with comments | « src/crankshaft/mips/lithium-codegen-mips.cc ('k') | src/crankshaft/x64/lithium-codegen-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 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "src/crankshaft/mips64/lithium-codegen-mips64.h" 5 #include "src/crankshaft/mips64/lithium-codegen-mips64.h"
6 6
7 #include "src/code-factory.h" 7 #include "src/code-factory.h"
8 #include "src/code-stubs.h" 8 #include "src/code-stubs.h"
9 #include "src/crankshaft/hydrogen-osr.h" 9 #include "src/crankshaft/hydrogen-osr.h"
10 #include "src/crankshaft/mips64/lithium-gap-resolver-mips64.h" 10 #include "src/crankshaft/mips64/lithium-gap-resolver-mips64.h"
(...skipping 4627 matching lines...) Expand 10 before | Expand all | Expand 10 after
4638 } 4638 }
4639 __ mtc1(src, dbl_scratch); 4639 __ mtc1(src, dbl_scratch);
4640 __ cvt_d_w(dbl_scratch, dbl_scratch); 4640 __ cvt_d_w(dbl_scratch, dbl_scratch);
4641 } else { 4641 } else {
4642 __ mtc1(src, dbl_scratch); 4642 __ mtc1(src, dbl_scratch);
4643 __ Cvt_d_uw(dbl_scratch, dbl_scratch); 4643 __ Cvt_d_uw(dbl_scratch, dbl_scratch);
4644 } 4644 }
4645 4645
4646 if (FLAG_inline_new) { 4646 if (FLAG_inline_new) {
4647 __ LoadRoot(tmp3, Heap::kHeapNumberMapRootIndex); 4647 __ LoadRoot(tmp3, Heap::kHeapNumberMapRootIndex);
4648 __ AllocateHeapNumber(dst, tmp1, tmp2, tmp3, &slow, TAG_RESULT); 4648 __ AllocateHeapNumber(dst, tmp1, tmp2, tmp3, &slow);
4649 __ Branch(&done); 4649 __ Branch(&done);
4650 } 4650 }
4651 4651
4652 // Slow case: Call the runtime system to do the number allocation. 4652 // Slow case: Call the runtime system to do the number allocation.
4653 __ bind(&slow); 4653 __ bind(&slow);
4654 { 4654 {
4655 // TODO(3095996): Put a valid pointer value in the stack slot where the 4655 // TODO(3095996): Put a valid pointer value in the stack slot where the
4656 // result register is stored, as this register is in the pointer map, but 4656 // result register is stored, as this register is in the pointer map, but
4657 // contains an integer value. 4657 // contains an integer value.
4658 __ mov(dst, zero_reg); 4658 __ mov(dst, zero_reg);
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after
4693 DoubleRegister input_reg = ToDoubleRegister(instr->value()); 4693 DoubleRegister input_reg = ToDoubleRegister(instr->value());
4694 Register scratch = scratch0(); 4694 Register scratch = scratch0();
4695 Register reg = ToRegister(instr->result()); 4695 Register reg = ToRegister(instr->result());
4696 Register temp1 = ToRegister(instr->temp()); 4696 Register temp1 = ToRegister(instr->temp());
4697 Register temp2 = ToRegister(instr->temp2()); 4697 Register temp2 = ToRegister(instr->temp2());
4698 4698
4699 DeferredNumberTagD* deferred = new(zone()) DeferredNumberTagD(this, instr); 4699 DeferredNumberTagD* deferred = new(zone()) DeferredNumberTagD(this, instr);
4700 if (FLAG_inline_new) { 4700 if (FLAG_inline_new) {
4701 __ LoadRoot(scratch, Heap::kHeapNumberMapRootIndex); 4701 __ LoadRoot(scratch, Heap::kHeapNumberMapRootIndex);
4702 // We want the untagged address first for performance 4702 // We want the untagged address first for performance
4703 __ AllocateHeapNumber(reg, temp1, temp2, scratch, deferred->entry(), 4703 __ AllocateHeapNumber(reg, temp1, temp2, scratch, deferred->entry());
4704 DONT_TAG_RESULT);
4705 } else { 4704 } else {
4706 __ Branch(deferred->entry()); 4705 __ Branch(deferred->entry());
4707 } 4706 }
4708 __ bind(deferred->exit()); 4707 __ bind(deferred->exit());
4709 __ sdc1(input_reg, MemOperand(reg, HeapNumber::kValueOffset)); 4708 __ sdc1(input_reg, FieldMemOperand(reg, HeapNumber::kValueOffset));
4710 // Now that we have finished with the object's real address tag it
4711 __ Daddu(reg, reg, kHeapObjectTag);
4712 } 4709 }
4713 4710
4714 4711
4715 void LCodeGen::DoDeferredNumberTagD(LNumberTagD* instr) { 4712 void LCodeGen::DoDeferredNumberTagD(LNumberTagD* instr) {
4716 // TODO(3095996): Get rid of this. For now, we need to make the 4713 // TODO(3095996): Get rid of this. For now, we need to make the
4717 // result register contain a valid pointer because it is already 4714 // result register contain a valid pointer because it is already
4718 // contained in the register pointer map. 4715 // contained in the register pointer map.
4719 Register reg = ToRegister(instr->result()); 4716 Register reg = ToRegister(instr->result());
4720 __ mov(reg, zero_reg); 4717 __ mov(reg, zero_reg);
4721 4718
4722 PushSafepointRegistersScope scope(this); 4719 PushSafepointRegistersScope scope(this);
4723 // NumberTagI and NumberTagD use the context from the frame, rather than 4720 // NumberTagI and NumberTagD use the context from the frame, rather than
4724 // the environment's HContext or HInlinedContext value. 4721 // the environment's HContext or HInlinedContext value.
4725 // They only call Runtime::kAllocateHeapNumber. 4722 // They only call Runtime::kAllocateHeapNumber.
4726 // The corresponding HChange instructions are added in a phase that does 4723 // The corresponding HChange instructions are added in a phase that does
4727 // not have easy access to the local context. 4724 // not have easy access to the local context.
4728 __ ld(cp, MemOperand(fp, StandardFrameConstants::kContextOffset)); 4725 __ ld(cp, MemOperand(fp, StandardFrameConstants::kContextOffset));
4729 __ CallRuntimeSaveDoubles(Runtime::kAllocateHeapNumber); 4726 __ CallRuntimeSaveDoubles(Runtime::kAllocateHeapNumber);
4730 RecordSafepointWithRegisters( 4727 RecordSafepointWithRegisters(
4731 instr->pointer_map(), 0, Safepoint::kNoLazyDeopt); 4728 instr->pointer_map(), 0, Safepoint::kNoLazyDeopt);
4732 __ Dsubu(v0, v0, kHeapObjectTag);
4733 __ StoreToSafepointRegisterSlot(v0, reg); 4729 __ StoreToSafepointRegisterSlot(v0, reg);
4734 } 4730 }
4735 4731
4736 4732
4737 void LCodeGen::DoSmiTag(LSmiTag* instr) { 4733 void LCodeGen::DoSmiTag(LSmiTag* instr) {
4738 HChange* hchange = instr->hydrogen(); 4734 HChange* hchange = instr->hydrogen();
4739 Register input = ToRegister(instr->value()); 4735 Register input = ToRegister(instr->value());
4740 Register output = ToRegister(instr->result()); 4736 Register output = ToRegister(instr->result());
4741 if (hchange->CheckFlag(HValue::kCanOverflow) && 4737 if (hchange->CheckFlag(HValue::kCanOverflow) &&
4742 hchange->value()->CheckFlag(HValue::kUint32)) { 4738 hchange->value()->CheckFlag(HValue::kUint32)) {
(...skipping 526 matching lines...) Expand 10 before | Expand all | Expand 10 after
5269 }; 5265 };
5270 5266
5271 DeferredAllocate* deferred = 5267 DeferredAllocate* deferred =
5272 new(zone()) DeferredAllocate(this, instr); 5268 new(zone()) DeferredAllocate(this, instr);
5273 5269
5274 Register result = ToRegister(instr->result()); 5270 Register result = ToRegister(instr->result());
5275 Register scratch = ToRegister(instr->temp1()); 5271 Register scratch = ToRegister(instr->temp1());
5276 Register scratch2 = ToRegister(instr->temp2()); 5272 Register scratch2 = ToRegister(instr->temp2());
5277 5273
5278 // Allocate memory for the object. 5274 // Allocate memory for the object.
5279 AllocationFlags flags = TAG_OBJECT; 5275 AllocationFlags flags = NO_ALLOCATION_FLAGS;
5280 if (instr->hydrogen()->MustAllocateDoubleAligned()) { 5276 if (instr->hydrogen()->MustAllocateDoubleAligned()) {
5281 flags = static_cast<AllocationFlags>(flags | DOUBLE_ALIGNMENT); 5277 flags = static_cast<AllocationFlags>(flags | DOUBLE_ALIGNMENT);
5282 } 5278 }
5283 if (instr->hydrogen()->IsOldSpaceAllocation()) { 5279 if (instr->hydrogen()->IsOldSpaceAllocation()) {
5284 DCHECK(!instr->hydrogen()->IsNewSpaceAllocation()); 5280 DCHECK(!instr->hydrogen()->IsNewSpaceAllocation());
5285 flags = static_cast<AllocationFlags>(flags | PRETENURE); 5281 flags = static_cast<AllocationFlags>(flags | PRETENURE);
5286 } 5282 }
5287 if (instr->size()->IsConstantOperand()) { 5283 if (instr->size()->IsConstantOperand()) {
5288 int32_t size = ToInteger32(LConstantOperand::cast(instr->size())); 5284 int32_t size = ToInteger32(LConstantOperand::cast(instr->size()));
5289 CHECK(size <= Page::kMaxRegularHeapObjectSize); 5285 CHECK(size <= Page::kMaxRegularHeapObjectSize);
(...skipping 450 matching lines...) Expand 10 before | Expand all | Expand 10 after
5740 __ ld(result, FieldMemOperand(scratch, 5736 __ ld(result, FieldMemOperand(scratch,
5741 FixedArray::kHeaderSize - kPointerSize)); 5737 FixedArray::kHeaderSize - kPointerSize));
5742 __ bind(deferred->exit()); 5738 __ bind(deferred->exit());
5743 __ bind(&done); 5739 __ bind(&done);
5744 } 5740 }
5745 5741
5746 #undef __ 5742 #undef __
5747 5743
5748 } // namespace internal 5744 } // namespace internal
5749 } // namespace v8 5745 } // namespace v8
OLDNEW
« no previous file with comments | « src/crankshaft/mips/lithium-codegen-mips.cc ('k') | src/crankshaft/x64/lithium-codegen-x64.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698