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

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

Issue 19806005: Increases the number of ARM floating-point registers. (Closed) Base URL: http://dart.googlecode.com/svn/branches/bleeding_edge/dart/
Patch Set: Created 7 years, 5 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/constants_arm.h ('k') | runtime/vm/simulator_arm.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) 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
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
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
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
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
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
OLDNEW
« no previous file with comments | « runtime/vm/constants_arm.h ('k') | runtime/vm/simulator_arm.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698