| OLD | NEW |
| 1 // Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2013, 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_ARM. | 5 #include "vm/globals.h" // Needed here to get TARGET_ARCH_ARM. |
| 6 #if defined(TARGET_ARCH_ARM) | 6 #if defined(TARGET_ARCH_ARM) |
| 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 2929 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2940 default: UNREACHABLE(); | 2940 default: UNREACHABLE(); |
| 2941 } | 2941 } |
| 2942 } | 2942 } |
| 2943 | 2943 |
| 2944 | 2944 |
| 2945 LocationSummary* Float32x4ShuffleInstr::MakeLocationSummary() const { | 2945 LocationSummary* Float32x4ShuffleInstr::MakeLocationSummary() const { |
| 2946 const intptr_t kNumInputs = 1; | 2946 const intptr_t kNumInputs = 1; |
| 2947 const intptr_t kNumTemps = 0; | 2947 const intptr_t kNumTemps = 0; |
| 2948 LocationSummary* summary = | 2948 LocationSummary* summary = |
| 2949 new LocationSummary(kNumInputs, kNumTemps, LocationSummary::kNoCall); | 2949 new LocationSummary(kNumInputs, kNumTemps, LocationSummary::kNoCall); |
| 2950 summary->set_in(0, Location::RequiresFpuRegister()); | 2950 // Low (< Q7) Q registers are needed for the vcvtds instruction. |
| 2951 summary->set_out(Location::RequiresFpuRegister()); | 2951 summary->set_in(0, Location::FpuRegisterLocation(Q5)); |
| 2952 summary->set_out(Location::FpuRegisterLocation(Q6)); |
| 2952 return summary; | 2953 return summary; |
| 2953 } | 2954 } |
| 2954 | 2955 |
| 2955 | 2956 |
| 2956 void Float32x4ShuffleInstr::EmitNativeCode(FlowGraphCompiler* compiler) { | 2957 void Float32x4ShuffleInstr::EmitNativeCode(FlowGraphCompiler* compiler) { |
| 2957 QRegister value = locs()->in(0).fpu_reg(); | 2958 QRegister value = locs()->in(0).fpu_reg(); |
| 2958 QRegister result = locs()->out().fpu_reg(); | 2959 QRegister result = locs()->out().fpu_reg(); |
| 2959 DRegister dresult0 = EvenDRegisterOf(result); | 2960 DRegister dresult0 = EvenDRegisterOf(result); |
| 2960 SRegister sresult0 = EvenSRegisterOf(dresult0); | 2961 SRegister sresult0 = EvenSRegisterOf(dresult0); |
| 2961 | 2962 |
| (...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3002 | 3003 |
| 3003 LocationSummary* Float32x4ConstructorInstr::MakeLocationSummary() const { | 3004 LocationSummary* Float32x4ConstructorInstr::MakeLocationSummary() const { |
| 3004 const intptr_t kNumInputs = 4; | 3005 const intptr_t kNumInputs = 4; |
| 3005 const intptr_t kNumTemps = 0; | 3006 const intptr_t kNumTemps = 0; |
| 3006 LocationSummary* summary = | 3007 LocationSummary* summary = |
| 3007 new LocationSummary(kNumInputs, kNumTemps, LocationSummary::kNoCall); | 3008 new LocationSummary(kNumInputs, kNumTemps, LocationSummary::kNoCall); |
| 3008 summary->set_in(0, Location::RequiresFpuRegister()); | 3009 summary->set_in(0, Location::RequiresFpuRegister()); |
| 3009 summary->set_in(1, Location::RequiresFpuRegister()); | 3010 summary->set_in(1, Location::RequiresFpuRegister()); |
| 3010 summary->set_in(2, Location::RequiresFpuRegister()); | 3011 summary->set_in(2, Location::RequiresFpuRegister()); |
| 3011 summary->set_in(3, Location::RequiresFpuRegister()); | 3012 summary->set_in(3, Location::RequiresFpuRegister()); |
| 3012 summary->set_out(Location::RequiresFpuRegister()); | 3013 // Low (< 7) Q registers are needed for the vcvtsd instruction. |
| 3014 summary->set_out(Location::FpuRegisterLocation(Q6)); |
| 3013 return summary; | 3015 return summary; |
| 3014 } | 3016 } |
| 3015 | 3017 |
| 3016 | 3018 |
| 3017 void Float32x4ConstructorInstr::EmitNativeCode(FlowGraphCompiler* compiler) { | 3019 void Float32x4ConstructorInstr::EmitNativeCode(FlowGraphCompiler* compiler) { |
| 3018 QRegister q0 = locs()->in(0).fpu_reg(); | 3020 QRegister q0 = locs()->in(0).fpu_reg(); |
| 3019 QRegister q1 = locs()->in(1).fpu_reg(); | 3021 QRegister q1 = locs()->in(1).fpu_reg(); |
| 3020 QRegister q2 = locs()->in(2).fpu_reg(); | 3022 QRegister q2 = locs()->in(2).fpu_reg(); |
| 3021 QRegister q3 = locs()->in(3).fpu_reg(); | 3023 QRegister q3 = locs()->in(3).fpu_reg(); |
| 3022 QRegister r = locs()->out().fpu_reg(); | 3024 QRegister r = locs()->out().fpu_reg(); |
| (...skipping 149 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3172 } | 3174 } |
| 3173 | 3175 |
| 3174 | 3176 |
| 3175 LocationSummary* Float32x4WithInstr::MakeLocationSummary() const { | 3177 LocationSummary* Float32x4WithInstr::MakeLocationSummary() const { |
| 3176 const intptr_t kNumInputs = 2; | 3178 const intptr_t kNumInputs = 2; |
| 3177 const intptr_t kNumTemps = 0; | 3179 const intptr_t kNumTemps = 0; |
| 3178 LocationSummary* summary = | 3180 LocationSummary* summary = |
| 3179 new LocationSummary(kNumInputs, kNumTemps, LocationSummary::kNoCall); | 3181 new LocationSummary(kNumInputs, kNumTemps, LocationSummary::kNoCall); |
| 3180 summary->set_in(0, Location::RequiresFpuRegister()); | 3182 summary->set_in(0, Location::RequiresFpuRegister()); |
| 3181 summary->set_in(1, Location::RequiresFpuRegister()); | 3183 summary->set_in(1, Location::RequiresFpuRegister()); |
| 3182 summary->set_out(Location::RequiresFpuRegister()); | 3184 // Low (< 7) Q registers are needed for the vmovs instruction. |
| 3185 summary->set_out(Location::FpuRegisterLocation(Q6)); |
| 3183 return summary; | 3186 return summary; |
| 3184 } | 3187 } |
| 3185 | 3188 |
| 3186 | 3189 |
| 3187 void Float32x4WithInstr::EmitNativeCode(FlowGraphCompiler* compiler) { | 3190 void Float32x4WithInstr::EmitNativeCode(FlowGraphCompiler* compiler) { |
| 3188 QRegister replacement = locs()->in(0).fpu_reg(); | 3191 QRegister replacement = locs()->in(0).fpu_reg(); |
| 3189 QRegister value = locs()->in(1).fpu_reg(); | 3192 QRegister value = locs()->in(1).fpu_reg(); |
| 3190 QRegister result = locs()->out().fpu_reg(); | 3193 QRegister result = locs()->out().fpu_reg(); |
| 3191 | 3194 |
| 3192 DRegister dresult0 = EvenDRegisterOf(result); | 3195 DRegister dresult0 = EvenDRegisterOf(result); |
| (...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3239 void Uint32x4BoolConstructorInstr::EmitNativeCode(FlowGraphCompiler* compiler) { | 3242 void Uint32x4BoolConstructorInstr::EmitNativeCode(FlowGraphCompiler* compiler) { |
| 3240 UNIMPLEMENTED(); | 3243 UNIMPLEMENTED(); |
| 3241 } | 3244 } |
| 3242 | 3245 |
| 3243 | 3246 |
| 3244 LocationSummary* Uint32x4GetFlagInstr::MakeLocationSummary() const { | 3247 LocationSummary* Uint32x4GetFlagInstr::MakeLocationSummary() const { |
| 3245 const intptr_t kNumInputs = 1; | 3248 const intptr_t kNumInputs = 1; |
| 3246 const intptr_t kNumTemps = 0; | 3249 const intptr_t kNumTemps = 0; |
| 3247 LocationSummary* summary = | 3250 LocationSummary* summary = |
| 3248 new LocationSummary(kNumInputs, kNumTemps, LocationSummary::kNoCall); | 3251 new LocationSummary(kNumInputs, kNumTemps, LocationSummary::kNoCall); |
| 3249 summary->set_in(0, Location::RequiresFpuRegister()); | 3252 // Low (< 7) Q registers are needed for the vmovrs instruction. |
| 3253 summary->set_in(0, Location::FpuRegisterLocation(Q6)); |
| 3250 summary->set_out(Location::RequiresRegister()); | 3254 summary->set_out(Location::RequiresRegister()); |
| 3251 return summary; | 3255 return summary; |
| 3252 } | 3256 } |
| 3253 | 3257 |
| 3254 | 3258 |
| 3255 void Uint32x4GetFlagInstr::EmitNativeCode(FlowGraphCompiler* compiler) { | 3259 void Uint32x4GetFlagInstr::EmitNativeCode(FlowGraphCompiler* compiler) { |
| 3256 QRegister value = locs()->in(0).fpu_reg(); | 3260 QRegister value = locs()->in(0).fpu_reg(); |
| 3257 Register result = locs()->out().reg(); | 3261 Register result = locs()->out().reg(); |
| 3258 | 3262 |
| 3259 DRegister dvalue0 = EvenDRegisterOf(value); | 3263 DRegister dvalue0 = EvenDRegisterOf(value); |
| (...skipping 848 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 4108 compiler->GenerateCall(token_pos(), | 4112 compiler->GenerateCall(token_pos(), |
| 4109 &label, | 4113 &label, |
| 4110 PcDescriptors::kOther, | 4114 PcDescriptors::kOther, |
| 4111 locs()); | 4115 locs()); |
| 4112 __ Drop(2); // Discard type arguments and receiver. | 4116 __ Drop(2); // Discard type arguments and receiver. |
| 4113 } | 4117 } |
| 4114 | 4118 |
| 4115 } // namespace dart | 4119 } // namespace dart |
| 4116 | 4120 |
| 4117 #endif // defined TARGET_ARCH_ARM | 4121 #endif // defined TARGET_ARCH_ARM |
| OLD | NEW |