@@ -1455,6 +1455,7 @@ bool LiftoffAssembler::emit_type_conversion(WasmOpcode opcode,
1455
1455
fcmpu (src.fp (), kScratchDoubleReg );
1456
1456
bunordered (trap);
1457
1457
1458
+ mtfsb0 (VXCVI); // clear FPSCR:VXCVI bit
1458
1459
fctiwz (kScratchDoubleReg , src.fp ());
1459
1460
MovDoubleLowToInt (dst.gp (), kScratchDoubleReg );
1460
1461
mcrfs (cr7, VXCVI);
@@ -1463,6 +1464,7 @@ bool LiftoffAssembler::emit_type_conversion(WasmOpcode opcode,
1463
1464
}
1464
1465
case kExprI32UConvertF64 :
1465
1466
case kExprI32UConvertF32 : {
1467
+ mtfsb0 (VXCVI); // clear FPSCR:VXCVI bit
1466
1468
ConvertDoubleToUnsignedInt64 (src.fp (), r0, kScratchDoubleReg ,
1467
1469
kRoundToZero );
1468
1470
mcrfs (cr7, VXCVI); // extract FPSCR field containing VXCVI into cr7
@@ -1478,6 +1480,7 @@ bool LiftoffAssembler::emit_type_conversion(WasmOpcode opcode,
1478
1480
fcmpu (src.fp (), kScratchDoubleReg );
1479
1481
bunordered (trap);
1480
1482
1483
+ mtfsb0 (VXCVI); // clear FPSCR:VXCVI bit
1481
1484
fctidz (kScratchDoubleReg , src.fp ());
1482
1485
MovDoubleToInt64 (dst.gp (), kScratchDoubleReg );
1483
1486
mcrfs (cr7, VXCVI);
@@ -1490,6 +1493,7 @@ bool LiftoffAssembler::emit_type_conversion(WasmOpcode opcode,
1490
1493
fcmpu (src.fp (), kScratchDoubleReg );
1491
1494
bunordered (trap);
1492
1495
1496
+ mtfsb0 (VXCVI); // clear FPSCR:VXCVI bit
1493
1497
fctiduz (kScratchDoubleReg , src.fp ());
1494
1498
MovDoubleToInt64 (dst.gp (), kScratchDoubleReg );
1495
1499
mcrfs (cr7, VXCVI);
0 commit comments