| OLD | NEW |
| 1 // Copyright 2011 the V8 project authors. All rights reserved. | 1 // Copyright 2011 the V8 project authors. All rights reserved. |
| 2 // Redistribution and use in source and binary forms, with or without | 2 // Redistribution and use in source and binary forms, with or without |
| 3 // modification, are permitted provided that the following conditions are | 3 // modification, are permitted provided that the following conditions are |
| 4 // met: | 4 // met: |
| 5 // | 5 // |
| 6 // * Redistributions of source code must retain the above copyright | 6 // * Redistributions of source code must retain the above copyright |
| 7 // notice, this list of conditions and the following disclaimer. | 7 // notice, this list of conditions and the following disclaimer. |
| 8 // * Redistributions in binary form must reproduce the above | 8 // * Redistributions in binary form must reproduce the above |
| 9 // copyright notice, this list of conditions and the following | 9 // copyright notice, this list of conditions and the following |
| 10 // disclaimer in the documentation and/or other materials provided | 10 // disclaimer in the documentation and/or other materials provided |
| (...skipping 2568 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2579 __ cmp(r3, ip); | 2579 __ cmp(r3, ip); |
| 2580 __ b(eq, if_false); | 2580 __ b(eq, if_false); |
| 2581 __ add(r4, r4, Operand(kPointerSize)); | 2581 __ add(r4, r4, Operand(kPointerSize)); |
| 2582 __ bind(&entry); | 2582 __ bind(&entry); |
| 2583 __ cmp(r4, Operand(r2)); | 2583 __ cmp(r4, Operand(r2)); |
| 2584 __ b(ne, &loop); | 2584 __ b(ne, &loop); |
| 2585 | 2585 |
| 2586 // If a valueOf property is not found on the object check that it's | 2586 // If a valueOf property is not found on the object check that it's |
| 2587 // prototype is the un-modified String prototype. If not result is false. | 2587 // prototype is the un-modified String prototype. If not result is false. |
| 2588 __ ldr(r2, FieldMemOperand(r1, Map::kPrototypeOffset)); | 2588 __ ldr(r2, FieldMemOperand(r1, Map::kPrototypeOffset)); |
| 2589 __ tst(r2, Operand(kSmiTagMask)); | 2589 __ JumpIfSmi(r2, if_false); |
| 2590 __ b(eq, if_false); | |
| 2591 __ ldr(r2, FieldMemOperand(r2, HeapObject::kMapOffset)); | 2590 __ ldr(r2, FieldMemOperand(r2, HeapObject::kMapOffset)); |
| 2592 __ ldr(r3, ContextOperand(cp, Context::GLOBAL_INDEX)); | 2591 __ ldr(r3, ContextOperand(cp, Context::GLOBAL_INDEX)); |
| 2593 __ ldr(r3, FieldMemOperand(r3, GlobalObject::kGlobalContextOffset)); | 2592 __ ldr(r3, FieldMemOperand(r3, GlobalObject::kGlobalContextOffset)); |
| 2594 __ ldr(r3, ContextOperand(r3, Context::STRING_FUNCTION_PROTOTYPE_MAP_INDEX)); | 2593 __ ldr(r3, ContextOperand(r3, Context::STRING_FUNCTION_PROTOTYPE_MAP_INDEX)); |
| 2595 __ cmp(r2, r3); | 2594 __ cmp(r2, r3); |
| 2596 __ b(ne, if_false); | 2595 __ b(ne, if_false); |
| 2597 | 2596 |
| 2598 // Set the bit in the map to indicate that it has been checked safe for | 2597 // Set the bit in the map to indicate that it has been checked safe for |
| 2599 // default valueOf and set true result. | 2598 // default valueOf and set true result. |
| 2600 __ ldrb(r2, FieldMemOperand(r1, Map::kBitField2Offset)); | 2599 __ ldrb(r2, FieldMemOperand(r1, Map::kBitField2Offset)); |
| (...skipping 735 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3336 | 3335 |
| 3337 VisitForStackValue(args->at(0)); | 3336 VisitForStackValue(args->at(0)); |
| 3338 VisitForAccumulatorValue(args->at(1)); | 3337 VisitForAccumulatorValue(args->at(1)); |
| 3339 __ pop(left); | 3338 __ pop(left); |
| 3340 | 3339 |
| 3341 Label done, fail, ok; | 3340 Label done, fail, ok; |
| 3342 __ cmp(left, Operand(right)); | 3341 __ cmp(left, Operand(right)); |
| 3343 __ b(eq, &ok); | 3342 __ b(eq, &ok); |
| 3344 // Fail if either is a non-HeapObject. | 3343 // Fail if either is a non-HeapObject. |
| 3345 __ and_(tmp, left, Operand(right)); | 3344 __ and_(tmp, left, Operand(right)); |
| 3346 __ tst(tmp, Operand(kSmiTagMask)); | 3345 __ JumpIfSmi(tmp, &fail); |
| 3347 __ b(eq, &fail); | |
| 3348 __ ldr(tmp, FieldMemOperand(left, HeapObject::kMapOffset)); | 3346 __ ldr(tmp, FieldMemOperand(left, HeapObject::kMapOffset)); |
| 3349 __ ldrb(tmp2, FieldMemOperand(tmp, Map::kInstanceTypeOffset)); | 3347 __ ldrb(tmp2, FieldMemOperand(tmp, Map::kInstanceTypeOffset)); |
| 3350 __ cmp(tmp2, Operand(JS_REGEXP_TYPE)); | 3348 __ cmp(tmp2, Operand(JS_REGEXP_TYPE)); |
| 3351 __ b(ne, &fail); | 3349 __ b(ne, &fail); |
| 3352 __ ldr(tmp2, FieldMemOperand(right, HeapObject::kMapOffset)); | 3350 __ ldr(tmp2, FieldMemOperand(right, HeapObject::kMapOffset)); |
| 3353 __ cmp(tmp, Operand(tmp2)); | 3351 __ cmp(tmp, Operand(tmp2)); |
| 3354 __ b(ne, &fail); | 3352 __ b(ne, &fail); |
| 3355 __ ldr(tmp, FieldMemOperand(left, JSRegExp::kDataOffset)); | 3353 __ ldr(tmp, FieldMemOperand(left, JSRegExp::kDataOffset)); |
| 3356 __ ldr(tmp2, FieldMemOperand(right, JSRegExp::kDataOffset)); | 3354 __ ldr(tmp2, FieldMemOperand(right, JSRegExp::kDataOffset)); |
| 3357 __ cmp(tmp, tmp2); | 3355 __ cmp(tmp, tmp2); |
| (...skipping 407 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3765 } | 3763 } |
| 3766 __ CallRuntime(Runtime::kTypeof, 1); | 3764 __ CallRuntime(Runtime::kTypeof, 1); |
| 3767 context()->Plug(r0); | 3765 context()->Plug(r0); |
| 3768 break; | 3766 break; |
| 3769 } | 3767 } |
| 3770 | 3768 |
| 3771 case Token::ADD: { | 3769 case Token::ADD: { |
| 3772 Comment cmt(masm_, "[ UnaryOperation (ADD)"); | 3770 Comment cmt(masm_, "[ UnaryOperation (ADD)"); |
| 3773 VisitForAccumulatorValue(expr->expression()); | 3771 VisitForAccumulatorValue(expr->expression()); |
| 3774 Label no_conversion; | 3772 Label no_conversion; |
| 3775 __ tst(result_register(), Operand(kSmiTagMask)); | 3773 __ JumpIfSmi(result_register(), &no_conversion); |
| 3776 __ b(eq, &no_conversion); | |
| 3777 ToNumberStub convert_stub; | 3774 ToNumberStub convert_stub; |
| 3778 __ CallStub(&convert_stub); | 3775 __ CallStub(&convert_stub); |
| 3779 __ bind(&no_conversion); | 3776 __ bind(&no_conversion); |
| 3780 context()->Plug(result_register()); | 3777 context()->Plug(result_register()); |
| 3781 break; | 3778 break; |
| 3782 } | 3779 } |
| 3783 | 3780 |
| 3784 case Token::SUB: | 3781 case Token::SUB: |
| 3785 EmitUnaryOperation(expr, "[ UnaryOperation (SUB)"); | 3782 EmitUnaryOperation(expr, "[ UnaryOperation (SUB)"); |
| 3786 break; | 3783 break; |
| (...skipping 441 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 4228 PrepareForBailoutBeforeSplit(TOS_REG, true, if_true, if_false); | 4225 PrepareForBailoutBeforeSplit(TOS_REG, true, if_true, if_false); |
| 4229 __ LoadRoot(r1, Heap::kNullValueRootIndex); | 4226 __ LoadRoot(r1, Heap::kNullValueRootIndex); |
| 4230 __ cmp(r0, r1); | 4227 __ cmp(r0, r1); |
| 4231 if (expr->is_strict()) { | 4228 if (expr->is_strict()) { |
| 4232 Split(eq, if_true, if_false, fall_through); | 4229 Split(eq, if_true, if_false, fall_through); |
| 4233 } else { | 4230 } else { |
| 4234 __ b(eq, if_true); | 4231 __ b(eq, if_true); |
| 4235 __ LoadRoot(r1, Heap::kUndefinedValueRootIndex); | 4232 __ LoadRoot(r1, Heap::kUndefinedValueRootIndex); |
| 4236 __ cmp(r0, r1); | 4233 __ cmp(r0, r1); |
| 4237 __ b(eq, if_true); | 4234 __ b(eq, if_true); |
| 4238 __ tst(r0, Operand(kSmiTagMask)); | 4235 __ JumpIfSmi(r0, if_false); |
| 4239 __ b(eq, if_false); | |
| 4240 // It can be an undetectable object. | 4236 // It can be an undetectable object. |
| 4241 __ ldr(r1, FieldMemOperand(r0, HeapObject::kMapOffset)); | 4237 __ ldr(r1, FieldMemOperand(r0, HeapObject::kMapOffset)); |
| 4242 __ ldrb(r1, FieldMemOperand(r1, Map::kBitFieldOffset)); | 4238 __ ldrb(r1, FieldMemOperand(r1, Map::kBitFieldOffset)); |
| 4243 __ and_(r1, r1, Operand(1 << Map::kIsUndetectable)); | 4239 __ and_(r1, r1, Operand(1 << Map::kIsUndetectable)); |
| 4244 __ cmp(r1, Operand(1 << Map::kIsUndetectable)); | 4240 __ cmp(r1, Operand(1 << Map::kIsUndetectable)); |
| 4245 Split(eq, if_true, if_false, fall_through); | 4241 Split(eq, if_true, if_false, fall_through); |
| 4246 } | 4242 } |
| 4247 context()->Plug(if_true, if_false); | 4243 context()->Plug(if_true, if_false); |
| 4248 } | 4244 } |
| 4249 | 4245 |
| (...skipping 115 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 4365 __ mov(r1, Operand(r1, ASR, 1)); // Un-smi-tag value. | 4361 __ mov(r1, Operand(r1, ASR, 1)); // Un-smi-tag value. |
| 4366 __ add(pc, r1, Operand(masm_->CodeObject())); | 4362 __ add(pc, r1, Operand(masm_->CodeObject())); |
| 4367 } | 4363 } |
| 4368 | 4364 |
| 4369 | 4365 |
| 4370 #undef __ | 4366 #undef __ |
| 4371 | 4367 |
| 4372 } } // namespace v8::internal | 4368 } } // namespace v8::internal |
| 4373 | 4369 |
| 4374 #endif // V8_TARGET_ARCH_ARM | 4370 #endif // V8_TARGET_ARCH_ARM |
| OLD | NEW |