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 3418 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3429 | 3429 |
3430 // Separator operand is on the stack. | 3430 // Separator operand is on the stack. |
3431 __ pop(separator); | 3431 __ pop(separator); |
3432 | 3432 |
3433 // Check that the array is a JSArray. | 3433 // Check that the array is a JSArray. |
3434 __ JumpIfSmi(array, &bailout); | 3434 __ JumpIfSmi(array, &bailout); |
3435 __ CompareObjectType(array, scratch1, scratch2, JS_ARRAY_TYPE); | 3435 __ CompareObjectType(array, scratch1, scratch2, JS_ARRAY_TYPE); |
3436 __ b(ne, &bailout); | 3436 __ b(ne, &bailout); |
3437 | 3437 |
3438 // Check that the array has fast elements. | 3438 // Check that the array has fast elements. |
3439 __ ldrb(scratch2, FieldMemOperand(scratch1, Map::kBitField2Offset)); | 3439 __ CheckFastElements(scratch1, scratch2, &bailout); |
3440 __ tst(scratch2, Operand(1 << Map::kHasFastElements)); | |
3441 __ b(eq, &bailout); | |
3442 | 3440 |
3443 // If the array has length zero, return the empty string. | 3441 // If the array has length zero, return the empty string. |
3444 __ ldr(array_length, FieldMemOperand(array, JSArray::kLengthOffset)); | 3442 __ ldr(array_length, FieldMemOperand(array, JSArray::kLengthOffset)); |
3445 __ SmiUntag(array_length, SetCC); | 3443 __ SmiUntag(array_length, SetCC); |
3446 __ b(ne, &non_trivial_array); | 3444 __ b(ne, &non_trivial_array); |
3447 __ LoadRoot(r0, Heap::kEmptyStringRootIndex); | 3445 __ LoadRoot(r0, Heap::kEmptyStringRootIndex); |
3448 __ b(&done); | 3446 __ b(&done); |
3449 | 3447 |
3450 __ bind(&non_trivial_array); | 3448 __ bind(&non_trivial_array); |
3451 | 3449 |
(...skipping 917 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
4369 __ mov(r1, Operand(r1, ASR, 1)); // Un-smi-tag value. | 4367 __ mov(r1, Operand(r1, ASR, 1)); // Un-smi-tag value. |
4370 __ add(pc, r1, Operand(masm_->CodeObject())); | 4368 __ add(pc, r1, Operand(masm_->CodeObject())); |
4371 } | 4369 } |
4372 | 4370 |
4373 | 4371 |
4374 #undef __ | 4372 #undef __ |
4375 | 4373 |
4376 } } // namespace v8::internal | 4374 } } // namespace v8::internal |
4377 | 4375 |
4378 #endif // V8_TARGET_ARCH_ARM | 4376 #endif // V8_TARGET_ARCH_ARM |
OLD | NEW |