| Index: src/x64/lithium-x64.cc
|
| diff --git a/src/x64/lithium-x64.cc b/src/x64/lithium-x64.cc
|
| index f70aaad587537d54bd2a5aa17d3fb12c2f3f6dee..d5fd35dcec4c35de36d726dd8ab376cd9aa91b32 100644
|
| --- a/src/x64/lithium-x64.cc
|
| +++ b/src/x64/lithium-x64.cc
|
| @@ -296,6 +296,13 @@ void LLoadContextSlot::PrintDataTo(StringStream* stream) {
|
| }
|
|
|
|
|
| +void LStoreContextSlot::PrintDataTo(StringStream* stream) {
|
| + InputAt(0)->PrintTo(stream);
|
| + stream->Add("[%d] <- ", slot_index());
|
| + InputAt(1)->PrintTo(stream);
|
| +}
|
| +
|
| +
|
| void LCallKeyed::PrintDataTo(StringStream* stream) {
|
| stream->Add("[rcx] #%d / ", arity());
|
| }
|
| @@ -1679,14 +1686,22 @@ LInstruction* LChunkBuilder::DoStoreGlobal(HStoreGlobal* instr) {
|
|
|
|
|
| LInstruction* LChunkBuilder::DoLoadContextSlot(HLoadContextSlot* instr) {
|
| - Abort("Unimplemented: %s", "DoLoadContextSlot");
|
| - return NULL;
|
| + LOperand* context = UseRegisterAtStart(instr->value());
|
| + return DefineAsRegister(new LLoadContextSlot(context));
|
| }
|
|
|
|
|
| LInstruction* LChunkBuilder::DoStoreContextSlot(HStoreContextSlot* instr) {
|
| - Abort("Unimplemented: DoStoreContextSlot");
|
| - return NULL;
|
| + LOperand* context;
|
| + LOperand* value;
|
| + if (instr->NeedsWriteBarrier()) {
|
| + context = UseTempRegister(instr->context());
|
| + value = UseTempRegister(instr->value());
|
| + } else {
|
| + context = UseRegister(instr->context());
|
| + value = UseRegister(instr->value());
|
| + }
|
| + return new LStoreContextSlot(context, value);
|
| }
|
|
|
|
|
| @@ -1874,8 +1889,9 @@ LInstruction* LChunkBuilder::DoDeleteProperty(HDeleteProperty* instr) {
|
|
|
|
|
| LInstruction* LChunkBuilder::DoOsrEntry(HOsrEntry* instr) {
|
| - Abort("Unimplemented: %s", "DoOsrEntry");
|
| - return NULL;
|
| + allocator_->MarkAsOsrEntry();
|
| + current_block_->last_environment()->set_ast_id(instr->ast_id());
|
| + return AssignEnvironment(new LOsrEntry);
|
| }
|
|
|
|
|
| @@ -1886,8 +1902,8 @@ LInstruction* LChunkBuilder::DoParameter(HParameter* instr) {
|
|
|
|
|
| LInstruction* LChunkBuilder::DoUnknownOSRValue(HUnknownOSRValue* instr) {
|
| - Abort("Unimplemented: %s", "DoUnknownOSRValue");
|
| - return NULL;
|
| + int spill_index = chunk()->GetNextSpillIndex(false); // Not double-width.
|
| + return DefineAsSpilled(new LUnknownOSRValue, spill_index);
|
| }
|
|
|
|
|
|
|