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

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

Issue 1690903003: Remove support for Javascript warnings in the VM. (Closed) Base URL: git@github.com:dart-lang/sdk.git@master
Patch Set: Created 4 years, 10 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
« no previous file with comments | « runtime/vm/intermediate_language.cc ('k') | runtime/vm/intermediate_language_arm64.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 "vm/compiler.h" 10 #include "vm/compiler.h"
(...skipping 6051 matching lines...) Expand 10 before | Expand all | Expand 10 after
6062 } 6062 }
6063 } else { 6063 } else {
6064 const Register length = length_loc.reg(); 6064 const Register length = length_loc.reg();
6065 const Register index = index_loc.reg(); 6065 const Register index = index_loc.reg();
6066 __ cmp(index, Operand(length)); 6066 __ cmp(index, Operand(length));
6067 __ b(deopt, CS); 6067 __ b(deopt, CS);
6068 } 6068 }
6069 } 6069 }
6070 6070
6071 6071
6072 static void EmitJavascriptIntOverflowCheck(FlowGraphCompiler* compiler,
6073 Label* overflow,
6074 Register result_lo,
6075 Register result_hi) {
6076 // Compare upper half.
6077 Label check_lower;
6078 __ CompareImmediate(result_hi, 0x00200000);
6079 __ b(overflow, GT);
6080 __ b(&check_lower, NE);
6081
6082 __ CompareImmediate(result_lo, 0);
6083 __ b(overflow, HI);
6084
6085 __ Bind(&check_lower);
6086 __ CompareImmediate(result_hi, -0x00200000);
6087 __ b(overflow, LT);
6088 // Anything in the lower part would make the number bigger than the lower
6089 // bound, so we are done.
6090 }
6091
6092
6093 LocationSummary* BinaryMintOpInstr::MakeLocationSummary(Zone* zone, 6072 LocationSummary* BinaryMintOpInstr::MakeLocationSummary(Zone* zone,
6094 bool opt) const { 6073 bool opt) const {
6095 const intptr_t kNumInputs = 2; 6074 const intptr_t kNumInputs = 2;
6096 const intptr_t kNumTemps = 0; 6075 const intptr_t kNumTemps = 0;
6097 LocationSummary* summary = new(zone) LocationSummary( 6076 LocationSummary* summary = new(zone) LocationSummary(
6098 zone, kNumInputs, kNumTemps, LocationSummary::kNoCall); 6077 zone, kNumInputs, kNumTemps, LocationSummary::kNoCall);
6099 summary->set_in(0, Location::Pair(Location::RequiresRegister(), 6078 summary->set_in(0, Location::Pair(Location::RequiresRegister(),
6100 Location::RequiresRegister())); 6079 Location::RequiresRegister()));
6101 summary->set_in(1, Location::Pair(Location::RequiresRegister(), 6080 summary->set_in(1, Location::Pair(Location::RequiresRegister(),
6102 Location::RequiresRegister())); 6081 Location::RequiresRegister()));
(...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after
6160 // TODO(regis): Range analysis may eliminate the deopt check. 6139 // TODO(regis): Range analysis may eliminate the deopt check.
6161 __ cmp(left_hi, Operand(left_lo, ASR, 31)); 6140 __ cmp(left_hi, Operand(left_lo, ASR, 31));
6162 __ cmp(right_hi, Operand(right_lo, ASR, 31), EQ); 6141 __ cmp(right_hi, Operand(right_lo, ASR, 31), EQ);
6163 __ b(deopt, NE); 6142 __ b(deopt, NE);
6164 __ smull(out_lo, out_hi, left_lo, right_lo); 6143 __ smull(out_lo, out_hi, left_lo, right_lo);
6165 break; 6144 break;
6166 } 6145 }
6167 default: 6146 default:
6168 UNREACHABLE(); 6147 UNREACHABLE();
6169 } 6148 }
6170 if (FLAG_throw_on_javascript_int_overflow) {
6171 EmitJavascriptIntOverflowCheck(compiler, deopt, out_lo, out_hi);
6172 }
6173 } 6149 }
6174 6150
6175 6151
6176 LocationSummary* ShiftMintOpInstr::MakeLocationSummary(Zone* zone, 6152 LocationSummary* ShiftMintOpInstr::MakeLocationSummary(Zone* zone,
6177 bool opt) const { 6153 bool opt) const {
6178 const intptr_t kNumInputs = 2; 6154 const intptr_t kNumInputs = 2;
6179 const intptr_t kNumTemps = 0; 6155 const intptr_t kNumTemps = 0;
6180 LocationSummary* summary = new(zone) LocationSummary( 6156 LocationSummary* summary = new(zone) LocationSummary(
6181 zone, kNumInputs, kNumTemps, LocationSummary::kNoCall); 6157 zone, kNumInputs, kNumTemps, LocationSummary::kNoCall);
6182 summary->set_in(0, Location::Pair(Location::RequiresRegister(), 6158 summary->set_in(0, Location::Pair(Location::RequiresRegister(),
(...skipping 125 matching lines...) Expand 10 before | Expand all | Expand 10 after
6308 __ cmp(left_hi, Operand(out_hi, ASR, shift), EQ); 6284 __ cmp(left_hi, Operand(out_hi, ASR, shift), EQ);
6309 // Overflow if they aren't equal. 6285 // Overflow if they aren't equal.
6310 __ b(deopt, NE); 6286 __ b(deopt, NE);
6311 } 6287 }
6312 break; 6288 break;
6313 } 6289 }
6314 default: 6290 default:
6315 UNREACHABLE(); 6291 UNREACHABLE();
6316 } 6292 }
6317 } 6293 }
6318
6319 if (FLAG_throw_on_javascript_int_overflow) {
6320 EmitJavascriptIntOverflowCheck(compiler, deopt, out_lo, out_hi);
6321 }
6322 } 6294 }
6323 6295
6324 6296
6325 LocationSummary* UnaryMintOpInstr::MakeLocationSummary(Zone* zone, 6297 LocationSummary* UnaryMintOpInstr::MakeLocationSummary(Zone* zone,
6326 bool opt) const { 6298 bool opt) const {
6327 const intptr_t kNumInputs = 1; 6299 const intptr_t kNumInputs = 1;
6328 const intptr_t kNumTemps = 0; 6300 const intptr_t kNumTemps = 0;
6329 LocationSummary* summary = new(zone) LocationSummary( 6301 LocationSummary* summary = new(zone) LocationSummary(
6330 zone, kNumInputs, kNumTemps, LocationSummary::kNoCall); 6302 zone, kNumInputs, kNumTemps, LocationSummary::kNoCall);
6331 summary->set_in(0, Location::Pair(Location::RequiresRegister(), 6303 summary->set_in(0, Location::Pair(Location::RequiresRegister(),
6332 Location::RequiresRegister())); 6304 Location::RequiresRegister()));
6333 summary->set_out(0, Location::Pair(Location::RequiresRegister(), 6305 summary->set_out(0, Location::Pair(Location::RequiresRegister(),
6334 Location::RequiresRegister())); 6306 Location::RequiresRegister()));
6335 return summary; 6307 return summary;
6336 } 6308 }
6337 6309
6338 6310
6339 void UnaryMintOpInstr::EmitNativeCode(FlowGraphCompiler* compiler) { 6311 void UnaryMintOpInstr::EmitNativeCode(FlowGraphCompiler* compiler) {
6340 ASSERT(op_kind() == Token::kBIT_NOT); 6312 ASSERT(op_kind() == Token::kBIT_NOT);
6341 PairLocation* left_pair = locs()->in(0).AsPairLocation(); 6313 PairLocation* left_pair = locs()->in(0).AsPairLocation();
6342 Register left_lo = left_pair->At(0).reg(); 6314 Register left_lo = left_pair->At(0).reg();
6343 Register left_hi = left_pair->At(1).reg(); 6315 Register left_hi = left_pair->At(1).reg();
6344 6316
6345 PairLocation* out_pair = locs()->out(0).AsPairLocation(); 6317 PairLocation* out_pair = locs()->out(0).AsPairLocation();
6346 Register out_lo = out_pair->At(0).reg(); 6318 Register out_lo = out_pair->At(0).reg();
6347 Register out_hi = out_pair->At(1).reg(); 6319 Register out_hi = out_pair->At(1).reg();
6348
6349 Label* deopt = NULL;
6350
6351 if (FLAG_throw_on_javascript_int_overflow) {
6352 deopt = compiler->AddDeoptStub(deopt_id(), ICData::kDeoptUnaryMintOp);
6353 }
6354 __ mvn(out_lo, Operand(left_lo)); 6320 __ mvn(out_lo, Operand(left_lo));
6355 __ mvn(out_hi, Operand(left_hi)); 6321 __ mvn(out_hi, Operand(left_hi));
6356 if (FLAG_throw_on_javascript_int_overflow) {
6357 EmitJavascriptIntOverflowCheck(compiler, deopt, out_lo, out_hi);
6358 }
6359 } 6322 }
6360 6323
6361 6324
6362 CompileType BinaryUint32OpInstr::ComputeType() const { 6325 CompileType BinaryUint32OpInstr::ComputeType() const {
6363 return CompileType::Int(); 6326 return CompileType::Int();
6364 } 6327 }
6365 6328
6366 6329
6367 CompileType ShiftUint32OpInstr::ComputeType() const { 6330 CompileType ShiftUint32OpInstr::ComputeType() const {
6368 return CompileType::Int(); 6331 return CompileType::Int();
(...skipping 492 matching lines...) Expand 10 before | Expand all | Expand 10 after
6861 1, 6824 1,
6862 locs()); 6825 locs());
6863 __ Drop(1); 6826 __ Drop(1);
6864 __ Pop(result); 6827 __ Pop(result);
6865 } 6828 }
6866 6829
6867 6830
6868 } // namespace dart 6831 } // namespace dart
6869 6832
6870 #endif // defined TARGET_ARCH_ARM 6833 #endif // defined TARGET_ARCH_ARM
OLDNEW
« no previous file with comments | « runtime/vm/intermediate_language.cc ('k') | runtime/vm/intermediate_language_arm64.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698