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.