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 1979 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
1990 IntPtrSub(IntPtrAdd(object, size), IntPtrConstant(kHeapObjectTag)); | 1990 IntPtrSub(IntPtrAdd(object, size), IntPtrConstant(kHeapObjectTag)); |
1991 StoreFieldsNoWriteBarrier(start_address, end_address, filler); | 1991 StoreFieldsNoWriteBarrier(start_address, end_address, filler); |
1992 } | 1992 } |
1993 | 1993 |
1994 void CodeStubAssembler::StoreFieldsNoWriteBarrier(Node* start_address, | 1994 void CodeStubAssembler::StoreFieldsNoWriteBarrier(Node* start_address, |
1995 Node* end_address, | 1995 Node* end_address, |
1996 Node* value) { | 1996 Node* value) { |
1997 Comment("StoreFieldsNoWriteBarrier"); | 1997 Comment("StoreFieldsNoWriteBarrier"); |
1998 CSA_ASSERT(this, WordIsWordAligned(start_address)); | 1998 CSA_ASSERT(this, WordIsWordAligned(start_address)); |
1999 CSA_ASSERT(this, WordIsWordAligned(end_address)); | 1999 CSA_ASSERT(this, WordIsWordAligned(end_address)); |
2000 BuildFastLoop( | 2000 BuildFastLoop(start_address, end_address, |
2001 MachineType::PointerRepresentation(), start_address, end_address, | 2001 [this, value](Node* current) { |
2002 [this, value](Node* current) { | 2002 StoreNoWriteBarrier(MachineRepresentation::kTagged, current, |
2003 StoreNoWriteBarrier(MachineRepresentation::kTagged, current, value); | 2003 value); |
2004 }, | 2004 }, |
2005 kPointerSize, IndexAdvanceMode::kPost); | 2005 kPointerSize, INTPTR_PARAMETERS, IndexAdvanceMode::kPost); |
2006 } | 2006 } |
2007 | 2007 |
2008 Node* CodeStubAssembler::AllocateUninitializedJSArrayWithoutElements( | 2008 Node* CodeStubAssembler::AllocateUninitializedJSArrayWithoutElements( |
2009 ElementsKind kind, Node* array_map, Node* length, Node* allocation_site) { | 2009 ElementsKind kind, Node* array_map, Node* length, Node* allocation_site) { |
2010 Comment("begin allocation of JSArray without elements"); | 2010 Comment("begin allocation of JSArray without elements"); |
2011 int base_size = JSArray::kSize; | 2011 int base_size = JSArray::kSize; |
2012 if (allocation_site != nullptr) { | 2012 if (allocation_site != nullptr) { |
2013 base_size += AllocationMemento::kSize; | 2013 base_size += AllocationMemento::kSize; |
2014 } | 2014 } |
2015 | 2015 |
(...skipping 319 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
2335 Smi* to_index_smi = nullptr; | 2335 Smi* to_index_smi = nullptr; |
2336 Smi* from_index_smi = nullptr; | 2336 Smi* from_index_smi = nullptr; |
2337 bool index_same = (from_encoding == to_encoding) && | 2337 bool index_same = (from_encoding == to_encoding) && |
2338 (from_index == to_index || | 2338 (from_index == to_index || |
2339 (ToInt32Constant(from_index, from_index_constant) && | 2339 (ToInt32Constant(from_index, from_index_constant) && |
2340 ToInt32Constant(to_index, to_index_constant) && | 2340 ToInt32Constant(to_index, to_index_constant) && |
2341 from_index_constant == to_index_constant) || | 2341 from_index_constant == to_index_constant) || |
2342 (ToSmiConstant(from_index, from_index_smi) && | 2342 (ToSmiConstant(from_index, from_index_smi) && |
2343 ToSmiConstant(to_index, to_index_smi) && | 2343 ToSmiConstant(to_index, to_index_smi) && |
2344 to_index_smi == from_index_smi)); | 2344 to_index_smi == from_index_smi)); |
2345 BuildFastLoop(vars, MachineType::PointerRepresentation(), from_offset, | 2345 BuildFastLoop(vars, from_offset, limit_offset, |
2346 limit_offset, | |
2347 [this, from_string, to_string, ¤t_to_offset, to_increment, | 2346 [this, from_string, to_string, ¤t_to_offset, to_increment, |
2348 type, rep, index_same](Node* offset) { | 2347 type, rep, index_same](Node* offset) { |
2349 Node* value = Load(type, from_string, offset); | 2348 Node* value = Load(type, from_string, offset); |
2350 StoreNoWriteBarrier( | 2349 StoreNoWriteBarrier( |
2351 rep, to_string, | 2350 rep, to_string, |
2352 index_same ? offset : current_to_offset.value(), value); | 2351 index_same ? offset : current_to_offset.value(), value); |
2353 if (!index_same) { | 2352 if (!index_same) { |
2354 Increment(current_to_offset, to_increment); | 2353 Increment(current_to_offset, to_increment); |
2355 } | 2354 } |
2356 }, | 2355 }, |
2357 from_increment, IndexAdvanceMode::kPost); | 2356 from_increment, INTPTR_PARAMETERS, IndexAdvanceMode::kPost); |
Igor Sheludko
2017/02/01 17:12:53
mode
danno
2017/02/01 17:33:43
As discussed, this is correct as-is.
| |
2358 } | 2357 } |
2359 | 2358 |
2360 Node* CodeStubAssembler::LoadElementAndPrepareForStore(Node* array, | 2359 Node* CodeStubAssembler::LoadElementAndPrepareForStore(Node* array, |
2361 Node* offset, | 2360 Node* offset, |
2362 ElementsKind from_kind, | 2361 ElementsKind from_kind, |
2363 ElementsKind to_kind, | 2362 ElementsKind to_kind, |
2364 Label* if_hole) { | 2363 Label* if_hole) { |
2365 if (IsFastDoubleElementsKind(from_kind)) { | 2364 if (IsFastDoubleElementsKind(from_kind)) { |
2366 Node* value = | 2365 Node* value = |
2367 LoadDoubleWithHoleCheck(array, offset, if_hole, MachineType::Float64()); | 2366 LoadDoubleWithHoleCheck(array, offset, if_hole, MachineType::Float64()); |
(...skipping 1391 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
3759 Node* const search_range_length = SmiUntag(SmiSub(length, from)); | 3758 Node* const search_range_length = SmiUntag(SmiSub(length, from)); |
3760 | 3759 |
3761 const int offset = SeqOneByteString::kHeaderSize - kHeapObjectTag; | 3760 const int offset = SeqOneByteString::kHeaderSize - kHeapObjectTag; |
3762 Node* const begin = IntPtrConstant(offset); | 3761 Node* const begin = IntPtrConstant(offset); |
3763 Node* const cursor = IntPtrAdd(begin, SmiUntag(from)); | 3762 Node* const cursor = IntPtrAdd(begin, SmiUntag(from)); |
3764 Node* const end = IntPtrAdd(cursor, search_range_length); | 3763 Node* const end = IntPtrAdd(cursor, search_range_length); |
3765 | 3764 |
3766 var_result.Bind(SmiConstant(Smi::FromInt(-1))); | 3765 var_result.Bind(SmiConstant(Smi::FromInt(-1))); |
3767 | 3766 |
3768 BuildFastLoop( | 3767 BuildFastLoop( |
3769 MachineType::PointerRepresentation(), cursor, end, | 3768 cursor, end, |
3770 [this, string, needle_char, begin, &var_result, &out](Node* cursor) { | 3769 [this, string, needle_char, begin, &var_result, &out](Node* cursor) { |
3771 Label next(this); | 3770 Label next(this); |
3772 Node* value = Load(MachineType::Uint8(), string, cursor); | 3771 Node* value = Load(MachineType::Uint8(), string, cursor); |
3773 GotoUnless(Word32Equal(value, needle_char), &next); | 3772 GotoUnless(Word32Equal(value, needle_char), &next); |
3774 | 3773 |
3775 // Found a match. | 3774 // Found a match. |
3776 Node* index = SmiTag(IntPtrSub(cursor, begin)); | 3775 Node* index = SmiTag(IntPtrSub(cursor, begin)); |
3777 var_result.Bind(index); | 3776 var_result.Bind(index); |
3778 Goto(&out); | 3777 Goto(&out); |
3779 | 3778 |
3780 Bind(&next); | 3779 Bind(&next); |
3781 }, | 3780 }, |
3782 1, IndexAdvanceMode::kPost); | 3781 1, INTPTR_PARAMETERS, IndexAdvanceMode::kPost); |
3783 Goto(&out); | 3782 Goto(&out); |
3784 | 3783 |
3785 Bind(&runtime); | 3784 Bind(&runtime); |
3786 { | 3785 { |
3787 Node* const pattern = StringFromCharCode(needle_char); | 3786 Node* const pattern = StringFromCharCode(needle_char); |
3788 Node* const result = | 3787 Node* const result = |
3789 CallRuntime(Runtime::kStringIndexOf, context, string, pattern, from); | 3788 CallRuntime(Runtime::kStringIndexOf, context, string, pattern, from); |
3790 var_result.Bind(result); | 3789 var_result.Bind(result); |
3791 Goto(&out); | 3790 Goto(&out); |
3792 } | 3791 } |
(...skipping 992 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
4785 | 4784 |
4786 void CodeStubAssembler::DescriptorLookupLinear(Node* unique_name, | 4785 void CodeStubAssembler::DescriptorLookupLinear(Node* unique_name, |
4787 Node* descriptors, Node* nof, | 4786 Node* descriptors, Node* nof, |
4788 Label* if_found, | 4787 Label* if_found, |
4789 Variable* var_name_index, | 4788 Variable* var_name_index, |
4790 Label* if_not_found) { | 4789 Label* if_not_found) { |
4791 Node* first_inclusive = IntPtrConstant(DescriptorArray::ToKeyIndex(0)); | 4790 Node* first_inclusive = IntPtrConstant(DescriptorArray::ToKeyIndex(0)); |
4792 Node* factor = IntPtrConstant(DescriptorArray::kDescriptorSize); | 4791 Node* factor = IntPtrConstant(DescriptorArray::kDescriptorSize); |
4793 Node* last_exclusive = IntPtrAdd(first_inclusive, IntPtrMul(nof, factor)); | 4792 Node* last_exclusive = IntPtrAdd(first_inclusive, IntPtrMul(nof, factor)); |
4794 | 4793 |
4795 BuildFastLoop( | 4794 BuildFastLoop(last_exclusive, first_inclusive, |
4796 MachineType::PointerRepresentation(), last_exclusive, first_inclusive, | 4795 [this, descriptors, unique_name, if_found, |
4797 [this, descriptors, unique_name, if_found, | 4796 var_name_index](Node* name_index) { |
4798 var_name_index](Node* name_index) { | 4797 Node* candidate_name = |
4799 Node* candidate_name = LoadFixedArrayElement(descriptors, name_index); | 4798 LoadFixedArrayElement(descriptors, name_index); |
4800 var_name_index->Bind(name_index); | 4799 var_name_index->Bind(name_index); |
4801 GotoIf(WordEqual(candidate_name, unique_name), if_found); | 4800 GotoIf(WordEqual(candidate_name, unique_name), if_found); |
4802 }, | 4801 }, |
4803 -DescriptorArray::kDescriptorSize, IndexAdvanceMode::kPre); | 4802 -DescriptorArray::kDescriptorSize, INTPTR_PARAMETERS, |
4803 IndexAdvanceMode::kPre); | |
4804 Goto(if_not_found); | 4804 Goto(if_not_found); |
4805 } | 4805 } |
4806 | 4806 |
4807 void CodeStubAssembler::TryLookupProperty( | 4807 void CodeStubAssembler::TryLookupProperty( |
4808 Node* object, Node* map, Node* instance_type, Node* unique_name, | 4808 Node* object, Node* map, Node* instance_type, Node* unique_name, |
4809 Label* if_found_fast, Label* if_found_dict, Label* if_found_global, | 4809 Label* if_found_fast, Label* if_found_dict, Label* if_found_global, |
4810 Variable* var_meta_storage, Variable* var_name_index, Label* if_not_found, | 4810 Variable* var_meta_storage, Variable* var_name_index, Label* if_not_found, |
4811 Label* if_bailout) { | 4811 Label* if_bailout) { |
4812 DCHECK_EQ(MachineRepresentation::kTagged, var_meta_storage->rep()); | 4812 DCHECK_EQ(MachineRepresentation::kTagged, var_meta_storage->rep()); |
4813 DCHECK_EQ(MachineType::PointerRepresentation(), var_name_index->rep()); | 4813 DCHECK_EQ(MachineType::PointerRepresentation(), var_name_index->rep()); |
(...skipping 1438 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
6252 StoreObjectFieldRoot(cell, WeakCell::kNextOffset, | 6252 StoreObjectFieldRoot(cell, WeakCell::kNextOffset, |
6253 Heap::kTheHoleValueRootIndex); | 6253 Heap::kTheHoleValueRootIndex); |
6254 | 6254 |
6255 // Store the WeakCell in the feedback vector. | 6255 // Store the WeakCell in the feedback vector. |
6256 StoreFixedArrayElement(feedback_vector, slot, cell, UPDATE_WRITE_BARRIER, 0, | 6256 StoreFixedArrayElement(feedback_vector, slot, cell, UPDATE_WRITE_BARRIER, 0, |
6257 CodeStubAssembler::SMI_PARAMETERS); | 6257 CodeStubAssembler::SMI_PARAMETERS); |
6258 return cell; | 6258 return cell; |
6259 } | 6259 } |
6260 | 6260 |
6261 Node* CodeStubAssembler::BuildFastLoop( | 6261 Node* CodeStubAssembler::BuildFastLoop( |
6262 const CodeStubAssembler::VariableList& vars, | 6262 const CodeStubAssembler::VariableList& vars, Node* start_index, |
6263 MachineRepresentation index_rep, Node* start_index, Node* end_index, | 6263 Node* end_index, const FastLoopBody& body, int increment, |
6264 const FastLoopBody& body, int increment, IndexAdvanceMode mode) { | 6264 ParameterMode parameter_mode, IndexAdvanceMode advance_mode) { |
6265 MachineRepresentation index_rep = (parameter_mode == INTPTR_PARAMETERS) | |
6266 ? MachineType::PointerRepresentation() | |
6267 : MachineRepresentation::kTaggedSigned; | |
6265 Variable var(this, index_rep, start_index); | 6268 Variable var(this, index_rep, start_index); |
6266 VariableList vars_copy(vars, zone()); | 6269 VariableList vars_copy(vars, zone()); |
6267 vars_copy.Add(&var, zone()); | 6270 vars_copy.Add(&var, zone()); |
6268 Label loop(this, vars_copy); | 6271 Label loop(this, vars_copy); |
6269 Label after_loop(this); | 6272 Label after_loop(this); |
6270 // Introduce an explicit second check of the termination condition before the | 6273 // Introduce an explicit second check of the termination condition before the |
6271 // loop that helps turbofan generate better code. If there's only a single | 6274 // loop that helps turbofan generate better code. If there's only a single |
6272 // check, then the CodeStubAssembler forces it to be at the beginning of the | 6275 // check, then the CodeStubAssembler forces it to be at the beginning of the |
6273 // loop requiring a backwards branch at the end of the loop (it's not possible | 6276 // loop requiring a backwards branch at the end of the loop (it's not possible |
6274 // to force the loop header check at the end of the loop and branch forward to | 6277 // to force the loop header check at the end of the loop and branch forward to |
6275 // it from the pre-header). The extra branch is slower in the case that the | 6278 // it from the pre-header). The extra branch is slower in the case that the |
6276 // loop actually iterates. | 6279 // loop actually iterates. |
6277 Branch(WordEqual(var.value(), end_index), &after_loop, &loop); | 6280 Branch(WordEqual(var.value(), end_index), &after_loop, &loop); |
6278 Bind(&loop); | 6281 Bind(&loop); |
6279 { | 6282 { |
6280 if (mode == IndexAdvanceMode::kPre) { | 6283 if (advance_mode == IndexAdvanceMode::kPre) { |
6281 Increment(var, increment); | 6284 Increment(var, increment, parameter_mode); |
6282 } | 6285 } |
6283 body(var.value()); | 6286 body(var.value()); |
6284 if (mode == IndexAdvanceMode::kPost) { | 6287 if (advance_mode == IndexAdvanceMode::kPost) { |
6285 Increment(var, increment); | 6288 Increment(var, increment, parameter_mode); |
6286 } | 6289 } |
6287 Branch(WordNotEqual(var.value(), end_index), &loop, &after_loop); | 6290 Branch(WordNotEqual(var.value(), end_index), &loop, &after_loop); |
6288 } | 6291 } |
6289 Bind(&after_loop); | 6292 Bind(&after_loop); |
6290 return var.value(); | 6293 return var.value(); |
6291 } | 6294 } |
6292 | 6295 |
6293 void CodeStubAssembler::BuildFastFixedArrayForEach( | 6296 void CodeStubAssembler::BuildFastFixedArrayForEach( |
6294 const CodeStubAssembler::VariableList& vars, Node* fixed_array, | 6297 const CodeStubAssembler::VariableList& vars, Node* fixed_array, |
6295 ElementsKind kind, Node* first_element_inclusive, | 6298 ElementsKind kind, Node* first_element_inclusive, |
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
6328 Node* start = | 6331 Node* start = |
6329 ElementOffsetFromIndex(first_element_inclusive, kind, mode, | 6332 ElementOffsetFromIndex(first_element_inclusive, kind, mode, |
6330 FixedArray::kHeaderSize - kHeapObjectTag); | 6333 FixedArray::kHeaderSize - kHeapObjectTag); |
6331 Node* limit = | 6334 Node* limit = |
6332 ElementOffsetFromIndex(last_element_exclusive, kind, mode, | 6335 ElementOffsetFromIndex(last_element_exclusive, kind, mode, |
6333 FixedArray::kHeaderSize - kHeapObjectTag); | 6336 FixedArray::kHeaderSize - kHeapObjectTag); |
6334 if (direction == ForEachDirection::kReverse) std::swap(start, limit); | 6337 if (direction == ForEachDirection::kReverse) std::swap(start, limit); |
6335 | 6338 |
6336 int increment = IsFastDoubleElementsKind(kind) ? kDoubleSize : kPointerSize; | 6339 int increment = IsFastDoubleElementsKind(kind) ? kDoubleSize : kPointerSize; |
6337 BuildFastLoop( | 6340 BuildFastLoop( |
6338 vars, MachineType::PointerRepresentation(), start, limit, | 6341 vars, start, limit, |
6339 [fixed_array, &body](Node* offset) { body(fixed_array, offset); }, | 6342 [fixed_array, &body](Node* offset) { body(fixed_array, offset); }, |
6340 direction == ForEachDirection::kReverse ? -increment : increment, | 6343 direction == ForEachDirection::kReverse ? -increment : increment, |
6344 INTPTR_PARAMETERS, | |
Igor Sheludko
2017/02/01 17:12:53
mode
danno
2017/02/01 17:33:43
As discussed, this is correct as-is.
| |
6341 direction == ForEachDirection::kReverse ? IndexAdvanceMode::kPre | 6345 direction == ForEachDirection::kReverse ? IndexAdvanceMode::kPre |
6342 : IndexAdvanceMode::kPost); | 6346 : IndexAdvanceMode::kPost); |
6343 } | 6347 } |
6344 | 6348 |
6345 void CodeStubAssembler::InitializeFieldsWithRoot( | 6349 void CodeStubAssembler::InitializeFieldsWithRoot( |
6346 Node* object, Node* start_offset, Node* end_offset, | 6350 Node* object, Node* start_offset, Node* end_offset, |
6347 Heap::RootListIndex root_index) { | 6351 Heap::RootListIndex root_index) { |
6348 start_offset = IntPtrAdd(start_offset, IntPtrConstant(-kHeapObjectTag)); | 6352 start_offset = IntPtrAdd(start_offset, IntPtrConstant(-kHeapObjectTag)); |
6349 end_offset = IntPtrAdd(end_offset, IntPtrConstant(-kHeapObjectTag)); | 6353 end_offset = IntPtrAdd(end_offset, IntPtrConstant(-kHeapObjectTag)); |
6350 Node* root_value = LoadRoot(root_index); | 6354 Node* root_value = LoadRoot(root_index); |
6351 BuildFastLoop(MachineType::PointerRepresentation(), end_offset, start_offset, | 6355 BuildFastLoop(end_offset, start_offset, |
6352 [this, object, root_value](Node* current) { | 6356 [this, object, root_value](Node* current) { |
6353 StoreNoWriteBarrier(MachineRepresentation::kTagged, object, | 6357 StoreNoWriteBarrier(MachineRepresentation::kTagged, object, |
6354 current, root_value); | 6358 current, root_value); |
6355 }, | 6359 }, |
6356 -kPointerSize, CodeStubAssembler::IndexAdvanceMode::kPre); | 6360 -kPointerSize, INTPTR_PARAMETERS, |
6361 CodeStubAssembler::IndexAdvanceMode::kPre); | |
6357 } | 6362 } |
6358 | 6363 |
6359 void CodeStubAssembler::BranchIfNumericRelationalComparison( | 6364 void CodeStubAssembler::BranchIfNumericRelationalComparison( |
6360 RelationalComparisonMode mode, Node* lhs, Node* rhs, Label* if_true, | 6365 RelationalComparisonMode mode, Node* lhs, Node* rhs, Label* if_true, |
6361 Label* if_false) { | 6366 Label* if_false) { |
6362 Label end(this); | 6367 Label end(this); |
6363 Variable result(this, MachineRepresentation::kTagged); | 6368 Variable result(this, MachineRepresentation::kTagged); |
6364 | 6369 |
6365 // Shared entry for floating point comparison. | 6370 // Shared entry for floating point comparison. |
6366 Label do_fcmp(this); | 6371 Label do_fcmp(this); |
(...skipping 1907 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
8274 if (last == nullptr) { | 8279 if (last == nullptr) { |
8275 DCHECK_EQ(mode, argc_mode_); | 8280 DCHECK_EQ(mode, argc_mode_); |
8276 last = argc_; | 8281 last = argc_; |
8277 } | 8282 } |
8278 Node* start = assembler_->IntPtrSub( | 8283 Node* start = assembler_->IntPtrSub( |
8279 arguments_, | 8284 arguments_, |
8280 assembler_->ElementOffsetFromIndex(first, FAST_ELEMENTS, mode)); | 8285 assembler_->ElementOffsetFromIndex(first, FAST_ELEMENTS, mode)); |
8281 Node* end = assembler_->IntPtrSub( | 8286 Node* end = assembler_->IntPtrSub( |
8282 arguments_, | 8287 arguments_, |
8283 assembler_->ElementOffsetFromIndex(last, FAST_ELEMENTS, mode)); | 8288 assembler_->ElementOffsetFromIndex(last, FAST_ELEMENTS, mode)); |
8284 assembler_->BuildFastLoop( | 8289 assembler_->BuildFastLoop(vars, start, end, |
8285 vars, MachineType::PointerRepresentation(), start, end, | 8290 [this, &body](Node* current) { |
8286 [this, &body](Node* current) { | 8291 Node* arg = assembler_->Load( |
8287 Node* arg = assembler_->Load(MachineType::AnyTagged(), current); | 8292 MachineType::AnyTagged(), current); |
8288 body(arg); | 8293 body(arg); |
8289 }, | 8294 }, |
8290 -kPointerSize, CodeStubAssembler::IndexAdvanceMode::kPost); | 8295 -kPointerSize, CodeStubAssembler::INTPTR_PARAMETERS, |
8296 CodeStubAssembler::IndexAdvanceMode::kPost); | |
8291 } | 8297 } |
8292 | 8298 |
8293 void CodeStubArguments::PopAndReturn(Node* value) { | 8299 void CodeStubArguments::PopAndReturn(Node* value) { |
8294 assembler_->PopAndReturn( | 8300 assembler_->PopAndReturn( |
8295 assembler_->IntPtrAdd(argc_, assembler_->IntPtrConstant(1)), value); | 8301 assembler_->IntPtrAdd(argc_, assembler_->IntPtrConstant(1)), value); |
8296 } | 8302 } |
8297 | 8303 |
8298 Node* CodeStubAssembler::IsFastElementsKind(Node* elements_kind) { | 8304 Node* CodeStubAssembler::IsFastElementsKind(Node* elements_kind) { |
8299 return Uint32LessThanOrEqual(elements_kind, | 8305 return Uint32LessThanOrEqual(elements_kind, |
8300 Int32Constant(LAST_FAST_ELEMENTS_KIND)); | 8306 Int32Constant(LAST_FAST_ELEMENTS_KIND)); |
(...skipping 97 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
8398 formatted.c_str(), TENURED); | 8404 formatted.c_str(), TENURED); |
8399 CallRuntime(Runtime::kGlobalPrint, NoContextConstant(), | 8405 CallRuntime(Runtime::kGlobalPrint, NoContextConstant(), |
8400 HeapConstant(string)); | 8406 HeapConstant(string)); |
8401 } | 8407 } |
8402 CallRuntime(Runtime::kDebugPrint, NoContextConstant(), tagged_value); | 8408 CallRuntime(Runtime::kDebugPrint, NoContextConstant(), tagged_value); |
8403 #endif | 8409 #endif |
8404 } | 8410 } |
8405 | 8411 |
8406 } // namespace internal | 8412 } // namespace internal |
8407 } // namespace v8 | 8413 } // namespace v8 |
OLD | NEW |