| Index: runtime/vm/code_generator_x64.cc
|
| ===================================================================
|
| --- runtime/vm/code_generator_x64.cc (revision 7300)
|
| +++ runtime/vm/code_generator_x64.cc (working copy)
|
| @@ -1115,77 +1115,6 @@
|
| }
|
|
|
|
|
| -void CodeGenerator::VisitIncrOpInstanceFieldNode(
|
| - IncrOpInstanceFieldNode* node) {
|
| - ASSERT((node->kind() == Token::kINCR) || (node->kind() == Token::kDECR));
|
| - node->receiver()->Visit(this);
|
| - __ pushq(Address(RSP, 0)); // Duplicate receiver (preserve for setter).
|
| - MarkDeoptPoint(node->getter_id(), node->token_index());
|
| - GenerateInstanceGetterCall(node->getter_id(),
|
| - node->token_index(),
|
| - node->field_name());
|
| - // result is in RAX.
|
| - __ popq(RDX); // Get receiver.
|
| - if (!node->prefix() && IsResultNeeded(node)) {
|
| - // Preserve as result.
|
| - __ pushq(RAX); // Preserve value as result.
|
| - }
|
| - const char* operator_name = (node->kind() == Token::kINCR) ? "+" : "-";
|
| - // RAX: Value.
|
| - // RDX: Receiver.
|
| - __ pushq(RDX); // Preserve receiver.
|
| - __ pushq(RAX); // Left operand.
|
| - __ pushq(Immediate(Smi::RawValue(1))); // Right operand.
|
| - GenerateBinaryOperatorCall(node->operator_id(),
|
| - node->token_index(),
|
| - operator_name);
|
| - __ popq(RDX); // Restore receiver.
|
| - if (IsResultNeeded(node) && node->prefix()) {
|
| - // Value stored into field is the result.
|
| - __ pushq(RAX);
|
| - }
|
| - __ pushq(RDX); // Receiver.
|
| - __ pushq(RAX); // Value.
|
| - // It is not necessary to generate a type test of the assigned value here,
|
| - // because the setter will check the type of its incoming arguments.
|
| - GenerateInstanceSetterCall(node->setter_id(),
|
| - node->token_index(),
|
| - node->field_name());
|
| -}
|
| -
|
| -
|
| -void CodeGenerator::VisitIncrOpIndexedNode(IncrOpIndexedNode* node) {
|
| - ASSERT((node->kind() == Token::kINCR) || (node->kind() == Token::kDECR));
|
| - node->array()->Visit(this);
|
| - node->index()->Visit(this);
|
| - MarkDeoptPoint(node->id(), node->token_index());
|
| - // Preserve array and index for GenerateStoreIndex.
|
| - __ pushq(Address(RSP, kWordSize)); // Copy array.
|
| - __ pushq(Address(RSP, kWordSize)); // Copy index.
|
| - GenerateLoadIndexed(node->load_id(), node->token_index());
|
| - // Result is in RAX.
|
| - if (!node->prefix() && IsResultNeeded(node)) {
|
| - // Preserve RAX as result.
|
| - __ popq(RDX); // Preserved index -> RDX.
|
| - __ popq(RCX); // Preserved array -> RCX.
|
| - __ pushq(RAX); // Preserve original value from indexed load.
|
| - __ pushq(RCX); // Array.
|
| - __ pushq(RDX); // Index.
|
| - }
|
| - const char* operator_name = (node->kind() == Token::kINCR) ? "+" : "-";
|
| - __ pushq(RAX); // Left operand.
|
| - __ pushq(Immediate(Smi::RawValue(1))); // Right operand.
|
| - GenerateBinaryOperatorCall(node->operator_id(),
|
| - node->token_index(),
|
| - operator_name);
|
| - __ pushq(RAX);
|
| - // TOS(0): value, TOS(1): index, TOS(2): array.
|
| - GenerateStoreIndexed(node->store_id(),
|
| - node->token_index(),
|
| - node->prefix() && IsResultNeeded(node));
|
| -}
|
| -
|
| -
|
| static const Class* CoreClass(const char* c_name) {
|
| const String& class_name = String::Handle(String::NewSymbol(c_name));
|
| const Class& cls = Class::ZoneHandle(Library::Handle(
|
|
|