Revision: 2814 Author: [email protected] Date: Wed Sep 2 02:10:49 2009 Log: ARM RegExp fix bug 432.
Review URL: http://codereview.chromium.org/186005 http://code.google.com/p/v8/source/detail?r=2814 Modified: /branches/bleeding_edge/src/arm/regexp-macro-assembler-arm.cc /branches/bleeding_edge/test/cctest/cctest.status ======================================= --- /branches/bleeding_edge/src/arm/regexp-macro-assembler-arm.cc Wed Sep 2 00:34:51 2009 +++ /branches/bleeding_edge/src/arm/regexp-macro-assembler-arm.cc Wed Sep 2 02:10:49 2009 @@ -216,25 +216,29 @@ int cp_offset, Label* on_failure, bool check_end_of_string) { - int byte_length = str.length() * char_size(); - int byte_offset = cp_offset * char_size(); - if (check_end_of_string) { - // Check that there are at least str.length() characters left in the input. - __ cmp(end_of_input_address(), Operand(-(byte_offset + byte_length))); - BranchOrBacktrack(gt, on_failure); - } - if (on_failure == NULL) { - // Instead of inlining a backtrack, (re)use the global backtrack target. + // Instead of inlining a backtrack for each test, (re)use the global + // backtrack target. on_failure = &backtrack_label_; } + + if (check_end_of_string) { + // Is last character of required match inside string. + CheckPosition(cp_offset + str.length() - 1, on_failure); + } __ add(r0, end_of_input_address(), Operand(current_input_offset())); + if (cp_offset != 0) { + int byte_offset = cp_offset * char_size(); + __ add(r0, r0, Operand(byte_offset)); + } + + // r0 : Address of characters to match against str. int stored_high_byte = 0; for (int i = 0; i < str.length(); i++) { if (mode_ == ASCII) { __ ldrb(r1, MemOperand(r0, char_size(), PostIndex)); - // str[i] is known to be an ASCII character. + ASSERT(str[i] <= String::kMaxAsciiCharCode); __ cmp(r1, Operand(str[i])); } else { __ ldrh(r1, MemOperand(r0, char_size(), PostIndex)); ======================================= --- /branches/bleeding_edge/test/cctest/cctest.status Mon Aug 31 09:24:44 2009 +++ /branches/bleeding_edge/test/cctest/cctest.status Wed Sep 2 02:10:49 2009 @@ -50,10 +50,6 @@ test-api/OutOfMemory: SKIP test-api/OutOfMemoryNested: SKIP -# BUG(432): Fail on ARM hardware. -test-regexp/MacroAssemblerNativeSimple: PASS || FAIL -test-regexp/MacroAssemblerNativeSimpleUC16: PASS || FAIL - # BUG(355): Test crashes on ARM. test-log/ProfLazyMode: SKIP --~--~---------~--~----~------------~-------~--~----~ v8-dev mailing list [email protected] http://groups.google.com/group/v8-dev -~----------~----~----~----~------~----~------~--~---
