Version 3.15.3

Changed sample shell to send non-JS output (e.g. errors) to stderr instead of stdout.

Correctly check for stack overflow even when interrupt is pending. (issue 214)

Collect stack trace on stack overflow. (issue 2394)

Performance and stability improvements on all platforms.

git-svn-id: http://v8.googlecode.com/svn/trunk@12947 ce2b1a6d-e550-0410-aec6-3dcde31c8c00
diff --git a/src/ia32/lithium-codegen-ia32.cc b/src/ia32/lithium-codegen-ia32.cc
index 676e73e..6e86d92 100644
--- a/src/ia32/lithium-codegen-ia32.cc
+++ b/src/ia32/lithium-codegen-ia32.cc
@@ -2775,12 +2775,15 @@
 
 void LCodeGen::DoLoadKeyedExternalArray(LLoadKeyed* instr) {
   ElementsKind elements_kind = instr->elements_kind();
-  if (ExternalArrayOpRequiresTemp<HLoadKeyed>(instr->hydrogen())) {
-    __ SmiUntag(ToRegister(instr->key()));
+  LOperand* key = instr->key();
+  if (!key->IsConstantOperand() &&
+      ExternalArrayOpRequiresTemp(instr->hydrogen()->key()->representation(),
+                                  elements_kind)) {
+    __ SmiUntag(ToRegister(key));
   }
   Operand operand(BuildFastArrayOperand(
       instr->elements(),
-      instr->key(),
+      key,
       instr->hydrogen()->key()->representation(),
       elements_kind,
       0,
@@ -3850,12 +3853,15 @@
 
 void LCodeGen::DoStoreKeyedExternalArray(LStoreKeyed* instr) {
   ElementsKind elements_kind = instr->elements_kind();
-  if (ExternalArrayOpRequiresTemp<HStoreKeyed>(instr->hydrogen())) {
-    __ SmiUntag(ToRegister(instr->key()));
+  LOperand* key = instr->key();
+  if (!key->IsConstantOperand() &&
+      ExternalArrayOpRequiresTemp(instr->hydrogen()->key()->representation(),
+                                  elements_kind)) {
+    __ SmiUntag(ToRegister(key));
   }
   Operand operand(BuildFastArrayOperand(
       instr->elements(),
-      instr->key(),
+      key,
       instr->hydrogen()->key()->representation(),
       elements_kind,
       0,