@@ -1455,6 +1455,7 @@ bool LiftoffAssembler::emit_type_conversion(WasmOpcode opcode,
14551455 fcmpu (src.fp (), kScratchDoubleReg );
14561456 bunordered (trap);
14571457
1458+ mtfsb0 (VXCVI); // clear FPSCR:VXCVI bit
14581459 fctiwz (kScratchDoubleReg , src.fp ());
14591460 MovDoubleLowToInt (dst.gp (), kScratchDoubleReg );
14601461 mcrfs (cr7, VXCVI);
@@ -1463,6 +1464,7 @@ bool LiftoffAssembler::emit_type_conversion(WasmOpcode opcode,
14631464 }
14641465 case kExprI32UConvertF64 :
14651466 case kExprI32UConvertF32 : {
1467+ mtfsb0 (VXCVI); // clear FPSCR:VXCVI bit
14661468 ConvertDoubleToUnsignedInt64 (src.fp (), r0, kScratchDoubleReg ,
14671469 kRoundToZero );
14681470 mcrfs (cr7, VXCVI); // extract FPSCR field containing VXCVI into cr7
@@ -1478,6 +1480,7 @@ bool LiftoffAssembler::emit_type_conversion(WasmOpcode opcode,
14781480 fcmpu (src.fp (), kScratchDoubleReg );
14791481 bunordered (trap);
14801482
1483+ mtfsb0 (VXCVI); // clear FPSCR:VXCVI bit
14811484 fctidz (kScratchDoubleReg , src.fp ());
14821485 MovDoubleToInt64 (dst.gp (), kScratchDoubleReg );
14831486 mcrfs (cr7, VXCVI);
@@ -1490,6 +1493,7 @@ bool LiftoffAssembler::emit_type_conversion(WasmOpcode opcode,
14901493 fcmpu (src.fp (), kScratchDoubleReg );
14911494 bunordered (trap);
14921495
1496+ mtfsb0 (VXCVI); // clear FPSCR:VXCVI bit
14931497 fctiduz (kScratchDoubleReg , src.fp ());
14941498 MovDoubleToInt64 (dst.gp (), kScratchDoubleReg );
14951499 mcrfs (cr7, VXCVI);
0 commit comments