| OLD | NEW |
| 1 // Copyright 2012 the V8 project authors. All rights reserved. | 1 // Copyright 2012 the V8 project authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include <sstream> | 5 #include <sstream> |
| 6 | 6 |
| 7 #include "src/v8.h" | 7 #include "src/v8.h" |
| 8 | 8 |
| 9 #if V8_TARGET_ARCH_X64 | 9 #if V8_TARGET_ARCH_X64 |
| 10 | 10 |
| (...skipping 356 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 367 int index = GetNextSpillIndex(kind); | 367 int index = GetNextSpillIndex(kind); |
| 368 if (kind == DOUBLE_REGISTERS) { | 368 if (kind == DOUBLE_REGISTERS) { |
| 369 return LDoubleStackSlot::Create(index, zone()); | 369 return LDoubleStackSlot::Create(index, zone()); |
| 370 } else { | 370 } else { |
| 371 DCHECK(kind == GENERAL_REGISTERS); | 371 DCHECK(kind == GENERAL_REGISTERS); |
| 372 return LStackSlot::Create(index, zone()); | 372 return LStackSlot::Create(index, zone()); |
| 373 } | 373 } |
| 374 } | 374 } |
| 375 | 375 |
| 376 | 376 |
| 377 void LLoadGlobalViaContext::PrintDataTo(StringStream* stream) { |
| 378 stream->Add(String::cast(*name())->ToCString().get()); |
| 379 stream->Add(" depth:%d slot:%d", depth(), slot_index()); |
| 380 } |
| 381 |
| 382 |
| 377 void LStoreNamedField::PrintDataTo(StringStream* stream) { | 383 void LStoreNamedField::PrintDataTo(StringStream* stream) { |
| 378 object()->PrintTo(stream); | 384 object()->PrintTo(stream); |
| 379 std::ostringstream os; | 385 std::ostringstream os; |
| 380 os << hydrogen()->access() << " <- "; | 386 os << hydrogen()->access() << " <- "; |
| 381 stream->Add(os.str().c_str()); | 387 stream->Add(os.str().c_str()); |
| 382 value()->PrintTo(stream); | 388 value()->PrintTo(stream); |
| 383 } | 389 } |
| 384 | 390 |
| 385 | 391 |
| 386 void LStoreNamedGeneric::PrintDataTo(StringStream* stream) { | 392 void LStoreNamedGeneric::PrintDataTo(StringStream* stream) { |
| 387 object()->PrintTo(stream); | 393 object()->PrintTo(stream); |
| 388 stream->Add("."); | 394 stream->Add("."); |
| 389 stream->Add(String::cast(*name())->ToCString().get()); | 395 stream->Add(String::cast(*name())->ToCString().get()); |
| 390 stream->Add(" <- "); | 396 stream->Add(" <- "); |
| 391 value()->PrintTo(stream); | 397 value()->PrintTo(stream); |
| 392 } | 398 } |
| 393 | 399 |
| 394 | 400 |
| 401 void LStoreGlobalViaContext::PrintDataTo(StringStream* stream) { |
| 402 stream->Add(String::cast(*name())->ToCString().get()); |
| 403 stream->Add(" <- "); |
| 404 value()->PrintTo(stream); |
| 405 stream->Add(" depth:%d slot:%d", depth(), slot_index()); |
| 406 } |
| 407 |
| 408 |
| 395 void LLoadKeyed::PrintDataTo(StringStream* stream) { | 409 void LLoadKeyed::PrintDataTo(StringStream* stream) { |
| 396 elements()->PrintTo(stream); | 410 elements()->PrintTo(stream); |
| 397 stream->Add("["); | 411 stream->Add("["); |
| 398 key()->PrintTo(stream); | 412 key()->PrintTo(stream); |
| 399 if (hydrogen()->IsDehoisted()) { | 413 if (hydrogen()->IsDehoisted()) { |
| 400 stream->Add(" + %d]", base_offset()); | 414 stream->Add(" + %d]", base_offset()); |
| 401 } else { | 415 } else { |
| 402 stream->Add("]"); | 416 stream->Add("]"); |
| 403 } | 417 } |
| 404 } | 418 } |
| (...skipping 1694 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2099 if (instr->HasVectorAndSlot()) { | 2113 if (instr->HasVectorAndSlot()) { |
| 2100 vector = FixedTemp(LoadWithVectorDescriptor::VectorRegister()); | 2114 vector = FixedTemp(LoadWithVectorDescriptor::VectorRegister()); |
| 2101 } | 2115 } |
| 2102 | 2116 |
| 2103 LLoadGlobalGeneric* result = | 2117 LLoadGlobalGeneric* result = |
| 2104 new(zone()) LLoadGlobalGeneric(context, global_object, vector); | 2118 new(zone()) LLoadGlobalGeneric(context, global_object, vector); |
| 2105 return MarkAsCall(DefineFixed(result, rax), instr); | 2119 return MarkAsCall(DefineFixed(result, rax), instr); |
| 2106 } | 2120 } |
| 2107 | 2121 |
| 2108 | 2122 |
| 2123 LInstruction* LChunkBuilder::DoLoadGlobalViaContext( |
| 2124 HLoadGlobalViaContext* instr) { |
| 2125 LOperand* context = UseFixed(instr->context(), rsi); |
| 2126 DCHECK(instr->slot_index() > 0); |
| 2127 LLoadGlobalViaContext* result = new (zone()) LLoadGlobalViaContext(context); |
| 2128 return MarkAsCall(DefineFixed(result, rax), instr); |
| 2129 } |
| 2130 |
| 2131 |
| 2109 LInstruction* LChunkBuilder::DoLoadContextSlot(HLoadContextSlot* instr) { | 2132 LInstruction* LChunkBuilder::DoLoadContextSlot(HLoadContextSlot* instr) { |
| 2110 LOperand* context = UseRegisterAtStart(instr->value()); | 2133 LOperand* context = UseRegisterAtStart(instr->value()); |
| 2111 LInstruction* result = | 2134 LInstruction* result = |
| 2112 DefineAsRegister(new(zone()) LLoadContextSlot(context)); | 2135 DefineAsRegister(new(zone()) LLoadContextSlot(context)); |
| 2113 if (instr->RequiresHoleCheck() && instr->DeoptimizesOnHole()) { | 2136 if (instr->RequiresHoleCheck() && instr->DeoptimizesOnHole()) { |
| 2114 result = AssignEnvironment(result); | 2137 result = AssignEnvironment(result); |
| 2115 } | 2138 } |
| 2116 return result; | 2139 return result; |
| 2117 } | 2140 } |
| 2118 | 2141 |
| (...skipping 345 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2464 slot = FixedTemp(VectorStoreICDescriptor::SlotRegister()); | 2487 slot = FixedTemp(VectorStoreICDescriptor::SlotRegister()); |
| 2465 vector = FixedTemp(VectorStoreICDescriptor::VectorRegister()); | 2488 vector = FixedTemp(VectorStoreICDescriptor::VectorRegister()); |
| 2466 } | 2489 } |
| 2467 | 2490 |
| 2468 LStoreNamedGeneric* result = | 2491 LStoreNamedGeneric* result = |
| 2469 new (zone()) LStoreNamedGeneric(context, object, value, slot, vector); | 2492 new (zone()) LStoreNamedGeneric(context, object, value, slot, vector); |
| 2470 return MarkAsCall(result, instr); | 2493 return MarkAsCall(result, instr); |
| 2471 } | 2494 } |
| 2472 | 2495 |
| 2473 | 2496 |
| 2497 LInstruction* LChunkBuilder::DoStoreGlobalViaContext( |
| 2498 HStoreGlobalViaContext* instr) { |
| 2499 LOperand* context = UseFixed(instr->context(), rsi); |
| 2500 LOperand* value = UseFixed(instr->value(), |
| 2501 StoreGlobalViaContextDescriptor::ValueRegister()); |
| 2502 DCHECK(instr->slot_index() > 0); |
| 2503 |
| 2504 LStoreGlobalViaContext* result = |
| 2505 new (zone()) LStoreGlobalViaContext(context, value); |
| 2506 return MarkAsCall(result, instr); |
| 2507 } |
| 2508 |
| 2509 |
| 2474 LInstruction* LChunkBuilder::DoStringAdd(HStringAdd* instr) { | 2510 LInstruction* LChunkBuilder::DoStringAdd(HStringAdd* instr) { |
| 2475 LOperand* context = UseFixed(instr->context(), rsi); | 2511 LOperand* context = UseFixed(instr->context(), rsi); |
| 2476 LOperand* left = UseFixed(instr->left(), rdx); | 2512 LOperand* left = UseFixed(instr->left(), rdx); |
| 2477 LOperand* right = UseFixed(instr->right(), rax); | 2513 LOperand* right = UseFixed(instr->right(), rax); |
| 2478 return MarkAsCall( | 2514 return MarkAsCall( |
| 2479 DefineFixed(new(zone()) LStringAdd(context, left, right), rax), instr); | 2515 DefineFixed(new(zone()) LStringAdd(context, left, right), rax), instr); |
| 2480 } | 2516 } |
| 2481 | 2517 |
| 2482 | 2518 |
| 2483 LInstruction* LChunkBuilder::DoStringCharCodeAt(HStringCharCodeAt* instr) { | 2519 LInstruction* LChunkBuilder::DoStringCharCodeAt(HStringCharCodeAt* instr) { |
| (...skipping 253 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2737 LAllocateBlockContext* result = | 2773 LAllocateBlockContext* result = |
| 2738 new(zone()) LAllocateBlockContext(context, function); | 2774 new(zone()) LAllocateBlockContext(context, function); |
| 2739 return MarkAsCall(DefineFixed(result, rsi), instr); | 2775 return MarkAsCall(DefineFixed(result, rsi), instr); |
| 2740 } | 2776 } |
| 2741 | 2777 |
| 2742 | 2778 |
| 2743 } // namespace internal | 2779 } // namespace internal |
| 2744 } // namespace v8 | 2780 } // namespace v8 |
| 2745 | 2781 |
| 2746 #endif // V8_TARGET_ARCH_X64 | 2782 #endif // V8_TARGET_ARCH_X64 |
| OLD | NEW |