Chromium Code Reviews| Index: src/mips/regexp-macro-assembler-mips.cc |
| diff --git a/src/mips/regexp-macro-assembler-mips.cc b/src/mips/regexp-macro-assembler-mips.cc |
| index ae4da936ce74342c3e7b00a7c8d7d4397398abfd..9634dfcd2fac72a56a3e878454c94ae1aa2cc379 100644 |
| --- a/src/mips/regexp-macro-assembler-mips.cc |
| +++ b/src/mips/regexp-macro-assembler-mips.cc |
| @@ -482,6 +482,44 @@ void RegExpMacroAssemblerMIPS::CheckNotCharacterAfterMinusAnd( |
| } |
| +void RegExpMacroAssemblerMIPS::CheckCharacterInRange( |
| + uc16 from, |
| + uc16 to, |
| + Label* on_in_range) { |
| + __ Subu(a0, current_character(), Operand(from)); |
| + // Unsigned lower-or-same condition. |
| + BranchOrBacktrack(on_in_range, ls, a0, Operand(to - from)); |
| +} |
| + |
| + |
| +void RegExpMacroAssemblerMIPS::CheckCharacterNotInRange( |
| + uc16 from, |
| + uc16 to, |
| + Label* on_not_in_range) { |
| + __ Subu(a0, current_character(), Operand(from)); |
| + // Unsigned higher condition. |
| + BranchOrBacktrack(on_not_in_range, hi, a0, Operand(to - from)); |
| +} |
| + |
| + |
| +void RegExpMacroAssemblerMIPS::CheckBitInTable( |
| + Handle<ByteArray> table, |
| + Label* on_bit_set) { |
| + __ li(a0, Operand(table)); |
| + if (mode_ != ASCII || kTableMask != String::kMaxAsciiCharCode) { |
| + __ And(a1, current_character(), Operand(kTableSize - 1)); |
| + __ Addu(a1, a1, Operand(ByteArray::kHeaderSize - kHeapObjectTag)); |
| + } else { |
| + __ Addu(a1, |
| + current_character(), |
| + Operand(ByteArray::kHeaderSize - kHeapObjectTag)); |
| + } |
| + __ Addu(a0, a0, a1); |
| + __ lbu(a0, MemOperand(a0)); |
|
Erik Corry
2012/03/31 20:10:15
Since lbu supports memory-displacement operation s
kalmard
2012/04/02 09:43:28
Done.
|
| + BranchOrBacktrack(on_bit_set, ne, a0, Operand(zero_reg)); |
| +} |
| + |
| + |
| bool RegExpMacroAssemblerMIPS::CheckSpecialCharacterClass(uc16 type, |
| Label* on_no_match) { |
| // Range checks (c in min..max) are generally implemented by an unsigned |