| Index: src/ia32/full-codegen-ia32.cc
|
| diff --git a/src/ia32/full-codegen-ia32.cc b/src/ia32/full-codegen-ia32.cc
|
| index 871179400378e66d39e25898e5bd0cd21a5e9c3d..110791858fbae963cb0902bb9787ab043539714f 100644
|
| --- a/src/ia32/full-codegen-ia32.cc
|
| +++ b/src/ia32/full-codegen-ia32.cc
|
| @@ -874,8 +874,7 @@ void FullCodeGenerator::VisitForInStatement(ForInStatement* stmt) {
|
|
|
| // Convert the object to a JS object.
|
| Label convert, done_convert;
|
| - __ test(eax, Immediate(kSmiTagMask));
|
| - __ j(zero, &convert, Label::kNear);
|
| + __ JumpIfSmi(eax, &convert, Label::kNear);
|
| __ CmpObjectType(eax, FIRST_SPEC_OBJECT_TYPE, ecx);
|
| __ j(above_equal, &done_convert, Label::kNear);
|
| __ bind(&convert);
|
| @@ -909,8 +908,7 @@ void FullCodeGenerator::VisitForInStatement(ForInStatement* stmt) {
|
| // descriptors (edx). This is the case if the next enumeration
|
| // index field does not contain a smi.
|
| __ mov(edx, FieldOperand(edx, DescriptorArray::kEnumerationIndexOffset));
|
| - __ test(edx, Immediate(kSmiTagMask));
|
| - __ j(zero, &call_runtime);
|
| + __ JumpIfSmi(edx, &call_runtime);
|
|
|
| // For all objects but the receiver, check that the cache is empty.
|
| Label check_prototype;
|
| @@ -2386,8 +2384,7 @@ void FullCodeGenerator::EmitIsObject(ZoneList<Expression*>* args) {
|
| context()->PrepareTest(&materialize_true, &materialize_false,
|
| &if_true, &if_false, &fall_through);
|
|
|
| - __ test(eax, Immediate(kSmiTagMask));
|
| - __ j(zero, if_false);
|
| + __ JumpIfSmi(eax, if_false);
|
| __ cmp(eax, isolate()->factory()->null_value());
|
| __ j(equal, if_true);
|
| __ mov(ebx, FieldOperand(eax, HeapObject::kMapOffset));
|
| @@ -2418,8 +2415,7 @@ void FullCodeGenerator::EmitIsSpecObject(ZoneList<Expression*>* args) {
|
| context()->PrepareTest(&materialize_true, &materialize_false,
|
| &if_true, &if_false, &fall_through);
|
|
|
| - __ test(eax, Immediate(kSmiTagMask));
|
| - __ j(equal, if_false);
|
| + __ JumpIfSmi(eax, if_false);
|
| __ CmpObjectType(eax, FIRST_SPEC_OBJECT_TYPE, ebx);
|
| PrepareForBailoutBeforeSplit(TOS_REG, true, if_true, if_false);
|
| Split(above_equal, if_true, if_false, fall_through);
|
| @@ -2440,8 +2436,7 @@ void FullCodeGenerator::EmitIsUndetectableObject(ZoneList<Expression*>* args) {
|
| context()->PrepareTest(&materialize_true, &materialize_false,
|
| &if_true, &if_false, &fall_through);
|
|
|
| - __ test(eax, Immediate(kSmiTagMask));
|
| - __ j(zero, if_false);
|
| + __ JumpIfSmi(eax, if_false);
|
| __ mov(ebx, FieldOperand(eax, HeapObject::kMapOffset));
|
| __ movzx_b(ebx, FieldOperand(ebx, Map::kBitFieldOffset));
|
| __ test(ebx, Immediate(1 << Map::kIsUndetectable));
|
| @@ -2515,8 +2510,7 @@ void FullCodeGenerator::EmitIsStringWrapperSafeForDefaultValueOf(
|
| // 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.
|
| __ mov(ecx, FieldOperand(ebx, Map::kPrototypeOffset));
|
| - __ test(ecx, Immediate(kSmiTagMask));
|
| - __ j(zero, if_false);
|
| + __ JumpIfSmi(ecx, if_false);
|
| __ mov(ecx, FieldOperand(ecx, HeapObject::kMapOffset));
|
| __ mov(edx, Operand(esi, Context::SlotOffset(Context::GLOBAL_INDEX)));
|
| __ mov(edx,
|
| @@ -2548,8 +2542,7 @@ void FullCodeGenerator::EmitIsFunction(ZoneList<Expression*>* args) {
|
| context()->PrepareTest(&materialize_true, &materialize_false,
|
| &if_true, &if_false, &fall_through);
|
|
|
| - __ test(eax, Immediate(kSmiTagMask));
|
| - __ j(zero, if_false);
|
| + __ JumpIfSmi(eax, if_false);
|
| __ CmpObjectType(eax, JS_FUNCTION_TYPE, ebx);
|
| PrepareForBailoutBeforeSplit(TOS_REG, true, if_true, if_false);
|
| Split(equal, if_true, if_false, fall_through);
|
| @@ -2570,8 +2563,7 @@ void FullCodeGenerator::EmitIsArray(ZoneList<Expression*>* args) {
|
| context()->PrepareTest(&materialize_true, &materialize_false,
|
| &if_true, &if_false, &fall_through);
|
|
|
| - __ test(eax, Immediate(kSmiTagMask));
|
| - __ j(equal, if_false);
|
| + __ JumpIfSmi(eax, if_false);
|
| __ CmpObjectType(eax, JS_ARRAY_TYPE, ebx);
|
| PrepareForBailoutBeforeSplit(TOS_REG, true, if_true, if_false);
|
| Split(equal, if_true, if_false, fall_through);
|
| @@ -2592,8 +2584,7 @@ void FullCodeGenerator::EmitIsRegExp(ZoneList<Expression*>* args) {
|
| context()->PrepareTest(&materialize_true, &materialize_false,
|
| &if_true, &if_false, &fall_through);
|
|
|
| - __ test(eax, Immediate(kSmiTagMask));
|
| - __ j(equal, if_false);
|
| + __ JumpIfSmi(eax, if_false);
|
| __ CmpObjectType(eax, JS_REGEXP_TYPE, ebx);
|
| PrepareForBailoutBeforeSplit(TOS_REG, true, if_true, if_false);
|
| Split(equal, if_true, if_false, fall_through);
|
| @@ -2701,8 +2692,7 @@ void FullCodeGenerator::EmitClassOf(ZoneList<Expression*>* args) {
|
| VisitForAccumulatorValue(args->at(0));
|
|
|
| // If the object is a smi, we return null.
|
| - __ test(eax, Immediate(kSmiTagMask));
|
| - __ j(zero, &null);
|
| + __ JumpIfSmi(eax, &null);
|
|
|
| // Check that the object is a JS object but take special care of JS
|
| // functions to make sure they have 'Function' as their class.
|
| @@ -2855,8 +2845,7 @@ void FullCodeGenerator::EmitValueOf(ZoneList<Expression*>* args) {
|
|
|
| Label done;
|
| // If the object is a smi return the object.
|
| - __ test(eax, Immediate(kSmiTagMask));
|
| - __ j(zero, &done, Label::kNear);
|
| + __ JumpIfSmi(eax, &done, Label::kNear);
|
| // If the object is not a value type, return the object.
|
| __ CmpObjectType(eax, JS_VALUE_TYPE, ebx);
|
| __ j(not_equal, &done, Label::kNear);
|
| @@ -2892,8 +2881,7 @@ void FullCodeGenerator::EmitSetValueOf(ZoneList<Expression*>* args) {
|
|
|
| Label done;
|
| // If the object is a smi, return the value.
|
| - __ test(ebx, Immediate(kSmiTagMask));
|
| - __ j(zero, &done, Label::kNear);
|
| + __ JumpIfSmi(ebx, &done, Label::kNear);
|
|
|
| // If the object is not a value type, return the value.
|
| __ CmpObjectType(ebx, JS_VALUE_TYPE, ecx);
|
| @@ -3167,8 +3155,7 @@ void FullCodeGenerator::EmitSwapElements(ZoneList<Expression*>* args) {
|
| __ mov(index_2, Operand(esp, 0));
|
| __ mov(temp, index_1);
|
| __ or_(temp, Operand(index_2));
|
| - __ test(temp, Immediate(kSmiTagMask));
|
| - __ j(not_zero, &slow_case);
|
| + __ JumpIfNotSmi(temp, &slow_case);
|
|
|
| // Check that both indices are valid.
|
| __ mov(temp, FieldOperand(object, JSArray::kLengthOffset));
|
| @@ -3273,8 +3260,7 @@ void FullCodeGenerator::EmitIsRegExpEquivalent(ZoneList<Expression*>* args) {
|
| // Fail if either is a non-HeapObject.
|
| __ mov(tmp, left);
|
| __ and_(Operand(tmp), right);
|
| - __ test(Operand(tmp), Immediate(kSmiTagMask));
|
| - __ j(zero, &fail);
|
| + __ JumpIfSmi(tmp, &fail);
|
| __ mov(tmp, FieldOperand(left, HeapObject::kMapOffset));
|
| __ CmpInstanceType(tmp, JS_REGEXP_TYPE);
|
| __ j(not_equal, &fail);
|
| @@ -3366,8 +3352,7 @@ void FullCodeGenerator::EmitFastAsciiArrayJoin(ZoneList<Expression*>* args) {
|
| __ sub(Operand(esp), Immediate(2 * kPointerSize));
|
| __ cld();
|
| // Check that the array is a JSArray
|
| - __ test(array, Immediate(kSmiTagMask));
|
| - __ j(zero, &bailout);
|
| + __ JumpIfSmi(array, &bailout);
|
| __ CmpObjectType(array, JS_ARRAY_TYPE, scratch);
|
| __ j(not_equal, &bailout);
|
|
|
| @@ -3408,8 +3393,7 @@ void FullCodeGenerator::EmitFastAsciiArrayJoin(ZoneList<Expression*>* args) {
|
| index,
|
| times_pointer_size,
|
| FixedArray::kHeaderSize));
|
| - __ test(string, Immediate(kSmiTagMask));
|
| - __ j(zero, &bailout);
|
| + __ JumpIfSmi(string, &bailout);
|
| __ mov(scratch, FieldOperand(string, HeapObject::kMapOffset));
|
| __ movzx_b(scratch, FieldOperand(scratch, Map::kInstanceTypeOffset));
|
| __ and_(scratch, Immediate(
|
| @@ -3442,8 +3426,7 @@ void FullCodeGenerator::EmitFastAsciiArrayJoin(ZoneList<Expression*>* args) {
|
|
|
| // Check that the separator is a flat ASCII string.
|
| __ mov(string, separator_operand);
|
| - __ test(string, Immediate(kSmiTagMask));
|
| - __ j(zero, &bailout);
|
| + __ JumpIfSmi(string, &bailout);
|
| __ mov(scratch, FieldOperand(string, HeapObject::kMapOffset));
|
| __ movzx_b(scratch, FieldOperand(scratch, Map::kInstanceTypeOffset));
|
| __ and_(scratch, Immediate(
|
| @@ -3735,8 +3718,7 @@ void FullCodeGenerator::VisitUnaryOperation(UnaryOperation* expr) {
|
| Comment cmt(masm_, "[ UnaryOperation (ADD)");
|
| VisitForAccumulatorValue(expr->expression());
|
| Label no_conversion;
|
| - __ test(result_register(), Immediate(kSmiTagMask));
|
| - __ j(zero, &no_conversion);
|
| + __ JumpIfSmi(result_register(), &no_conversion);
|
| ToNumberStub convert_stub;
|
| __ CallStub(&convert_stub);
|
| __ bind(&no_conversion);
|
| @@ -3841,8 +3823,7 @@ void FullCodeGenerator::VisitCountOperation(CountOperation* expr) {
|
| // Call ToNumber only if operand is not a smi.
|
| Label no_conversion;
|
| if (ShouldInlineSmiCase(expr->op())) {
|
| - __ test(eax, Immediate(kSmiTagMask));
|
| - __ j(zero, &no_conversion, Label::kNear);
|
| + __ JumpIfSmi(eax, &no_conversion, Label::kNear);
|
| }
|
| ToNumberStub convert_stub;
|
| __ CallStub(&convert_stub);
|
| @@ -4208,8 +4189,7 @@ void FullCodeGenerator::VisitCompareToNull(CompareToNull* expr) {
|
| __ j(equal, if_true);
|
| __ cmp(eax, isolate()->factory()->undefined_value());
|
| __ j(equal, if_true);
|
| - __ test(eax, Immediate(kSmiTagMask));
|
| - __ j(zero, if_false);
|
| + __ JumpIfSmi(eax, if_false);
|
| // It can be an undetectable object.
|
| __ mov(edx, FieldOperand(eax, HeapObject::kMapOffset));
|
| __ movzx_b(edx, FieldOperand(edx, Map::kBitFieldOffset));
|
|
|