Commit 11588796 authored by erik.corry@gmail.com's avatar erik.corry@gmail.com

Add missing ARM files from last change!

git-svn-id: http://v8.googlecode.com/svn/branches/bleeding_edge@604 ce2b1a6d-e550-0410-aec6-3dcde31c8c00
parent 0fc72f2b
......@@ -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<int32_t>(kStringTag | kShortStringTag)));
__ cmp(r1, Operand(static_cast<int32_t>(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<Code> 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<Code> 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();
......
......@@ -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();
}
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment