diff options
Diffstat (limited to 'deps/v8/test/cctest/test-hashing.cc')
-rw-r--r-- | deps/v8/test/cctest/test-hashing.cc | 153 |
1 files changed, 0 insertions, 153 deletions
diff --git a/deps/v8/test/cctest/test-hashing.cc b/deps/v8/test/cctest/test-hashing.cc index 9857f9d88a..692861cfe4 100644 --- a/deps/v8/test/cctest/test-hashing.cc +++ b/deps/v8/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); |