X87: [regexp] implement case-insensitive unicode regexps.
port a2baaaac93
(r33538)
original commit message:
BUG=
Review URL: https://codereview.chromium.org/1644863002
Cr-Commit-Position: refs/heads/master@{#33568}
This commit is contained in:
parent
1aac4c383c
commit
2d89015a4c
@ -187,9 +187,8 @@ void RegExpMacroAssemblerX87::CheckGreedyLoop(Label* on_equal) {
|
||||
__ bind(&fallthrough);
|
||||
}
|
||||
|
||||
|
||||
void RegExpMacroAssemblerX87::CheckNotBackReferenceIgnoreCase(
|
||||
int start_reg, bool read_backward, Label* on_no_match) {
|
||||
int start_reg, bool read_backward, bool unicode, Label* on_no_match) {
|
||||
Label fallthrough;
|
||||
__ mov(edx, register_location(start_reg)); // Index of start of capture
|
||||
__ mov(ebx, register_location(start_reg + 1)); // Index of end of capture
|
||||
@ -296,11 +295,18 @@ void RegExpMacroAssemblerX87::CheckNotBackReferenceIgnoreCase(
|
||||
// Address byte_offset1 - Address captured substring's start.
|
||||
// Address byte_offset2 - Address of current character position.
|
||||
// size_t byte_length - length of capture in bytes(!)
|
||||
// Isolate* isolate
|
||||
// Isolate* isolate or 0 if unicode flag.
|
||||
|
||||
// Set isolate.
|
||||
__ mov(Operand(esp, 3 * kPointerSize),
|
||||
Immediate(ExternalReference::isolate_address(isolate())));
|
||||
#ifdef V8_I18N_SUPPORT
|
||||
if (unicode) {
|
||||
__ mov(Operand(esp, 3 * kPointerSize), Immediate(0));
|
||||
} else // NOLINT
|
||||
#endif // V8_I18N_SUPPORT
|
||||
{
|
||||
__ mov(Operand(esp, 3 * kPointerSize),
|
||||
Immediate(ExternalReference::isolate_address(isolate())));
|
||||
}
|
||||
// Set byte_length.
|
||||
__ mov(Operand(esp, 2 * kPointerSize), ebx);
|
||||
// Set byte_offset2.
|
||||
|
@ -37,7 +37,7 @@ class RegExpMacroAssemblerX87: public NativeRegExpMacroAssembler {
|
||||
virtual void CheckNotBackReference(int start_reg, bool read_backward,
|
||||
Label* on_no_match);
|
||||
virtual void CheckNotBackReferenceIgnoreCase(int start_reg,
|
||||
bool read_backward,
|
||||
bool read_backward, bool unicode,
|
||||
Label* on_no_match);
|
||||
virtual void CheckNotCharacter(uint32_t c, Label* on_not_equal);
|
||||
virtual void CheckNotCharacterAfterAnd(uint32_t c,
|
||||
|
Loading…
Reference in New Issue
Block a user