File tree Expand file tree Collapse file tree 1 file changed +15
-5
lines changed
Expand file tree Collapse file tree 1 file changed +15
-5
lines changed Original file line number Diff line number Diff line change @@ -2503,17 +2503,27 @@ PyFloat_Unpack4(const char *data, int le)
25032503
25042504 /* return sNaN double if x was sNaN float */
25052505 if (isnan (x )) {
2506+ double y = x ; /* will make qNaN double */
25062507 uint32_t v ;
2508+ uint64_t u64 ;
2509+
25072510 memcpy (& v , & x , 4 );
2511+ memcpy (& u64 , & y , 8 );
25082512
25092513 if ((v & (1 << 22 )) == 0 ) {
2510- double y = x ; /* will make qNaN double */
2511- uint64_t u64 ;
2512- memcpy (& u64 , & y , 8 );
25132514 u64 &= ~(1ULL << 51 ); /* make sNaN */
2514- memcpy (& y , & u64 , 8 );
2515- return y ;
25162515 }
2516+
2517+ /* Workaround RISC-V, see PyFloat_Pack4() */
2518+ if (v & (1 << 31 )) {
2519+ u64 |= (1ULL << 63 ); /* set sign */
2520+ }
2521+ /* add payload */
2522+ u64 -= (u64 & 0x7ffffffffffffULL );
2523+ u64 += ((v & 0x3fffffULL ) << 29 );
2524+
2525+ memcpy (& y , & u64 , 8 );
2526+ return y ;
25172527 }
25182528
25192529 return x ;
You can’t perform that action at this time.
0 commit comments