Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(301)

Unified Diff: test/cctest/test-regexp.cc

Issue 165443: X64: Implement RegExp natively. (Closed)
Patch Set: Addressed review comments. Created 11 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: test/cctest/test-regexp.cc
diff --git a/test/cctest/test-regexp.cc b/test/cctest/test-regexp.cc
index 8d8326ccad1544e4761ac4790aa4020710e18dff..0a8cea7f28db827034f01b59334122d0b16c63cf 100644
--- a/test/cctest/test-regexp.cc
+++ b/test/cctest/test-regexp.cc
@@ -42,7 +42,8 @@
#include "arm/regexp-macro-assembler-arm.h"
#endif
#ifdef V8_TARGET_ARCH_X64
-// No X64-implementation yet.
+#include "x64/macro-assembler-x64.h"
+#include "x64/regexp-macro-assembler-x64.h"
#endif
#ifdef V8_TARGET_ARCH_IA32
#include "ia32/macro-assembler-ia32.h"
@@ -662,12 +663,19 @@ TEST(MacroAssembler) {
CHECK_EQ(42, captures[0]);
}
-#ifdef V8_TARGET_ARCH_IA32 // IA32 Native Regexp only tests.
#ifdef V8_NATIVE_REGEXP
+#ifdef V8_TARGET_ARCH_IA32
+typedef RegExpMacroAssemblerIA32 ArchRegExpMacroAssembler;
+#endif
+#ifdef V8_TARGET_ARCH_X64
+typedef RegExpMacroAssemblerX64 ArchRegExpMacroAssembler;
+#endif
+
class ContextInitializer {
public:
- ContextInitializer() : env_(), scope_(), stack_guard_() {
+ ContextInitializer()
+ : env_(), scope_(), zone_(DELETE_ON_EXIT), stack_guard_() {
env_ = v8::Context::New();
env_->Enter();
}
@@ -678,18 +686,19 @@ class ContextInitializer {
private:
v8::Persistent<v8::Context> env_;
v8::HandleScope scope_;
+ v8::internal::ZoneScope zone_;
v8::internal::StackGuard stack_guard_;
};
-static RegExpMacroAssemblerIA32::Result ExecuteIA32(Code* code,
- String* input,
- int start_offset,
- const byte* input_start,
- const byte* input_end,
- int* captures,
- bool at_start) {
- return RegExpMacroAssemblerIA32::Execute(
+static ArchRegExpMacroAssembler::Result Execute(Code* code,
+ String* input,
+ int start_offset,
+ const byte* input_start,
+ const byte* input_end,
+ int* captures,
+ bool at_start) {
+ return NativeRegExpMacroAssembler::Execute(
code,
input,
start_offset,
@@ -700,11 +709,11 @@ static RegExpMacroAssemblerIA32::Result ExecuteIA32(Code* code,
}
-TEST(MacroAssemblerIA32Success) {
+TEST(MacroAssemblerNativeSuccess) {
v8::V8::Initialize();
ContextInitializer initializer;
- RegExpMacroAssemblerIA32 m(RegExpMacroAssemblerIA32::ASCII, 4);
+ ArchRegExpMacroAssembler m(NativeRegExpMacroAssembler::ASCII, 4);
m.Succeed();
@@ -718,16 +727,16 @@ TEST(MacroAssemblerIA32Success) {
const byte* start_adr =
reinterpret_cast<const byte*>(seq_input->GetCharsAddress());
- RegExpMacroAssemblerIA32::Result result =
- ExecuteIA32(*code,
- *input,
- 0,
- start_adr,
- start_adr + seq_input->length(),
- captures,
- true);
+ NativeRegExpMacroAssembler::Result result =
+ Execute(*code,
+ *input,
+ 0,
+ start_adr,
+ start_adr + seq_input->length(),
+ captures,
+ true);
- CHECK_EQ(RegExpMacroAssemblerIA32::SUCCESS, result);
+ CHECK_EQ(NativeRegExpMacroAssembler::SUCCESS, result);
CHECK_EQ(-1, captures[0]);
CHECK_EQ(-1, captures[1]);
CHECK_EQ(-1, captures[2]);
@@ -735,11 +744,11 @@ TEST(MacroAssemblerIA32Success) {
}
-TEST(MacroAssemblerIA32Simple) {
+TEST(MacroAssemblerNativeSimple) {
v8::V8::Initialize();
ContextInitializer initializer;
- RegExpMacroAssemblerIA32 m(RegExpMacroAssemblerIA32::ASCII, 4);
+ ArchRegExpMacroAssembler m(NativeRegExpMacroAssembler::ASCII, 4);
uc16 foo_chars[3] = {'f', 'o', 'o'};
Vector<const uc16> foo(foo_chars, 3);
@@ -762,16 +771,16 @@ TEST(MacroAssemblerIA32Simple) {
Handle<SeqAsciiString> seq_input = Handle<SeqAsciiString>::cast(input);
Address start_adr = seq_input->GetCharsAddress();
- RegExpMacroAssemblerIA32::Result result =
- ExecuteIA32(*code,
- *input,
- 0,
- start_adr,
- start_adr + input->length(),
- captures,
- true);
+ NativeRegExpMacroAssembler::Result result =
+ Execute(*code,
+ *input,
+ 0,
+ start_adr,
+ start_adr + input->length(),
+ captures,
+ true);
- CHECK_EQ(RegExpMacroAssemblerIA32::SUCCESS, result);
+ CHECK_EQ(NativeRegExpMacroAssembler::SUCCESS, result);
CHECK_EQ(0, captures[0]);
CHECK_EQ(3, captures[1]);
CHECK_EQ(-1, captures[2]);
@@ -781,23 +790,23 @@ TEST(MacroAssemblerIA32Simple) {
seq_input = Handle<SeqAsciiString>::cast(input);
start_adr = seq_input->GetCharsAddress();
- result = ExecuteIA32(*code,
- *input,
- 0,
- start_adr,
- start_adr + input->length(),
- captures,
- true);
+ result = Execute(*code,
+ *input,
+ 0,
+ start_adr,
+ start_adr + input->length(),
+ captures,
+ true);
- CHECK_EQ(RegExpMacroAssemblerIA32::FAILURE, result);
+ CHECK_EQ(NativeRegExpMacroAssembler::FAILURE, result);
}
-TEST(MacroAssemblerIA32SimpleUC16) {
+TEST(MacroAssemblerNativeSimpleUC16) {
v8::V8::Initialize();
ContextInitializer initializer;
- RegExpMacroAssemblerIA32 m(RegExpMacroAssemblerIA32::UC16, 4);
+ ArchRegExpMacroAssembler m(NativeRegExpMacroAssembler::UC16, 4);
uc16 foo_chars[3] = {'f', 'o', 'o'};
Vector<const uc16> foo(foo_chars, 3);
@@ -822,16 +831,16 @@ TEST(MacroAssemblerIA32SimpleUC16) {
Handle<SeqTwoByteString> seq_input = Handle<SeqTwoByteString>::cast(input);
Address start_adr = seq_input->GetCharsAddress();
- RegExpMacroAssemblerIA32::Result result =
- ExecuteIA32(*code,
- *input,
- 0,
- start_adr,
- start_adr + input->length(),
- captures,
- true);
+ NativeRegExpMacroAssembler::Result result =
+ Execute(*code,
+ *input,
+ 0,
+ start_adr,
+ start_adr + input->length(),
+ captures,
+ true);
- CHECK_EQ(RegExpMacroAssemblerIA32::SUCCESS, result);
+ CHECK_EQ(NativeRegExpMacroAssembler::SUCCESS, result);
CHECK_EQ(0, captures[0]);
CHECK_EQ(3, captures[1]);
CHECK_EQ(-1, captures[2]);
@@ -842,23 +851,23 @@ TEST(MacroAssemblerIA32SimpleUC16) {
seq_input = Handle<SeqTwoByteString>::cast(input);
start_adr = seq_input->GetCharsAddress();
- result = ExecuteIA32(*code,
- *input,
- 0,
- start_adr,
- start_adr + input->length() * 2,
- captures,
- true);
+ result = Execute(*code,
+ *input,
+ 0,
+ start_adr,
+ start_adr + input->length() * 2,
+ captures,
+ true);
- CHECK_EQ(RegExpMacroAssemblerIA32::FAILURE, result);
+ CHECK_EQ(NativeRegExpMacroAssembler::FAILURE, result);
}
-TEST(MacroAssemblerIA32Backtrack) {
+TEST(MacroAssemblerNativeBacktrack) {
v8::V8::Initialize();
ContextInitializer initializer;
- RegExpMacroAssemblerIA32 m(RegExpMacroAssemblerIA32::ASCII, 0);
+ ArchRegExpMacroAssembler m(NativeRegExpMacroAssembler::ASCII, 0);
Label fail;
Label backtrack;
@@ -879,24 +888,24 @@ TEST(MacroAssemblerIA32Backtrack) {
Handle<SeqAsciiString> seq_input = Handle<SeqAsciiString>::cast(input);
Address start_adr = seq_input->GetCharsAddress();
- RegExpMacroAssemblerIA32::Result result =
- ExecuteIA32(*code,
- *input,
- 0,
- start_adr,
- start_adr + input->length(),
- NULL,
- true);
+ NativeRegExpMacroAssembler::Result result =
+ Execute(*code,
+ *input,
+ 0,
+ start_adr,
+ start_adr + input->length(),
+ NULL,
+ true);
- CHECK_EQ(RegExpMacroAssemblerIA32::FAILURE, result);
+ CHECK_EQ(NativeRegExpMacroAssembler::FAILURE, result);
}
-TEST(MacroAssemblerIA32BackReferenceASCII) {
+TEST(MacroAssemblerNativeBackReferenceASCII) {
v8::V8::Initialize();
ContextInitializer initializer;
- RegExpMacroAssemblerIA32 m(RegExpMacroAssemblerIA32::ASCII, 3);
+ ArchRegExpMacroAssembler m(NativeRegExpMacroAssembler::ASCII, 3);
m.WriteCurrentPositionToRegister(0, 0);
m.AdvanceCurrentPosition(2);
@@ -922,27 +931,27 @@ TEST(MacroAssemblerIA32BackReferenceASCII) {
Address start_adr = seq_input->GetCharsAddress();
int output[3];
- RegExpMacroAssemblerIA32::Result result =
- ExecuteIA32(*code,
- *input,
- 0,
- start_adr,
- start_adr + input->length(),
- output,
- true);
-
- CHECK_EQ(RegExpMacroAssemblerIA32::SUCCESS, result);
+ NativeRegExpMacroAssembler::Result result =
+ Execute(*code,
+ *input,
+ 0,
+ start_adr,
+ start_adr + input->length(),
+ output,
+ true);
+
+ CHECK_EQ(NativeRegExpMacroAssembler::SUCCESS, result);
CHECK_EQ(0, output[0]);
CHECK_EQ(2, output[1]);
CHECK_EQ(6, output[2]);
}
-TEST(MacroAssemblerIA32BackReferenceUC16) {
+TEST(MacroAssemblerNativeBackReferenceUC16) {
v8::V8::Initialize();
ContextInitializer initializer;
- RegExpMacroAssemblerIA32 m(RegExpMacroAssemblerIA32::UC16, 3);
+ ArchRegExpMacroAssembler m(NativeRegExpMacroAssembler::UC16, 3);
m.WriteCurrentPositionToRegister(0, 0);
m.AdvanceCurrentPosition(2);
@@ -970,8 +979,8 @@ TEST(MacroAssemblerIA32BackReferenceUC16) {
Address start_adr = seq_input->GetCharsAddress();
int output[3];
- RegExpMacroAssemblerIA32::Result result =
- ExecuteIA32(*code,
+ NativeRegExpMacroAssembler::Result result =
+ Execute(*code,
*input,
0,
start_adr,
@@ -979,7 +988,7 @@ TEST(MacroAssemblerIA32BackReferenceUC16) {
output,
true);
- CHECK_EQ(RegExpMacroAssemblerIA32::SUCCESS, result);
+ CHECK_EQ(NativeRegExpMacroAssembler::SUCCESS, result);
CHECK_EQ(0, output[0]);
CHECK_EQ(2, output[1]);
CHECK_EQ(6, output[2]);
@@ -987,11 +996,11 @@ TEST(MacroAssemblerIA32BackReferenceUC16) {
-TEST(MacroAssemblerIA32AtStart) {
+TEST(MacroAssemblernativeAtStart) {
v8::V8::Initialize();
ContextInitializer initializer;
- RegExpMacroAssemblerIA32 m(RegExpMacroAssemblerIA32::ASCII, 0);
+ ArchRegExpMacroAssembler m(NativeRegExpMacroAssembler::ASCII, 0);
Label not_at_start, newline, fail;
m.CheckNotAtStart(&not_at_start);
@@ -1022,34 +1031,34 @@ TEST(MacroAssemblerIA32AtStart) {
Handle<SeqAsciiString> seq_input = Handle<SeqAsciiString>::cast(input);
Address start_adr = seq_input->GetCharsAddress();
- RegExpMacroAssemblerIA32::Result result =
- ExecuteIA32(*code,
- *input,
- 0,
- start_adr,
- start_adr + input->length(),
- NULL,
- true);
-
- CHECK_EQ(RegExpMacroAssemblerIA32::SUCCESS, result);
-
- result = ExecuteIA32(*code,
- *input,
- 3,
- start_adr + 3,
- start_adr + input->length(),
- NULL,
- false);
-
- CHECK_EQ(RegExpMacroAssemblerIA32::SUCCESS, result);
+ NativeRegExpMacroAssembler::Result result =
+ Execute(*code,
+ *input,
+ 0,
+ start_adr,
+ start_adr + input->length(),
+ NULL,
+ true);
+
+ CHECK_EQ(NativeRegExpMacroAssembler::SUCCESS, result);
+
+ result = Execute(*code,
+ *input,
+ 3,
+ start_adr + 3,
+ start_adr + input->length(),
+ NULL,
+ false);
+
+ CHECK_EQ(NativeRegExpMacroAssembler::SUCCESS, result);
}
-TEST(MacroAssemblerIA32BackRefNoCase) {
+TEST(MacroAssemblerNativeBackRefNoCase) {
v8::V8::Initialize();
ContextInitializer initializer;
- RegExpMacroAssemblerIA32 m(RegExpMacroAssemblerIA32::ASCII, 4);
+ ArchRegExpMacroAssembler m(NativeRegExpMacroAssembler::ASCII, 4);
Label fail, succ;
@@ -1084,16 +1093,16 @@ TEST(MacroAssemblerIA32BackRefNoCase) {
Address start_adr = seq_input->GetCharsAddress();
int output[4];
- RegExpMacroAssemblerIA32::Result result =
- ExecuteIA32(*code,
- *input,
- 0,
- start_adr,
- start_adr + input->length(),
- output,
- true);
-
- CHECK_EQ(RegExpMacroAssemblerIA32::SUCCESS, result);
+ NativeRegExpMacroAssembler::Result result =
+ Execute(*code,
+ *input,
+ 0,
+ start_adr,
+ start_adr + input->length(),
+ output,
+ true);
+
+ CHECK_EQ(NativeRegExpMacroAssembler::SUCCESS, result);
CHECK_EQ(0, output[0]);
CHECK_EQ(12, output[1]);
CHECK_EQ(0, output[2]);
@@ -1102,11 +1111,11 @@ TEST(MacroAssemblerIA32BackRefNoCase) {
-TEST(MacroAssemblerIA32Registers) {
+TEST(MacroAssemblerNativeRegisters) {
v8::V8::Initialize();
ContextInitializer initializer;
- RegExpMacroAssemblerIA32 m(RegExpMacroAssemblerIA32::ASCII, 5);
+ ArchRegExpMacroAssembler m(NativeRegExpMacroAssembler::ASCII, 5);
uc16 foo_chars[3] = {'f', 'o', 'o'};
Vector<const uc16> foo(foo_chars, 3);
@@ -1184,8 +1193,8 @@ TEST(MacroAssemblerIA32Registers) {
Address start_adr = seq_input->GetCharsAddress();
int output[5];
- RegExpMacroAssemblerIA32::Result result =
- ExecuteIA32(*code,
+ NativeRegExpMacroAssembler::Result result =
+ Execute(*code,
*input,
0,
start_adr,
@@ -1193,7 +1202,7 @@ TEST(MacroAssemblerIA32Registers) {
output,
true);
- CHECK_EQ(RegExpMacroAssemblerIA32::SUCCESS, result);
+ CHECK_EQ(NativeRegExpMacroAssembler::SUCCESS, result);
CHECK_EQ(0, output[0]);
CHECK_EQ(3, output[1]);
CHECK_EQ(6, output[2]);
@@ -1202,11 +1211,11 @@ TEST(MacroAssemblerIA32Registers) {
}
-TEST(MacroAssemblerIA32StackOverflow) {
+TEST(MacroAssemblerStackOverflow) {
v8::V8::Initialize();
ContextInitializer initializer;
- RegExpMacroAssemblerIA32 m(RegExpMacroAssemblerIA32::ASCII, 0);
+ ArchRegExpMacroAssembler m(NativeRegExpMacroAssembler::ASCII, 0);
Label loop;
m.Bind(&loop);
@@ -1224,26 +1233,26 @@ TEST(MacroAssemblerIA32StackOverflow) {
Handle<SeqAsciiString> seq_input = Handle<SeqAsciiString>::cast(input);
Address start_adr = seq_input->GetCharsAddress();
- RegExpMacroAssemblerIA32::Result result =
- ExecuteIA32(*code,
- *input,
- 0,
- start_adr,
- start_adr + input->length(),
- NULL,
- true);
+ NativeRegExpMacroAssembler::Result result =
+ Execute(*code,
+ *input,
+ 0,
+ start_adr,
+ start_adr + input->length(),
+ NULL,
+ true);
- CHECK_EQ(RegExpMacroAssemblerIA32::EXCEPTION, result);
+ CHECK_EQ(NativeRegExpMacroAssembler::EXCEPTION, result);
CHECK(Top::has_pending_exception());
Top::clear_pending_exception();
}
-TEST(MacroAssemblerIA32LotsOfRegisters) {
+TEST(MacroAssemblerNativeLotsOfRegisters) {
v8::V8::Initialize();
ContextInitializer initializer;
- RegExpMacroAssemblerIA32 m(RegExpMacroAssemblerIA32::ASCII, 2);
+ ArchRegExpMacroAssembler m(NativeRegExpMacroAssembler::ASCII, 2);
// At least 2048, to ensure the allocated space for registers
// span one full page.
@@ -1270,16 +1279,16 @@ TEST(MacroAssemblerIA32LotsOfRegisters) {
Address start_adr = seq_input->GetCharsAddress();
int captures[2];
- RegExpMacroAssemblerIA32::Result result =
- ExecuteIA32(*code,
- *input,
- 0,
- start_adr,
- start_adr + input->length(),
- captures,
- true);
-
- CHECK_EQ(RegExpMacroAssemblerIA32::SUCCESS, result);
+ NativeRegExpMacroAssembler::Result result =
+ Execute(*code,
+ *input,
+ 0,
+ start_adr,
+ start_adr + input->length(),
+ captures,
+ true);
+
+ CHECK_EQ(NativeRegExpMacroAssembler::SUCCESS, result);
CHECK_EQ(0, captures[0]);
CHECK_EQ(42, captures[1]);
@@ -1287,7 +1296,6 @@ TEST(MacroAssemblerIA32LotsOfRegisters) {
}
#endif // V8_REGEXP_NATIVE
-#endif // V8_TARGET_ARCH_IA32
TEST(AddInverseToTable) {

Powered by Google App Engine
This is Rietveld 408576698