File tree 1 file changed +15
-5
lines changed
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)
2503
2503
2504
2504
/* return sNaN double if x was sNaN float */
2505
2505
if (isnan (x )) {
2506
+ double y = x ; /* will make qNaN double */
2506
2507
uint32_t v ;
2508
+ uint64_t u64 ;
2509
+
2507
2510
memcpy (& v , & x , 4 );
2511
+ memcpy (& u64 , & y , 8 );
2508
2512
2509
2513
if ((v & (1 << 22 )) == 0 ) {
2510
- double y = x ; /* will make qNaN double */
2511
- uint64_t u64 ;
2512
- memcpy (& u64 , & y , 8 );
2513
2514
u64 &= ~(1ULL << 51 ); /* make sNaN */
2514
- memcpy (& y , & u64 , 8 );
2515
- return y ;
2516
2515
}
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 ;
2517
2527
}
2518
2528
2519
2529
return x ;
You can’t perform that action at this time.
0 commit comments