From 11588796252b4bf5f2bbc264661eb5ea18380098 Mon Sep 17 00:00:00 2001 From: "erik.corry@gmail.com" Date: Mon, 27 Oct 2008 12:44:11 +0000 Subject: [PATCH] Add missing ARM files from last change! git-svn-id: http://v8.googlecode.com/svn/branches/bleeding_edge@604 ce2b1a6d-e550-0410-aec6-3dcde31c8c00 --- src/ic-arm.cc | 81 +++++---------------------------------------------- src/stub-cache-arm.cc | 14 +-------- 2 files changed, 8 insertions(+), 87 deletions(-) diff --git a/src/ic-arm.cc b/src/ic-arm.cc index 7624319..ef69f35 100644 --- a/src/ic-arm.cc +++ b/src/ic-arm.cc @@ -156,7 +156,7 @@ void LoadIC::GenerateArrayLength(MacroAssembler* masm) { } -void LoadIC::GenerateShortStringLength(MacroAssembler* masm) { +void LoadIC::GenerateStringLength(MacroAssembler* masm) { // ----------- S t a t e ------------- // -- r2 : name // -- lr : return address @@ -171,86 +171,19 @@ void LoadIC::GenerateShortStringLength(MacroAssembler* masm) { __ tst(r0, Operand(kSmiTagMask)); __ b(eq, &miss); - // Check that the object is a short string. + // Check that the object is a string. __ ldr(r1, FieldMemOperand(r0, HeapObject::kMapOffset)); __ ldrb(r1, FieldMemOperand(r1, Map::kInstanceTypeOffset)); - __ and_(r1, r1, Operand(kIsNotStringMask | kStringSizeMask)); + __ and_(r1, r1, Operand(kIsNotStringMask)); // The cast is to resolve the overload for the argument of 0x0. - __ cmp(r1, Operand(static_cast(kStringTag | kShortStringTag))); + __ cmp(r1, Operand(static_cast(kStringTag))); __ b(ne, &miss); + __ and_(r1, r1, Operand(kStringSizeMask)); + __ add(r1, r1, Operand(String::kHashShift)); // Load length directly from the string. __ ldr(r0, FieldMemOperand(r0, String::kLengthOffset)); - __ mov(r0, Operand(r0, LSR, String::kShortLengthShift)); - __ mov(r0, Operand(r0, LSL, kSmiTagSize)); - __ Ret(); - - // Cache miss: Jump to runtime. - __ bind(&miss); - Handle ic(Builtins::builtin(Builtins::LoadIC_Miss)); - __ Jump(ic, RelocInfo::CODE_TARGET); -} - - -void LoadIC::GenerateMediumStringLength(MacroAssembler* masm) { - // ----------- S t a t e ------------- - // -- r2 : name - // -- lr : return address - // -- [sp] : receiver - // ----------------------------------- - - Label miss; - - __ ldr(r0, MemOperand(sp, 0)); - - // Check that the receiver isn't a smi. - __ tst(r0, Operand(kSmiTagMask)); - __ b(eq, &miss); - - // Check that the object is a medium string. - __ ldr(r1, FieldMemOperand(r0, HeapObject::kMapOffset)); - __ ldrb(r1, FieldMemOperand(r1, Map::kInstanceTypeOffset)); - __ and_(r1, r1, Operand(kIsNotStringMask | kStringSizeMask)); - __ cmp(r1, Operand(kStringTag | kMediumStringTag)); - __ b(ne, &miss); - - // Load length directly from the string. - __ ldr(r0, FieldMemOperand(r0, String::kLengthOffset)); - __ mov(r0, Operand(r0, LSR, String::kMediumLengthShift)); - __ mov(r0, Operand(r0, LSL, kSmiTagSize)); - __ Ret(); - - // Cache miss: Jump to runtime. - __ bind(&miss); - Handle ic(Builtins::builtin(Builtins::LoadIC_Miss)); - __ Jump(ic, RelocInfo::CODE_TARGET); -} - - -void LoadIC::GenerateLongStringLength(MacroAssembler* masm) { - // ----------- S t a t e ------------- - // -- r2 : name - // -- lr : return address - // -- [sp] : receiver - // ----------------------------------- - - Label miss; - - __ ldr(r0, MemOperand(sp, 0)); - // Check that the receiver isn't a smi. - __ tst(r0, Operand(kSmiTagMask)); - __ b(eq, &miss); - - // Check that the object is a long string. - __ ldr(r1, FieldMemOperand(r0, HeapObject::kMapOffset)); - __ ldrb(r1, FieldMemOperand(r1, Map::kInstanceTypeOffset)); - __ and_(r1, r1, Operand(kIsNotStringMask | kStringSizeMask)); - __ cmp(r1, Operand(kStringTag | kLongStringTag)); - __ b(ne, &miss); - - // Load length directly from the string. - __ ldr(r0, FieldMemOperand(r0, String::kLengthOffset)); - __ mov(r0, Operand(r0, LSR, String::kLongLengthShift)); + __ mov(r0, Operand(r0, LSR, r1)); __ mov(r0, Operand(r0, LSL, kSmiTagSize)); __ Ret(); diff --git a/src/stub-cache-arm.cc b/src/stub-cache-arm.cc index 0d31709..5a3f994 100644 --- a/src/stub-cache-arm.cc +++ b/src/stub-cache-arm.cc @@ -802,19 +802,7 @@ Object* KeyedLoadStubCompiler::CompileLoadArrayLength(String* name) { } -Object* KeyedLoadStubCompiler::CompileLoadShortStringLength(String* name) { - UNIMPLEMENTED(); - return Heap::undefined_value(); -} - - -Object* KeyedLoadStubCompiler::CompileLoadMediumStringLength(String* name) { - UNIMPLEMENTED(); - return Heap::undefined_value(); -} - - -Object* KeyedLoadStubCompiler::CompileLoadLongStringLength(String* name) { +Object* KeyedLoadStubCompiler::CompileLoadStringLength(String* name) { UNIMPLEMENTED(); return Heap::undefined_value(); } -- 2.7.4