| 
									
										
										
										
											2015-05-24 06:55:12 +02:00
										 |  |  | // Copyright 2008 Dolphin Emulator Project
 | 
					
						
							| 
									
										
										
										
											2015-05-18 01:08:10 +02:00
										 |  |  | // Licensed under GPLv2+
 | 
					
						
							| 
									
										
										
										
											2014-02-10 13:54:46 -05:00
										 |  |  | // Refer to the license.txt file included.
 | 
					
						
							| 
									
										
										
										
											2012-12-17 15:01:52 -06:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-02-10 13:54:46 -05:00
										 |  |  | #pragma once
 | 
					
						
							| 
									
										
										
										
											2012-12-17 15:01:52 -06:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-02-17 05:18:15 -05:00
										 |  |  | #include "Common/CommonTypes.h"
 | 
					
						
							| 
									
										
										
										
											2012-12-17 15:01:52 -06:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-02-26 13:49:00 -06:00
										 |  |  | namespace FPURoundMode | 
					
						
							| 
									
										
										
										
											2012-12-17 15:01:52 -06:00
										 |  |  | { | 
					
						
							| 
									
										
										
										
											2016-06-24 10:43:46 +02:00
										 |  |  | // TODO: MSVC currently produces broken code:
 | 
					
						
							|  |  |  | // https://connect.microsoft.com/VisualStudio/feedback/details/828892/vc-2013-miscompilation-with-enums-and-bit-fields
 | 
					
						
							|  |  |  | // Once that is fixed, change types in SetRoundMode(), SetSIMDMode(), and in UReg_FPSCR to
 | 
					
						
							|  |  |  | // 'RoundMode'.
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | enum RoundMode | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |   ROUND_NEAR = 0, | 
					
						
							|  |  |  |   ROUND_CHOP = 1, | 
					
						
							|  |  |  |   ROUND_UP = 2, | 
					
						
							|  |  |  |   ROUND_DOWN = 3 | 
					
						
							|  |  |  | }; | 
					
						
							|  |  |  | enum PrecisionMode | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |   PREC_24 = 0, | 
					
						
							|  |  |  |   PREC_53 = 1, | 
					
						
							|  |  |  |   PREC_64 = 2 | 
					
						
							|  |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | void SetRoundMode(int mode); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | void SetPrecisionMode(PrecisionMode mode); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | void SetSIMDMode(int rounding_mode, bool non_ieee_mode); | 
					
						
							| 
									
										
										
										
											2013-02-26 13:49:00 -06:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-03-19 21:51:12 -04:00
										 |  |  | /*
 | 
					
						
							|  |  |  |  * There are two different flavors of float to int conversion: | 
					
						
							| 
									
										
										
										
											2013-10-29 01:23:17 -04:00
										 |  |  |  * _mm_cvtps_epi32() and _mm_cvttps_epi32(). | 
					
						
							| 
									
										
										
										
											2013-03-19 21:51:12 -04:00
										 |  |  |  * | 
					
						
							|  |  |  |  * The first rounds according to the MXCSR rounding bits. | 
					
						
							|  |  |  |  * The second one always uses round towards zero. | 
					
						
							| 
									
										
										
										
											2013-02-26 13:49:00 -06:00
										 |  |  |  */ | 
					
						
							| 
									
										
										
										
											2016-06-24 10:43:46 +02:00
										 |  |  | void SaveSIMDState(); | 
					
						
							|  |  |  | void LoadSIMDState(); | 
					
						
							|  |  |  | void LoadDefaultSIMDState(); | 
					
						
							| 
									
										
										
										
											2013-02-26 13:49:00 -06:00
										 |  |  | } |