| Index: src/compiler/arm64/code-generator-arm64.cc
|
| diff --git a/src/compiler/arm64/code-generator-arm64.cc b/src/compiler/arm64/code-generator-arm64.cc
|
| index e22c3441f38f5048a74b7b212ce666cc997b1bfe..8bb5042c0210aef0ff48bbda7494de2d6d668a65 100644
|
| --- a/src/compiler/arm64/code-generator-arm64.cc
|
| +++ b/src/compiler/arm64/code-generator-arm64.cc
|
| @@ -1041,20 +1041,30 @@ void CodeGenerator::AssembleArchInstruction(Instruction* instr) {
|
| case kArm64Float32ToInt64:
|
| __ Fcvtzs(i.OutputRegister64(), i.InputFloat32Register(0));
|
| if (i.OutputCount() > 1) {
|
| + __ Mov(i.OutputRegister(1), 1);
|
| + Label done;
|
| __ Cmp(i.OutputRegister(0), 1);
|
| __ Ccmp(i.OutputRegister(0), -1, VFlag, vc);
|
| __ Fccmp(i.InputFloat32Register(0), i.InputFloat32Register(0), VFlag,
|
| vc);
|
| - __ Cset(i.OutputRegister(1), vc);
|
| + __ B(vc, &done);
|
| + __ Fcmp(i.InputFloat32Register(0), static_cast<float>(INT64_MIN));
|
| + __ Cset(i.OutputRegister(1), eq);
|
| + __ Bind(&done);
|
| }
|
| break;
|
| case kArm64Float64ToInt64:
|
| __ Fcvtzs(i.OutputRegister(0), i.InputDoubleRegister(0));
|
| if (i.OutputCount() > 1) {
|
| + __ Mov(i.OutputRegister(1), 1);
|
| + Label done;
|
| __ Cmp(i.OutputRegister(0), 1);
|
| __ Ccmp(i.OutputRegister(0), -1, VFlag, vc);
|
| __ Fccmp(i.InputDoubleRegister(0), i.InputDoubleRegister(0), VFlag, vc);
|
| - __ Cset(i.OutputRegister(1), vc);
|
| + __ B(vc, &done);
|
| + __ Fcmp(i.InputDoubleRegister(0), static_cast<double>(INT64_MIN));
|
| + __ Cset(i.OutputRegister(1), eq);
|
| + __ Bind(&done);
|
| }
|
| break;
|
| case kArm64Float32ToUint64:
|
|
|