Chromium Code Reviews| 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 "vm/cpu.h" | 10 #include "vm/cpu.h" |
| (...skipping 3974 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 3985 const Register temp = CanDeoptimize() ? locs()->temp(0).reg() : kNoRegister; | 3985 const Register temp = CanDeoptimize() ? locs()->temp(0).reg() : kNoRegister; |
| 3986 Label* deopt = CanDeoptimize() ? | 3986 Label* deopt = CanDeoptimize() ? |
| 3987 compiler->AddDeoptStub(GetDeoptId(), ICData::kDeoptUnboxInteger) : NULL; | 3987 compiler->AddDeoptStub(GetDeoptId(), ICData::kDeoptUnboxInteger) : NULL; |
| 3988 Label* out_of_range = !is_truncating() ? deopt : NULL; | 3988 Label* out_of_range = !is_truncating() ? deopt : NULL; |
| 3989 ASSERT(value != out); | 3989 ASSERT(value != out); |
| 3990 | 3990 |
| 3991 if (value_cid == kSmiCid) { | 3991 if (value_cid == kSmiCid) { |
| 3992 __ SmiUntag(out, value); | 3992 __ SmiUntag(out, value); |
| 3993 } else if (value_cid == kMintCid) { | 3993 } else if (value_cid == kMintCid) { |
| 3994 LoadInt32FromMint(compiler, value, out, temp, out_of_range); | 3994 LoadInt32FromMint(compiler, value, out, temp, out_of_range); |
| 3995 } else if (!CanDeoptimize()) { | |
| 3996 Label done; | |
| 3997 __ SmiUntag(out, value, &done); | |
| 3998 LoadInt32FromMint(compiler, value, out, temp, out_of_range); | |
|
Florian Schneider
2014/12/02 13:12:03
s/out_of_range/NULL/
since it is always NULL in t
Vyacheslav Egorov (Google)
2014/12/02 13:15:58
Done.
| |
| 3999 __ Bind(&done); | |
| 3995 } else { | 4000 } else { |
| 3996 Label done; | 4001 Label done; |
| 3997 __ SmiUntag(out, value, &done); | 4002 __ SmiUntag(out, value, &done); |
| 3998 __ CompareClassId(value, kMintCid, temp); | 4003 __ CompareClassId(value, kMintCid, temp); |
| 3999 __ b(deopt, NE); | 4004 __ b(deopt, NE); |
| 4000 LoadInt32FromMint(compiler, value, out, temp, out_of_range); | 4005 LoadInt32FromMint(compiler, value, out, temp, out_of_range); |
| 4001 __ Bind(&done); | 4006 __ Bind(&done); |
| 4002 } | 4007 } |
| 4003 } | 4008 } |
| 4004 | 4009 |
| (...skipping 2898 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 6903 compiler->GenerateCall(token_pos(), &label, stub_kind_, locs()); | 6908 compiler->GenerateCall(token_pos(), &label, stub_kind_, locs()); |
| 6904 #if defined(DEBUG) | 6909 #if defined(DEBUG) |
| 6905 __ LoadImmediate(R4, kInvalidObjectPointer); | 6910 __ LoadImmediate(R4, kInvalidObjectPointer); |
| 6906 __ LoadImmediate(R5, kInvalidObjectPointer); | 6911 __ LoadImmediate(R5, kInvalidObjectPointer); |
| 6907 #endif | 6912 #endif |
| 6908 } | 6913 } |
| 6909 | 6914 |
| 6910 } // namespace dart | 6915 } // namespace dart |
| 6911 | 6916 |
| 6912 #endif // defined TARGET_ARCH_ARM | 6917 #endif // defined TARGET_ARCH_ARM |
| OLD | NEW |