| 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_IA32. | 5 #include "vm/globals.h" // Needed here to get TARGET_ARCH_IA32. |
| 6 #if defined(TARGET_ARCH_IA32) | 6 #if defined(TARGET_ARCH_IA32) |
| 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 1055 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1066 compiler->GenerateCall(token_pos(), | 1066 compiler->GenerateCall(token_pos(), |
| 1067 try_index(), | 1067 try_index(), |
| 1068 &StubCode::AllocateArrayLabel(), | 1068 &StubCode::AllocateArrayLabel(), |
| 1069 PcDescriptors::kOther, | 1069 PcDescriptors::kOther, |
| 1070 locs()); | 1070 locs()); |
| 1071 ASSERT(locs()->out().reg() == EAX); | 1071 ASSERT(locs()->out().reg() == EAX); |
| 1072 | 1072 |
| 1073 // Pop the element values from the stack into the array. | 1073 // Pop the element values from the stack into the array. |
| 1074 __ leal(EDX, FieldAddress(EAX, Array::data_offset())); | 1074 __ leal(EDX, FieldAddress(EAX, Array::data_offset())); |
| 1075 for (int i = ArgumentCount() - 1; i >= 0; --i) { | 1075 for (int i = ArgumentCount() - 1; i >= 0; --i) { |
| 1076 ASSERT(ArgumentAt(i)->value()->IsUse()); | |
| 1077 __ popl(Address(EDX, i * kWordSize)); | 1076 __ popl(Address(EDX, i * kWordSize)); |
| 1078 } | 1077 } |
| 1079 } | 1078 } |
| 1080 | 1079 |
| 1081 | 1080 |
| 1082 LocationSummary* | 1081 LocationSummary* |
| 1083 AllocateObjectWithBoundsCheckComp::MakeLocationSummary() const { | 1082 AllocateObjectWithBoundsCheckComp::MakeLocationSummary() const { |
| 1084 const intptr_t kNumInputs = 2; | 1083 const intptr_t kNumInputs = 2; |
| 1085 const intptr_t kNumTemps = 0; | 1084 const intptr_t kNumTemps = 0; |
| 1086 LocationSummary* locs = | 1085 LocationSummary* locs = |
| (...skipping 183 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1270 new LocationSummary(kNumInputs, kNumTemps, LocationSummary::kNoCall); | 1269 new LocationSummary(kNumInputs, kNumTemps, LocationSummary::kNoCall); |
| 1271 locs->set_in(0, Location::RequiresRegister()); | 1270 locs->set_in(0, Location::RequiresRegister()); |
| 1272 locs->set_out(Location::SameAsFirstInput()); | 1271 locs->set_out(Location::SameAsFirstInput()); |
| 1273 locs->set_temp(0, Location::RequiresRegister()); | 1272 locs->set_temp(0, Location::RequiresRegister()); |
| 1274 return locs; | 1273 return locs; |
| 1275 } | 1274 } |
| 1276 | 1275 |
| 1277 | 1276 |
| 1278 void ExtractConstructorInstantiatorComp::EmitNativeCode( | 1277 void ExtractConstructorInstantiatorComp::EmitNativeCode( |
| 1279 FlowGraphCompiler* compiler) { | 1278 FlowGraphCompiler* compiler) { |
| 1280 ASSERT(instantiator()->IsUse()); | |
| 1281 Register instantiator_reg = locs()->in(0).reg(); | 1279 Register instantiator_reg = locs()->in(0).reg(); |
| 1282 ASSERT(locs()->out().reg() == instantiator_reg); | 1280 ASSERT(locs()->out().reg() == instantiator_reg); |
| 1283 Register temp_reg = locs()->temp(0).reg(); | 1281 Register temp_reg = locs()->temp(0).reg(); |
| 1284 | 1282 |
| 1285 // instantiator_reg is the instantiator AbstractTypeArguments object | 1283 // instantiator_reg is the instantiator AbstractTypeArguments object |
| 1286 // (or null). If the instantiator is null and if the type argument vector | 1284 // (or null). If the instantiator is null and if the type argument vector |
| 1287 // instantiated from null becomes a vector of Dynamic, then use null as | 1285 // instantiated from null becomes a vector of Dynamic, then use null as |
| 1288 // the type arguments and do not pass the instantiator. | 1286 // the type arguments and do not pass the instantiator. |
| 1289 Label done; | 1287 Label done; |
| 1290 const intptr_t len = type_arguments().Length(); | 1288 const intptr_t len = type_arguments().Length(); |
| (...skipping 965 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2256 } | 2254 } |
| 2257 __ j(ABOVE_EQUAL, deopt); | 2255 __ j(ABOVE_EQUAL, deopt); |
| 2258 } | 2256 } |
| 2259 | 2257 |
| 2260 | 2258 |
| 2261 } // namespace dart | 2259 } // namespace dart |
| 2262 | 2260 |
| 2263 #undef __ | 2261 #undef __ |
| 2264 | 2262 |
| 2265 #endif // defined TARGET_ARCH_X64 | 2263 #endif // defined TARGET_ARCH_X64 |
| OLD | NEW |