I will take a look.

Yang
On Sep 14, 2012 4:36 PM, <[email protected]> wrote:

> Reviewers: Yang, Kasper Lund, yuqiang.xian,
>
> Message:
> Hi,Yang, Kasper and Yuqiang
>
> I have a patch for intrinsic power function on ia32. Would you please help
> to
> review it?
>
> Thanks,
> -Xi
>
> Description:
> Improve the assembly code for power function with integer exponential.
>
> The change removes one unused multiply and reschedules
> the shift, multiply and jump instructions to reduce
> stall. Experiment shows it improve about 20% performance
> on x86 for exponetials from about 100 to 2000.
>
> Please review this at 
> https://codereview.chromium.**org/10916311/<https://codereview.chromium.org/10916311/>
>
> SVN Base: 
> http://v8.googlecode.com/svn/**branches/bleeding_edge/<http://v8.googlecode.com/svn/branches/bleeding_edge/>
>
> Affected files:
>   M     src/ia32/code-stubs-ia32.cc
>
>
> Index: src/ia32/code-stubs-ia32.cc
> ==============================**==============================**=======
> --- src/ia32/code-stubs-ia32.cc (revision 12493)
> +++ src/ia32/code-stubs-ia32.cc (working copy)
> @@ -3213,21 +3213,26 @@
>    __ movsd(double_scratch2, double_result);  // Load double_exponent with
> 1.
>
>    // Get absolute value of exponent.
> -  Label no_neg, while_true, no_multiply;
> +  Label no_neg, while_true, no_multiply, while_false;
>    __ test(scratch, scratch);
>    __ j(positive, &no_neg, Label::kNear);
>    __ neg(scratch);
>    __ bind(&no_neg);
>
> -  __ bind(&while_true);
> +  __ j(zero, &while_false, Label::kNear);
>    __ shr(scratch, 1);
> -  __ j(not_carry, &no_multiply, Label::kNear);
> +  __ j(above, &while_true, Label::kNear);
>    __ mulsd(double_result, double_scratch);
> -  __ bind(&no_multiply);
> +  __ j(zero, &while_false, Label::kNear);
>
> +  __ bind(&while_true);
> +  __ shr(scratch, 1);
>    __ mulsd(double_scratch, double_scratch);
> +  __ j(above, &while_true, Label::kNear);
> +  __ mulsd(double_result, double_scratch);
>    __ j(not_zero, &while_true);
>
> +  __ bind(&while_false);
>    // scratch has the original value of the exponent - if the exponent is
>    // negative, return 1/result.
>    __ test(exponent, exponent);
>
>
>

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

Reply via email to