Reviewers: danno, Toon Verwaest,

Message:
Here is the fix for StoreNamedField. I convert the integer constant to a smi
before storing.

Description:
Fixed issue in StoreNamedField codegen where integer32 constants were not
converted to a smi.

BUG=

Please review this at https://codereview.chromium.org/14075014/

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

Affected files:
  M src/ia32/lithium-codegen-ia32.cc
  M src/x64/lithium-codegen-x64.cc


Index: src/ia32/lithium-codegen-ia32.cc
diff --git a/src/ia32/lithium-codegen-ia32.cc b/src/ia32/lithium-codegen-ia32.cc index de62e1fd3b4cde31d756b00611e83975fc236080..8576245ea4ea524adce717cdb1cc3db1195a8d64 100644
--- a/src/ia32/lithium-codegen-ia32.cc
+++ b/src/ia32/lithium-codegen-ia32.cc
@@ -4264,15 +4264,13 @@ void LCodeGen::DoStoreNamedField(LStoreNamedField* instr) {
   if (instr->value()->IsConstantOperand()) {
LConstantOperand* operand_value = LConstantOperand::cast(instr->value());
     if (IsInteger32(operand_value)) {
-      int const_value = ToInteger32(operand_value);
-      __ mov(FieldOperand(write_register, offset), Immediate(const_value));
+      Smi* smi_value = Smi::FromInt(ToInteger32(operand_value));
+      __ mov(FieldOperand(write_register, offset), Immediate(smi_value));
+    } else if (operand_value->IsRegister()) {
+ __ mov(FieldOperand(write_register, offset), ToRegister(operand_value));
     } else {
-      if (operand_value->IsRegister()) {
- __ mov(FieldOperand(write_register, offset), ToRegister(operand_value));
-      } else {
-        Handle<Object> handle_value = ToHandle(operand_value);
-        __ mov(FieldOperand(write_register, offset), handle_value);
-      }
+      Handle<Object> handle_value = ToHandle(operand_value);
+      __ mov(FieldOperand(write_register, offset), handle_value);
     }
   } else {
__ mov(FieldOperand(write_register, offset), ToRegister(instr->value()));
Index: src/x64/lithium-codegen-x64.cc
diff --git a/src/x64/lithium-codegen-x64.cc b/src/x64/lithium-codegen-x64.cc
index fa1227085dc214728a3ffcb58fba0eef30d5b8c0..a4f50c8f8f44d720257fb392ceef437b6b336c19 100644
--- a/src/x64/lithium-codegen-x64.cc
+++ b/src/x64/lithium-codegen-x64.cc
@@ -3961,16 +3961,14 @@ void LCodeGen::DoStoreNamedField(LStoreNamedField* instr) {
   if (instr->value()->IsConstantOperand()) {
LConstantOperand* operand_value = LConstantOperand::cast(instr->value());
     if (IsInteger32Constant(operand_value)) {
-      int const_value = ToInteger32(operand_value);
- __ movq(FieldOperand(write_register, offset), Immediate(const_value));
+      Smi* smi_value = Smi::FromInt(ToInteger32(operand_value));
+      __ Move(FieldOperand(write_register, offset), smi_value);
+    } else if (operand_value->IsRegister()) {
+      __ movq(FieldOperand(write_register, offset),
+              ToRegister(operand_value));
     } else {
-      if (operand_value->IsRegister()) {
-        __ movq(FieldOperand(write_register, offset),
-                ToRegister(operand_value));
-      } else {
-        Handle<Object> handle_value = ToHandle(operand_value);
-        __ Move(FieldOperand(write_register, offset), handle_value);
-      }
+      Handle<Object> handle_value = ToHandle(operand_value);
+      __ Move(FieldOperand(write_register, offset), handle_value);
     }
   } else {
__ movq(FieldOperand(write_register, offset), ToRegister(instr->value()));


--
--
v8-dev mailing list
[email protected]
http://groups.google.com/group/v8-dev
--- You received this message because you are subscribed to the Google Groups "v8-dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
For more options, visit https://groups.google.com/groups/opt_out.


Reply via email to