@@ -543,16 +543,16 @@ bool Literal::isCanonicalNaN() {
543543 if (!isNaN ()) {
544544 return false ;
545545 }
546- return (type == Type::f32 && NaNPayload (getf32 ()) == (1u << 23 ) - 1 ) ||
547- (type == Type::f64 && NaNPayload (getf64 ()) == (1ull << 52 ) - 1 );
546+ return (type == Type::f32 && NaNPayload (getf32 ()) == (1u << 22 ) ) ||
547+ (type == Type::f64 && NaNPayload (getf64 ()) == (1ull << 51 ) );
548548}
549549
550550bool Literal::isArithmeticNaN () {
551551 if (!isNaN ()) {
552552 return false ;
553553 }
554- return (type == Type::f32 && NaNPayload (getf32 ()) > (1u << 23 ) - 1 ) ||
555- (type == Type::f64 && NaNPayload (getf64 ()) > (1ull << 52 ) - 1 );
554+ return (type == Type::f32 && NaNPayload (getf32 ()) >= (1u << 22 ) ) ||
555+ (type == Type::f64 && NaNPayload (getf64 ()) >= (1ull << 51 ) );
556556}
557557
558558uint32_t Literal::NaNPayload (float f) {
@@ -1104,9 +1104,9 @@ Literal Literal::abs() const {
11041104Literal Literal::ceil () const {
11051105 switch (type.getBasic ()) {
11061106 case Type::f32 :
1107- return Literal (std::ceil (getf32 ()));
1107+ return standardizeNaN ( Literal (std::ceil (getf32 () )));
11081108 case Type::f64 :
1109- return Literal (std::ceil (getf64 ()));
1109+ return standardizeNaN ( Literal (std::ceil (getf64 () )));
11101110 default :
11111111 WASM_UNREACHABLE (" unexpected type" );
11121112 }
@@ -1115,9 +1115,9 @@ Literal Literal::ceil() const {
11151115Literal Literal::floor () const {
11161116 switch (type.getBasic ()) {
11171117 case Type::f32 :
1118- return Literal (std::floor (getf32 ()));
1118+ return standardizeNaN ( Literal (std::floor (getf32 () )));
11191119 case Type::f64 :
1120- return Literal (std::floor (getf64 ()));
1120+ return standardizeNaN ( Literal (std::floor (getf64 () )));
11211121 default :
11221122 WASM_UNREACHABLE (" unexpected type" );
11231123 }
@@ -1126,9 +1126,9 @@ Literal Literal::floor() const {
11261126Literal Literal::trunc () const {
11271127 switch (type.getBasic ()) {
11281128 case Type::f32 :
1129- return Literal (std::trunc (getf32 ()));
1129+ return standardizeNaN ( Literal (std::trunc (getf32 () )));
11301130 case Type::f64 :
1131- return Literal (std::trunc (getf64 ()));
1131+ return standardizeNaN ( Literal (std::trunc (getf64 () )));
11321132 default :
11331133 WASM_UNREACHABLE (" unexpected type" );
11341134 }
@@ -1149,8 +1149,11 @@ Literal Literal::sqrt() const {
11491149 switch (type.getBasic ()) {
11501150 case Type::f32 :
11511151 return standardizeNaN (Literal (std::sqrt (getf32 ())));
1152- case Type::f64 :
1152+ case Type::f64 : {
1153+ std::cout << getf64 () << " " << std::sqrt (getf64 ()) << " "
1154+ << std::isnan (std::sqrt (getf64 ())) << " \n " ;
11531155 return standardizeNaN (Literal (std::sqrt (getf64 ())));
1156+ }
11541157 default :
11551158 WASM_UNREACHABLE (" unexpected type" );
11561159 }
0 commit comments