Reviewers: Kasper Lund, Description: In my final round of refactoring, I accidentally broke my string lenght optimization. Here is the fix: check that the instance type not the receiver is JS_VALUE_TYPE.
Please review this at http://codereview.chromium.org/8656 SVN Base: http://v8.googlecode.com/svn/branches/bleeding_edge/ Affected files: M src/ic-arm.cc M src/stub-cache-ia32.cc Index: src/stub-cache-ia32.cc =================================================================== --- src/stub-cache-ia32.cc (revision 621) +++ src/stub-cache-ia32.cc (working copy) @@ -185,7 +185,8 @@ Label* miss) { Label load_length, check_wrapper; - // Check if the object is a string. + // Check if the object is a string leaving the instance type in the + // scratch register. GenerateStringCheck(masm, receiver, scratch, miss, &check_wrapper); // Load length directly from the string. @@ -200,7 +201,7 @@ // Check if the object is a JSValue wrapper. __ bind(&check_wrapper); - __ cmp(receiver, JS_VALUE_TYPE); + __ cmp(scratch, JS_VALUE_TYPE); __ j(not_equal, miss, not_taken); // Check if the wrapped value is a string and load the length Index: src/ic-arm.cc =================================================================== --- src/ic-arm.cc (revision 621) +++ src/ic-arm.cc (working copy) @@ -190,7 +190,8 @@ __ ldr(r0, MemOperand(sp, 0)); - // Check if the object is a string. + // Check if the object is a string leaving the instance type in the + // r1 register. GenerateStringCheck(masm, r0, r1, r3, &miss, &check_wrapper); // Load length directly from the string. @@ -204,7 +205,7 @@ // Check if the object is a JSValue wrapper. __ bind(&check_wrapper); - __ cmp(r0, Operand(JS_VALUE_TYPE)); + __ cmp(r1, Operand(JS_VALUE_TYPE)); __ b(ne, &miss); // Check if the wrapped value is a string and load the length --~--~---------~--~----~------------~-------~--~----~ v8-dev mailing list [email protected] http://groups.google.com/group/v8-dev -~----------~----~----~----~------~----~------~--~---
