Reviewers: Michael Starzinger,

Description:
ARM: More micro-optimization of megamorphic lookup.

Please review this at https://chromiumcodereview.appspot.com/9323004/

SVN Base: http://v8.googlecode.com/svn/branches/bleeding_edge/

Affected files:
  M     src/arm/stub-cache-arm.cc


Index: src/arm/stub-cache-arm.cc
===================================================================
--- src/arm/stub-cache-arm.cc   (revision 10591)
+++ src/arm/stub-cache-arm.cc   (working copy)
@@ -205,8 +205,9 @@
   // Mask down the eor argument to the minimum to keep the immediate
   // ARM-encodable.
   __ eor(scratch, scratch, Operand(flags & mask));
-  // Prefer ubfx to and_ here because the mask is not ARM-encodable.
-  __ Ubfx(scratch, scratch, kHeapObjectTagSize, kPrimaryTableBits);
+  // Prefer and_ to ubfx here because ubfx takes 2 cycles.
+  __ and_(scratch, scratch, Operand(mask));
+  __ mov(scratch, Operand(scratch, LSR, 1));

   // Probe the primary table.
   ProbeTable(isolate,
@@ -215,14 +216,18 @@
              kPrimary,
              name,
              scratch,
-             kHeapObjectTagSize,
+             1,
              extra,
              extra2);

   // Primary miss: Compute hash for secondary probe.
-  __ rsb(scratch, name, Operand(scratch, LSL, kHeapObjectTagSize));
+  __ rsb(scratch, name, Operand(scratch, LSL, 1));
+  __ sub(scratch, scratch, name);
   __ add(scratch, scratch, Operand(flags));
-  __ Ubfx(scratch, scratch, kHeapObjectTagSize, kSecondaryTableBits);
+  __ and_(scratch,
+          scratch,
+          Operand((kSecondaryTableSize - 1) << kHeapObjectTagSize));
+  __ mov(scratch, Operand(scratch, LSR, 1));

   // Probe the secondary table.
   ProbeTable(isolate,
@@ -231,7 +236,7 @@
              kSecondary,
              name,
              scratch,
-             kHeapObjectTagSize,
+             1,
              extra,
              extra2);



--
v8-dev mailing list
[email protected]
http://groups.google.com/group/v8-dev

Reply via email to