From 4edc2dbbc0bb1dadd01531937b6010943b3f0989 Mon Sep 17 00:00:00 2001 From: "verwaest@chromium.org" Date: Tue, 18 Sep 2012 13:51:01 +0000 Subject: [PATCH] Revert due to invalid description / CL combination. Revert "MIPS: Do not go to slow mode and back to fast in initializer blocks." This reverts commit 9b05931ec130e831f7496aed6f7ae32e8f2da934. BUG= Review URL: https://chromiumcodereview.appspot.com/10939018 git-svn-id: http://v8.googlecode.com/svn/branches/bleeding_edge@12540 ce2b1a6d-e550-0410-aec6-3dcde31c8c00 --- src/mips/full-codegen-mips.cc | 33 ++++++++++++++------------------- src/mips/macro-assembler-mips.cc | 21 ++------------------- src/mips/macro-assembler-mips.h | 10 +--------- 3 files changed, 17 insertions(+), 47 deletions(-) diff --git a/src/mips/full-codegen-mips.cc b/src/mips/full-codegen-mips.cc index 69b4e9a..bfa2425 100644 --- a/src/mips/full-codegen-mips.cc +++ b/src/mips/full-codegen-mips.cc @@ -2759,31 +2759,27 @@ void FullCodeGenerator::EmitIsStringWrapperSafeForDefaultValueOf( __ Branch(if_false, eq, a2, Operand(t0)); // Look for valueOf symbol in the descriptor array, and indicate false if - // found. Since we omit an enumeration index check, if it is added via a - // transition that shares its descriptor array, this is a false positive. - Label entry, loop, done; - - // Skip loop if no descriptors are valid. - __ NumberOfOwnDescriptors(a3, a1); - __ Branch(&done, eq, a3, Operand(zero_reg)); - - __ LoadInstanceDescriptors(a1, t0, a2); - // t0: descriptor array. - // a3: valid entries in the descriptor array. + // found. The type is not checked, so if it is a transition it is a false + // negative. + __ LoadInstanceDescriptors(a1, t0, a3); + __ lw(a3, FieldMemOperand(t0, FixedArray::kLengthOffset)); + // t0: descriptor array + // a3: length of descriptor array + // Calculate the end of the descriptor array. STATIC_ASSERT(kSmiTag == 0); STATIC_ASSERT(kSmiTagSize == 1); STATIC_ASSERT(kPointerSize == 4); - __ li(at, Operand(DescriptorArray::kDescriptorSize)); - __ Mult(a3, at); - // Calculate location of the first key name. - __ Addu(t0, t0, Operand(DescriptorArray::kFirstOffset - kHeapObjectTag)); - // Calculate the end of the descriptor array. - __ mov(a2, t0); + __ Addu(a2, t0, Operand(FixedArray::kHeaderSize - kHeapObjectTag)); __ sll(t1, a3, kPointerSizeLog2 - kSmiTagSize); __ Addu(a2, a2, t1); + // Calculate location of the first key name. + __ Addu(t0, + t0, + Operand(DescriptorArray::kFirstOffset - kHeapObjectTag)); // Loop through all the keys in the descriptor array. If one of these is the // symbol valueOf the result is false. + Label entry, loop; // The use of t2 to store the valueOf symbol asumes that it is not otherwise // used in the loop below. __ LoadRoot(t2, Heap::kvalue_of_symbolRootIndex); @@ -2795,8 +2791,7 @@ void FullCodeGenerator::EmitIsStringWrapperSafeForDefaultValueOf( __ bind(&entry); __ Branch(&loop, ne, t0, Operand(a2)); - __ bind(&done); - // If a valueOf property is not found on the object check that its + // If a valueOf property is not found on the object check that it's // prototype is the un-modified String prototype. If not result is false. __ lw(a2, FieldMemOperand(a1, Map::kPrototypeOffset)); __ JumpIfSmi(a2, if_false); diff --git a/src/mips/macro-assembler-mips.cc b/src/mips/macro-assembler-mips.cc index a0b8e97..7ded494 100644 --- a/src/mips/macro-assembler-mips.cc +++ b/src/mips/macro-assembler-mips.cc @@ -5299,37 +5299,20 @@ void MacroAssembler::LoadInstanceDescriptors(Register map, Register temp = descriptors; lw(temp, FieldMemOperand(map, Map::kTransitionsOrBackPointerOffset)); - Label ok, fail, load_from_back_pointer; + Label ok, fail; CheckMap(temp, scratch, isolate()->factory()->fixed_array_map(), &fail, DONT_DO_SMI_CHECK); - lw(temp, FieldMemOperand(temp, TransitionArray::kDescriptorsPointerOffset)); - lw(descriptors, FieldMemOperand(temp, JSGlobalPropertyCell::kValueOffset)); + lw(descriptors, FieldMemOperand(temp, TransitionArray::kDescriptorsOffset)); jmp(&ok); - bind(&fail); - LoadRoot(scratch, Heap::kUndefinedValueRootIndex); - Branch(&load_from_back_pointer, ne, temp, Operand(scratch)); LoadRoot(descriptors, Heap::kEmptyDescriptorArrayRootIndex); - jmp(&ok); - - bind(&load_from_back_pointer); - lw(temp, FieldMemOperand(temp, Map::kTransitionsOrBackPointerOffset)); - lw(temp, FieldMemOperand(temp, TransitionArray::kDescriptorsPointerOffset)); - lw(descriptors, FieldMemOperand(temp, JSGlobalPropertyCell::kValueOffset)); - bind(&ok); } -void MacroAssembler::NumberOfOwnDescriptors(Register dst, Register map) { - lbu(dst, FieldMemOperand(map, Map::kBitFieldOffset)); - DecodeField(dst); -} - - void MacroAssembler::EnumLength(Register dst, Register map) { STATIC_ASSERT(Map::EnumLengthBits::kShift == 0); lw(dst, FieldMemOperand(map, Map::kBitField3Offset)); diff --git a/src/mips/macro-assembler-mips.h b/src/mips/macro-assembler-mips.h index dcbeb9f..2a77d6c 100644 --- a/src/mips/macro-assembler-mips.h +++ b/src/mips/macro-assembler-mips.h @@ -1400,15 +1400,7 @@ class MacroAssembler: public Assembler { Register descriptors, Register scratch); void EnumLength(Register dst, Register map); - void NumberOfOwnDescriptors(Register dst, Register map); - - template - void DecodeField(Register reg) { - static const int shift = Field::kShift; - static const int mask = (Field::kMask >> shift) << kSmiTagSize; - srl(reg, reg, shift); - And(reg, reg, Operand(mask)); - } + // Activation support. void EnterFrame(StackFrame::Type type); -- 2.7.4