| Index: src/ia32/stub-cache-ia32.cc
|
| diff --git a/src/ia32/stub-cache-ia32.cc b/src/ia32/stub-cache-ia32.cc
|
| index 586cd720c865204b508608bc376a1be13ae06377..3bce0007619f5742671e961c1fcfa6226711be8c 100644
|
| --- a/src/ia32/stub-cache-ia32.cc
|
| +++ b/src/ia32/stub-cache-ia32.cc
|
| @@ -188,8 +188,7 @@ void StubCache::GenerateProbe(MacroAssembler* masm,
|
| ASSERT(extra2.is(no_reg));
|
|
|
| // Check that the receiver isn't a smi.
|
| - __ test(receiver, Immediate(kSmiTagMask));
|
| - __ j(zero, &miss);
|
| + __ JumpIfSmi(receiver, &miss);
|
|
|
| // Get the map of the receiver and compute the hash.
|
| __ mov(scratch, FieldOperand(name, String::kHashFieldOffset));
|
| @@ -249,8 +248,7 @@ void StubCompiler::GenerateLoadArrayLength(MacroAssembler* masm,
|
| Register scratch,
|
| Label* miss_label) {
|
| // Check that the receiver isn't a smi.
|
| - __ test(receiver, Immediate(kSmiTagMask));
|
| - __ j(zero, miss_label);
|
| + __ JumpIfSmi(receiver, miss_label);
|
|
|
| // Check that the object is a JS array.
|
| __ CmpObjectType(receiver, JS_ARRAY_TYPE, scratch);
|
| @@ -270,8 +268,7 @@ static void GenerateStringCheck(MacroAssembler* masm,
|
| Label* smi,
|
| Label* non_string_object) {
|
| // Check that the object isn't a smi.
|
| - __ test(receiver, Immediate(kSmiTagMask));
|
| - __ j(zero, smi);
|
| + __ JumpIfSmi(receiver, smi);
|
|
|
| // Check that the object is a string.
|
| __ mov(scratch, FieldOperand(receiver, HeapObject::kMapOffset));
|
| @@ -509,8 +506,7 @@ class CallInterceptorCompiler BASE_EMBEDDED {
|
| ASSERT(!holder->GetNamedInterceptor()->getter()->IsUndefined());
|
|
|
| // Check that the receiver isn't a smi.
|
| - __ test(receiver, Immediate(kSmiTagMask));
|
| - __ j(zero, miss);
|
| + __ JumpIfSmi(receiver, miss);
|
|
|
| CallOptimization optimization(lookup);
|
|
|
| @@ -738,8 +734,7 @@ void StubCompiler::GenerateStoreField(MacroAssembler* masm,
|
| Register scratch,
|
| Label* miss_label) {
|
| // Check that the object isn't a smi.
|
| - __ test(receiver_reg, Immediate(kSmiTagMask));
|
| - __ j(zero, miss_label);
|
| + __ JumpIfSmi(receiver_reg, miss_label);
|
|
|
| // Check that the map of the object hasn't changed.
|
| __ cmp(FieldOperand(receiver_reg, HeapObject::kMapOffset),
|
| @@ -1020,8 +1015,7 @@ void StubCompiler::GenerateLoadField(JSObject* object,
|
| String* name,
|
| Label* miss) {
|
| // Check that the receiver isn't a smi.
|
| - __ test(receiver, Immediate(kSmiTagMask));
|
| - __ j(zero, miss);
|
| + __ JumpIfSmi(receiver, miss);
|
|
|
| // Check the prototype chain.
|
| Register reg =
|
| @@ -1045,8 +1039,7 @@ MaybeObject* StubCompiler::GenerateLoadCallback(JSObject* object,
|
| String* name,
|
| Label* miss) {
|
| // Check that the receiver isn't a smi.
|
| - __ test(receiver, Immediate(kSmiTagMask));
|
| - __ j(zero, miss);
|
| + __ JumpIfSmi(receiver, miss);
|
|
|
| // Check that the maps haven't changed.
|
| Register reg =
|
| @@ -1112,8 +1105,7 @@ void StubCompiler::GenerateLoadConstant(JSObject* object,
|
| String* name,
|
| Label* miss) {
|
| // Check that the receiver isn't a smi.
|
| - __ test(receiver, Immediate(kSmiTagMask));
|
| - __ j(zero, miss);
|
| + __ JumpIfSmi(receiver, miss);
|
|
|
| // Check that the maps haven't changed.
|
| CheckPrototypes(object, receiver, holder,
|
| @@ -1139,8 +1131,7 @@ void StubCompiler::GenerateLoadInterceptor(JSObject* object,
|
| ASSERT(!interceptor_holder->GetNamedInterceptor()->getter()->IsUndefined());
|
|
|
| // Check that the receiver isn't a smi.
|
| - __ test(receiver, Immediate(kSmiTagMask));
|
| - __ j(zero, miss);
|
| + __ JumpIfSmi(receiver, miss);
|
|
|
| // So far the most popular follow ups for interceptor loads are FIELD
|
| // and CALLBACKS, so inline only them, other cases may be added
|
| @@ -1290,8 +1281,7 @@ void CallStubCompiler::GenerateGlobalReceiverCheck(JSObject* object,
|
| // object which can only happen for contextual calls. In this case,
|
| // the receiver cannot be a smi.
|
| if (object != holder) {
|
| - __ test(edx, Immediate(kSmiTagMask));
|
| - __ j(zero, miss);
|
| + __ JumpIfSmi(edx, miss);
|
| }
|
|
|
| // Check that the maps haven't changed.
|
| @@ -1317,8 +1307,7 @@ void CallStubCompiler::GenerateLoadFunctionFromCell(JSGlobalPropertyCell* cell,
|
| // the nice side effect that multiple closures based on the same
|
| // function can all use this call IC. Before we load through the
|
| // function, we have to verify that it still is a function.
|
| - __ test(edi, Immediate(kSmiTagMask));
|
| - __ j(zero, miss);
|
| + __ JumpIfSmi(edi, miss);
|
| __ CmpObjectType(edi, JS_FUNCTION_TYPE, ebx);
|
| __ j(not_equal, miss);
|
|
|
| @@ -1366,8 +1355,7 @@ MUST_USE_RESULT MaybeObject* CallStubCompiler::CompileCallField(
|
| __ mov(edx, Operand(esp, (argc + 1) * kPointerSize));
|
|
|
| // Check that the receiver isn't a smi.
|
| - __ test(edx, Immediate(kSmiTagMask));
|
| - __ j(zero, &miss);
|
| + __ JumpIfSmi(edx, &miss);
|
|
|
| // Do the right check and compute the holder register.
|
| Register reg = CheckPrototypes(object, edx, holder, ebx, eax, edi,
|
| @@ -1376,8 +1364,7 @@ MUST_USE_RESULT MaybeObject* CallStubCompiler::CompileCallField(
|
| GenerateFastPropertyLoad(masm(), edi, reg, holder, index);
|
|
|
| // Check that the function really is a function.
|
| - __ test(edi, Immediate(kSmiTagMask));
|
| - __ j(zero, &miss);
|
| + __ JumpIfSmi(edi, &miss);
|
| __ CmpObjectType(edi, JS_FUNCTION_TYPE, ebx);
|
| __ j(not_equal, &miss);
|
|
|
| @@ -1432,8 +1419,7 @@ MaybeObject* CallStubCompiler::CompileArrayPushCall(Object* object,
|
| __ mov(edx, Operand(esp, (argc + 1) * kPointerSize));
|
|
|
| // Check that the receiver isn't a smi.
|
| - __ test(edx, Immediate(kSmiTagMask));
|
| - __ j(zero, &miss);
|
| + __ JumpIfSmi(edx, &miss);
|
|
|
| CheckPrototypes(JSObject::cast(object), edx,
|
| holder, ebx,
|
| @@ -1481,8 +1467,7 @@ MaybeObject* CallStubCompiler::CompileArrayPushCall(Object* object,
|
| __ mov(Operand(edx, 0), ecx);
|
|
|
| // Check if value is a smi.
|
| - __ test(ecx, Immediate(kSmiTagMask));
|
| - __ j(not_zero, &with_write_barrier);
|
| + __ JumpIfNotSmi(ecx, &with_write_barrier);
|
|
|
| __ bind(&exit);
|
| __ ret((argc + 1) * kPointerSize);
|
| @@ -1585,8 +1570,7 @@ MaybeObject* CallStubCompiler::CompileArrayPopCall(Object* object,
|
| __ mov(edx, Operand(esp, (argc + 1) * kPointerSize));
|
|
|
| // Check that the receiver isn't a smi.
|
| - __ test(edx, Immediate(kSmiTagMask));
|
| - __ j(zero, &miss);
|
| + __ JumpIfSmi(edx, &miss);
|
| CheckPrototypes(JSObject::cast(object), edx,
|
| holder, ebx,
|
| eax, edi, name, &miss);
|
| @@ -1845,8 +1829,7 @@ MaybeObject* CallStubCompiler::CompileStringFromCharCodeCall(
|
| __ mov(edx, Operand(esp, 2 * kPointerSize));
|
|
|
| STATIC_ASSERT(kSmiTag == 0);
|
| - __ test(edx, Immediate(kSmiTagMask));
|
| - __ j(zero, &miss);
|
| + __ JumpIfSmi(edx, &miss);
|
|
|
| CheckPrototypes(JSObject::cast(object), edx, holder, ebx, eax, edi, name,
|
| &miss);
|
| @@ -1863,8 +1846,7 @@ MaybeObject* CallStubCompiler::CompileStringFromCharCodeCall(
|
| // Check the code is a smi.
|
| Label slow;
|
| STATIC_ASSERT(kSmiTag == 0);
|
| - __ test(code, Immediate(kSmiTagMask));
|
| - __ j(not_zero, &slow);
|
| + __ JumpIfNotSmi(code, &slow);
|
|
|
| // Convert the smi code to uint16.
|
| __ and_(code, Immediate(Smi::FromInt(0xffff)));
|
| @@ -1929,8 +1911,7 @@ MaybeObject* CallStubCompiler::CompileMathFloorCall(Object* object,
|
| __ mov(edx, Operand(esp, 2 * kPointerSize));
|
|
|
| STATIC_ASSERT(kSmiTag == 0);
|
| - __ test(edx, Immediate(kSmiTagMask));
|
| - __ j(zero, &miss);
|
| + __ JumpIfSmi(edx, &miss);
|
|
|
| CheckPrototypes(JSObject::cast(object), edx, holder, ebx, eax, edi, name,
|
| &miss);
|
| @@ -1946,8 +1927,7 @@ MaybeObject* CallStubCompiler::CompileMathFloorCall(Object* object,
|
| // Check if the argument is a smi.
|
| Label smi;
|
| STATIC_ASSERT(kSmiTag == 0);
|
| - __ test(eax, Immediate(kSmiTagMask));
|
| - __ j(zero, &smi);
|
| + __ JumpIfSmi(eax, &smi);
|
|
|
| // Check if the argument is a heap number and load its value into xmm0.
|
| Label slow;
|
| @@ -2054,8 +2034,7 @@ MaybeObject* CallStubCompiler::CompileMathAbsCall(Object* object,
|
| __ mov(edx, Operand(esp, 2 * kPointerSize));
|
|
|
| STATIC_ASSERT(kSmiTag == 0);
|
| - __ test(edx, Immediate(kSmiTagMask));
|
| - __ j(zero, &miss);
|
| + __ JumpIfSmi(edx, &miss);
|
|
|
| CheckPrototypes(JSObject::cast(object), edx, holder, ebx, eax, edi, name,
|
| &miss);
|
| @@ -2071,8 +2050,7 @@ MaybeObject* CallStubCompiler::CompileMathAbsCall(Object* object,
|
| // Check if the argument is a smi.
|
| Label not_smi;
|
| STATIC_ASSERT(kSmiTag == 0);
|
| - __ test(eax, Immediate(kSmiTagMask));
|
| - __ j(not_zero, ¬_smi);
|
| + __ JumpIfNotSmi(eax, ¬_smi);
|
|
|
| // Set ebx to 1...1 (== -1) if the argument is negative, or to 0...0
|
| // otherwise.
|
| @@ -2158,8 +2136,7 @@ MaybeObject* CallStubCompiler::CompileFastApiCall(
|
| __ mov(edx, Operand(esp, (argc + 1) * kPointerSize));
|
|
|
| // Check that the receiver isn't a smi.
|
| - __ test(edx, Immediate(kSmiTagMask));
|
| - __ j(zero, &miss_before_stack_reserved);
|
| + __ JumpIfSmi(edx, &miss_before_stack_reserved);
|
|
|
| Counters* counters = isolate()->counters();
|
| __ IncrementCounter(counters->call_const(), 1);
|
| @@ -2227,8 +2204,7 @@ MaybeObject* CallStubCompiler::CompileCallConstant(
|
|
|
| // Check that the receiver isn't a smi.
|
| if (check != NUMBER_CHECK) {
|
| - __ test(edx, Immediate(kSmiTagMask));
|
| - __ j(zero, &miss);
|
| + __ JumpIfSmi(edx, &miss);
|
| }
|
|
|
| // Make sure that it's okay not to patch the on stack receiver
|
| @@ -2277,8 +2253,7 @@ MaybeObject* CallStubCompiler::CompileCallConstant(
|
| } else {
|
| Label fast;
|
| // Check that the object is a smi or a heap number.
|
| - __ test(edx, Immediate(kSmiTagMask));
|
| - __ j(zero, &fast);
|
| + __ JumpIfSmi(edx, &fast);
|
| __ CmpObjectType(edx, HEAP_NUMBER_TYPE, eax);
|
| __ j(not_equal, &miss);
|
| __ bind(&fast);
|
| @@ -2373,8 +2348,7 @@ MaybeObject* CallStubCompiler::CompileCallInterceptor(JSObject* object,
|
| __ mov(edx, Operand(esp, (argc + 1) * kPointerSize));
|
|
|
| // Check that the function really is a function.
|
| - __ test(eax, Immediate(kSmiTagMask));
|
| - __ j(zero, &miss);
|
| + __ JumpIfSmi(eax, &miss);
|
| __ CmpObjectType(eax, JS_FUNCTION_TYPE, ebx);
|
| __ j(not_equal, &miss);
|
|
|
| @@ -2522,8 +2496,7 @@ MaybeObject* StoreStubCompiler::CompileStoreCallback(JSObject* object,
|
| Label miss;
|
|
|
| // Check that the object isn't a smi.
|
| - __ test(edx, Immediate(kSmiTagMask));
|
| - __ j(zero, &miss);
|
| + __ JumpIfSmi(edx, &miss);
|
|
|
| // Check that the map of the object hasn't changed.
|
| __ cmp(FieldOperand(edx, HeapObject::kMapOffset),
|
| @@ -2572,8 +2545,7 @@ MaybeObject* StoreStubCompiler::CompileStoreInterceptor(JSObject* receiver,
|
| Label miss;
|
|
|
| // Check that the object isn't a smi.
|
| - __ test(edx, Immediate(kSmiTagMask));
|
| - __ j(zero, &miss);
|
| + __ JumpIfSmi(edx, &miss);
|
|
|
| // Check that the map of the object hasn't changed.
|
| __ cmp(FieldOperand(edx, HeapObject::kMapOffset),
|
| @@ -2762,8 +2734,7 @@ MaybeObject* LoadStubCompiler::CompileLoadNonexistent(String* name,
|
| Label miss;
|
|
|
| // Check that the receiver isn't a smi.
|
| - __ test(eax, Immediate(kSmiTagMask));
|
| - __ j(zero, &miss);
|
| + __ JumpIfSmi(eax, &miss);
|
|
|
| ASSERT(last->IsGlobalObject() || last->HasFastProperties());
|
|
|
| @@ -2915,8 +2886,7 @@ MaybeObject* LoadStubCompiler::CompileLoadGlobal(JSObject* object,
|
| // object which can only happen for contextual loads. In this case,
|
| // the receiver cannot be a smi.
|
| if (object != holder) {
|
| - __ test(eax, Immediate(kSmiTagMask));
|
| - __ j(zero, &miss);
|
| + __ JumpIfSmi(eax, &miss);
|
| }
|
|
|
| // Check that the maps haven't changed.
|
| @@ -3232,8 +3202,7 @@ MaybeObject* ConstructStubCompiler::CompileConstructStub(JSFunction* function) {
|
| // Load the initial map and verify that it is in fact a map.
|
| __ mov(ebx, FieldOperand(edi, JSFunction::kPrototypeOrInitialMapOffset));
|
| // Will both indicate a NULL and a Smi.
|
| - __ test(ebx, Immediate(kSmiTagMask));
|
| - __ j(zero, &generic_stub_call);
|
| + __ JumpIfSmi(ebx, &generic_stub_call);
|
| __ CmpObjectType(ebx, MAP_TYPE, ecx);
|
| __ j(not_equal, &generic_stub_call);
|
|
|
| @@ -3366,8 +3335,7 @@ void KeyedLoadStubCompiler::GenerateLoadExternalArray(
|
| // have been verified by the caller to not be a smi.
|
|
|
| // Check that the key is a smi.
|
| - __ test(eax, Immediate(kSmiTagMask));
|
| - __ j(not_zero, &miss_force_generic);
|
| + __ JumpIfNotSmi(eax, &miss_force_generic);
|
|
|
| // Check that the index is in range.
|
| __ mov(ecx, eax);
|
| @@ -3522,8 +3490,7 @@ void KeyedStoreStubCompiler::GenerateStoreExternalArray(
|
| // have been verified by the caller to not be a smi.
|
|
|
| // Check that the key is a smi.
|
| - __ test(ecx, Immediate(kSmiTagMask));
|
| - __ j(not_zero, &miss_force_generic);
|
| + __ JumpIfNotSmi(ecx, &miss_force_generic);
|
|
|
| // Check that the index is in range.
|
| __ mov(edi, FieldOperand(edx, JSObject::kElementsOffset));
|
| @@ -3540,11 +3507,11 @@ void KeyedStoreStubCompiler::GenerateStoreExternalArray(
|
| // ecx: key
|
| // edi: elements array
|
| // ebx: untagged index
|
| - __ test(eax, Immediate(kSmiTagMask));
|
| - if (elements_kind == JSObject::EXTERNAL_PIXEL_ELEMENTS)
|
| - __ j(not_equal, &slow);
|
| - else
|
| - __ j(not_equal, &check_heap_number);
|
| + if (elements_kind == JSObject::EXTERNAL_PIXEL_ELEMENTS) {
|
| + __ JumpIfNotSmi(eax, &slow);
|
| + } else {
|
| + __ JumpIfNotSmi(eax, &check_heap_number);
|
| + }
|
|
|
| // smi case
|
| __ mov(ecx, eax); // Preserve the value in eax. Key is no longer needed.
|
| @@ -3736,8 +3703,7 @@ void KeyedLoadStubCompiler::GenerateLoadFastElement(MacroAssembler* masm) {
|
| // have been verified by the caller to not be a smi.
|
|
|
| // Check that the key is a smi.
|
| - __ test(eax, Immediate(kSmiTagMask));
|
| - __ j(not_zero, &miss_force_generic);
|
| + __ JumpIfNotSmi(eax, &miss_force_generic);
|
|
|
| // Get the elements array.
|
| __ mov(ecx, FieldOperand(edx, JSObject::kElementsOffset));
|
| @@ -3775,8 +3741,7 @@ void KeyedStoreStubCompiler::GenerateStoreFastElement(MacroAssembler* masm,
|
| // have been verified by the caller to not be a smi.
|
|
|
| // Check that the key is a smi.
|
| - __ test(ecx, Immediate(kSmiTagMask));
|
| - __ j(not_zero, &miss_force_generic);
|
| + __ JumpIfNotSmi(ecx, &miss_force_generic);
|
|
|
| // Get the elements array and make sure it is a fast element array, not 'cow'.
|
| __ mov(edi, FieldOperand(edx, JSObject::kElementsOffset));
|
|
|