Reviewers: Jakob,

Description:
Merged r12226 into 3.11 branch.

x64 BinaryOpStub::GenerateSmiCode uses wrong registers in one code path.

Out of courtesy for NodeJS


Please review this at https://chromiumcodereview.appspot.com/10916141/

SVN Base: https://v8.googlecode.com/svn/branches/3.11

Affected files:
  M src/version.cc
  M src/x64/code-stubs-x64.cc


Index: src/version.cc
diff --git a/src/version.cc b/src/version.cc
index 1dcc839a61d29df983b743854bdb2b941e22d46e..102b64552515bc02a74a43ed01ec637b4ff3096c 100644
--- a/src/version.cc
+++ b/src/version.cc
@@ -35,7 +35,7 @@
 #define MAJOR_VERSION     3
 #define MINOR_VERSION     11
 #define BUILD_NUMBER      10
-#define PATCH_LEVEL       21
+#define PATCH_LEVEL       22
 // Use 1 for candidates and 0 otherwise.
 // (Boolean macro values are not supported by all preprocessors.)
 #define IS_CANDIDATE_VERSION 0
Index: src/x64/code-stubs-x64.cc
diff --git a/src/x64/code-stubs-x64.cc b/src/x64/code-stubs-x64.cc
index 61d6c8791190fa624a4620f6db60da894c64b64b..17b5ce93b4c14df37f3419946c4f25f037ec74ca 100644
--- a/src/x64/code-stubs-x64.cc
+++ b/src/x64/code-stubs-x64.cc
@@ -999,8 +999,8 @@ void BinaryOpStub::GenerateSmiCode(
     SmiCodeGenerateHeapNumberResults allow_heapnumber_results) {

   // Arguments to BinaryOpStub are in rdx and rax.
-  Register left = rdx;
-  Register right = rax;
+  const Register left = rdx;
+  const Register right = rax;

   // We only generate heapnumber answers for overflowing calculations
   // for the four basic arithmetic operations and logical right shift by 0.
@@ -1042,20 +1042,16 @@ void BinaryOpStub::GenerateSmiCode(

     case Token::DIV:
       // SmiDiv will not accept left in rdx or right in rax.
-      left = rcx;
-      right = rbx;
       __ movq(rbx, rax);
       __ movq(rcx, rdx);
-      __ SmiDiv(rax, left, right, &use_fp_on_smis);
+      __ SmiDiv(rax, rcx, rbx, &use_fp_on_smis);
       break;

     case Token::MOD:
       // SmiMod will not accept left in rdx or right in rax.
-      left = rcx;
-      right = rbx;
       __ movq(rbx, rax);
       __ movq(rcx, rdx);
-      __ SmiMod(rax, left, right, &use_fp_on_smis);
+      __ SmiMod(rax, rcx, rbx, &use_fp_on_smis);
       break;

     case Token::BIT_OR: {


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

Reply via email to