Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(281)

Side by Side Diff: runtime/vm/flow_graph_compiler_x64.h

Issue 10477020: Move inlined type checking code to new compiler ia32. Sharing more and more code between ia32/x64 (… (Closed) Base URL: http://dart.googlecode.com/svn/branches/bleeding_edge/dart/
Patch Set: Created 8 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « runtime/vm/flow_graph_compiler_shared.cc ('k') | runtime/vm/flow_graph_compiler_x64.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2012, 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_FLOW_GRAPH_COMPILER_X64_H_ 5 #ifndef VM_FLOW_GRAPH_COMPILER_X64_H_
6 #define VM_FLOW_GRAPH_COMPILER_X64_H_ 6 #define VM_FLOW_GRAPH_COMPILER_X64_H_
7 7
8 #ifndef VM_FLOW_GRAPH_COMPILER_H_ 8 #ifndef VM_FLOW_GRAPH_COMPILER_H_
9 #error Include flow_graph_compiler.h instead of flow_graph_compiler_x64.h. 9 #error Include flow_graph_compiler.h instead of flow_graph_compiler_x64.h.
10 #endif 10 #endif
(...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after
71 const Array& arguments_descriptor, 71 const Array& arguments_descriptor,
72 intptr_t argument_count); 72 intptr_t argument_count);
73 73
74 // Infrastructure copied from class CodeGenerator. 74 // Infrastructure copied from class CodeGenerator.
75 void GenerateCall(intptr_t token_index, 75 void GenerateCall(intptr_t token_index,
76 intptr_t try_index, 76 intptr_t try_index,
77 const ExternalLabel* label, 77 const ExternalLabel* label,
78 PcDescriptors::Kind kind); 78 PcDescriptors::Kind kind);
79 79
80 // Type checking helper methods. 80 // Type checking helper methods.
81 void CheckClassIds(const GrowableArray<intptr_t>& class_ids, 81 virtual void CheckClassIds(Register class_id_reg,
82 Label* is_instance_lbl, 82 const GrowableArray<intptr_t>& class_ids,
83 Label* is_not_instance_lbl); 83 Label* is_instance_lbl,
84 Label* is_not_instance_lbl);
85
84 RawSubtypeTestCache* GenerateInlineInstanceof(intptr_t cid, 86 RawSubtypeTestCache* GenerateInlineInstanceof(intptr_t cid,
85 intptr_t token_index, 87 intptr_t token_index,
86 const AbstractType& type, 88 const AbstractType& type,
87 Label* is_instance, 89 Label* is_instance_lbl,
88 Label* is_not_instance); 90 Label* is_not_instance_lbl);
89 91
90 RawSubtypeTestCache* GenerateInstantiatedTypeWithArgumentsTest( 92 RawSubtypeTestCache* GenerateInstantiatedTypeWithArgumentsTest(
91 intptr_t cid, 93 intptr_t cid,
92 intptr_t token_index, 94 intptr_t token_index,
93 const AbstractType& dst_type, 95 const AbstractType& dst_type,
94 Label* is_instance_lbl, 96 Label* is_instance_lbl,
95 Label* is_not_instance_lbl); 97 Label* is_not_instance_lbl);
96 98
97 void GenerateInstantiatedTypeNoArgumentsTest(intptr_t cid, 99 void GenerateInstantiatedTypeNoArgumentsTest(intptr_t cid,
98 intptr_t token_index, 100 intptr_t token_index,
99 const AbstractType& dst_type, 101 const AbstractType& dst_type,
100 Label* is_instance_lbl, 102 Label* is_instance_lbl,
101 Label* is_not_instance_lbl); 103 Label* is_not_instance_lbl);
102 104
103 RawSubtypeTestCache* GenerateUninstantiatedTypeTest( 105 RawSubtypeTestCache* GenerateUninstantiatedTypeTest(
104 const AbstractType& dst_type,
105 intptr_t cid, 106 intptr_t cid,
106 intptr_t token_index, 107 intptr_t token_index,
108 const AbstractType& dst_type,
107 Label* is_instance_lbl, 109 Label* is_instance_lbl,
108 Label* is_not_instance_label); 110 Label* is_not_instance_label);
109 111
110 RawSubtypeTestCache* GenerateSubtype1TestCacheLookup( 112 RawSubtypeTestCache* GenerateSubtype1TestCacheLookup(
111 intptr_t cid, 113 intptr_t cid,
112 intptr_t token_index, 114 intptr_t token_index,
113 const Class& type_class, 115 const Class& type_class,
114 Label* is_instance_lbl, 116 Label* is_instance_lbl,
115 Label* is_not_instance_lbl); 117 Label* is_not_instance_lbl);
116 118
117 void GenerateAssertAssignable(intptr_t cid, 119 void GenerateAssertAssignable(intptr_t cid,
118 intptr_t token_index, 120 intptr_t token_index,
119 intptr_t try_index, 121 intptr_t try_index,
120 const AbstractType& dst_type, 122 const AbstractType& dst_type,
121 const String& dst_name); 123 const String& dst_name);
122 124
123 void GenerateInstanceOf(intptr_t cid, 125 void GenerateInstanceOf(intptr_t cid,
124 intptr_t token_index, 126 intptr_t token_index,
125 intptr_t try_index, 127 intptr_t try_index,
126 const AbstractType& type, 128 const AbstractType& type,
127 bool negate_result); 129 bool negate_result);
128 130
131 enum TypeTestStubKind {
132 kTestTypeOneArg,
133 kTestTypeTwoArgs,
134 kTestTypeThreeArgs,
135 };
136
137 RawSubtypeTestCache* GenerateCallSubtypeTestStub(TypeTestStubKind test_kind,
138 Register instance_reg,
139 Register type_arguments_reg,
140 Register temp_reg,
141 Label* is_instance_lbl,
142 Label* is_not_instance_lbl);
143
144 void GenerateBoolToJump(Register bool_reg, Label* is_true, Label* is_false);
145
129 void CopyParameters(); 146 void CopyParameters();
130 147
131 virtual void GenerateInlinedGetter(intptr_t offset); 148 virtual void GenerateInlinedGetter(intptr_t offset);
132 virtual void GenerateInlinedSetter(intptr_t offset); 149 virtual void GenerateInlinedSetter(intptr_t offset);
133 150
134 DISALLOW_COPY_AND_ASSIGN(FlowGraphCompiler); 151 DISALLOW_COPY_AND_ASSIGN(FlowGraphCompiler);
135 }; 152 };
136 153
137 } // namespace dart 154 } // namespace dart
138 155
139 #endif // VM_FLOW_GRAPH_COMPILER_X64_H_ 156 #endif // VM_FLOW_GRAPH_COMPILER_X64_H_
OLDNEW
« no previous file with comments | « runtime/vm/flow_graph_compiler_shared.cc ('k') | runtime/vm/flow_graph_compiler_x64.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698