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 | 4 |
5 #include "src/code-stub-assembler.h" | 5 #include "src/code-stub-assembler.h" |
6 #include "src/code-factory.h" | 6 #include "src/code-factory.h" |
7 | 7 |
8 namespace v8 { | 8 namespace v8 { |
9 namespace internal { | 9 namespace internal { |
10 | 10 |
(...skipping 312 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
323 Variable result(this, MachineRepresentation::kTagged); | 323 Variable result(this, MachineRepresentation::kTagged); |
324 Label runtime_call(this, Label::kDeferred), no_runtime_call(this); | 324 Label runtime_call(this, Label::kDeferred), no_runtime_call(this); |
325 Label merge_runtime(this, &result); | 325 Label merge_runtime(this, &result); |
326 | 326 |
327 Node* new_top = IntPtrAdd(top, size_in_bytes); | 327 Node* new_top = IntPtrAdd(top, size_in_bytes); |
328 Branch(UintPtrGreaterThanOrEqual(new_top, limit), &runtime_call, | 328 Branch(UintPtrGreaterThanOrEqual(new_top, limit), &runtime_call, |
329 &no_runtime_call); | 329 &no_runtime_call); |
330 | 330 |
331 Bind(&runtime_call); | 331 Bind(&runtime_call); |
332 // AllocateInTargetSpace does not use the context. | 332 // AllocateInTargetSpace does not use the context. |
333 Node* context = IntPtrConstant(0); | 333 Node* context = SmiConstant(Smi::FromInt(0)); |
334 Node* runtime_flags = SmiTag(Int32Constant( | 334 |
335 AllocateDoubleAlignFlag::encode(false) | | 335 Node* runtime_result; |
336 AllocateTargetSpace::encode(flags & kPretenured | 336 if (flags & kPretenured) { |
337 ? AllocationSpace::OLD_SPACE | 337 Node* runtime_flags = SmiConstant( |
338 : AllocationSpace::NEW_SPACE))); | 338 Smi::FromInt(AllocateDoubleAlignFlag::encode(false) | |
339 Node* runtime_result = CallRuntime(Runtime::kAllocateInTargetSpace, context, | 339 AllocateTargetSpace::encode(AllocationSpace::OLD_SPACE))); |
340 SmiTag(size_in_bytes), runtime_flags); | 340 runtime_result = CallRuntime(Runtime::kAllocateInTargetSpace, context, |
| 341 SmiTag(size_in_bytes), runtime_flags); |
| 342 } else { |
| 343 runtime_result = CallRuntime(Runtime::kAllocateInNewSpace, context, |
| 344 SmiTag(size_in_bytes)); |
| 345 } |
341 result.Bind(runtime_result); | 346 result.Bind(runtime_result); |
342 Goto(&merge_runtime); | 347 Goto(&merge_runtime); |
343 | 348 |
344 // When there is enough space, return `top' and bump it up. | 349 // When there is enough space, return `top' and bump it up. |
345 Bind(&no_runtime_call); | 350 Bind(&no_runtime_call); |
346 Node* no_runtime_result = top; | 351 Node* no_runtime_result = top; |
347 StoreNoWriteBarrier(MachineType::PointerRepresentation(), top_address, | 352 StoreNoWriteBarrier(MachineType::PointerRepresentation(), top_address, |
348 new_top); | 353 new_top); |
349 no_runtime_result = BitcastWordToTagged( | 354 no_runtime_result = BitcastWordToTagged( |
350 IntPtrAdd(no_runtime_result, IntPtrConstant(kHeapObjectTag))); | 355 IntPtrAdd(no_runtime_result, IntPtrConstant(kHeapObjectTag))); |
(...skipping 1055 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1406 | 1411 |
1407 Bind(&if_iskeyinrange); | 1412 Bind(&if_iskeyinrange); |
1408 Node* element = LoadFixedArrayElementInt32Index(elements, index); | 1413 Node* element = LoadFixedArrayElementInt32Index(elements, index); |
1409 Node* the_hole = LoadRoot(Heap::kTheHoleValueRootIndex); | 1414 Node* the_hole = LoadRoot(Heap::kTheHoleValueRootIndex); |
1410 Branch(WordEqual(element, the_hole), if_not_found, if_found); | 1415 Branch(WordEqual(element, the_hole), if_not_found, if_found); |
1411 } | 1416 } |
1412 } | 1417 } |
1413 | 1418 |
1414 } // namespace internal | 1419 } // namespace internal |
1415 } // namespace v8 | 1420 } // namespace v8 |
OLD | NEW |