diff options
author | Michaël Zasso <targos@protonmail.com> | 2017-05-02 10:50:00 +0200 |
---|---|---|
committer | Michaël Zasso <targos@protonmail.com> | 2017-05-06 20:02:35 +0200 |
commit | 60d1aac8d225e844e68ae48e8f3d58802e635fbe (patch) | |
tree | 922f347dd054db18d88666fad7181e5a777f4022 /deps/v8/src/arm64/codegen-arm64.cc | |
parent | 73d9c0f903ae371cd5011af64c3a6f69a1bda978 (diff) | |
download | node-new-60d1aac8d225e844e68ae48e8f3d58802e635fbe.tar.gz |
deps: update V8 to 5.8.283.38
PR-URL: https://github.com/nodejs/node/pull/12784
Reviewed-By: Ben Noordhuis <info@bnoordhuis.nl>
Reviewed-By: Gibson Fahnestock <gibfahn@gmail.com>
Diffstat (limited to 'deps/v8/src/arm64/codegen-arm64.cc')
-rw-r--r-- | deps/v8/src/arm64/codegen-arm64.cc | 22 |
1 files changed, 15 insertions, 7 deletions
diff --git a/deps/v8/src/arm64/codegen-arm64.cc b/deps/v8/src/arm64/codegen-arm64.cc index e6ddcfadb8..4fb9a2d939 100644 --- a/deps/v8/src/arm64/codegen-arm64.cc +++ b/deps/v8/src/arm64/codegen-arm64.cc @@ -99,6 +99,9 @@ void StringCharLoadGenerator::Generate(MacroAssembler* masm, Register result, Label* call_runtime) { DCHECK(string.Is64Bits() && index.Is32Bits() && result.Is64Bits()); + Label indirect_string_loaded; + __ Bind(&indirect_string_loaded); + // Fetch the instance type of the receiver into result register. __ Ldr(result, FieldMemOperand(string, HeapObject::kMapOffset)); __ Ldrb(result, FieldMemOperand(result, Map::kInstanceTypeOffset)); @@ -108,17 +111,25 @@ void StringCharLoadGenerator::Generate(MacroAssembler* masm, __ TestAndBranchIfAllClear(result, kIsIndirectStringMask, &check_sequential); // Dispatch on the indirect string shape: slice or cons. - Label cons_string; - __ TestAndBranchIfAllClear(result, kSlicedNotConsMask, &cons_string); + Label cons_string, thin_string; + __ And(result, result, kStringRepresentationMask); + __ Cmp(result, kConsStringTag); + __ B(eq, &cons_string); + __ Cmp(result, kThinStringTag); + __ B(eq, &thin_string); // Handle slices. - Label indirect_string_loaded; __ Ldr(result.W(), UntagSmiFieldMemOperand(string, SlicedString::kOffsetOffset)); __ Ldr(string, FieldMemOperand(string, SlicedString::kParentOffset)); __ Add(index, index, result.W()); __ B(&indirect_string_loaded); + // Handle thin strings. + __ Bind(&thin_string); + __ Ldr(string, FieldMemOperand(string, ThinString::kActualOffset)); + __ B(&indirect_string_loaded); + // Handle cons strings. // Check whether the right hand side is the empty string (i.e. if // this is really a flat string in a cons string). If that is not @@ -129,10 +140,7 @@ void StringCharLoadGenerator::Generate(MacroAssembler* masm, __ JumpIfNotRoot(result, Heap::kempty_stringRootIndex, call_runtime); // Get the first of the two strings and load its instance type. __ Ldr(string, FieldMemOperand(string, ConsString::kFirstOffset)); - - __ Bind(&indirect_string_loaded); - __ Ldr(result, FieldMemOperand(string, HeapObject::kMapOffset)); - __ Ldrb(result, FieldMemOperand(result, Map::kInstanceTypeOffset)); + __ B(&indirect_string_loaded); // Distinguish sequential and external strings. Only these two string // representations can reach here (slices and flat cons strings have been |