int128.h: Avoid undefined behaviours involving signed arithmetic
Add casts when we're performing arithmetic on the .hi parts of an Int128, to avoid undefined behaviour. Signed-off-by: Peter Maydell <peter.maydell@linaro.org> Signed-off-by: Michael Tokarev <mjt@tls.msk.ru>
This commit is contained in:
		
							parent
							
								
									ee25595f01
								
							
						
					
					
						commit
						423d00c857
					
				@ -53,7 +53,7 @@ static inline Int128 int128_rshift(Int128 a, int n)
 | 
			
		||||
    if (n >= 64) {
 | 
			
		||||
        return (Int128) { h, h >> 63 };
 | 
			
		||||
    } else {
 | 
			
		||||
        return (Int128) { (a.lo >> n) | (a.hi << (64 - n)), h };
 | 
			
		||||
        return (Int128) { (a.lo >> n) | ((uint64_t)a.hi << (64 - n)), h };
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@ -78,7 +78,7 @@ static inline Int128 int128_neg(Int128 a)
 | 
			
		||||
 | 
			
		||||
static inline Int128 int128_sub(Int128 a, Int128 b)
 | 
			
		||||
{
 | 
			
		||||
    return (Int128){ a.lo - b.lo, a.hi - b.hi - (a.lo < b.lo) };
 | 
			
		||||
    return (Int128){ a.lo - b.lo, (uint64_t)a.hi - b.hi - (a.lo < b.lo) };
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static inline bool int128_nonneg(Int128 a)
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user