Version 1.2.7.1.
Merge bleeding_edge@2134 to trunk to fix code generation issue
with left shifts with zero. Regression test case added.
Review URL: http://codereview.chromium.org/118497
git-svn-id: http://v8.googlecode.com/svn/trunk@2135 ce2b1a6d-e550-0410-aec6-3dcde31c8c00
diff --git a/src/ia32/codegen-ia32.cc b/src/ia32/codegen-ia32.cc
index e9e4061..61651a9 100644
--- a/src/ia32/codegen-ia32.cc
+++ b/src/ia32/codegen-ia32.cc
@@ -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(),
diff --git a/src/version.cc b/src/version.cc
index d613e94..3acc0f9 100644
--- a/src/version.cc
+++ b/src/version.cc
@@ -35,7 +35,7 @@
#define MAJOR_VERSION 1
#define MINOR_VERSION 2
#define BUILD_NUMBER 7
-#define PATCH_LEVEL 0
+#define PATCH_LEVEL 1
#define CANDIDATE_VERSION false
// Define SONAME to have the SCons build the put a specific SONAME into the
diff --git a/test/mjsunit/smi-ops.js b/test/mjsunit/smi-ops.js
index 7e57136..cdff896 100644
--- a/test/mjsunit/smi-ops.js
+++ b/test/mjsunit/smi-ops.js
@@ -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));