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

Side by Side Diff: runtime/vm/flow_graph_compiler.cc

Issue 10875030: Add support for XMM registers in SSA code generation pipeline. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: fix a bug pointed out by Florian Created 8 years, 4 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_allocator.cc ('k') | runtime/vm/flow_graph_compiler_ia32.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 #include "vm/globals.h" // Needed here to get TARGET_ARCH_XXX. 5 #include "vm/globals.h" // Needed here to get TARGET_ARCH_XXX.
6 6
7 #include "vm/flow_graph_compiler.h" 7 #include "vm/flow_graph_compiler.h"
8 8
9 #include "vm/dart_entry.h" 9 #include "vm/dart_entry.h"
10 #include "vm/debugger.h" 10 #include "vm/debugger.h"
(...skipping 181 matching lines...) Expand 10 before | Expand all | Expand 10 after
192 } 192 }
193 193
194 194
195 bool FlowGraphCompiler::IsNextBlock(BlockEntryInstr* block_entry) const { 195 bool FlowGraphCompiler::IsNextBlock(BlockEntryInstr* block_entry) const {
196 intptr_t current_index = reverse_index(current_block()->postorder_number()); 196 intptr_t current_index = reverse_index(current_block()->postorder_number());
197 return (current_index < (block_order().length() - 1)) && 197 return (current_index < (block_order().length() - 1)) &&
198 (block_order()[current_index + 1] == block_entry); 198 (block_order()[current_index + 1] == block_entry);
199 } 199 }
200 200
201 201
202 void FlowGraphCompiler::SaveLiveRegisters(LocationSummary* locs) {
203 // TODO(vegorov): consider saving only caller save (volatile) registers.
204 for (intptr_t reg_idx = 0; reg_idx < kNumberOfCpuRegisters; ++reg_idx) {
205 Register reg = static_cast<Register>(reg_idx);
206 if (locs->live_registers()->Contains(reg)) {
207 assembler()->PushRegister(reg);
208 }
209 }
210 }
211
212
213 void FlowGraphCompiler::RestoreLiveRegisters(LocationSummary* locs) {
214 for (intptr_t reg_idx = kNumberOfCpuRegisters - 1; reg_idx >= 0; --reg_idx) {
215 Register reg = static_cast<Register>(reg_idx);
216 if (locs->live_registers()->Contains(reg)) {
217 assembler()->PopRegister(reg);
218 }
219 }
220 }
221
222
223 void FlowGraphCompiler::AddSlowPathCode(SlowPathCode* code) { 202 void FlowGraphCompiler::AddSlowPathCode(SlowPathCode* code) {
224 slow_path_code_.Add(code); 203 slow_path_code_.Add(code);
225 } 204 }
226 205
227 206
228 void FlowGraphCompiler::GenerateDeferredCode() { 207 void FlowGraphCompiler::GenerateDeferredCode() {
229 for (intptr_t i = 0; i < slow_path_code_.length(); i++) { 208 for (intptr_t i = 0; i < slow_path_code_.length(); i++) {
230 slow_path_code_[i]->EmitNativeCode(this); 209 slow_path_code_[i]->EmitNativeCode(this);
231 } 210 }
232 for (intptr_t i = 0; i < deopt_stubs_.length(); i++) { 211 for (intptr_t i = 0; i < deopt_stubs_.length(); i++) {
(...skipping 408 matching lines...) Expand 10 before | Expand all | Expand 10 after
641 switch (result_location.policy()) { 620 switch (result_location.policy()) {
642 case Location::kAny: 621 case Location::kAny:
643 case Location::kPrefersRegister: 622 case Location::kPrefersRegister:
644 case Location::kRequiresRegister: 623 case Location::kRequiresRegister:
645 result_location = Location::RegisterLocation( 624 result_location = Location::RegisterLocation(
646 AllocateFreeRegister(blocked_registers)); 625 AllocateFreeRegister(blocked_registers));
647 break; 626 break;
648 case Location::kSameAsFirstInput: 627 case Location::kSameAsFirstInput:
649 result_location = locs->in(0); 628 result_location = locs->in(0);
650 break; 629 break;
630 case Location::kRequiresXmmRegister:
631 UNREACHABLE();
632 break;
651 } 633 }
652 locs->set_out(result_location); 634 locs->set_out(result_location);
653 } 635 }
654 } 636 }
655 637
656 638
657 ParallelMoveResolver::ParallelMoveResolver(FlowGraphCompiler* compiler) 639 ParallelMoveResolver::ParallelMoveResolver(FlowGraphCompiler* compiler)
658 : compiler_(compiler), moves_(32) {} 640 : compiler_(compiler), moves_(32) {}
659 641
660 642
(...skipping 95 matching lines...) Expand 10 before | Expand all | Expand 10 after
756 return; 738 return;
757 } 739 }
758 } 740 }
759 741
760 // This move is not blocked. 742 // This move is not blocked.
761 EmitMove(index); 743 EmitMove(index);
762 } 744 }
763 745
764 746
765 } // namespace dart 747 } // namespace dart
OLDNEW
« no previous file with comments | « runtime/vm/flow_graph_allocator.cc ('k') | runtime/vm/flow_graph_compiler_ia32.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698