Chromium Code Reviews| OLD | NEW |
|---|---|
| 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_X64. | 5 #include "vm/globals.h" // Needed here to get TARGET_ARCH_X64. |
| 6 #if defined(TARGET_ARCH_X64) | 6 #if defined(TARGET_ARCH_X64) |
| 7 | 7 |
| 8 #include "vm/intermediate_language.h" | 8 #include "vm/intermediate_language.h" |
| 9 | 9 |
| 10 #include "lib/error.h" | 10 #include "lib/error.h" |
| (...skipping 445 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 456 } | 456 } |
| 457 EmitGenericEqualityCompare(compiler, this); | 457 EmitGenericEqualityCompare(compiler, this); |
| 458 } | 458 } |
| 459 | 459 |
| 460 | 460 |
| 461 LocationSummary* RelationalOpComp::MakeLocationSummary() const { | 461 LocationSummary* RelationalOpComp::MakeLocationSummary() const { |
| 462 if (operands_class_id() == kSmi || operands_class_id() == kDouble) { | 462 if (operands_class_id() == kSmi || operands_class_id() == kDouble) { |
| 463 const intptr_t kNumInputs = 2; | 463 const intptr_t kNumInputs = 2; |
| 464 const intptr_t kNumTemps = 1; | 464 const intptr_t kNumTemps = 1; |
| 465 LocationSummary* summary = new LocationSummary(kNumInputs, | 465 LocationSummary* summary = new LocationSummary(kNumInputs, |
| 466 kNumTemps, | 466 kNumTemps); |
| 467 LocationSummary::kCall); | |
| 468 summary->set_in(0, Location::RequiresRegister()); | 467 summary->set_in(0, Location::RequiresRegister()); |
| 469 summary->set_in(1, Location::RequiresRegister()); | 468 summary->set_in(1, Location::RequiresRegister()); |
| 470 if (!is_fused_with_branch()) { | 469 if (!is_fused_with_branch()) { |
| 471 summary->set_out(Location::RequiresRegister()); | 470 summary->set_out(Location::RequiresRegister()); |
| 472 } | 471 } |
| 473 summary->set_temp(0, Location::RequiresRegister()); | 472 summary->set_temp(0, Location::RequiresRegister()); |
| 474 return summary; | 473 return summary; |
| 475 } | 474 } |
| 476 ASSERT(!is_fused_with_branch()); | 475 ASSERT(!is_fused_with_branch()); |
| 477 ASSERT(operands_class_id() == kObject); | 476 ASSERT(operands_class_id() == kObject); |
| (...skipping 887 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1365 } | 1364 } |
| 1366 | 1365 |
| 1367 | 1366 |
| 1368 LocationSummary* CheckStackOverflowComp::MakeLocationSummary() const { | 1367 LocationSummary* CheckStackOverflowComp::MakeLocationSummary() const { |
| 1369 const intptr_t kNumInputs = 0; | 1368 const intptr_t kNumInputs = 0; |
| 1370 const intptr_t kNumTemps = 1; | 1369 const intptr_t kNumTemps = 1; |
| 1371 // TODO(vegorov): spilling is required only on an infrequently executed path. | 1370 // TODO(vegorov): spilling is required only on an infrequently executed path. |
| 1372 LocationSummary* summary = new LocationSummary(kNumInputs, | 1371 LocationSummary* summary = new LocationSummary(kNumInputs, |
| 1373 kNumTemps, | 1372 kNumTemps, |
| 1374 LocationSummary::kCall); | 1373 LocationSummary::kCall); |
| 1375 summary->set_temp(0, Location::RequiresRegister()); | 1374 summary->set_temp(0, Location::RegisterLocation(R10)); |
|
srdjan
2012/07/19 22:54:39
Document why R10.
Vyacheslav Egorov (Google)
2012/07/24 12:26:41
Done.
| |
| 1376 return summary; | 1375 return summary; |
| 1377 } | 1376 } |
| 1378 | 1377 |
| 1379 | 1378 |
| 1380 void CheckStackOverflowComp::EmitNativeCode(FlowGraphCompiler* compiler) { | 1379 void CheckStackOverflowComp::EmitNativeCode(FlowGraphCompiler* compiler) { |
| 1381 Register temp = locs()->temp(0).reg(); | 1380 Register temp = locs()->temp(0).reg(); |
| 1382 // Generate stack overflow check. | 1381 // Generate stack overflow check. |
| 1383 __ movq(temp, Immediate(Isolate::Current()->stack_limit_address())); | 1382 __ movq(temp, Immediate(Isolate::Current()->stack_limit_address())); |
| 1384 __ cmpq(RSP, Address(temp, 0)); | 1383 __ cmpq(RSP, Address(temp, 0)); |
| 1385 Label no_stack_overflow; | 1384 Label no_stack_overflow; |
| (...skipping 593 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1979 } | 1978 } |
| 1980 __ Bind(&done); | 1979 __ Bind(&done); |
| 1981 } | 1980 } |
| 1982 | 1981 |
| 1983 | 1982 |
| 1984 } // namespace dart | 1983 } // namespace dart |
| 1985 | 1984 |
| 1986 #undef __ | 1985 #undef __ |
| 1987 | 1986 |
| 1988 #endif // defined TARGET_ARCH_X64 | 1987 #endif // defined TARGET_ARCH_X64 |
| OLD | NEW |