| Index: src/x64/lithium-x64.cc
|
| ===================================================================
|
| --- src/x64/lithium-x64.cc (revision 8778)
|
| +++ src/x64/lithium-x64.cc (working copy)
|
| @@ -428,6 +428,15 @@
|
| }
|
|
|
|
|
| +void LStoreKeyedFastDoubleElement::PrintDataTo(StringStream* stream) {
|
| + elements()->PrintTo(stream);
|
| + stream->Add("[");
|
| + key()->PrintTo(stream);
|
| + stream->Add("] <- ");
|
| + value()->PrintTo(stream);
|
| +}
|
| +
|
| +
|
| void LStoreKeyedGeneric::PrintDataTo(StringStream* stream) {
|
| object()->PrintTo(stream);
|
| stream->Add("[");
|
| @@ -1027,7 +1036,11 @@
|
| : instr->SecondSuccessor();
|
| return new LGoto(successor->block_id());
|
| }
|
| - return new LBranch(UseRegisterAtStart(v));
|
| + LInstruction* branch = new LBranch(UseRegister(v));
|
| + // When we handle all cases, we never deopt, so we don't need to assign the
|
| + // environment then.
|
| + bool all_cases_handled = instr->expected_input_types().IsAll();
|
| + return all_cases_handled ? branch : AssignEnvironment(branch);
|
| }
|
|
|
|
|
| @@ -1824,6 +1837,18 @@
|
| }
|
|
|
|
|
| +LInstruction* LChunkBuilder::DoLoadKeyedFastDoubleElement(
|
| + HLoadKeyedFastDoubleElement* instr) {
|
| + ASSERT(instr->representation().IsDouble());
|
| + ASSERT(instr->key()->representation().IsInteger32());
|
| + LOperand* elements = UseRegisterAtStart(instr->elements());
|
| + LOperand* key = UseRegisterOrConstantAtStart(instr->key());
|
| + LLoadKeyedFastDoubleElement* result =
|
| + new LLoadKeyedFastDoubleElement(elements, key);
|
| + return AssignEnvironment(DefineAsRegister(result));
|
| +}
|
| +
|
| +
|
| LInstruction* LChunkBuilder::DoLoadKeyedSpecializedArrayElement(
|
| HLoadKeyedSpecializedArrayElement* instr) {
|
| JSObject::ElementsKind elements_kind = instr->elements_kind();
|
| @@ -1876,6 +1901,20 @@
|
| }
|
|
|
|
|
| +LInstruction* LChunkBuilder::DoStoreKeyedFastDoubleElement(
|
| + HStoreKeyedFastDoubleElement* instr) {
|
| + ASSERT(instr->value()->representation().IsDouble());
|
| + ASSERT(instr->elements()->representation().IsTagged());
|
| + ASSERT(instr->key()->representation().IsInteger32());
|
| +
|
| + LOperand* elements = UseRegisterAtStart(instr->elements());
|
| + LOperand* val = UseTempRegister(instr->value());
|
| + LOperand* key = UseRegisterOrConstantAtStart(instr->key());
|
| +
|
| + return new LStoreKeyedFastDoubleElement(elements, key, val);
|
| +}
|
| +
|
| +
|
| LInstruction* LChunkBuilder::DoStoreKeyedSpecializedArrayElement(
|
| HStoreKeyedSpecializedArrayElement* instr) {
|
| Representation representation(instr->value()->representation());
|
|
|