diff options
author | Myles Borins <mylesborins@google.com> | 2017-08-01 11:36:44 -0500 |
---|---|---|
committer | Myles Borins <mylesborins@google.com> | 2017-08-01 15:23:15 -0500 |
commit | 0a66b223e149a841669bfad5598e4254589730cb (patch) | |
tree | 5ec050f7f78aafbf5b1e0e50d639fb843141e162 /deps/v8/src/regexp | |
parent | 1782b3836ba58ef0da6b687f2bb970c0bd8199ad (diff) | |
download | node-new-0a66b223e149a841669bfad5598e4254589730cb.tar.gz |
deps: update V8 to 6.0.286.52
PR-URL: https://github.com/nodejs/node/pull/14004
Reviewed-By: Anna Henningsen <anna@addaleax.net>
Reviewed-By: Anna Henningsen <anna@addaleax.net>
Reviewed-By: Franziska Hinkelmann <franziska.hinkelmann@gmail.com>
Reviewed-By: James M Snell <jasnell@gmail.com>
Reviewed-By: Matteo Collina <matteo.collina@gmail.com>
Reviewed-By: Colin Ihrig <cjihrig@gmail.com>
Diffstat (limited to 'deps/v8/src/regexp')
24 files changed, 321 insertions, 274 deletions
diff --git a/deps/v8/src/regexp/arm/regexp-macro-assembler-arm.cc b/deps/v8/src/regexp/arm/regexp-macro-assembler-arm.cc index 579423ff32..6ce35fff09 100644 --- a/deps/v8/src/regexp/arm/regexp-macro-assembler-arm.cc +++ b/deps/v8/src/regexp/arm/regexp-macro-assembler-arm.cc @@ -41,14 +41,13 @@ namespace internal { * Each call to a public method should retain this convention. * * The stack will have the following structure: - * - fp[56] Isolate* isolate (address of the current isolate) - * - fp[52] direct_call (if 1, direct call from JavaScript code, + * - fp[52] Isolate* isolate (address of the current isolate) + * - fp[48] direct_call (if 1, direct call from JavaScript code, * if 0, call through the runtime system). - * - fp[48] stack_area_base (high end of the memory area to use as + * - fp[44] stack_area_base (high end of the memory area to use as * backtracking stack). - * - fp[44] capture array size (may fit multiple sets of matches) - * - fp[40] int* capture_array (int[num_saved_registers_], for output). - * - fp[36] secondary link/return address used by native call. + * - fp[40] capture array size (may fit multiple sets of matches) + * - fp[36] int* capture_array (int[num_saved_registers_], for output). * --- sp when called --- * - fp[32] return address (lr). * - fp[28] old frame pointer (r11). @@ -81,17 +80,14 @@ namespace internal { * int start_index, * Address start, * Address end, - * Address secondary_return_address, // Only used by native call. * int* capture_output_array, + * int num_capture_registers, * byte* stack_area_base, - * bool direct_call = false) + * bool direct_call = false, + * Isolate* isolate); * The call is performed by NativeRegExpMacroAssembler::Execute() * (in regexp-macro-assembler.cc) via the CALL_GENERATED_REGEXP_CODE macro * in arm/simulator-arm.h. - * When calling as a non-direct call (i.e., from C++ code), the return address - * area is overwritten with the LR register by the RegExp code. When doing a - * direct call from generated code, the return address is placed there by - * the calling code, as in a normal exit frame. */ #define __ ACCESS_MASM(masm_) @@ -318,11 +314,11 @@ void RegExpMacroAssemblerARM::CheckNotBackReferenceIgnoreCase( __ sub(r1, r1, r4); } // Isolate. -#ifdef V8_I18N_SUPPORT +#ifdef V8_INTL_SUPPORT if (unicode) { __ mov(r3, Operand(0)); } else // NOLINT -#endif // V8_I18N_SUPPORT +#endif // V8_INTL_SUPPORT { __ mov(r3, Operand(ExternalReference::isolate_address(isolate()))); } diff --git a/deps/v8/src/regexp/arm/regexp-macro-assembler-arm.h b/deps/v8/src/regexp/arm/regexp-macro-assembler-arm.h index 6c910644b2..a522f53d4a 100644 --- a/deps/v8/src/regexp/arm/regexp-macro-assembler-arm.h +++ b/deps/v8/src/regexp/arm/regexp-macro-assembler-arm.h @@ -103,9 +103,8 @@ class RegExpMacroAssemblerARM: public NativeRegExpMacroAssembler { static const int kStoredRegisters = kFramePointer; // Return address (stored from link register, read into pc on return). static const int kReturnAddress = kStoredRegisters + 8 * kPointerSize; - static const int kSecondaryReturnAddress = kReturnAddress + kPointerSize; // Stack parameters placed by caller. - static const int kRegisterOutput = kSecondaryReturnAddress + kPointerSize; + static const int kRegisterOutput = kReturnAddress + kPointerSize; static const int kNumOutputRegisters = kRegisterOutput + kPointerSize; static const int kStackHighEnd = kNumOutputRegisters + kPointerSize; static const int kDirectCall = kStackHighEnd + kPointerSize; diff --git a/deps/v8/src/regexp/arm64/regexp-macro-assembler-arm64.cc b/deps/v8/src/regexp/arm64/regexp-macro-assembler-arm64.cc index 7d015d096b..f740470ae3 100644 --- a/deps/v8/src/regexp/arm64/regexp-macro-assembler-arm64.cc +++ b/deps/v8/src/regexp/arm64/regexp-macro-assembler-arm64.cc @@ -56,10 +56,7 @@ namespace internal { * (as referred to in * the code) * - * - fp[104] isolate Address of the current isolate. - * - fp[96] return_address Secondary link/return address - * used by an exit frame if this is a - * native call. + * - fp[96] isolate Address of the current isolate. * ^^^ csp when called ^^^ * - fp[88] lr Return from the RegExp code. * - fp[80] r29 Old frame pointer (CalleeSaved). @@ -89,23 +86,18 @@ namespace internal { * The data up to the return address must be placed there by the calling * code and the remaining arguments are passed in registers, e.g. by calling the * code entry as cast to a function with the signature: - * int (*match)(String* input, - * int start_offset, - * Address input_start, - * Address input_end, - * int* output, - * int output_size, - * Address stack_base, + * int (*match)(String* input_string, + * int start_index, + * Address start, + * Address end, + * int* capture_output_array, + * int num_capture_registers, + * byte* stack_area_base, * bool direct_call = false, - * Address secondary_return_address, // Only used by native call. - * Isolate* isolate) + * Isolate* isolate); * The call is performed by NativeRegExpMacroAssembler::Execute() * (in regexp-macro-assembler.cc) via the CALL_GENERATED_REGEXP_CODE macro * in arm64/simulator-arm64.h. - * When calling as a non-direct call (i.e., from C++ code), the return address - * area is overwritten with the LR register by the RegExp code. When doing a - * direct call from generated code, the return address is placed there by - * the calling code, as in a normal exit frame. */ #define __ ACCESS_MASM(masm_) @@ -401,11 +393,11 @@ void RegExpMacroAssemblerARM64::CheckNotBackReferenceIgnoreCase( __ Sub(x1, x1, Operand(capture_length, SXTW)); } // Isolate. -#ifdef V8_I18N_SUPPORT +#ifdef V8_INTL_SUPPORT if (unicode) { __ Mov(x3, Operand(0)); } else // NOLINT -#endif // V8_I18N_SUPPORT +#endif // V8_INTL_SUPPORT { __ Mov(x3, ExternalReference::isolate_address(isolate())); } diff --git a/deps/v8/src/regexp/arm64/regexp-macro-assembler-arm64.h b/deps/v8/src/regexp/arm64/regexp-macro-assembler-arm64.h index 5db220e962..614be624a9 100644 --- a/deps/v8/src/regexp/arm64/regexp-macro-assembler-arm64.h +++ b/deps/v8/src/regexp/arm64/regexp-macro-assembler-arm64.h @@ -109,9 +109,8 @@ class RegExpMacroAssemblerARM64: public NativeRegExpMacroAssembler { // Return address. // It is placed above the 11 callee-saved registers. static const int kReturnAddress = kCalleeSavedRegisters + 11 * kPointerSize; - static const int kSecondaryReturnAddress = kReturnAddress + kPointerSize; // Stack parameter placed by caller. - static const int kIsolate = kSecondaryReturnAddress + kPointerSize; + static const int kIsolate = kReturnAddress + kPointerSize; // Below the frame pointer. // Register parameters stored by setup code. diff --git a/deps/v8/src/regexp/ia32/regexp-macro-assembler-ia32.cc b/deps/v8/src/regexp/ia32/regexp-macro-assembler-ia32.cc index 6b4ea247ef..c279304777 100644 --- a/deps/v8/src/regexp/ia32/regexp-macro-assembler-ia32.cc +++ b/deps/v8/src/regexp/ia32/regexp-macro-assembler-ia32.cc @@ -69,9 +69,10 @@ namespace internal { * Address start, * Address end, * int* capture_output_array, - * bool at_start, + * int num_capture_registers, * byte* stack_area_base, - * bool direct_call) + * bool direct_call = false, + * Isolate* isolate); */ #define __ ACCESS_MASM(masm_) @@ -298,11 +299,11 @@ void RegExpMacroAssemblerIA32::CheckNotBackReferenceIgnoreCase( // Isolate* isolate or 0 if unicode flag. // Set isolate. -#ifdef V8_I18N_SUPPORT +#ifdef V8_INTL_SUPPORT if (unicode) { __ mov(Operand(esp, 3 * kPointerSize), Immediate(0)); } else // NOLINT -#endif // V8_I18N_SUPPORT +#endif // V8_INTL_SUPPORT { __ mov(Operand(esp, 3 * kPointerSize), Immediate(ExternalReference::isolate_address(isolate()))); diff --git a/deps/v8/src/regexp/interpreter-irregexp.cc b/deps/v8/src/regexp/interpreter-irregexp.cc index 4f8f96a536..f27f43aa5c 100644 --- a/deps/v8/src/regexp/interpreter-irregexp.cc +++ b/deps/v8/src/regexp/interpreter-irregexp.cc @@ -16,9 +16,9 @@ #include "src/unicode.h" #include "src/utils.h" -#ifdef V8_I18N_SUPPORT +#ifdef V8_INTL_SUPPORT #include "unicode/uchar.h" -#endif // V8_I18N_SUPPORT +#endif // V8_INTL_SUPPORT namespace v8 { namespace internal { diff --git a/deps/v8/src/regexp/jsregexp-inl.h b/deps/v8/src/regexp/jsregexp-inl.h index 4bcda43496..0b73c2fbc3 100644 --- a/deps/v8/src/regexp/jsregexp-inl.h +++ b/deps/v8/src/regexp/jsregexp-inl.h @@ -7,7 +7,6 @@ #define V8_REGEXP_JSREGEXP_INL_H_ #include "src/allocation.h" -#include "src/heap/heap.h" #include "src/objects.h" #include "src/regexp/jsregexp.h" diff --git a/deps/v8/src/regexp/jsregexp.cc b/deps/v8/src/regexp/jsregexp.cc index 8ab2681dcf..61cabd0b94 100644 --- a/deps/v8/src/regexp/jsregexp.cc +++ b/deps/v8/src/regexp/jsregexp.cc @@ -26,10 +26,10 @@ #include "src/string-search.h" #include "src/unicode-decoder.h" -#ifdef V8_I18N_SUPPORT +#ifdef V8_INTL_SUPPORT #include "unicode/uniset.h" #include "unicode/utypes.h" -#endif // V8_I18N_SUPPORT +#endif // V8_INTL_SUPPORT #ifndef V8_INTERPRETED_REGEXP #if V8_TARGET_ARCH_IA32 @@ -3327,9 +3327,8 @@ TextNode* TextNode::CreateForCharacterRanges(Zone* zone, RegExpNode* on_success) { DCHECK_NOT_NULL(ranges); ZoneList<TextElement>* elms = new (zone) ZoneList<TextElement>(1, zone); - elms->Add( - TextElement::CharClass(new (zone) RegExpCharacterClass(ranges, false)), - zone); + elms->Add(TextElement::CharClass(new (zone) RegExpCharacterClass(ranges)), + zone); return new (zone) TextNode(elms, read_backward, on_success); } @@ -3341,12 +3340,12 @@ TextNode* TextNode::CreateForSurrogatePair(Zone* zone, CharacterRange lead, ZoneList<CharacterRange>* lead_ranges = CharacterRange::List(zone, lead); ZoneList<CharacterRange>* trail_ranges = CharacterRange::List(zone, trail); ZoneList<TextElement>* elms = new (zone) ZoneList<TextElement>(2, zone); - elms->Add(TextElement::CharClass( - new (zone) RegExpCharacterClass(lead_ranges, false)), - zone); - elms->Add(TextElement::CharClass( - new (zone) RegExpCharacterClass(trail_ranges, false)), - zone); + elms->Add( + TextElement::CharClass(new (zone) RegExpCharacterClass(lead_ranges)), + zone); + elms->Add( + TextElement::CharClass(new (zone) RegExpCharacterClass(trail_ranges)), + zone); return new (zone) TextNode(elms, read_backward, on_success); } @@ -4851,7 +4850,7 @@ static bool CompareRanges(ZoneList<CharacterRange>* ranges, bool RegExpCharacterClass::is_standard(Zone* zone) { // TODO(lrn): Remove need for this function, by not throwing away information // along the way. - if (is_negated_) { + if (is_negated()) { return false; } if (set_.is_standard()) { @@ -5114,7 +5113,7 @@ RegExpNode* UnanchoredAdvance(RegExpCompiler* compiler, } void AddUnicodeCaseEquivalents(ZoneList<CharacterRange>* ranges, Zone* zone) { -#ifdef V8_I18N_SUPPORT +#ifdef V8_INTL_SUPPORT // Use ICU to compute the case fold closure over the ranges. icu::UnicodeSet set; for (int i = 0; i < ranges->length(); i++) { @@ -5132,7 +5131,7 @@ void AddUnicodeCaseEquivalents(ZoneList<CharacterRange>* ranges, Zone* zone) { } // No errors and everything we collected have been ranges. CharacterRange::Canonicalize(ranges); -#endif // V8_I18N_SUPPORT +#endif // V8_INTL_SUPPORT } @@ -5144,7 +5143,8 @@ RegExpNode* RegExpCharacterClass::ToNode(RegExpCompiler* compiler, if (compiler->needs_unicode_case_equivalents()) { AddUnicodeCaseEquivalents(ranges, zone); } - if (compiler->unicode() && !compiler->one_byte()) { + if (compiler->unicode() && !compiler->one_byte() && + !contains_split_surrogate()) { if (is_negated()) { ZoneList<CharacterRange>* negated = new (zone) ZoneList<CharacterRange>(2, zone); @@ -5154,7 +5154,7 @@ RegExpNode* RegExpCharacterClass::ToNode(RegExpCompiler* compiler, if (ranges->length() == 0) { ranges->Add(CharacterRange::Everything(), zone); RegExpCharacterClass* fail = - new (zone) RegExpCharacterClass(ranges, true); + new (zone) RegExpCharacterClass(ranges, NEGATED); return new (zone) TextNode(fail, compiler->read_backward(), on_success); } if (standard_type() == '*') { @@ -5352,6 +5352,7 @@ void RegExpDisjunction::FixSingleCharacterDisjunctions( Zone* zone = compiler->zone(); ZoneList<RegExpTree*>* alternatives = this->alternatives(); int length = alternatives->length(); + const bool unicode = compiler->unicode(); int write_posn = 0; int i = 0; @@ -5368,6 +5369,10 @@ void RegExpDisjunction::FixSingleCharacterDisjunctions( i++; continue; } + DCHECK_IMPLIES(unicode, + !unibrow::Utf16::IsLeadSurrogate(atom->data().at(0))); + bool contains_trail_surrogate = + unibrow::Utf16::IsTrailSurrogate(atom->data().at(0)); int first_in_run = i; i++; while (i < length) { @@ -5375,6 +5380,10 @@ void RegExpDisjunction::FixSingleCharacterDisjunctions( if (!alternative->IsAtom()) break; atom = alternative->AsAtom(); if (atom->length() != 1) break; + DCHECK_IMPLIES(unicode, + !unibrow::Utf16::IsLeadSurrogate(atom->data().at(0))); + contains_trail_surrogate |= + unibrow::Utf16::IsTrailSurrogate(atom->data().at(0)); i++; } if (i > first_in_run + 1) { @@ -5387,8 +5396,12 @@ void RegExpDisjunction::FixSingleCharacterDisjunctions( DCHECK_EQ(old_atom->length(), 1); ranges->Add(CharacterRange::Singleton(old_atom->data().at(0)), zone); } + RegExpCharacterClass::Flags flags; + if (unicode && contains_trail_surrogate) { + flags = RegExpCharacterClass::CONTAINS_SPLIT_SURROGATE; + } alternatives->at(write_posn++) = - new (zone) RegExpCharacterClass(ranges, false); + new (zone) RegExpCharacterClass(ranges, flags); } else { // Just copy any trivial alternatives. for (int j = first_in_run; j < i; j++) { diff --git a/deps/v8/src/regexp/mips/OWNERS b/deps/v8/src/regexp/mips/OWNERS index 89455a4fbd..3f8fbfc7c8 100644 --- a/deps/v8/src/regexp/mips/OWNERS +++ b/deps/v8/src/regexp/mips/OWNERS @@ -1,6 +1,3 @@ -paul.lind@imgtec.com -gergely.kis@imgtec.com -akos.palfi@imgtec.com -balazs.kilvady@imgtec.com -dusan.milosavljevic@imgtec.com ivica.bogosavljevic@imgtec.com +Miran.Karic@imgtec.com +dusan.simicic@imgtec.com diff --git a/deps/v8/src/regexp/mips/regexp-macro-assembler-mips.cc b/deps/v8/src/regexp/mips/regexp-macro-assembler-mips.cc index 062d6618e9..11590599f9 100644 --- a/deps/v8/src/regexp/mips/regexp-macro-assembler-mips.cc +++ b/deps/v8/src/regexp/mips/regexp-macro-assembler-mips.cc @@ -38,14 +38,13 @@ namespace internal { * * The stack will have the following structure: * - * - fp[64] Isolate* isolate (address of the current isolate) - * - fp[60] direct_call (if 1, direct call from JavaScript code, + * - fp[60] Isolate* isolate (address of the current isolate) + * - fp[56] direct_call (if 1, direct call from JavaScript code, * if 0, call through the runtime system). - * - fp[56] stack_area_base (High end of the memory area to use as + * - fp[52] stack_area_base (High end of the memory area to use as * backtracking stack). - * - fp[52] capture array size (may fit multiple sets of matches) - * - fp[48] int* capture_array (int[num_saved_registers_], for output). - * - fp[44] secondary link/return address used by native call. + * - fp[48] capture array size (may fit multiple sets of matches) + * - fp[44] int* capture_array (int[num_saved_registers_], for output). * --- sp when called --- * - fp[40] return address (lr). * - fp[36] old frame pointer (r11). @@ -78,17 +77,14 @@ namespace internal { * int start_index, * Address start, * Address end, - * Address secondary_return_address, // Only used by native call. * int* capture_output_array, + * int num_capture_registers, * byte* stack_area_base, - * bool direct_call = false) + * bool direct_call = false, + * Isolate* isolate); * The call is performed by NativeRegExpMacroAssembler::Execute() * (in regexp-macro-assembler.cc) via the CALL_GENERATED_REGEXP_CODE macro * in mips/simulator-mips.h. - * When calling as a non-direct call (i.e., from C++ code), the return address - * area is overwritten with the ra register by the RegExp code. When doing a - * direct call from generated code, the return address is placed there by - * the calling code, as in a normal exit frame. */ #define __ ACCESS_MASM(masm_) @@ -324,11 +320,11 @@ void RegExpMacroAssemblerMIPS::CheckNotBackReferenceIgnoreCase( __ Subu(a1, a1, Operand(s3)); } // Isolate. -#ifdef V8_I18N_SUPPORT +#ifdef V8_INTL_SUPPORT if (unicode) { __ mov(a3, zero_reg); } else // NOLINT -#endif // V8_I18N_SUPPORT +#endif // V8_INTL_SUPPORT { __ li(a3, Operand(ExternalReference::isolate_address(masm_->isolate()))); } diff --git a/deps/v8/src/regexp/mips/regexp-macro-assembler-mips.h b/deps/v8/src/regexp/mips/regexp-macro-assembler-mips.h index 6dedb1e748..6c1ba64c51 100644 --- a/deps/v8/src/regexp/mips/regexp-macro-assembler-mips.h +++ b/deps/v8/src/regexp/mips/regexp-macro-assembler-mips.h @@ -103,9 +103,8 @@ class RegExpMacroAssemblerMIPS: public NativeRegExpMacroAssembler { static const int kStoredRegisters = kFramePointer; // Return address (stored from link register, read into pc on return). static const int kReturnAddress = kStoredRegisters + 9 * kPointerSize; - static const int kSecondaryReturnAddress = kReturnAddress + kPointerSize; // Stack frame header. - static const int kStackFrameHeader = kReturnAddress + kPointerSize; + static const int kStackFrameHeader = kReturnAddress; // Stack parameters placed by caller. static const int kRegisterOutput = kStackFrameHeader + 20; static const int kNumOutputRegisters = kRegisterOutput + kPointerSize; diff --git a/deps/v8/src/regexp/mips64/OWNERS b/deps/v8/src/regexp/mips64/OWNERS index 89455a4fbd..3f8fbfc7c8 100644 --- a/deps/v8/src/regexp/mips64/OWNERS +++ b/deps/v8/src/regexp/mips64/OWNERS @@ -1,6 +1,3 @@ -paul.lind@imgtec.com -gergely.kis@imgtec.com -akos.palfi@imgtec.com -balazs.kilvady@imgtec.com -dusan.milosavljevic@imgtec.com ivica.bogosavljevic@imgtec.com +Miran.Karic@imgtec.com +dusan.simicic@imgtec.com diff --git a/deps/v8/src/regexp/mips64/regexp-macro-assembler-mips64.cc b/deps/v8/src/regexp/mips64/regexp-macro-assembler-mips64.cc index e0317dec8a..595d6fd4de 100644 --- a/deps/v8/src/regexp/mips64/regexp-macro-assembler-mips64.cc +++ b/deps/v8/src/regexp/mips64/regexp-macro-assembler-mips64.cc @@ -17,7 +17,9 @@ namespace v8 { namespace internal { #ifndef V8_INTERPRETED_REGEXP -/* + +/* clang-format off + * * This assembler uses the following register assignment convention * - t3 : Temporarily stores the index of capture start after a matching pass * for a global regexp. @@ -41,15 +43,14 @@ namespace internal { * * The O32 stack will have the following structure: * - * - fp[76] Isolate* isolate (address of the current isolate) - * - fp[72] direct_call (if 1, direct call from JavaScript code, + * - fp[72] Isolate* isolate (address of the current isolate) + * - fp[68] direct_call (if 1, direct call from JavaScript code, * if 0, call through the runtime system). - * - fp[68] stack_area_base (High end of the memory area to use as + * - fp[64] stack_area_base (High end of the memory area to use as * backtracking stack). - * - fp[64] capture array size (may fit multiple sets of matches) - * - fp[60] int* capture_array (int[num_saved_registers_], for output). + * - fp[60] capture array size (may fit multiple sets of matches) * - fp[44..59] MIPS O32 four argument slots - * - fp[40] secondary link/return address used by native call. + * - fp[40] int* capture_array (int[num_saved_registers_], for output). * --- sp when called --- * - fp[36] return address (lr). * - fp[32] old frame pointer (r11). @@ -74,9 +75,8 @@ namespace internal { * * The N64 stack will have the following structure: * - * - fp[88] Isolate* isolate (address of the current isolate) kIsolate - * - fp[80] secondary link/return address used by exit frame on native call. kSecondaryReturnAddress - kStackFrameHeader + * - fp[80] Isolate* isolate (address of the current isolate) kIsolate + * kStackFrameHeader * --- sp when called --- * - fp[72] ra Return from RegExp code (ra). kReturnAddress * - fp[64] s9, old-fp Old fp, callee saved(s9). @@ -112,19 +112,16 @@ namespace internal { * int start_index, * Address start, * Address end, - * Address secondary_return_address, // Only used by native call. * int* capture_output_array, + * int num_capture_registers, * byte* stack_area_base, * bool direct_call = false, - * void* return_address, * Isolate* isolate); * The call is performed by NativeRegExpMacroAssembler::Execute() * (in regexp-macro-assembler.cc) via the CALL_GENERATED_REGEXP_CODE macro * in mips/simulator-mips.h. - * When calling as a non-direct call (i.e., from C++ code), the return address - * area is overwritten with the ra register by the RegExp code. When doing a - * direct call from generated code, the return address is placed there by - * the calling code, as in a normal exit frame. + * + * clang-format on */ #define __ ACCESS_MASM(masm_) @@ -186,9 +183,9 @@ void RegExpMacroAssemblerMIPS::AdvanceRegister(int reg, int by) { DCHECK(reg >= 0); DCHECK(reg < num_registers_); if (by != 0) { - __ ld(a0, register_location(reg)); + __ Ld(a0, register_location(reg)); __ Daddu(a0, a0, Operand(by)); - __ sd(a0, register_location(reg)); + __ Sd(a0, register_location(reg)); } } @@ -218,7 +215,7 @@ void RegExpMacroAssemblerMIPS::CheckCharacterGT(uc16 limit, Label* on_greater) { void RegExpMacroAssemblerMIPS::CheckAtStart(Label* on_at_start) { - __ ld(a1, MemOperand(frame_pointer(), kStringStartMinusOne)); + __ Ld(a1, MemOperand(frame_pointer(), kStringStartMinusOne)); __ Daddu(a0, current_input_offset(), Operand(-char_size())); BranchOrBacktrack(on_at_start, eq, a0, Operand(a1)); } @@ -226,7 +223,7 @@ void RegExpMacroAssemblerMIPS::CheckAtStart(Label* on_at_start) { void RegExpMacroAssemblerMIPS::CheckNotAtStart(int cp_offset, Label* on_not_at_start) { - __ ld(a1, MemOperand(frame_pointer(), kStringStartMinusOne)); + __ Ld(a1, MemOperand(frame_pointer(), kStringStartMinusOne)); __ Daddu(a0, current_input_offset(), Operand(-char_size() + cp_offset * char_size())); BranchOrBacktrack(on_not_at_start, ne, a0, Operand(a1)); @@ -240,7 +237,7 @@ void RegExpMacroAssemblerMIPS::CheckCharacterLT(uc16 limit, Label* on_less) { void RegExpMacroAssemblerMIPS::CheckGreedyLoop(Label* on_equal) { Label backtrack_non_equal; - __ lw(a0, MemOperand(backtrack_stackpointer(), 0)); + __ Lw(a0, MemOperand(backtrack_stackpointer(), 0)); __ Branch(&backtrack_non_equal, ne, current_input_offset(), Operand(a0)); __ Daddu(backtrack_stackpointer(), backtrack_stackpointer(), @@ -253,8 +250,8 @@ void RegExpMacroAssemblerMIPS::CheckGreedyLoop(Label* on_equal) { void RegExpMacroAssemblerMIPS::CheckNotBackReferenceIgnoreCase( int start_reg, bool read_backward, bool unicode, Label* on_no_match) { Label fallthrough; - __ ld(a0, register_location(start_reg)); // Index of start of capture. - __ ld(a1, register_location(start_reg + 1)); // Index of end of capture. + __ Ld(a0, register_location(start_reg)); // Index of start of capture. + __ Ld(a1, register_location(start_reg + 1)); // Index of end of capture. __ Dsubu(a1, a1, a0); // Length of capture. // At this point, the capture registers are either both set or both cleared. @@ -263,7 +260,7 @@ void RegExpMacroAssemblerMIPS::CheckNotBackReferenceIgnoreCase( __ Branch(&fallthrough, eq, a1, Operand(zero_reg)); if (read_backward) { - __ ld(t1, MemOperand(frame_pointer(), kStringStartMinusOne)); + __ Ld(t1, MemOperand(frame_pointer(), kStringStartMinusOne)); __ Daddu(t1, t1, a1); BranchOrBacktrack(on_no_match, le, current_input_offset(), Operand(t1)); } else { @@ -292,9 +289,9 @@ void RegExpMacroAssemblerMIPS::CheckNotBackReferenceIgnoreCase( Label loop; __ bind(&loop); - __ lbu(a3, MemOperand(a0, 0)); + __ Lbu(a3, MemOperand(a0, 0)); __ daddiu(a0, a0, char_size()); - __ lbu(a4, MemOperand(a2, 0)); + __ Lbu(a4, MemOperand(a2, 0)); __ daddiu(a2, a2, char_size()); __ Branch(&loop_check, eq, a4, Operand(a3)); @@ -323,8 +320,8 @@ void RegExpMacroAssemblerMIPS::CheckNotBackReferenceIgnoreCase( // Compute new value of character position after the matched part. __ Dsubu(current_input_offset(), a2, end_of_input_address()); if (read_backward) { - __ ld(t1, register_location(start_reg)); // Index of start of capture. - __ ld(a2, register_location(start_reg + 1)); // Index of end of capture. + __ Ld(t1, register_location(start_reg)); // Index of start of capture. + __ Ld(a2, register_location(start_reg + 1)); // Index of end of capture. __ Daddu(current_input_offset(), current_input_offset(), Operand(t1)); __ Dsubu(current_input_offset(), current_input_offset(), Operand(a2)); } @@ -360,11 +357,11 @@ void RegExpMacroAssemblerMIPS::CheckNotBackReferenceIgnoreCase( __ Dsubu(a1, a1, Operand(s3)); } // Isolate. -#ifdef V8_I18N_SUPPORT +#ifdef V8_INTL_SUPPORT if (unicode) { __ mov(a3, zero_reg); } else // NOLINT -#endif // V8_I18N_SUPPORT +#endif // V8_INTL_SUPPORT { __ li(a3, Operand(ExternalReference::isolate_address(masm_->isolate()))); } @@ -379,7 +376,7 @@ void RegExpMacroAssemblerMIPS::CheckNotBackReferenceIgnoreCase( // Restore regexp engine registers. __ MultiPop(regexp_registers_to_retain); __ li(code_pointer(), Operand(masm_->CodeObject()), CONSTANT_SIZE); - __ ld(end_of_input_address(), MemOperand(frame_pointer(), kInputEnd)); + __ Ld(end_of_input_address(), MemOperand(frame_pointer(), kInputEnd)); // Check if function returned non-zero for success or zero for failure. BranchOrBacktrack(on_no_match, eq, v0, Operand(zero_reg)); @@ -402,8 +399,8 @@ void RegExpMacroAssemblerMIPS::CheckNotBackReference(int start_reg, Label success; // Find length of back-referenced capture. - __ ld(a0, register_location(start_reg)); - __ ld(a1, register_location(start_reg + 1)); + __ Ld(a0, register_location(start_reg)); + __ Ld(a1, register_location(start_reg + 1)); __ Dsubu(a1, a1, a0); // Length to check. // At this point, the capture registers are either both set or both cleared. @@ -412,7 +409,7 @@ void RegExpMacroAssemblerMIPS::CheckNotBackReference(int start_reg, __ Branch(&fallthrough, eq, a1, Operand(zero_reg)); if (read_backward) { - __ ld(t1, MemOperand(frame_pointer(), kStringStartMinusOne)); + __ Ld(t1, MemOperand(frame_pointer(), kStringStartMinusOne)); __ Daddu(t1, t1, a1); BranchOrBacktrack(on_no_match, le, current_input_offset(), Operand(t1)); } else { @@ -432,15 +429,15 @@ void RegExpMacroAssemblerMIPS::CheckNotBackReference(int start_reg, Label loop; __ bind(&loop); if (mode_ == LATIN1) { - __ lbu(a3, MemOperand(a0, 0)); + __ Lbu(a3, MemOperand(a0, 0)); __ daddiu(a0, a0, char_size()); - __ lbu(a4, MemOperand(a2, 0)); + __ Lbu(a4, MemOperand(a2, 0)); __ daddiu(a2, a2, char_size()); } else { DCHECK(mode_ == UC16); - __ lhu(a3, MemOperand(a0, 0)); + __ Lhu(a3, MemOperand(a0, 0)); __ daddiu(a0, a0, char_size()); - __ lhu(a4, MemOperand(a2, 0)); + __ Lhu(a4, MemOperand(a2, 0)); __ daddiu(a2, a2, char_size()); } BranchOrBacktrack(on_no_match, ne, a3, Operand(a4)); @@ -449,8 +446,8 @@ void RegExpMacroAssemblerMIPS::CheckNotBackReference(int start_reg, // Move current character position to position after match. __ Dsubu(current_input_offset(), a2, end_of_input_address()); if (read_backward) { - __ ld(t1, register_location(start_reg)); // Index of start of capture. - __ ld(a2, register_location(start_reg + 1)); // Index of end of capture. + __ Ld(t1, register_location(start_reg)); // Index of start of capture. + __ Ld(a2, register_location(start_reg + 1)); // Index of end of capture. __ Daddu(current_input_offset(), current_input_offset(), Operand(t1)); __ Dsubu(current_input_offset(), current_input_offset(), Operand(a2)); } @@ -525,7 +522,7 @@ void RegExpMacroAssemblerMIPS::CheckBitInTable( __ Daddu(a0, a0, current_character()); } - __ lbu(a0, FieldMemOperand(a0, ByteArray::kHeaderSize)); + __ Lbu(a0, FieldMemOperand(a0, ByteArray::kHeaderSize)); BranchOrBacktrack(on_bit_set, ne, a0, Operand(zero_reg)); } @@ -605,7 +602,7 @@ bool RegExpMacroAssemblerMIPS::CheckSpecialCharacterClass(uc16 type, ExternalReference map = ExternalReference::re_word_character_map(); __ li(a0, Operand(map)); __ Daddu(a0, a0, current_character()); - __ lbu(a0, MemOperand(a0, 0)); + __ Lbu(a0, MemOperand(a0, 0)); BranchOrBacktrack(on_no_match, eq, a0, Operand(zero_reg)); return true; } @@ -618,7 +615,7 @@ bool RegExpMacroAssemblerMIPS::CheckSpecialCharacterClass(uc16 type, ExternalReference map = ExternalReference::re_word_character_map(); __ li(a0, Operand(map)); __ Daddu(a0, a0, current_character()); - __ lbu(a0, MemOperand(a0, 0)); + __ Lbu(a0, MemOperand(a0, 0)); BranchOrBacktrack(on_no_match, ne, a0, Operand(zero_reg)); if (mode_ != LATIN1) { __ bind(&done); @@ -689,7 +686,7 @@ Handle<HeapObject> RegExpMacroAssemblerMIPS::GetCode(Handle<String> source) { ExternalReference stack_limit = ExternalReference::address_of_stack_limit(masm_->isolate()); __ li(a0, Operand(stack_limit)); - __ ld(a0, MemOperand(a0)); + __ Ld(a0, MemOperand(a0)); __ Dsubu(a0, sp, a0); // Handle it if the stack pointer is already below the stack limit. __ Branch(&stack_limit_hit, le, a0, Operand(zero_reg)); @@ -710,20 +707,20 @@ Handle<HeapObject> RegExpMacroAssemblerMIPS::GetCode(Handle<String> source) { // Allocate space on stack for registers. __ Dsubu(sp, sp, Operand(num_registers_ * kPointerSize)); // Load string end. - __ ld(end_of_input_address(), MemOperand(frame_pointer(), kInputEnd)); + __ Ld(end_of_input_address(), MemOperand(frame_pointer(), kInputEnd)); // Load input start. - __ ld(a0, MemOperand(frame_pointer(), kInputStart)); + __ Ld(a0, MemOperand(frame_pointer(), kInputStart)); // Find negative length (offset of start relative to end). __ Dsubu(current_input_offset(), a0, end_of_input_address()); // Set a0 to address of char before start of the input string // (effectively string position -1). - __ ld(a1, MemOperand(frame_pointer(), kStartIndex)); + __ Ld(a1, MemOperand(frame_pointer(), kStartIndex)); __ Dsubu(a0, current_input_offset(), Operand(char_size())); __ dsll(t1, a1, (mode_ == UC16) ? 1 : 0); __ Dsubu(a0, a0, t1); // Store this value in a local variable, for use when clearing // position registers. - __ sd(a0, MemOperand(frame_pointer(), kStringStartMinusOne)); + __ Sd(a0, MemOperand(frame_pointer(), kStringStartMinusOne)); // Initialize code pointer register __ li(code_pointer(), Operand(masm_->CodeObject()), CONSTANT_SIZE); @@ -749,19 +746,19 @@ Handle<HeapObject> RegExpMacroAssemblerMIPS::GetCode(Handle<String> source) { __ li(a2, Operand(num_saved_registers_)); Label init_loop; __ bind(&init_loop); - __ sd(a0, MemOperand(a1)); + __ Sd(a0, MemOperand(a1)); __ Daddu(a1, a1, Operand(-kPointerSize)); __ Dsubu(a2, a2, Operand(1)); __ Branch(&init_loop, ne, a2, Operand(zero_reg)); } else { for (int i = 0; i < num_saved_registers_; i++) { - __ sd(a0, register_location(i)); + __ Sd(a0, register_location(i)); } } } // Initialize backtrack stack pointer. - __ ld(backtrack_stackpointer(), MemOperand(frame_pointer(), kStackHighEnd)); + __ Ld(backtrack_stackpointer(), MemOperand(frame_pointer(), kStackHighEnd)); __ jmp(&start_label_); @@ -772,9 +769,9 @@ Handle<HeapObject> RegExpMacroAssemblerMIPS::GetCode(Handle<String> source) { __ bind(&success_label_); if (num_saved_registers_ > 0) { // Copy captures to output. - __ ld(a1, MemOperand(frame_pointer(), kInputStart)); - __ ld(a0, MemOperand(frame_pointer(), kRegisterOutput)); - __ ld(a2, MemOperand(frame_pointer(), kStartIndex)); + __ Ld(a1, MemOperand(frame_pointer(), kInputStart)); + __ Ld(a0, MemOperand(frame_pointer(), kRegisterOutput)); + __ Ld(a2, MemOperand(frame_pointer(), kStartIndex)); __ Dsubu(a1, end_of_input_address(), a1); // a1 is length of input in bytes. if (mode_ == UC16) { @@ -789,8 +786,8 @@ Handle<HeapObject> RegExpMacroAssemblerMIPS::GetCode(Handle<String> source) { // unroll the loop once to add an operation between a load of a register // and the following use of that register. for (int i = 0; i < num_saved_registers_; i += 2) { - __ ld(a2, register_location(i)); - __ ld(a3, register_location(i + 1)); + __ Ld(a2, register_location(i)); + __ Ld(a3, register_location(i + 1)); if (i == 0 && global_with_zero_length_check()) { // Keep capture start in a4 for the zero-length check later. __ mov(t3, a2); @@ -805,21 +802,21 @@ Handle<HeapObject> RegExpMacroAssemblerMIPS::GetCode(Handle<String> source) { __ Daddu(a3, a1, Operand(a3)); } // V8 expects the output to be an int32_t array. - __ sw(a2, MemOperand(a0)); + __ Sw(a2, MemOperand(a0)); __ Daddu(a0, a0, kIntSize); - __ sw(a3, MemOperand(a0)); + __ Sw(a3, MemOperand(a0)); __ Daddu(a0, a0, kIntSize); } } if (global()) { // Restart matching if the regular expression is flagged as global. - __ ld(a0, MemOperand(frame_pointer(), kSuccessfulCaptures)); - __ ld(a1, MemOperand(frame_pointer(), kNumOutputRegisters)); - __ ld(a2, MemOperand(frame_pointer(), kRegisterOutput)); + __ Ld(a0, MemOperand(frame_pointer(), kSuccessfulCaptures)); + __ Ld(a1, MemOperand(frame_pointer(), kNumOutputRegisters)); + __ Ld(a2, MemOperand(frame_pointer(), kRegisterOutput)); // Increment success counter. __ Daddu(a0, a0, 1); - __ sd(a0, MemOperand(frame_pointer(), kSuccessfulCaptures)); + __ Sd(a0, MemOperand(frame_pointer(), kSuccessfulCaptures)); // Capture results have been stored, so the number of remaining global // output registers is reduced by the number of stored captures. __ Dsubu(a1, a1, num_saved_registers_); @@ -827,13 +824,13 @@ Handle<HeapObject> RegExpMacroAssemblerMIPS::GetCode(Handle<String> source) { __ mov(v0, a0); __ Branch(&return_v0, lt, a1, Operand(num_saved_registers_)); - __ sd(a1, MemOperand(frame_pointer(), kNumOutputRegisters)); + __ Sd(a1, MemOperand(frame_pointer(), kNumOutputRegisters)); // Advance the location for output. __ Daddu(a2, a2, num_saved_registers_ * kIntSize); - __ sd(a2, MemOperand(frame_pointer(), kRegisterOutput)); + __ Sd(a2, MemOperand(frame_pointer(), kRegisterOutput)); // Prepare a0 to initialize registers with its value in the next run. - __ ld(a0, MemOperand(frame_pointer(), kStringStartMinusOne)); + __ Ld(a0, MemOperand(frame_pointer(), kStringStartMinusOne)); if (global_with_zero_length_check()) { // Special case for zero-length matches. @@ -861,7 +858,7 @@ Handle<HeapObject> RegExpMacroAssemblerMIPS::GetCode(Handle<String> source) { // Exit and return v0. __ bind(&exit_label_); if (global()) { - __ ld(v0, MemOperand(frame_pointer(), kSuccessfulCaptures)); + __ Ld(v0, MemOperand(frame_pointer(), kSuccessfulCaptures)); } __ bind(&return_v0); @@ -893,7 +890,7 @@ Handle<HeapObject> RegExpMacroAssemblerMIPS::GetCode(Handle<String> source) { __ Branch(&return_v0, ne, v0, Operand(zero_reg)); // String might have moved: Reload end of string from frame. - __ ld(end_of_input_address(), MemOperand(frame_pointer(), kInputEnd)); + __ Ld(end_of_input_address(), MemOperand(frame_pointer(), kInputEnd)); __ li(code_pointer(), Operand(masm_->CodeObject()), CONSTANT_SIZE); SafeReturn(); } @@ -925,7 +922,7 @@ Handle<HeapObject> RegExpMacroAssemblerMIPS::GetCode(Handle<String> source) { __ mov(backtrack_stackpointer(), v0); // Restore saved registers and continue. __ li(code_pointer(), Operand(masm_->CodeObject()), CONSTANT_SIZE); - __ ld(end_of_input_address(), MemOperand(frame_pointer(), kInputEnd)); + __ Ld(end_of_input_address(), MemOperand(frame_pointer(), kInputEnd)); SafeReturn(); } @@ -961,22 +958,22 @@ void RegExpMacroAssemblerMIPS::GoTo(Label* to) { void RegExpMacroAssemblerMIPS::IfRegisterGE(int reg, int comparand, Label* if_ge) { - __ ld(a0, register_location(reg)); - BranchOrBacktrack(if_ge, ge, a0, Operand(comparand)); + __ Ld(a0, register_location(reg)); + BranchOrBacktrack(if_ge, ge, a0, Operand(comparand)); } void RegExpMacroAssemblerMIPS::IfRegisterLT(int reg, int comparand, Label* if_lt) { - __ ld(a0, register_location(reg)); + __ Ld(a0, register_location(reg)); BranchOrBacktrack(if_lt, lt, a0, Operand(comparand)); } void RegExpMacroAssemblerMIPS::IfRegisterEqPos(int reg, Label* if_eq) { - __ ld(a0, register_location(reg)); + __ Ld(a0, register_location(reg)); BranchOrBacktrack(if_eq, eq, a0, Operand(current_input_offset())); } @@ -1010,7 +1007,7 @@ void RegExpMacroAssemblerMIPS::PopCurrentPosition() { void RegExpMacroAssemblerMIPS::PopRegister(int register_index) { Pop(a0); - __ sd(a0, register_location(register_index)); + __ Sd(a0, register_location(register_index)); } @@ -1028,10 +1025,10 @@ void RegExpMacroAssemblerMIPS::PushBacktrack(Label* label) { masm_->label_at_put(label, offset); __ bind(&after_constant); if (is_int16(cp_offset)) { - __ lwu(a0, MemOperand(code_pointer(), cp_offset)); + __ Lwu(a0, MemOperand(code_pointer(), cp_offset)); } else { __ Daddu(a0, code_pointer(), cp_offset); - __ lwu(a0, MemOperand(a0, 0)); + __ Lwu(a0, MemOperand(a0, 0)); } } Push(a0); @@ -1046,20 +1043,20 @@ void RegExpMacroAssemblerMIPS::PushCurrentPosition() { void RegExpMacroAssemblerMIPS::PushRegister(int register_index, StackCheckFlag check_stack_limit) { - __ ld(a0, register_location(register_index)); + __ Ld(a0, register_location(register_index)); Push(a0); if (check_stack_limit) CheckStackLimit(); } void RegExpMacroAssemblerMIPS::ReadCurrentPositionFromRegister(int reg) { - __ ld(current_input_offset(), register_location(reg)); + __ Ld(current_input_offset(), register_location(reg)); } void RegExpMacroAssemblerMIPS::ReadStackPointerFromRegister(int reg) { - __ ld(backtrack_stackpointer(), register_location(reg)); - __ ld(a0, MemOperand(frame_pointer(), kStackHighEnd)); + __ Ld(backtrack_stackpointer(), register_location(reg)); + __ Ld(a0, MemOperand(frame_pointer(), kStackHighEnd)); __ Daddu(backtrack_stackpointer(), backtrack_stackpointer(), Operand(a0)); } @@ -1082,7 +1079,7 @@ void RegExpMacroAssemblerMIPS::SetCurrentPositionFromEnd(int by) { void RegExpMacroAssemblerMIPS::SetRegister(int register_index, int to) { DCHECK(register_index >= num_saved_registers_); // Reserved for positions! __ li(a0, Operand(to)); - __ sd(a0, register_location(register_index)); + __ Sd(a0, register_location(register_index)); } @@ -1095,27 +1092,27 @@ bool RegExpMacroAssemblerMIPS::Succeed() { void RegExpMacroAssemblerMIPS::WriteCurrentPositionToRegister(int reg, int cp_offset) { if (cp_offset == 0) { - __ sd(current_input_offset(), register_location(reg)); + __ Sd(current_input_offset(), register_location(reg)); } else { __ Daddu(a0, current_input_offset(), Operand(cp_offset * char_size())); - __ sd(a0, register_location(reg)); + __ Sd(a0, register_location(reg)); } } void RegExpMacroAssemblerMIPS::ClearRegisters(int reg_from, int reg_to) { DCHECK(reg_from <= reg_to); - __ ld(a0, MemOperand(frame_pointer(), kStringStartMinusOne)); + __ Ld(a0, MemOperand(frame_pointer(), kStringStartMinusOne)); for (int reg = reg_from; reg <= reg_to; reg++) { - __ sd(a0, register_location(reg)); + __ Sd(a0, register_location(reg)); } } void RegExpMacroAssemblerMIPS::WriteStackPointerToRegister(int reg) { - __ ld(a1, MemOperand(frame_pointer(), kStackHighEnd)); + __ Ld(a1, MemOperand(frame_pointer(), kStackHighEnd)); __ Dsubu(a0, backtrack_stackpointer(), a1); - __ sd(a0, register_location(reg)); + __ Sd(a0, register_location(reg)); } @@ -1134,7 +1131,7 @@ void RegExpMacroAssemblerMIPS::CallCheckStackGuardState(Register scratch) { __ Dsubu(sp, sp, Operand(kPointerSize)); DCHECK(base::bits::IsPowerOfTwo32(stack_alignment)); __ And(sp, sp, Operand(-stack_alignment)); - __ sd(scratch, MemOperand(sp)); + __ Sd(scratch, MemOperand(sp)); __ mov(a2, frame_pointer()); // Code* of self. @@ -1174,7 +1171,7 @@ void RegExpMacroAssemblerMIPS::CallCheckStackGuardState(Register scratch) { // [sp + 2] - C argument slot. // [sp + 1] - C argument slot. // [sp + 0] - C argument slot. - __ ld(sp, MemOperand(sp, stack_alignment + kCArgsSlotsSize)); + __ Ld(sp, MemOperand(sp, stack_alignment + kCArgsSlotsSize)); __ li(code_pointer(), Operand(masm_->CodeObject())); } @@ -1222,7 +1219,7 @@ void RegExpMacroAssemblerMIPS::CheckPosition(int cp_offset, BranchOrBacktrack(on_outside_input, ge, current_input_offset(), Operand(-cp_offset * char_size())); } else { - __ ld(a1, MemOperand(frame_pointer(), kStringStartMinusOne)); + __ Ld(a1, MemOperand(frame_pointer(), kStringStartMinusOne)); __ Daddu(a0, current_input_offset(), Operand(cp_offset * char_size())); BranchOrBacktrack(on_outside_input, le, a0, Operand(a1)); } @@ -1276,13 +1273,13 @@ void RegExpMacroAssemblerMIPS::Push(Register source) { __ Daddu(backtrack_stackpointer(), backtrack_stackpointer(), Operand(-kIntSize)); - __ sw(source, MemOperand(backtrack_stackpointer())); + __ Sw(source, MemOperand(backtrack_stackpointer())); } void RegExpMacroAssemblerMIPS::Pop(Register target) { DCHECK(!target.is(backtrack_stackpointer())); - __ lw(target, MemOperand(backtrack_stackpointer())); + __ Lw(target, MemOperand(backtrack_stackpointer())); __ Daddu(backtrack_stackpointer(), backtrack_stackpointer(), kIntSize); } @@ -1292,7 +1289,7 @@ void RegExpMacroAssemblerMIPS::CheckPreemption() { ExternalReference stack_limit = ExternalReference::address_of_stack_limit(masm_->isolate()); __ li(a0, Operand(stack_limit)); - __ ld(a0, MemOperand(a0)); + __ Ld(a0, MemOperand(a0)); SafeCall(&check_preempt_label_, ls, sp, Operand(a0)); } @@ -1302,7 +1299,7 @@ void RegExpMacroAssemblerMIPS::CheckStackLimit() { ExternalReference::address_of_regexp_stack_limit(masm_->isolate()); __ li(a0, Operand(stack_limit)); - __ ld(a0, MemOperand(a0)); + __ Ld(a0, MemOperand(a0)); SafeCall(&stack_overflow_label_, ls, backtrack_stackpointer(), Operand(a0)); } @@ -1320,10 +1317,10 @@ void RegExpMacroAssemblerMIPS::LoadCurrentCharacterUnchecked(int cp_offset, DCHECK(characters == 1); __ Daddu(t1, end_of_input_address(), Operand(offset)); if (mode_ == LATIN1) { - __ lbu(current_character(), MemOperand(t1, 0)); + __ Lbu(current_character(), MemOperand(t1, 0)); } else { DCHECK(mode_ == UC16); - __ lhu(current_character(), MemOperand(t1, 0)); + __ Lhu(current_character(), MemOperand(t1, 0)); } } diff --git a/deps/v8/src/regexp/mips64/regexp-macro-assembler-mips64.h b/deps/v8/src/regexp/mips64/regexp-macro-assembler-mips64.h index df2c6c554f..722ca01ab5 100644 --- a/deps/v8/src/regexp/mips64/regexp-macro-assembler-mips64.h +++ b/deps/v8/src/regexp/mips64/regexp-macro-assembler-mips64.h @@ -107,9 +107,8 @@ class RegExpMacroAssemblerMIPS: public NativeRegExpMacroAssembler { // TODO(plind): This 9 - is 8 s-regs (s0..s7) plus fp. static const int kReturnAddress = kStoredRegisters + 9 * kPointerSize; - static const int kSecondaryReturnAddress = kReturnAddress + kPointerSize; // Stack frame header. - static const int kStackFrameHeader = kSecondaryReturnAddress; + static const int kStackFrameHeader = kReturnAddress; // Stack parameters placed by caller. static const int kIsolate = kStackFrameHeader + kPointerSize; diff --git a/deps/v8/src/regexp/ppc/regexp-macro-assembler-ppc.cc b/deps/v8/src/regexp/ppc/regexp-macro-assembler-ppc.cc index d6af025f2e..8f03bcdee8 100644 --- a/deps/v8/src/regexp/ppc/regexp-macro-assembler-ppc.cc +++ b/deps/v8/src/regexp/ppc/regexp-macro-assembler-ppc.cc @@ -38,8 +38,7 @@ namespace internal { * Each call to a public method should retain this convention. * * The stack will have the following structure: - * - fp[44] Isolate* isolate (address of the current isolate) - * - fp[40] secondary link/return address used by native call. + * - fp[40] Isolate* isolate (address of the current isolate) * - fp[36] lr save area (currently unused) * - fp[32] backchain (currently unused) * --- sp when called --- @@ -81,16 +80,13 @@ namespace internal { * Address start, * Address end, * int* capture_output_array, + * int num_capture_registers, * byte* stack_area_base, - * Address secondary_return_address, // Only used by native call. - * bool direct_call = false) + * bool direct_call = false, + * Isolate* isolate); * The call is performed by NativeRegExpMacroAssembler::Execute() * (in regexp-macro-assembler.cc) via the CALL_GENERATED_REGEXP_CODE macro * in ppc/simulator-ppc.h. - * When calling as a non-direct call (i.e., from C++ code), the return address - * area is overwritten with the LR register by the RegExp code. When doing a - * direct call from generated code, the return address is placed there by - * the calling code, as in a normal exit frame. */ #define __ ACCESS_MASM(masm_) @@ -334,11 +330,11 @@ void RegExpMacroAssemblerPPC::CheckNotBackReferenceIgnoreCase( __ sub(r4, r4, r25); } // Isolate. -#ifdef V8_I18N_SUPPORT +#ifdef V8_INTL_SUPPORT if (unicode) { __ li(r6, Operand::Zero()); } else // NOLINT -#endif // V8_I18N_SUPPORT +#endif // V8_INTL_SUPPORT { __ mov(r6, Operand(ExternalReference::isolate_address(isolate()))); } diff --git a/deps/v8/src/regexp/ppc/regexp-macro-assembler-ppc.h b/deps/v8/src/regexp/ppc/regexp-macro-assembler-ppc.h index 9151bf7b07..bd6da42851 100644 --- a/deps/v8/src/regexp/ppc/regexp-macro-assembler-ppc.h +++ b/deps/v8/src/regexp/ppc/regexp-macro-assembler-ppc.h @@ -96,9 +96,8 @@ class RegExpMacroAssemblerPPC : public NativeRegExpMacroAssembler { static const int kReturnAddress = kStoredRegisters + 7 * kPointerSize; static const int kCallerFrame = kReturnAddress + kPointerSize; // Stack parameters placed by caller. - static const int kSecondaryReturnAddress = + static const int kIsolate = kCallerFrame + kStackFrameExtraParamSlot * kPointerSize; - static const int kIsolate = kSecondaryReturnAddress + kPointerSize; // Below the frame pointer. // Register parameters stored by setup code. diff --git a/deps/v8/src/regexp/regexp-ast.h b/deps/v8/src/regexp/regexp-ast.h index fbe3ebfc72..7065ecd96c 100644 --- a/deps/v8/src/regexp/regexp-ast.h +++ b/deps/v8/src/regexp/regexp-ast.h @@ -291,9 +291,20 @@ class RegExpAssertion final : public RegExpTree { class RegExpCharacterClass final : public RegExpTree { public: - RegExpCharacterClass(ZoneList<CharacterRange>* ranges, bool is_negated) - : set_(ranges), is_negated_(is_negated) {} - explicit RegExpCharacterClass(uc16 type) : set_(type), is_negated_(false) {} + // NEGATED: The character class is negated and should match everything but + // the specified ranges. + // CONTAINS_SPLIT_SURROGATE: The character class contains part of a split + // surrogate and should not be unicode-desugared (crbug.com/641091). + enum Flag { + NEGATED = 1 << 0, + CONTAINS_SPLIT_SURROGATE = 1 << 1, + }; + typedef base::Flags<Flag> Flags; + + explicit RegExpCharacterClass(ZoneList<CharacterRange>* ranges, + Flags flags = Flags()) + : set_(ranges), flags_(flags) {} + explicit RegExpCharacterClass(uc16 type) : set_(type), flags_(0) {} void* Accept(RegExpVisitor* visitor, void* data) override; RegExpNode* ToNode(RegExpCompiler* compiler, RegExpNode* on_success) override; RegExpCharacterClass* AsCharacterClass() override; @@ -322,11 +333,14 @@ class RegExpCharacterClass final : public RegExpTree { // * : All characters, for advancing unanchored regexp uc16 standard_type() { return set_.standard_set_type(); } ZoneList<CharacterRange>* ranges(Zone* zone) { return set_.ranges(zone); } - bool is_negated() { return is_negated_; } + bool is_negated() const { return (flags_ & NEGATED) != 0; } + bool contains_split_surrogate() const { + return (flags_ & CONTAINS_SPLIT_SURROGATE) != 0; + } private: CharacterSet set_; - bool is_negated_; + const Flags flags_; }; diff --git a/deps/v8/src/regexp/regexp-macro-assembler.cc b/deps/v8/src/regexp/regexp-macro-assembler.cc index 2e3a8a2f76..681acc1325 100644 --- a/deps/v8/src/regexp/regexp-macro-assembler.cc +++ b/deps/v8/src/regexp/regexp-macro-assembler.cc @@ -9,9 +9,9 @@ #include "src/regexp/regexp-stack.h" #include "src/simulator.h" -#ifdef V8_I18N_SUPPORT +#ifdef V8_INTL_SUPPORT #include "unicode/uchar.h" -#endif // V8_I18N_SUPPORT +#endif // V8_INTL_SUPPORT namespace v8 { namespace internal { @@ -41,7 +41,7 @@ int RegExpMacroAssembler::CaseInsensitiveCompareUC16(Address byte_offset1, uc16* substring2 = reinterpret_cast<uc16*>(byte_offset2); size_t length = byte_length >> 1; -#ifdef V8_I18N_SUPPORT +#ifdef V8_INTL_SUPPORT if (isolate == nullptr) { for (size_t i = 0; i < length; i++) { uc32 c1 = substring1[i]; @@ -67,7 +67,7 @@ int RegExpMacroAssembler::CaseInsensitiveCompareUC16(Address byte_offset1, } return 1; } -#endif // V8_I18N_SUPPORT +#endif // V8_INTL_SUPPORT DCHECK_NOT_NULL(isolate); for (size_t i = 0; i < length; i++) { unibrow::uchar c1 = substring1[i]; @@ -170,15 +170,18 @@ int NativeRegExpMacroAssembler::CheckStackGuardState( bool is_one_byte = subject_handle->IsOneByteRepresentationUnderneath(); StackLimitCheck check(isolate); - if (check.JsHasOverflowed()) { + bool js_has_overflowed = check.JsHasOverflowed(); + + if (is_direct_call) { + // Direct calls from JavaScript can be interrupted in two ways: + // 1. A real stack overflow, in which case we let the caller throw the + // exception. + // 2. The stack guard was used to interrupt execution for another purpose, + // forcing the call through the runtime system. + return_value = js_has_overflowed ? EXCEPTION : RETRY; + } else if (js_has_overflowed) { isolate->StackOverflow(); return_value = EXCEPTION; - } else if (is_direct_call) { - // If not real stack overflow the stack guard was used to interrupt - // execution for another purpose. If this is a direct call from JavaScript - // retry the RegExp forcing the call through the runtime system. - // Currently the direct call cannot handle a GC. - return_value = RETRY; } else { Object* result = isolate->stack_guard()->HandleInterrupts(); if (result->IsException(isolate)) return_value = EXCEPTION; diff --git a/deps/v8/src/regexp/regexp-parser.cc b/deps/v8/src/regexp/regexp-parser.cc index 3d2261a919..20f023930f 100644 --- a/deps/v8/src/regexp/regexp-parser.cc +++ b/deps/v8/src/regexp/regexp-parser.cc @@ -12,9 +12,9 @@ #include "src/regexp/jsregexp.h" #include "src/utils.h" -#ifdef V8_I18N_SUPPORT +#ifdef V8_INTL_SUPPORT #include "unicode/uniset.h" -#endif // V8_I18N_SUPPORT +#endif // V8_INTL_SUPPORT namespace v8 { namespace internal { @@ -46,13 +46,13 @@ RegExpParser::RegExpParser(FlatStringReader* in, Handle<String>* error, Advance(); } -inline uc32 RegExpParser::ReadNext(bool update_position, ScanMode mode) { +template <bool update_position> +inline uc32 RegExpParser::ReadNext() { int position = next_pos_; uc32 c0 = in()->Get(position); position++; - const bool try_combine_surrogate_pairs = - (unicode() || mode == ScanMode::FORCE_COMBINE_SURROGATE_PAIRS); - if (try_combine_surrogate_pairs && position < in()->length() && + // Read the whole surrogate pair in case of unicode flag, if possible. + if (unicode() && position < in()->length() && unibrow::Utf16::IsLeadSurrogate(static_cast<uc16>(c0))) { uc16 c1 = in()->Get(position); if (unibrow::Utf16::IsTrailSurrogate(c1)) { @@ -67,13 +67,13 @@ inline uc32 RegExpParser::ReadNext(bool update_position, ScanMode mode) { uc32 RegExpParser::Next() { if (has_next()) { - return ReadNext(false, ScanMode::DEFAULT); + return ReadNext<false>(); } else { return kEndMarker; } } -void RegExpParser::Advance(ScanMode mode) { +void RegExpParser::Advance() { if (has_next()) { StackLimitCheck check(isolate()); if (check.HasOverflowed()) { @@ -83,7 +83,7 @@ void RegExpParser::Advance(ScanMode mode) { } else if (zone()->excess_allocation()) { ReportError(CStrVector("Regular expression too large")); } else { - current_ = ReadNext(true, mode); + current_ = ReadNext<true>(); } } else { current_ = kEndMarker; @@ -101,9 +101,9 @@ void RegExpParser::Reset(int pos) { Advance(); } -void RegExpParser::Advance(int dist, ScanMode mode) { +void RegExpParser::Advance(int dist) { next_pos_ += dist - 1; - Advance(mode); + Advance(); } @@ -283,8 +283,7 @@ RegExpTree* RegExpParser::ParseDisjunction() { CharacterRange::AddClassEscape('.', ranges, false, zone()); } - RegExpCharacterClass* cc = - new (zone()) RegExpCharacterClass(ranges, false); + RegExpCharacterClass* cc = new (zone()) RegExpCharacterClass(ranges); builder->AddCharacterClass(cc); break; } @@ -327,6 +326,7 @@ RegExpTree* RegExpParser::ParseDisjunction() { if (FLAG_harmony_regexp_named_captures) { has_named_captures_ = true; is_named_capture = true; + Advance(); break; } // Fall through. @@ -392,7 +392,7 @@ RegExpTree* RegExpParser::ParseDisjunction() { CharacterRange::AddClassEscape(c, ranges, unicode() && ignore_case(), zone()); RegExpCharacterClass* cc = - new (zone()) RegExpCharacterClass(ranges, false); + new (zone()) RegExpCharacterClass(ranges); builder->AddCharacterClass(cc); break; } @@ -408,7 +408,7 @@ RegExpTree* RegExpParser::ParseDisjunction() { return ReportError(CStrVector("Invalid property name")); } RegExpCharacterClass* cc = - new (zone()) RegExpCharacterClass(ranges, false); + new (zone()) RegExpCharacterClass(ranges); builder->AddCharacterClass(cc); } else { // With /u, no identity escapes except for syntax characters @@ -762,24 +762,18 @@ static void push_code_unit(ZoneVector<uc16>* v, uint32_t code_unit) { const ZoneVector<uc16>* RegExpParser::ParseCaptureGroupName() { DCHECK(FLAG_harmony_regexp_named_captures); - DCHECK_EQ(current(), '<'); ZoneVector<uc16>* name = new (zone()->New(sizeof(ZoneVector<uc16>))) ZoneVector<uc16>(zone()); - // Capture names can always contain surrogate pairs, and we need to scan - // accordingly. - const ScanMode scan_mode = ScanMode::FORCE_COMBINE_SURROGATE_PAIRS; - Advance(scan_mode); - bool at_start = true; while (true) { uc32 c = current(); - Advance(scan_mode); + Advance(); // Convert unicode escapes. if (c == '\\' && current() == 'u') { - Advance(scan_mode); + Advance(); if (!ParseUnicodeEscape(&c)) { ReportError(CStrVector("Invalid Unicode escape sequence")); return nullptr; @@ -850,6 +844,7 @@ bool RegExpParser::ParseNamedBackReference(RegExpBuilder* builder, return false; } + Advance(); const ZoneVector<uc16>* name = ParseCaptureGroupName(); if (name == nullptr) { return false; @@ -1110,7 +1105,7 @@ bool RegExpParser::ParseUnicodeEscape(uc32* value) { return result; } -#ifdef V8_I18N_SUPPORT +#ifdef V8_INTL_SUPPORT namespace { @@ -1203,6 +1198,70 @@ bool LookupSpecialPropertyValueName(const char* name, return true; } +// Explicitly whitelist supported binary properties. The spec forbids supporting +// properties outside of this set to ensure interoperability. +bool IsSupportedBinaryProperty(UProperty property) { + switch (property) { + case UCHAR_ALPHABETIC: + // 'Any' is not supported by ICU. See LookupSpecialPropertyValueName. + // 'ASCII' is not supported by ICU. See LookupSpecialPropertyValueName. + case UCHAR_ASCII_HEX_DIGIT: + // 'Assigned' is not supported by ICU. See LookupSpecialPropertyValueName. + case UCHAR_BIDI_CONTROL: + case UCHAR_BIDI_MIRRORED: + case UCHAR_CASE_IGNORABLE: + case UCHAR_CASED: + case UCHAR_CHANGES_WHEN_CASEFOLDED: + case UCHAR_CHANGES_WHEN_CASEMAPPED: + case UCHAR_CHANGES_WHEN_LOWERCASED: + case UCHAR_CHANGES_WHEN_NFKC_CASEFOLDED: + case UCHAR_CHANGES_WHEN_TITLECASED: + case UCHAR_CHANGES_WHEN_UPPERCASED: + case UCHAR_DASH: + case UCHAR_DEFAULT_IGNORABLE_CODE_POINT: + case UCHAR_DEPRECATED: + case UCHAR_DIACRITIC: + case UCHAR_EMOJI: + // TODO(yangguo): Uncomment this once we upgrade to ICU 60. + // See https://ssl.icu-project.org/trac/ticket/13062 + // case UCHAR_EMOJI_COMPONENT: + case UCHAR_EMOJI_MODIFIER_BASE: + case UCHAR_EMOJI_MODIFIER: + case UCHAR_EMOJI_PRESENTATION: + case UCHAR_EXTENDER: + case UCHAR_GRAPHEME_BASE: + case UCHAR_GRAPHEME_EXTEND: + case UCHAR_HEX_DIGIT: + case UCHAR_ID_CONTINUE: + case UCHAR_ID_START: + case UCHAR_IDEOGRAPHIC: + case UCHAR_IDS_BINARY_OPERATOR: + case UCHAR_IDS_TRINARY_OPERATOR: + case UCHAR_JOIN_CONTROL: + case UCHAR_LOGICAL_ORDER_EXCEPTION: + case UCHAR_LOWERCASE: + case UCHAR_MATH: + case UCHAR_NONCHARACTER_CODE_POINT: + case UCHAR_PATTERN_SYNTAX: + case UCHAR_PATTERN_WHITE_SPACE: + case UCHAR_QUOTATION_MARK: + case UCHAR_RADICAL: + case UCHAR_S_TERM: + case UCHAR_SOFT_DOTTED: + case UCHAR_TERMINAL_PUNCTUATION: + case UCHAR_UNIFIED_IDEOGRAPH: + case UCHAR_UPPERCASE: + case UCHAR_VARIATION_SELECTOR: + case UCHAR_WHITE_SPACE: + case UCHAR_XID_CONTINUE: + case UCHAR_XID_START: + return true; + default: + break; + } + return false; +} + } // anonymous namespace bool RegExpParser::ParsePropertyClass(ZoneList<CharacterRange>* result, @@ -1249,8 +1308,7 @@ bool RegExpParser::ParsePropertyClass(ZoneList<CharacterRange>* result, } // Then attempt to interpret as binary property name with value name 'Y'. UProperty property = u_getPropertyEnum(name); - if (property < UCHAR_BINARY_START) return false; - if (property >= UCHAR_BINARY_LIMIT) return false; + if (!IsSupportedBinaryProperty(property)) return false; if (!IsExactPropertyAlias(name, property)) return false; return LookupPropertyValueName(property, negate ? "N" : "Y", false, result, zone()); @@ -1273,14 +1331,14 @@ bool RegExpParser::ParsePropertyClass(ZoneList<CharacterRange>* result, } } -#else // V8_I18N_SUPPORT +#else // V8_INTL_SUPPORT bool RegExpParser::ParsePropertyClass(ZoneList<CharacterRange>* result, bool negate) { return false; } -#endif // V8_I18N_SUPPORT +#endif // V8_INTL_SUPPORT bool RegExpParser::ParseUnlimitedLengthHexNumber(int max_value, uc32* value) { uc32 x = 0; @@ -1548,7 +1606,9 @@ RegExpTree* RegExpParser::ParseCharacterClass() { ranges->Add(CharacterRange::Everything(), zone()); is_negated = !is_negated; } - return new (zone()) RegExpCharacterClass(ranges, is_negated); + RegExpCharacterClass::Flags flags; + if (is_negated) flags = RegExpCharacterClass::NEGATED; + return new (zone()) RegExpCharacterClass(ranges, flags); } @@ -1722,7 +1782,7 @@ void RegExpBuilder::AddCharacterClass(RegExpCharacterClass* cc) { void RegExpBuilder::AddCharacterClassForDesugaring(uc32 c) { AddTerm(new (zone()) RegExpCharacterClass( - CharacterRange::List(zone(), CharacterRange::Singleton(c)), false)); + CharacterRange::List(zone(), CharacterRange::Singleton(c)))); } @@ -1803,7 +1863,7 @@ bool RegExpBuilder::NeedsDesugaringForUnicode(RegExpCharacterClass* cc) { bool RegExpBuilder::NeedsDesugaringForIgnoreCase(uc32 c) { -#ifdef V8_I18N_SUPPORT +#ifdef V8_INTL_SUPPORT if (unicode() && ignore_case()) { icu::UnicodeSet set(c, c); set.closeOver(USET_CASE_INSENSITIVE); @@ -1812,7 +1872,7 @@ bool RegExpBuilder::NeedsDesugaringForIgnoreCase(uc32 c) { } // In the case where ICU is not included, we act as if the unicode flag is // not set, and do not desugar. -#endif // V8_I18N_SUPPORT +#endif // V8_INTL_SUPPORT return false; } diff --git a/deps/v8/src/regexp/regexp-parser.h b/deps/v8/src/regexp/regexp-parser.h index b34932fa00..a3ef22d8b7 100644 --- a/deps/v8/src/regexp/regexp-parser.h +++ b/deps/v8/src/regexp/regexp-parser.h @@ -184,18 +184,11 @@ class RegExpParser BASE_EMBEDDED { // can be reparsed. bool ParseBackReferenceIndex(int* index_out); - // The default behavior is to combine surrogate pairs in unicode mode and - // don't combine them otherwise (a quantifier after a surrogate pair would - // then apply only to the trailing surrogate). Forcing combination is required - // when parsing capture names since they can always legally contain surrogate - // pairs. - enum class ScanMode { DEFAULT, FORCE_COMBINE_SURROGATE_PAIRS }; - bool ParseClassProperty(ZoneList<CharacterRange>* result); CharacterRange ParseClassAtom(uc16* char_class); RegExpTree* ReportError(Vector<const char> message); - void Advance(ScanMode mode = ScanMode::DEFAULT); - void Advance(int dist, ScanMode mode = ScanMode::DEFAULT); + void Advance(); + void Advance(int dist); void Reset(int pos); // Reports whether the pattern might be used as a literal search string. @@ -311,7 +304,8 @@ class RegExpParser BASE_EMBEDDED { bool has_more() { return has_more_; } bool has_next() { return next_pos_ < in()->length(); } uc32 Next(); - uc32 ReadNext(bool update_position, ScanMode mode); + template <bool update_position> + uc32 ReadNext(); FlatStringReader* in() { return in_; } void ScanForCaptures(); diff --git a/deps/v8/src/regexp/s390/regexp-macro-assembler-s390.cc b/deps/v8/src/regexp/s390/regexp-macro-assembler-s390.cc index d927a110b9..e2fe913b36 100644 --- a/deps/v8/src/regexp/s390/regexp-macro-assembler-s390.cc +++ b/deps/v8/src/regexp/s390/regexp-macro-assembler-s390.cc @@ -39,8 +39,7 @@ namespace internal { * Each call to a public method should retain this convention. * * The stack will have the following structure: - * - fp[112] Isolate* isolate (address of the current isolate) - * - fp[108] secondary link/return address used by native call. + * - fp[108] Isolate* isolate (address of the current isolate) * - fp[104] direct_call (if 1, direct call from JavaScript code, * if 0, call through the runtime system). * - fp[100] stack_area_base (high end of the memory area to use as @@ -83,16 +82,13 @@ namespace internal { * Address start, * Address end, * int* capture_output_array, + * int num_capture_registers, * byte* stack_area_base, - * Address secondary_return_address, // Only used by native call. - * bool direct_call = false) + * bool direct_call = false, + * Isolate* isolate); * The call is performed by NativeRegExpMacroAssembler::Execute() * (in regexp-macro-assembler.cc) via the CALL_GENERATED_REGEXP_CODE macro * in s390/simulator-s390.h. - * When calling as a non-direct call (i.e., from C++ code), the return address - * area is overwritten with the LR register by the RegExp code. When doing a - * direct call from generated code, the return address is placed there by - * the calling code, as in a normal exit frame. */ #define __ ACCESS_MASM(masm_) @@ -324,11 +320,11 @@ void RegExpMacroAssemblerS390::CheckNotBackReferenceIgnoreCase( __ SubP(r3, r3, r6); } // Isolate. -#ifdef V8_I18N_SUPPORT +#ifdef V8_INTL_SUPPORT if (unicode) { __ LoadImmP(r5, Operand::Zero()); } else // NOLINT -#endif // V8_I18N_SUPPORT +#endif // V8_INTL_SUPPORT { __ mov(r5, Operand(ExternalReference::isolate_address(isolate()))); } diff --git a/deps/v8/src/regexp/s390/regexp-macro-assembler-s390.h b/deps/v8/src/regexp/s390/regexp-macro-assembler-s390.h index 755bc89066..b8a3bed5f1 100644 --- a/deps/v8/src/regexp/s390/regexp-macro-assembler-s390.h +++ b/deps/v8/src/regexp/s390/regexp-macro-assembler-s390.h @@ -97,8 +97,7 @@ class RegExpMacroAssemblerS390 : public NativeRegExpMacroAssembler { static const int kCaptureArraySize = kCallerFrame; static const int kStackAreaBase = kCallerFrame + kPointerSize; // kDirectCall again - static const int kSecondaryReturnAddress = kStackAreaBase + 2 * kPointerSize; - static const int kIsolate = kSecondaryReturnAddress + kPointerSize; + static const int kIsolate = kStackAreaBase + 2 * kPointerSize; // Below the frame pointer. // Register parameters stored by setup code. diff --git a/deps/v8/src/regexp/x64/regexp-macro-assembler-x64.cc b/deps/v8/src/regexp/x64/regexp-macro-assembler-x64.cc index 54dc3415e8..8c51233e29 100644 --- a/deps/v8/src/regexp/x64/regexp-macro-assembler-x64.cc +++ b/deps/v8/src/regexp/x64/regexp-macro-assembler-x64.cc @@ -85,9 +85,10 @@ namespace internal { * Address start, * Address end, * int* capture_output_array, - * bool at_start, + * int num_capture_registers, * byte* stack_area_base, - * bool direct_call) + * bool direct_call = false, + * Isolate* isolate); */ #define __ ACCESS_MASM((&masm_)) @@ -337,11 +338,11 @@ void RegExpMacroAssemblerX64::CheckNotBackReferenceIgnoreCase( // Set byte_length. __ movp(arg_reg_3, rbx); // Isolate. -#ifdef V8_I18N_SUPPORT +#ifdef V8_INTL_SUPPORT if (unicode) { __ movp(arg_reg_4, Immediate(0)); } else // NOLINT -#endif // V8_I18N_SUPPORT +#endif // V8_INTL_SUPPORT { __ LoadAddress(arg_reg_4, ExternalReference::isolate_address(isolate())); } diff --git a/deps/v8/src/regexp/x87/regexp-macro-assembler-x87.cc b/deps/v8/src/regexp/x87/regexp-macro-assembler-x87.cc index 4a1c3a889a..622a36e021 100644 --- a/deps/v8/src/regexp/x87/regexp-macro-assembler-x87.cc +++ b/deps/v8/src/regexp/x87/regexp-macro-assembler-x87.cc @@ -69,9 +69,10 @@ namespace internal { * Address start, * Address end, * int* capture_output_array, - * bool at_start, + * int num_capture_registers, * byte* stack_area_base, - * bool direct_call) + * bool direct_call = false, + * Isolate* isolate); */ #define __ ACCESS_MASM(masm_) @@ -297,11 +298,11 @@ void RegExpMacroAssemblerX87::CheckNotBackReferenceIgnoreCase( // Isolate* isolate or 0 if unicode flag. // Set isolate. -#ifdef V8_I18N_SUPPORT +#ifdef V8_INTL_SUPPORT if (unicode) { __ mov(Operand(esp, 3 * kPointerSize), Immediate(0)); } else // NOLINT -#endif // V8_I18N_SUPPORT +#endif // V8_INTL_SUPPORT { __ mov(Operand(esp, 3 * kPointerSize), Immediate(ExternalReference::isolate_address(isolate()))); |