Tweak to shorten generated code in Math.pow.
authoryangguo@chromium.org <yangguo@chromium.org@ce2b1a6d-e550-0410-aec6-3dcde31c8c00>
Wed, 7 Dec 2011 09:44:31 +0000 (09:44 +0000)
committeryangguo@chromium.org <yangguo@chromium.org@ce2b1a6d-e550-0410-aec6-3dcde31c8c00>
Wed, 7 Dec 2011 09:44:31 +0000 (09:44 +0000)
Review URL: http://codereview.chromium.org/8834007

git-svn-id: http://v8.googlecode.com/svn/branches/bleeding_edge@10189 ce2b1a6d-e550-0410-aec6-3dcde31c8c00

src/ia32/code-stubs-ia32.cc
src/x64/code-stubs-x64.cc

index d87a439..08bbbc0 100644 (file)
@@ -3130,11 +3130,9 @@ void MathPowStub::Generate(MacroAssembler* masm) {
   __ movsd(double_scratch2, double_result);  // Load double_exponent with 1.
 
   // Get absolute value of exponent.
-  Label no_neg, while_true, no_multiply;
-  __ cmp(exponent, 0);
-  __ j(greater_equal, &no_neg, Label::kNear);
-  __ neg(exponent);
-  __ bind(&no_neg);
+  Label while_true, no_multiply;
+  const uint32_t kClearSignBitMask = 0x7FFFFFFF;
+  __ and_(exponent, Immediate(kClearSignBitMask));
 
   __ bind(&while_true);
   __ shr(exponent, 1);
index a617d52..46a5487 100644 (file)
@@ -2181,11 +2181,9 @@ void MathPowStub::Generate(MacroAssembler* masm) {
   __ movsd(double_scratch2, double_result);  // Load double_exponent with 1.
 
   // Get absolute value of exponent.
-  Label no_neg, while_true, no_multiply;
-  __ cmpl(scratch, Immediate(0));
-  __ j(positive, &no_neg, Label::kNear);
-  __ negl(scratch);
-  __ bind(&no_neg);
+  Label while_true, no_multiply;
+  const uint32_t kClearSignBitMask = 0x7FFFFFFF;
+  __ andl(scratch, Immediate(kClearSignBitMask));
 
   __ bind(&while_true);
   __ shrl(scratch, Immediate(1));