| 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 3345 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3356 | 3356 |
| 3357 Node* ToDirectStringAssembler::TryToDirect(Label* if_bailout) { | 3357 Node* ToDirectStringAssembler::TryToDirect(Label* if_bailout) { |
| 3358 VariableList vars({&var_string_, &var_offset_, &var_instance_type_}, zone()); | 3358 VariableList vars({&var_string_, &var_offset_, &var_instance_type_}, zone()); |
| 3359 Label dispatch(this, vars); | 3359 Label dispatch(this, vars); |
| 3360 Label if_iscons(this); | 3360 Label if_iscons(this); |
| 3361 Label if_isexternal(this); | 3361 Label if_isexternal(this); |
| 3362 Label if_issliced(this); | 3362 Label if_issliced(this); |
| 3363 Label if_isthin(this); | 3363 Label if_isthin(this); |
| 3364 Label out(this); | 3364 Label out(this); |
| 3365 | 3365 |
| 3366 Goto(&dispatch); | 3366 Branch(IsSequentialStringInstanceType(var_instance_type_.value()), &out, |
| 3367 &dispatch); |
| 3367 | 3368 |
| 3368 // Dispatch based on string representation. | 3369 // Dispatch based on string representation. |
| 3369 Bind(&dispatch); | 3370 Bind(&dispatch); |
| 3370 { | 3371 { |
| 3371 int32_t values[] = { | 3372 int32_t values[] = { |
| 3372 kSeqStringTag, kConsStringTag, kExternalStringTag, | 3373 kSeqStringTag, kConsStringTag, kExternalStringTag, |
| 3373 kSlicedStringTag, kThinStringTag, | 3374 kSlicedStringTag, kThinStringTag, |
| 3374 }; | 3375 }; |
| 3375 Label* labels[] = { | 3376 Label* labels[] = { |
| 3376 &out, &if_iscons, &if_isexternal, &if_issliced, &if_isthin, | 3377 &out, &if_iscons, &if_isexternal, &if_issliced, &if_isthin, |
| (...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3433 | 3434 |
| 3434 Bind(&out); | 3435 Bind(&out); |
| 3435 return var_string_.value(); | 3436 return var_string_.value(); |
| 3436 } | 3437 } |
| 3437 | 3438 |
| 3438 Node* ToDirectStringAssembler::TryToSequential(StringPointerKind ptr_kind, | 3439 Node* ToDirectStringAssembler::TryToSequential(StringPointerKind ptr_kind, |
| 3439 Label* if_bailout) { | 3440 Label* if_bailout) { |
| 3440 CHECK(ptr_kind == PTR_TO_DATA || ptr_kind == PTR_TO_STRING); | 3441 CHECK(ptr_kind == PTR_TO_DATA || ptr_kind == PTR_TO_STRING); |
| 3441 | 3442 |
| 3442 Variable var_result(this, MachineType::PointerRepresentation()); | 3443 Variable var_result(this, MachineType::PointerRepresentation()); |
| 3443 Label out(this), if_issequential(this), if_isexternal(this); | 3444 Label out(this), if_issequential(this), if_isexternal(this, Label::kDeferred); |
| 3444 Branch(is_external(), &if_isexternal, &if_issequential); | 3445 Branch(is_external(), &if_isexternal, &if_issequential); |
| 3445 | 3446 |
| 3446 Bind(&if_issequential); | 3447 Bind(&if_issequential); |
| 3447 { | 3448 { |
| 3448 STATIC_ASSERT(SeqOneByteString::kHeaderSize == | 3449 STATIC_ASSERT(SeqOneByteString::kHeaderSize == |
| 3449 SeqTwoByteString::kHeaderSize); | 3450 SeqTwoByteString::kHeaderSize); |
| 3450 Node* result = BitcastTaggedToWord(var_string_.value()); | 3451 Node* result = BitcastTaggedToWord(var_string_.value()); |
| 3451 if (ptr_kind == PTR_TO_DATA) { | 3452 if (ptr_kind == PTR_TO_DATA) { |
| 3452 result = IntPtrAdd(result, IntPtrConstant(SeqOneByteString::kHeaderSize - | 3453 result = IntPtrAdd(result, IntPtrConstant(SeqOneByteString::kHeaderSize - |
| 3453 kHeapObjectTag)); | 3454 kHeapObjectTag)); |
| (...skipping 4818 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 8272 formatted.c_str(), TENURED); | 8273 formatted.c_str(), TENURED); |
| 8273 CallRuntime(Runtime::kGlobalPrint, NoContextConstant(), | 8274 CallRuntime(Runtime::kGlobalPrint, NoContextConstant(), |
| 8274 HeapConstant(string)); | 8275 HeapConstant(string)); |
| 8275 } | 8276 } |
| 8276 CallRuntime(Runtime::kDebugPrint, NoContextConstant(), tagged_value); | 8277 CallRuntime(Runtime::kDebugPrint, NoContextConstant(), tagged_value); |
| 8277 #endif | 8278 #endif |
| 8278 } | 8279 } |
| 8279 | 8280 |
| 8280 } // namespace internal | 8281 } // namespace internal |
| 8281 } // namespace v8 | 8282 } // namespace v8 |
| OLD | NEW |