1340a1341,1346
> } else if (fs1 >= numeric_limits<int32_t>::max()) {
> Rd_sd = numeric_limits<int32_t>::max();
> FFLAGS |= FloatInvalid;
> } else if (fs1 <= numeric_limits<int32_t>::min()) {
> Rd_sd = numeric_limits<int32_t>::min();
> FFLAGS |= FloatInvalid;
1343,1350d1348
< if (fetestexcept(FE_INVALID)) {
< if (signbit(fs1)) {
< Rd_sd = numeric_limits<int32_t>::min();
< } else {
< Rd_sd = numeric_limits<int32_t>::max();
< }
< feclearexcept(FE_INEXACT);
< }
1357c1355,1358
< if (fs1 < 0.0) {
---
> if (std::isnan(fs1)) {
> Rd = numeric_limits<uint64_t>::max();
> FFLAGS |= FloatInvalid;
> } else if (fs1 < 0.0) {
1359a1361,1363
> } else if (fs1 > numeric_limits<uint32_t>::max()) {
> Rd = numeric_limits<uint64_t>::max();
> FFLAGS |= FloatInvalid;
1362,1365d1365
< if (fetestexcept(FE_INVALID)) {
< Rd = numeric_limits<uint64_t>::max();
< feclearexcept(FE_INEXACT);
< }
1374a1375,1380
> } else if (fs1 > numeric_limits<int64_t>::max()) {
> Rd_sd = numeric_limits<int64_t>::max();
> FFLAGS |= FloatInvalid;
> } else if (fs1 < numeric_limits<int64_t>::min()) {
> Rd_sd = numeric_limits<int64_t>::min();
> FFLAGS |= FloatInvalid;
1377,1384d1382
< if (fetestexcept(FE_INVALID)) {
< if (signbit(fs1)) {
< Rd_sd = numeric_limits<int64_t>::min();
< } else {
< Rd_sd = numeric_limits<int64_t>::max();
< }
< feclearexcept(FE_INEXACT);
< }
1391c1389,1392
< if (fs1 < 0.0) {
---
> if (std::isnan(fs1)) {
> Rd = numeric_limits<uint64_t>::max();
> FFLAGS |= FloatInvalid;
> } else if (fs1 < 0.0) {
1393a1395,1397
> } else if (fs1 > numeric_limits<uint64_t>::max()) {
> Rd = numeric_limits<uint64_t>::max();
> FFLAGS |= FloatInvalid;
1396,1399d1399
< if (fetestexcept(FE_INVALID)) {
< Rd = numeric_limits<uint64_t>::max();
< feclearexcept(FE_INEXACT);
< }
1405,1412c1405,1415
< Rd_sd = (int32_t)Fs1;
< if (fetestexcept(FE_INVALID)) {
< if (Fs1 < 0.0) {
< Rd_sd = numeric_limits<int32_t>::min();
< } else {
< Rd_sd = numeric_limits<int32_t>::max();
< }
< feclearexcept(FE_INEXACT);
---
> if (std::isnan(Fs1)) {
> Rd_sd = numeric_limits<int32_t>::max();
> FFLAGS |= FloatInvalid;
> } else if (Fs1 > numeric_limits<int32_t>::max()) {
> Rd_sd = numeric_limits<int32_t>::max();
> FFLAGS |= FloatInvalid;
> } else if (Fs1 < numeric_limits<int32_t>::min()) {
> Rd_sd = numeric_limits<int32_t>::min();
> FFLAGS |= FloatInvalid;
> } else {
> Rd_sd = (int32_t)Fs1;
1416c1419,1422
< if (Fs1 < 0.0) {
---
> if (std::isnan(Fs1)) {
> Rd = numeric_limits<uint64_t>::max();
> FFLAGS |= FloatInvalid;
> } else if (Fs1 < 0) {
1418a1425,1427
> } else if (Fs1 > numeric_limits<uint32_t>::max()) {
> Rd = numeric_limits<uint64_t>::max();
> FFLAGS |= FloatInvalid;
1421,1424d1429
< if (fetestexcept(FE_INVALID)) {
< Rd = numeric_limits<uint64_t>::max();
< feclearexcept(FE_INEXACT);
< }
1428,1435c1433,1443
< Rd_sd = Fs1;
< if (fetestexcept(FE_INVALID)) {
< if (Fs1 < 0.0) {
< Rd_sd = numeric_limits<int64_t>::min();
< } else {
< Rd_sd = numeric_limits<int64_t>::max();
< }
< feclearexcept(FE_INEXACT);
---
> if (std::isnan(Fs1)) {
> Rd_sd = numeric_limits<int64_t>::max();
> FFLAGS |= FloatInvalid;
> } else if (Fs1 > numeric_limits<int64_t>::max()) {
> Rd_sd = numeric_limits<int64_t>::max();
> FFLAGS |= FloatInvalid;
> } else if (Fs1 < numeric_limits<int64_t>::min()) {
> Rd_sd = numeric_limits<int64_t>::min();
> FFLAGS |= FloatInvalid;
> } else {
> Rd_sd = Fs1;
1439c1447,1450
< if (Fs1 < 0.0) {
---
> if (std::isnan(Fs1)) {
> Rd = numeric_limits<uint64_t>::max();
> FFLAGS |= FloatInvalid;
> } else if (Fs1 < 0) {
1441a1453,1455
> } else if (Fs1 > numeric_limits<uint64_t>::max()) {
> Rd = numeric_limits<uint64_t>::max();
> FFLAGS |= FloatInvalid;
1443,1447c1457
< Rd = (uint64_t)Fs1;
< if (fetestexcept(FE_INVALID)) {
< Rd = numeric_limits<uint64_t>::max();
< feclearexcept(FE_INEXACT);
< }
---
> Rd = Fs1;