| OLD | NEW |
| 1 // Copyright (c) 2011, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2011, the Dart project authors. Please see the AUTHORS file |
| 2 // for details. All rights reserved. Use of this source code is governed by a | 2 // for details. All rights reserved. Use of this source code is governed by a |
| 3 // BSD-style license that can be found in the LICENSE file. | 3 // BSD-style license that can be found in the LICENSE file. |
| 4 | 4 |
| 5 #ifndef VM_OPT_CODE_GENERATOR_IA32_H_ | 5 #ifndef VM_OPT_CODE_GENERATOR_IA32_H_ |
| 6 #define VM_OPT_CODE_GENERATOR_IA32_H_ | 6 #define VM_OPT_CODE_GENERATOR_IA32_H_ |
| 7 | 7 |
| 8 #ifndef VM_OPT_CODE_GENERATOR_H_ | 8 #ifndef VM_OPT_CODE_GENERATOR_H_ |
| 9 #error Do not include opt_code_generator_ia32.h; use opt_code_generator.h. | 9 #error Do not include opt_code_generator_ia32.h; use opt_code_generator.h. |
| 10 #endif | 10 #endif |
| (...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 61 Register reg1, | 61 Register reg1, |
| 62 Register reg2); | 62 Register reg2); |
| 63 DeoptimizationBlob* AddDeoptimizationBlob(AstNode* node, | 63 DeoptimizationBlob* AddDeoptimizationBlob(AstNode* node, |
| 64 Register reg1, | 64 Register reg1, |
| 65 Register reg2, | 65 Register reg2, |
| 66 Register reg3); | 66 Register reg3); |
| 67 | 67 |
| 68 void IntrinsifyGetter(); | 68 void IntrinsifyGetter(); |
| 69 void IntrinsifySetter(); | 69 void IntrinsifySetter(); |
| 70 | 70 |
| 71 bool ICDataToSameInlineableInstanceGetter(const ICData& ic_data); | |
| 72 void InlineInstanceGettersWithSameTarget(AstNode* node, | 71 void InlineInstanceGettersWithSameTarget(AstNode* node, |
| 72 intptr_t id, |
| 73 AstNode* receiver, | 73 AstNode* receiver, |
| 74 const String& field_name, | 74 const String& field_name, |
| 75 Register recv_reg); | 75 Register recv_reg); |
| 76 void InlineInstanceSettersWithSameTarget(AstNode* node, |
| 77 intptr_t id, |
| 78 AstNode* receiver, |
| 79 const String& field_name, |
| 80 Register recv_reg, |
| 81 Register value_reg); |
| 76 | 82 |
| 77 // Helper method to load a value quickly into register instead of pushing | 83 // Helper method to load a value quickly into register instead of pushing |
| 78 // and popping it. | 84 // and popping it. |
| 79 void VisitLoadOne(AstNode* node, Register reg); | 85 void VisitLoadOne(AstNode* node, Register reg); |
| 80 void VisitLoadTwo(AstNode* left, | 86 void VisitLoadTwo(AstNode* left, |
| 81 AstNode* right, | 87 AstNode* right, |
| 82 Register left_reg, | 88 Register left_reg, |
| 83 Register right_reg); | 89 Register right_reg); |
| 84 | 90 |
| 85 bool IsInlineableInstanceGetter(const Function& function); | |
| 86 void InlineInstanceGetter(AstNode* node, | 91 void InlineInstanceGetter(AstNode* node, |
| 87 intptr_t id, | 92 intptr_t id, |
| 88 AstNode* receiver, | 93 AstNode* receiver, |
| 89 const String& field_name, | 94 const String& field_name, |
| 90 Register recv_reg); | 95 Register recv_reg); |
| 96 void InlineInstanceSetter(AstNode* node, |
| 97 intptr_t id, |
| 98 AstNode* receiver, |
| 99 const String& field_name, |
| 100 Register recv_reg, |
| 101 Register value_reg); |
| 91 | 102 |
| 92 void CallDeoptimize(intptr_t node_id, intptr_t token_index); | 103 void CallDeoptimize(intptr_t node_id, intptr_t token_index); |
| 93 | 104 |
| 94 void GenerateSmiBinaryOp(BinaryOpNode* node); | 105 void GenerateSmiBinaryOp(BinaryOpNode* node); |
| 95 void GenerateSmiShiftBinaryOp(BinaryOpNode* node); | 106 void GenerateSmiShiftBinaryOp(BinaryOpNode* node); |
| 96 | 107 |
| 97 void GenerateDoubleBinaryOp(BinaryOpNode* node); | 108 void GenerateDoubleBinaryOp(BinaryOpNode* node); |
| 98 void GenerateMintBinaryOp(BinaryOpNode* node, bool allow_smi); | 109 void GenerateMintBinaryOp(BinaryOpNode* node, bool allow_smi); |
| 99 void CheckIfDoubleOrSmi(Register reg, | 110 void CheckIfDoubleOrSmi(Register reg, |
| 100 Register temp, | 111 Register temp, |
| (...skipping 15 matching lines...) Expand all Loading... |
| 116 bool GenerateDoubleComparison(ComparisonNode* node); | 127 bool GenerateDoubleComparison(ComparisonNode* node); |
| 117 bool GenerateEqualityComparison(ComparisonNode* node); | 128 bool GenerateEqualityComparison(ComparisonNode* node); |
| 118 void GenerateLogicalBinaryOp(BinaryOpNode* node); | 129 void GenerateLogicalBinaryOp(BinaryOpNode* node); |
| 119 void GenerateConditionalJumps(const CodeGenInfo& nInfo, Condition condition); | 130 void GenerateConditionalJumps(const CodeGenInfo& nInfo, Condition condition); |
| 120 bool TryInlineInstanceCall(InstanceCallNode* node); | 131 bool TryInlineInstanceCall(InstanceCallNode* node); |
| 121 bool TryInlineStaticCall(StaticCallNode* node); | 132 bool TryInlineStaticCall(StaticCallNode* node); |
| 122 | 133 |
| 123 bool IsResultInEaxRequested(AstNode* node) const; | 134 bool IsResultInEaxRequested(AstNode* node) const; |
| 124 bool NodeMayBeSmi(AstNode* node) const; | 135 bool NodeMayBeSmi(AstNode* node) const; |
| 125 | 136 |
| 126 void PrintCollectedClasses(AstNode* node); | 137 void PrintCollectedClassesAtId(AstNode* node, intptr_t id); |
| 127 void TraceOpt(AstNode* node, const char* message); | 138 void TraceOpt(AstNode* node, const char* message); |
| 128 void TraceNotOpt(AstNode* node, const char* message); | 139 void TraceNotOpt(AstNode* node, const char* message); |
| 129 | 140 |
| 130 GrowableArray<DeoptimizationBlob*> deoptimization_blobs_; | 141 GrowableArray<DeoptimizationBlob*> deoptimization_blobs_; |
| 131 const Class& smi_class_; | 142 const Class& smi_class_; |
| 132 const Class& double_class_; | 143 const Class& double_class_; |
| 133 | 144 |
| 134 DISALLOW_IMPLICIT_CONSTRUCTORS(OptimizingCodeGenerator); | 145 DISALLOW_IMPLICIT_CONSTRUCTORS(OptimizingCodeGenerator); |
| 135 }; | 146 }; |
| 136 | 147 |
| 137 } // namespace dart | 148 } // namespace dart |
| 138 | 149 |
| 139 | 150 |
| 140 #endif // VM_OPT_CODE_GENERATOR_IA32_H_ | 151 #endif // VM_OPT_CODE_GENERATOR_IA32_H_ |
| OLD | NEW |