| Index: test/cctest/test-hashing.cc
|
| diff --git a/test/cctest/test-hashing.cc b/test/cctest/test-hashing.cc
|
| index 9857f9d88a248c6756dfe8713783ef046034534b..692861cfe4dcd090019b96e5a19febedebb5d421 100644
|
| --- a/test/cctest/test-hashing.cc
|
| +++ b/test/cctest/test-hashing.cc
|
| @@ -47,94 +47,6 @@ typedef uint32_t (*HASH_FUNCTION)();
|
| #define __ masm->
|
|
|
|
|
| -void generate(MacroAssembler* masm, i::Vector<const uint8_t> string) {
|
| - // GenerateHashInit takes the first character as an argument so it can't
|
| - // handle the zero length string.
|
| - DCHECK(string.length() > 0);
|
| -#if V8_TARGET_ARCH_IA32 || V8_TARGET_ARCH_X87
|
| - __ push(ebx);
|
| - __ push(ecx);
|
| - __ mov(eax, Immediate(0));
|
| - __ mov(ebx, Immediate(string.at(0)));
|
| - StringHelper::GenerateHashInit(masm, eax, ebx, ecx);
|
| - for (int i = 1; i < string.length(); i++) {
|
| - __ mov(ebx, Immediate(string.at(i)));
|
| - StringHelper::GenerateHashAddCharacter(masm, eax, ebx, ecx);
|
| - }
|
| - StringHelper::GenerateHashGetHash(masm, eax, ecx);
|
| - __ pop(ecx);
|
| - __ pop(ebx);
|
| - __ Ret();
|
| -#elif V8_TARGET_ARCH_X64
|
| - __ pushq(kRootRegister);
|
| - __ InitializeRootRegister();
|
| - __ pushq(rbx);
|
| - __ pushq(rcx);
|
| - __ movp(rax, Immediate(0));
|
| - __ movp(rbx, Immediate(string.at(0)));
|
| - StringHelper::GenerateHashInit(masm, rax, rbx, rcx);
|
| - for (int i = 1; i < string.length(); i++) {
|
| - __ movp(rbx, Immediate(string.at(i)));
|
| - StringHelper::GenerateHashAddCharacter(masm, rax, rbx, rcx);
|
| - }
|
| - StringHelper::GenerateHashGetHash(masm, rax, rcx);
|
| - __ popq(rcx);
|
| - __ popq(rbx);
|
| - __ popq(kRootRegister);
|
| - __ Ret();
|
| -#elif V8_TARGET_ARCH_ARM
|
| - __ push(kRootRegister);
|
| - __ InitializeRootRegister();
|
| -
|
| - __ mov(r0, Operand(0));
|
| - __ mov(ip, Operand(string.at(0)));
|
| - StringHelper::GenerateHashInit(masm, r0, ip);
|
| - for (int i = 1; i < string.length(); i++) {
|
| - __ mov(ip, Operand(string.at(i)));
|
| - StringHelper::GenerateHashAddCharacter(masm, r0, ip);
|
| - }
|
| - StringHelper::GenerateHashGetHash(masm, r0);
|
| - __ pop(kRootRegister);
|
| - __ mov(pc, Operand(lr));
|
| -#elif V8_TARGET_ARCH_ARM64
|
| - // The ARM64 assembler usually uses jssp (x28) as a stack pointer, but only
|
| - // csp is initialized by the calling (C++) code.
|
| - Register old_stack_pointer = __ StackPointer();
|
| - __ SetStackPointer(csp);
|
| - __ Push(root, xzr);
|
| - __ InitializeRootRegister();
|
| - __ Mov(x0, 0);
|
| - __ Mov(x10, Operand(string.at(0)));
|
| - StringHelper::GenerateHashInit(masm, x0, x10);
|
| - for (int i = 1; i < string.length(); i++) {
|
| - __ Mov(x10, Operand(string.at(i)));
|
| - StringHelper::GenerateHashAddCharacter(masm, x0, x10);
|
| - }
|
| - StringHelper::GenerateHashGetHash(masm, x0, x10);
|
| - __ Pop(xzr, root);
|
| - __ Ret();
|
| - __ SetStackPointer(old_stack_pointer);
|
| -#elif V8_TARGET_ARCH_MIPS || V8_TARGET_ARCH_MIPS64
|
| - __ push(kRootRegister);
|
| - __ InitializeRootRegister();
|
| -
|
| - __ mov(v0, zero_reg);
|
| - __ li(t1, Operand(string.at(0)));
|
| - StringHelper::GenerateHashInit(masm, v0, t1);
|
| - for (int i = 1; i < string.length(); i++) {
|
| - __ li(t1, Operand(string.at(i)));
|
| - StringHelper::GenerateHashAddCharacter(masm, v0, t1);
|
| - }
|
| - StringHelper::GenerateHashGetHash(masm, v0);
|
| - __ pop(kRootRegister);
|
| - __ jr(ra);
|
| - __ nop();
|
| -#else
|
| -#error Unsupported architecture.
|
| -#endif
|
| -}
|
| -
|
| -
|
| void generate(MacroAssembler* masm, uint32_t key) {
|
| #if V8_TARGET_ARCH_IA32 || V8_TARGET_ARCH_X87
|
| __ push(ebx);
|
| @@ -184,44 +96,6 @@ void generate(MacroAssembler* masm, uint32_t key) {
|
| }
|
|
|
|
|
| -void check(i::Vector<const uint8_t> string) {
|
| - Isolate* isolate = CcTest::i_isolate();
|
| - Factory* factory = isolate->factory();
|
| - HandleScope scope(isolate);
|
| -
|
| - v8::internal::byte buffer[2048];
|
| - MacroAssembler masm(isolate, buffer, sizeof buffer);
|
| -
|
| - generate(&masm, string);
|
| -
|
| - CodeDesc desc;
|
| - masm.GetCode(&desc);
|
| - Handle<Object> undefined(isolate->heap()->undefined_value(), isolate);
|
| - Handle<Code> code = factory->NewCode(desc,
|
| - Code::ComputeFlags(Code::STUB),
|
| - undefined);
|
| - CHECK(code->IsCode());
|
| -
|
| - HASH_FUNCTION hash = FUNCTION_CAST<HASH_FUNCTION>(code->entry());
|
| - Handle<String> v8_string =
|
| - factory->NewStringFromOneByte(string).ToHandleChecked();
|
| - v8_string->set_hash_field(String::kEmptyHashField);
|
| -#ifdef USE_SIMULATOR
|
| - uint32_t codegen_hash = static_cast<uint32_t>(
|
| - reinterpret_cast<uintptr_t>(CALL_GENERATED_CODE(hash, 0, 0, 0, 0, 0)));
|
| -#else
|
| - uint32_t codegen_hash = hash();
|
| -#endif
|
| - uint32_t runtime_hash = v8_string->Hash();
|
| - CHECK(runtime_hash == codegen_hash);
|
| -}
|
| -
|
| -
|
| -void check(i::Vector<const char> s) {
|
| - check(i::Vector<const uint8_t>::cast(s));
|
| -}
|
| -
|
| -
|
| void check(uint32_t key) {
|
| Isolate* isolate = CcTest::i_isolate();
|
| Factory* factory = isolate->factory();
|
| @@ -253,38 +127,11 @@ void check(uint32_t key) {
|
| }
|
|
|
|
|
| -void check_twochars(uint8_t a, uint8_t b) {
|
| - uint8_t ab[2] = {a, b};
|
| - check(i::Vector<const uint8_t>(ab, 2));
|
| -}
|
| -
|
| -
|
| static uint32_t PseudoRandom(uint32_t i, uint32_t j) {
|
| return ~(~((i * 781) ^ (j * 329)));
|
| }
|
|
|
|
|
| -TEST(StringHash) {
|
| - v8::Isolate* isolate = CcTest::isolate();
|
| - v8::HandleScope handle_scope(isolate);
|
| - v8::Context::Scope context_scope(v8::Context::New(isolate));
|
| -
|
| - for (uint8_t a = 0; a < String::kMaxOneByteCharCode; a++) {
|
| - // Numbers are hashed differently.
|
| - if (a >= '0' && a <= '9') continue;
|
| - for (uint8_t b = 0; b < String::kMaxOneByteCharCode; b++) {
|
| - if (b >= '0' && b <= '9') continue;
|
| - check_twochars(a, b);
|
| - }
|
| - }
|
| - check(i::Vector<const char>("*", 1));
|
| - check(i::Vector<const char>(".zZ", 3));
|
| - check(i::Vector<const char>("muc", 3));
|
| - check(i::Vector<const char>("(>'_')>", 7));
|
| - check(i::Vector<const char>("-=[ vee eight ftw ]=-", 21));
|
| -}
|
| -
|
| -
|
| TEST(NumberHash) {
|
| v8::Isolate* isolate = CcTest::isolate();
|
| v8::HandleScope handle_scope(isolate);
|
|
|