kernel: avoid signed overflow UB on MSVC
This commit is contained in:
		@@ -91,6 +91,7 @@ add_library(common STATIC
 | 
			
		||||
    multi_level_page_table.h
 | 
			
		||||
    nvidia_flags.cpp
 | 
			
		||||
    nvidia_flags.h
 | 
			
		||||
    overflow.h
 | 
			
		||||
    page_table.cpp
 | 
			
		||||
    page_table.h
 | 
			
		||||
    param_package.cpp
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										22
									
								
								src/common/overflow.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										22
									
								
								src/common/overflow.h
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,22 @@
 | 
			
		||||
// SPDX-FileCopyrightText: Copyright 2023 yuzu Emulator Project
 | 
			
		||||
// SPDX-License-Identifier: GPL-2.0-or-later
 | 
			
		||||
 | 
			
		||||
#pragma once
 | 
			
		||||
 | 
			
		||||
#include <type_traits>
 | 
			
		||||
#include "bit_cast.h"
 | 
			
		||||
 | 
			
		||||
namespace Common {
 | 
			
		||||
 | 
			
		||||
template <typename T>
 | 
			
		||||
    requires(std::is_integral_v<T> && std::is_signed_v<T>)
 | 
			
		||||
inline T WrappingAdd(T lhs, T rhs) {
 | 
			
		||||
    using U = std::make_unsigned_t<T>;
 | 
			
		||||
 | 
			
		||||
    U lhs_u = BitCast<U>(lhs);
 | 
			
		||||
    U rhs_u = BitCast<U>(rhs);
 | 
			
		||||
 | 
			
		||||
    return BitCast<T>(lhs_u + rhs_u);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
} // namespace Common
 | 
			
		||||
		Reference in New Issue
	
	Block a user