Revision: 18676
Author: [email protected]
Date: Mon Jan 20 07:05:23 2014 UTC
Log: De-virtualize GenerateNameCheck.
Currently there are two kinds of "vtables" used in the load/store stub
compilers: kind() and C++'s own vtables. This is a bit confusing, and
this is a step towards simplifying things.
[email protected]
Review URL: https://codereview.chromium.org/141763002
http://code.google.com/p/v8/source/detail?r=18676
Modified:
/branches/bleeding_edge/src/arm/stub-cache-arm.cc
/branches/bleeding_edge/src/ia32/stub-cache-ia32.cc
/branches/bleeding_edge/src/mips/stub-cache-mips.cc
/branches/bleeding_edge/src/stub-cache.h
/branches/bleeding_edge/src/x64/stub-cache-x64.cc
=======================================
--- /branches/bleeding_edge/src/arm/stub-cache-arm.cc Fri Jan 17 16:08:54
2014 UTC
+++ /branches/bleeding_edge/src/arm/stub-cache-arm.cc Mon Jan 20 07:05:23
2014 UTC
@@ -2291,22 +2291,6 @@
static Register registers[] = { r2, r1, r0, r3, r4, r5 };
return registers;
}
-
-
-void KeyedLoadStubCompiler::GenerateNameCheck(Handle<Name> name,
- Register name_reg,
- Label* miss) {
- __ cmp(name_reg, Operand(name));
- __ b(ne, miss);
-}
-
-
-void KeyedStoreStubCompiler::GenerateNameCheck(Handle<Name> name,
- Register name_reg,
- Label* miss) {
- __ cmp(name_reg, Operand(name));
- __ b(ne, miss);
-}
#undef __
@@ -2389,8 +2373,10 @@
IcCheckType check) {
Label miss;
- if (check == PROPERTY) {
- GenerateNameCheck(name, this->name(), &miss);
+ if (check == PROPERTY &&
+ (kind() == Code::KEYED_LOAD_IC || kind() == Code::KEYED_STORE_IC)) {
+ __ cmp(this->name(), Operand(name));
+ __ b(ne, &miss);
}
Label number_case;
=======================================
--- /branches/bleeding_edge/src/ia32/stub-cache-ia32.cc Fri Jan 17 16:08:54
2014 UTC
+++ /branches/bleeding_edge/src/ia32/stub-cache-ia32.cc Mon Jan 20 07:05:23
2014 UTC
@@ -2394,22 +2394,6 @@
static Register registers[] = { edx, ecx, eax, ebx, edi, no_reg };
return registers;
}
-
-
-void KeyedLoadStubCompiler::GenerateNameCheck(Handle<Name> name,
- Register name_reg,
- Label* miss) {
- __ cmp(name_reg, Immediate(name));
- __ j(not_equal, miss);
-}
-
-
-void KeyedStoreStubCompiler::GenerateNameCheck(Handle<Name> name,
- Register name_reg,
- Label* miss) {
- __ cmp(name_reg, Immediate(name));
- __ j(not_equal, miss);
-}
#undef __
@@ -2492,8 +2476,10 @@
IcCheckType check) {
Label miss;
- if (check == PROPERTY) {
- GenerateNameCheck(name, this->name(), &miss);
+ if (check == PROPERTY &&
+ (kind() == Code::KEYED_LOAD_IC || kind() == Code::KEYED_STORE_IC)) {
+ __ cmp(this->name(), Immediate(name));
+ __ j(not_equal, &miss);
}
Label number_case;
=======================================
--- /branches/bleeding_edge/src/mips/stub-cache-mips.cc Fri Jan 17 16:08:54
2014 UTC
+++ /branches/bleeding_edge/src/mips/stub-cache-mips.cc Mon Jan 20 07:05:23
2014 UTC
@@ -2275,20 +2275,6 @@
static Register registers[] = { a2, a1, a0, a3, t0, t1 };
return registers;
}
-
-
-void KeyedLoadStubCompiler::GenerateNameCheck(Handle<Name> name,
- Register name_reg,
- Label* miss) {
- __ Branch(miss, ne, name_reg, Operand(name));
-}
-
-
-void KeyedStoreStubCompiler::GenerateNameCheck(Handle<Name> name,
- Register name_reg,
- Label* miss) {
- __ Branch(miss, ne, name_reg, Operand(name));
-}
#undef __
@@ -2370,8 +2356,9 @@
IcCheckType check) {
Label miss;
- if (check == PROPERTY) {
- GenerateNameCheck(name, this->name(), &miss);
+ if (check == PROPERTY &&
+ (kind() == Code::KEYED_LOAD_IC || kind() == Code::KEYED_STORE_IC)) {
+ __ Branch(&miss, ne, this->name(), Operand(name));
}
Label number_case;
=======================================
--- /branches/bleeding_edge/src/stub-cache.h Fri Jan 17 16:08:54 2014 UTC
+++ /branches/bleeding_edge/src/stub-cache.h Mon Jan 20 07:05:23 2014 UTC
@@ -553,10 +553,6 @@
Handle<Name> name,
Code::StubType type,
IcCheckType check);
-
- virtual void GenerateNameCheck(Handle<Name> name,
- Register name_reg,
- Label* miss) { }
static Builtins::Name MissBuiltin(Code::Kind kind) {
switch (kind) {
@@ -747,13 +743,8 @@
static void GenerateLoadDictionaryElement(MacroAssembler* masm);
- protected:
+ private:
static Register* registers();
-
- private:
- virtual void GenerateNameCheck(Handle<Name> name,
- Register name_reg,
- Label* miss);
friend class BaseLoadStoreStubCompiler;
};
@@ -879,21 +870,17 @@
static void GenerateStoreDictionaryElement(MacroAssembler* masm);
- protected:
+ private:
static Register* registers();
KeyedAccessStoreMode store_mode() {
return KeyedStoreIC::GetKeyedAccessStoreMode(extra_state());
}
- private:
Register transition_map() {
return registers()[3];
}
- virtual void GenerateNameCheck(Handle<Name> name,
- Register name_reg,
- Label* miss);
friend class BaseLoadStoreStubCompiler;
};
=======================================
--- /branches/bleeding_edge/src/x64/stub-cache-x64.cc Mon Jan 20 04:59:40
2014 UTC
+++ /branches/bleeding_edge/src/x64/stub-cache-x64.cc Mon Jan 20 07:05:23
2014 UTC
@@ -2320,22 +2320,6 @@
static Register registers[] = { rdx, rcx, rax, rbx, rdi, r8 };
return registers;
}
-
-
-void KeyedLoadStubCompiler::GenerateNameCheck(Handle<Name> name,
- Register name_reg,
- Label* miss) {
- __ Cmp(name_reg, name);
- __ j(not_equal, miss);
-}
-
-
-void KeyedStoreStubCompiler::GenerateNameCheck(Handle<Name> name,
- Register name_reg,
- Label* miss) {
- __ Cmp(name_reg, name);
- __ j(not_equal, miss);
-}
#undef __
@@ -2422,8 +2406,10 @@
IcCheckType check) {
Label miss;
- if (check == PROPERTY) {
- GenerateNameCheck(name, this->name(), &miss);
+ if (check == PROPERTY &&
+ (kind() == Code::KEYED_LOAD_IC || kind() == Code::KEYED_STORE_IC)) {
+ __ Cmp(this->name(), name);
+ __ j(not_equal, &miss);
}
Label number_case;
--
--
v8-dev mailing list
[email protected]
http://groups.google.com/group/v8-dev
---
You received this message because you are subscribed to the Google Groups "v8-dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
For more options, visit https://groups.google.com/groups/opt_out.