| OLD | NEW |
| 1 // Copyright 2016 the V8 project authors. All rights reserved. | 1 // Copyright 2016 the V8 project authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 #include "src/code-stub-assembler.h" | 4 #include "src/code-stub-assembler.h" |
| 5 #include "src/code-factory.h" | 5 #include "src/code-factory.h" |
| 6 #include "src/frames-inl.h" | 6 #include "src/frames-inl.h" |
| 7 #include "src/frames.h" | 7 #include "src/frames.h" |
| 8 | 8 |
| 9 namespace v8 { | 9 namespace v8 { |
| 10 namespace internal { | 10 namespace internal { |
| (...skipping 6232 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 6243 StoreObjectField(cell, WeakCell::kValueOffset, value); | 6243 StoreObjectField(cell, WeakCell::kValueOffset, value); |
| 6244 StoreObjectFieldRoot(cell, WeakCell::kNextOffset, | 6244 StoreObjectFieldRoot(cell, WeakCell::kNextOffset, |
| 6245 Heap::kTheHoleValueRootIndex); | 6245 Heap::kTheHoleValueRootIndex); |
| 6246 | 6246 |
| 6247 // Store the WeakCell in the feedback vector. | 6247 // Store the WeakCell in the feedback vector. |
| 6248 StoreFixedArrayElement(feedback_vector, slot, cell, UPDATE_WRITE_BARRIER, 0, | 6248 StoreFixedArrayElement(feedback_vector, slot, cell, UPDATE_WRITE_BARRIER, 0, |
| 6249 CodeStubAssembler::SMI_PARAMETERS); | 6249 CodeStubAssembler::SMI_PARAMETERS); |
| 6250 return cell; | 6250 return cell; |
| 6251 } | 6251 } |
| 6252 | 6252 |
| 6253 void CodeStubAssembler::BuildFastLoop( | 6253 Node* CodeStubAssembler::BuildFastLoop( |
| 6254 const CodeStubAssembler::VariableList& vars, | 6254 const CodeStubAssembler::VariableList& vars, |
| 6255 MachineRepresentation index_rep, Node* start_index, Node* end_index, | 6255 MachineRepresentation index_rep, Node* start_index, Node* end_index, |
| 6256 const FastLoopBody& body, int increment, IndexAdvanceMode mode) { | 6256 const FastLoopBody& body, int increment, IndexAdvanceMode mode) { |
| 6257 Variable var(this, index_rep, start_index); | 6257 Variable var(this, index_rep, start_index); |
| 6258 VariableList vars_copy(vars, zone()); | 6258 VariableList vars_copy(vars, zone()); |
| 6259 vars_copy.Add(&var, zone()); | 6259 vars_copy.Add(&var, zone()); |
| 6260 Label loop(this, vars_copy); | 6260 Label loop(this, vars_copy); |
| 6261 Label after_loop(this); | 6261 Label after_loop(this); |
| 6262 // Introduce an explicit second check of the termination condition before the | 6262 // Introduce an explicit second check of the termination condition before the |
| 6263 // loop that helps turbofan generate better code. If there's only a single | 6263 // loop that helps turbofan generate better code. If there's only a single |
| 6264 // check, then the CodeStubAssembler forces it to be at the beginning of the | 6264 // check, then the CodeStubAssembler forces it to be at the beginning of the |
| 6265 // loop requiring a backwards branch at the end of the loop (it's not possible | 6265 // loop requiring a backwards branch at the end of the loop (it's not possible |
| 6266 // to force the loop header check at the end of the loop and branch forward to | 6266 // to force the loop header check at the end of the loop and branch forward to |
| 6267 // it from the pre-header). The extra branch is slower in the case that the | 6267 // it from the pre-header). The extra branch is slower in the case that the |
| 6268 // loop actually iterates. | 6268 // loop actually iterates. |
| 6269 Branch(WordEqual(var.value(), end_index), &after_loop, &loop); | 6269 Branch(WordEqual(var.value(), end_index), &after_loop, &loop); |
| 6270 Bind(&loop); | 6270 Bind(&loop); |
| 6271 { | 6271 { |
| 6272 if (mode == IndexAdvanceMode::kPre) { | 6272 if (mode == IndexAdvanceMode::kPre) { |
| 6273 Increment(var, increment); | 6273 Increment(var, increment); |
| 6274 } | 6274 } |
| 6275 body(var.value()); | 6275 body(var.value()); |
| 6276 if (mode == IndexAdvanceMode::kPost) { | 6276 if (mode == IndexAdvanceMode::kPost) { |
| 6277 Increment(var, increment); | 6277 Increment(var, increment); |
| 6278 } | 6278 } |
| 6279 Branch(WordNotEqual(var.value(), end_index), &loop, &after_loop); | 6279 Branch(WordNotEqual(var.value(), end_index), &loop, &after_loop); |
| 6280 } | 6280 } |
| 6281 Bind(&after_loop); | 6281 Bind(&after_loop); |
| 6282 return var.value(); |
| 6282 } | 6283 } |
| 6283 | 6284 |
| 6284 void CodeStubAssembler::BuildFastFixedArrayForEach( | 6285 void CodeStubAssembler::BuildFastFixedArrayForEach( |
| 6285 Node* fixed_array, ElementsKind kind, Node* first_element_inclusive, | 6286 Node* fixed_array, ElementsKind kind, Node* first_element_inclusive, |
| 6286 Node* last_element_exclusive, const FastFixedArrayForEachBody& body, | 6287 Node* last_element_exclusive, const FastFixedArrayForEachBody& body, |
| 6287 ParameterMode mode, ForEachDirection direction) { | 6288 ParameterMode mode, ForEachDirection direction) { |
| 6288 STATIC_ASSERT(FixedArray::kHeaderSize == FixedDoubleArray::kHeaderSize); | 6289 STATIC_ASSERT(FixedArray::kHeaderSize == FixedDoubleArray::kHeaderSize); |
| 6289 int32_t first_val; | 6290 int32_t first_val; |
| 6290 bool constant_first = ToInt32Constant(first_element_inclusive, first_val); | 6291 bool constant_first = ToInt32Constant(first_element_inclusive, first_val); |
| 6291 int32_t last_val; | 6292 int32_t last_val; |
| (...skipping 2096 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 8388 formatted.c_str(), TENURED); | 8389 formatted.c_str(), TENURED); |
| 8389 CallRuntime(Runtime::kGlobalPrint, NoContextConstant(), | 8390 CallRuntime(Runtime::kGlobalPrint, NoContextConstant(), |
| 8390 HeapConstant(string)); | 8391 HeapConstant(string)); |
| 8391 } | 8392 } |
| 8392 CallRuntime(Runtime::kGlobalPrint, NoContextConstant(), tagged_value); | 8393 CallRuntime(Runtime::kGlobalPrint, NoContextConstant(), tagged_value); |
| 8393 #endif | 8394 #endif |
| 8394 } | 8395 } |
| 8395 | 8396 |
| 8396 } // namespace internal | 8397 } // namespace internal |
| 8397 } // namespace v8 | 8398 } // namespace v8 |
| OLD | NEW |