| Index: runtime/vm/intermediate_language_arm64.cc
|
| diff --git a/runtime/vm/intermediate_language_arm64.cc b/runtime/vm/intermediate_language_arm64.cc
|
| index 92c25d87e6da34e7dde357e7b041232f6258b3b7..d6b87182bb81156cf3b1faa4d740b4f5f5465ac3 100644
|
| --- a/runtime/vm/intermediate_language_arm64.cc
|
| +++ b/runtime/vm/intermediate_language_arm64.cc
|
| @@ -3310,6 +3310,17 @@ void UnboxInteger32Instr::EmitNativeCode(FlowGraphCompiler* compiler) {
|
| __ SmiUntag(out, value);
|
| } else if (value_cid == kMintCid) {
|
| __ LoadFieldFromOffset(out, value, Mint::value_offset(), PP);
|
| + } else if (!CanDeoptimize()) {
|
| + // Type information is not conclusive, but range analysis found
|
| + // the value to be in int64 range. Therefore it must be a smi
|
| + // or mint value.
|
| + ASSERT(is_truncating());
|
| + Label done;
|
| + __ SmiUntag(out, value);
|
| + __ TestImmediate(value, kSmiTagMask, PP);
|
| + __ b(&done, EQ);
|
| + __ LoadFieldFromOffset(out, value, Mint::value_offset(), PP);
|
| + __ Bind(&done);
|
| } else {
|
| Label done;
|
| __ SmiUntag(out, value);
|
|
|