LGTM.

On Wed, Jun 10, 2009 at 2:39 PM, <kmilli...@chromium.org> wrote:
> Reviewers: Kasper Lund,
>
> Description:
> Fix a bug when shifting left by zero.  Ensure that the left operand is
> writable (non-aliased) so it can be used for the result in the slow
> case.
>
>
> Please review this at http://codereview.chromium.org/118496
>
> SVN Base: http://v8.googlecode.com/svn/branches/bleeding_edge/
>
> Affected files:
>  M     src/ia32/codegen-ia32.cc
>  M     test/mjsunit/smi-ops.js
>
>
> Index: test/mjsunit/smi-ops.js
> ===================================================================
> --- test/mjsunit/smi-ops.js     (revision 2133)
> +++ test/mjsunit/smi-ops.js     (working copy)
> @@ -585,3 +585,10 @@
>  }
>
>  testShiftNonSmis();
> +
> +
> +// Verify that we handle the (optimized) corner case of shifting by
> +// zero even for non-smis.
> +function shiftByZero(n) { return n << 0; }
> +
> +assertEquals(3, shiftByZero(3.1415));
> Index: src/ia32/codegen-ia32.cc
> ===================================================================
> --- src/ia32/codegen-ia32.cc    (revision 2133)
> +++ src/ia32/codegen-ia32.cc    (working copy)
> @@ -1691,6 +1691,8 @@
>         int shift_value = int_value & 0x1f;
>         operand->ToRegister();
>         if (shift_value == 0) {
> +          // Spill operand so it can be overwritten in the slow case.
> +          frame_->Spill(operand->reg());
>           DeferredInlineSmiOperation* deferred =
>               new DeferredInlineSmiOperation(op,
>                                              operand->reg(),
>
>
>

--~--~---------~--~----~------------~-------~--~----~
v8-dev mailing list
v8-dev@googlegroups.com
http://groups.google.com/group/v8-dev
-~----------~----~----~----~------~----~------~--~---

Reply via email to