Chromium Code Reviews| Index: src/arm/ic-arm.cc |
| diff --git a/src/arm/ic-arm.cc b/src/arm/ic-arm.cc |
| index ad6eb2c2a876f847a4248f2b2f4f9d8b9c40b920..d54328e4cc198b0f5143ecb2c34af604157afafc 100644 |
| --- a/src/arm/ic-arm.cc |
| +++ b/src/arm/ic-arm.cc |
| @@ -127,27 +127,20 @@ static void GenerateDictionaryLoad(MacroAssembler* masm, |
| } |
| -// Helper function used to check that a value is either not a function |
| -// or is loaded if it is a function. |
| -static void GenerateCheckNonFunctionOrLoaded(MacroAssembler* masm, |
| - Label* miss, |
| - Register value, |
| - Register scratch) { |
| +// Helper function used to check that a value is either not an object |
| +// or is loaded if it is an object. |
| +static void GenerateCheckNonObjectOrLoaded(MacroAssembler* masm, |
| + Label* miss, |
| + Register value, |
| + Register scratch) { |
| Label done; |
| // Check if the value is a Smi. |
| __ tst(value, Operand(kSmiTagMask)); |
| __ b(eq, &done); |
| - // Check if the value is a function. |
| - __ ldr(scratch, FieldMemOperand(value, HeapObject::kMapOffset)); |
| - __ ldrb(scratch, FieldMemOperand(scratch, Map::kInstanceTypeOffset)); |
| - __ cmp(scratch, Operand(JS_FUNCTION_TYPE)); |
| - __ b(ne, &done); |
| // Check if the function has been loaded. |
|
Mads Ager (chromium)
2009/04/23 19:09:25
function -> object
|
| - __ ldr(scratch, |
| - FieldMemOperand(value, JSFunction::kSharedFunctionInfoOffset)); |
| - __ ldr(scratch, |
| - FieldMemOperand(scratch, SharedFunctionInfo::kLazyLoadDataOffset)); |
| - __ cmp(scratch, Operand(Factory::undefined_value())); |
| + __ ldr(scratch, FieldMemOperand(value, JSObject::kMapOffset)); |
| + __ ldrb(scratch, FieldMemOperand(scratch, Map::kBitField2Offset)); |
| + __ tst(scratch, Operand(1 << Map::kNeedsLoading)); |
| __ b(ne, miss); |
| __ bind(&done); |
| } |
| @@ -277,16 +270,10 @@ static void GenerateNormalHelper(MacroAssembler* masm, |
| __ tst(r1, Operand(kSmiTagMask)); |
| __ b(eq, miss); |
| - // Check that the value is a JSFunction. |
|
Mads Ager (chromium)
2009/04/23 19:09:25
We need this JSFunction check. We invoke r1 below
Christian Plesner Hansen
2009/04/24 08:11:22
Oh, good point.
|
| - __ ldr(r0, FieldMemOperand(r1, HeapObject::kMapOffset)); |
| - __ ldrb(r0, FieldMemOperand(r0, Map::kInstanceTypeOffset)); |
| - __ cmp(r0, Operand(JS_FUNCTION_TYPE)); |
| - __ b(ne, miss); |
| - |
| // Check that the function has been loaded. |
| - __ ldr(r0, FieldMemOperand(r1, JSFunction::kSharedFunctionInfoOffset)); |
| - __ ldr(r0, FieldMemOperand(r0, SharedFunctionInfo::kLazyLoadDataOffset)); |
| - __ cmp(r0, Operand(Factory::undefined_value())); |
| + __ ldr(r0, FieldMemOperand(r1, JSObject::kMapOffset)); |
| + __ ldrb(r0, FieldMemOperand(r0, Map::kBitField2Offset)); |
| + __ tst(r0, Operand(1 << Map::kNeedsLoading)); |
| __ b(ne, miss); |
| // Patch the receiver with the global proxy if necessary. |
| @@ -470,7 +457,7 @@ void LoadIC::GenerateNormal(MacroAssembler* masm) { |
| __ bind(&probe); |
| GenerateDictionaryLoad(masm, &miss, r1, r0); |
| - GenerateCheckNonFunctionOrLoaded(masm, &miss, r0, r1); |
| + GenerateCheckNonObjectOrLoaded(masm, &miss, r0, r1); |
| __ Ret(); |
| // Global object access: Check access rights. |