softfloat: Handle float_muladd_negate_c when product is zero
Honour float_muladd_negate_c in the case where the product is zero and c is nonzero. Previously we would fail to negate c. Seen in (and tested against) the gfortran testsuite on MIPS. Signed-off-by: Richard Sandiford <rdsandiford@googlemail.com> Reviewed-by: Peter Maydell <peter.maydell@linaro.org> Signed-off-by: Blue Swirl <blauwirbel@gmail.com>
This commit is contained in:
		
							parent
							
								
									de16017dc8
								
							
						
					
					
						commit
						a6e7c18476
					
				| 
						 | 
				
			
			@ -2234,7 +2234,7 @@ float32 float32_muladd(float32 a, float32 b, float32 c, int flags STATUS_PARAM)
 | 
			
		|||
            }
 | 
			
		||||
        }
 | 
			
		||||
        /* Zero plus something non-zero : just return the something */
 | 
			
		||||
        return make_float32(float32_val(c) ^ (signflip << 31));
 | 
			
		||||
        return packFloat32(cSign ^ signflip, cExp, cSig);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    if (aExp == 0) {
 | 
			
		||||
| 
						 | 
				
			
			@ -3787,7 +3787,7 @@ float64 float64_muladd(float64 a, float64 b, float64 c, int flags STATUS_PARAM)
 | 
			
		|||
            }
 | 
			
		||||
        }
 | 
			
		||||
        /* Zero plus something non-zero : just return the something */
 | 
			
		||||
        return make_float64(float64_val(c) ^ ((uint64_t)signflip << 63));
 | 
			
		||||
        return packFloat64(cSign ^ signflip, cExp, cSig);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    if (aExp == 0) {
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue