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
