| OLD | NEW |
| 1 // Copyright 2012 the V8 project authors. All rights reserved. | 1 // Copyright 2012 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 100 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 111 // and filled with the hole values. | 111 // and filled with the hole values. |
| 112 static void AllocateEmptyJSArray(MacroAssembler* masm, | 112 static void AllocateEmptyJSArray(MacroAssembler* masm, |
| 113 Register array_function, | 113 Register array_function, |
| 114 Register result, | 114 Register result, |
| 115 Register scratch1, | 115 Register scratch1, |
| 116 Register scratch2, | 116 Register scratch2, |
| 117 Register scratch3, | 117 Register scratch3, |
| 118 Label* gc_required) { | 118 Label* gc_required) { |
| 119 const int initial_capacity = JSArray::kPreallocatedArrayElements; | 119 const int initial_capacity = JSArray::kPreallocatedArrayElements; |
| 120 STATIC_ASSERT(initial_capacity >= 0); | 120 STATIC_ASSERT(initial_capacity >= 0); |
| 121 __ LoadInitialArrayMap(array_function, scratch2, scratch1); | 121 __ LoadInitialArrayMap(array_function, scratch2, scratch1, false); |
| 122 | 122 |
| 123 // Allocate the JSArray object together with space for a fixed array with the | 123 // Allocate the JSArray object together with space for a fixed array with the |
| 124 // requested elements. | 124 // requested elements. |
| 125 int size = JSArray::kSize; | 125 int size = JSArray::kSize; |
| 126 if (initial_capacity > 0) { | 126 if (initial_capacity > 0) { |
| 127 size += FixedArray::SizeFor(initial_capacity); | 127 size += FixedArray::SizeFor(initial_capacity); |
| 128 } | 128 } |
| 129 __ AllocateInNewSpace(size, | 129 __ AllocateInNewSpace(size, |
| 130 result, | 130 result, |
| 131 scratch2, | 131 scratch2, |
| (...skipping 75 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 207 Register array_function, // Array function. | 207 Register array_function, // Array function. |
| 208 Register array_size, // As a smi, cannot be 0. | 208 Register array_size, // As a smi, cannot be 0. |
| 209 Register result, | 209 Register result, |
| 210 Register elements_array_storage, | 210 Register elements_array_storage, |
| 211 Register elements_array_end, | 211 Register elements_array_end, |
| 212 Register scratch1, | 212 Register scratch1, |
| 213 Register scratch2, | 213 Register scratch2, |
| 214 bool fill_with_hole, | 214 bool fill_with_hole, |
| 215 Label* gc_required) { | 215 Label* gc_required) { |
| 216 // Load the initial map from the array function. | 216 // Load the initial map from the array function. |
| 217 __ LoadInitialArrayMap(array_function, scratch2, elements_array_storage); | 217 __ LoadInitialArrayMap(array_function, scratch2, |
| 218 elements_array_storage, fill_with_hole); |
| 218 | 219 |
| 219 if (FLAG_debug_code) { // Assert that array size is not zero. | 220 if (FLAG_debug_code) { // Assert that array size is not zero. |
| 220 __ Assert( | 221 __ Assert( |
| 221 ne, "array size is unexpectedly 0", array_size, Operand(zero_reg)); | 222 ne, "array size is unexpectedly 0", array_size, Operand(zero_reg)); |
| 222 } | 223 } |
| 223 | 224 |
| 224 // Allocate the JSArray object together with space for a FixedArray with the | 225 // Allocate the JSArray object together with space for a FixedArray with the |
| 225 // requested number of elements. | 226 // requested number of elements. |
| 226 STATIC_ASSERT(kSmiTagSize == 1 && kSmiTag == 0); | 227 STATIC_ASSERT(kSmiTagSize == 1 && kSmiTag == 0); |
| 227 __ li(elements_array_end, | 228 __ li(elements_array_end, |
| (...skipping 214 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 442 | 443 |
| 443 __ bind(&has_non_smi_element); | 444 __ bind(&has_non_smi_element); |
| 444 // Double values are handled by the runtime. | 445 // Double values are handled by the runtime. |
| 445 __ CheckMap( | 446 __ CheckMap( |
| 446 a2, t5, Heap::kHeapNumberMapRootIndex, ¬_double, DONT_DO_SMI_CHECK); | 447 a2, t5, Heap::kHeapNumberMapRootIndex, ¬_double, DONT_DO_SMI_CHECK); |
| 447 __ bind(&cant_transition_map); | 448 __ bind(&cant_transition_map); |
| 448 __ UndoAllocationInNewSpace(a3, t0); | 449 __ UndoAllocationInNewSpace(a3, t0); |
| 449 __ Branch(call_generic_code); | 450 __ Branch(call_generic_code); |
| 450 | 451 |
| 451 __ bind(¬_double); | 452 __ bind(¬_double); |
| 452 // Transition FAST_SMI_ONLY_ELEMENTS to FAST_ELEMENTS. | 453 // Transition FAST_SMI_ELEMENTS to FAST_ELEMENTS. |
| 453 // a3: JSArray | 454 // a3: JSArray |
| 454 __ lw(a2, FieldMemOperand(a3, HeapObject::kMapOffset)); | 455 __ lw(a2, FieldMemOperand(a3, HeapObject::kMapOffset)); |
| 455 __ LoadTransitionedArrayMapConditional(FAST_SMI_ONLY_ELEMENTS, | 456 __ LoadTransitionedArrayMapConditional(FAST_SMI_ELEMENTS, |
| 456 FAST_ELEMENTS, | 457 FAST_ELEMENTS, |
| 457 a2, | 458 a2, |
| 458 t5, | 459 t5, |
| 459 &cant_transition_map); | 460 &cant_transition_map); |
| 460 __ sw(a2, FieldMemOperand(a3, HeapObject::kMapOffset)); | 461 __ sw(a2, FieldMemOperand(a3, HeapObject::kMapOffset)); |
| 461 __ RecordWriteField(a3, | 462 __ RecordWriteField(a3, |
| 462 HeapObject::kMapOffset, | 463 HeapObject::kMapOffset, |
| 463 a2, | 464 a2, |
| 464 t5, | 465 t5, |
| 465 kRAHasNotBeenSaved, | 466 kRAHasNotBeenSaved, |
| (...skipping 1330 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1796 __ bind(&dont_adapt_arguments); | 1797 __ bind(&dont_adapt_arguments); |
| 1797 __ Jump(a3); | 1798 __ Jump(a3); |
| 1798 } | 1799 } |
| 1799 | 1800 |
| 1800 | 1801 |
| 1801 #undef __ | 1802 #undef __ |
| 1802 | 1803 |
| 1803 } } // namespace v8::internal | 1804 } } // namespace v8::internal |
| 1804 | 1805 |
| 1805 #endif // V8_TARGET_ARCH_MIPS | 1806 #endif // V8_TARGET_ARCH_MIPS |
| OLD | NEW |