mirror of
				https://github.com/PabloMK7/citra.git
				synced 2025-10-30 21:30:04 +00:00 
			
		
		
		
	Optimized Float<M,E> multiplication
Before: ucomiss xmm1, xmm1 jp .L9 pxor xmm2, xmm2 mov edx, 1 ucomiss xmm0, xmm2 setp al cmovne eax, edx test al, al jne .L9 .L3: movaps xmm0, xmm2 ret .L9: ucomiss xmm0, xmm0 jp .L10 pxor xmm2, xmm2 mov edx, 1 ucomiss xmm1, xmm2 setp al cmovne eax, edx test al, al je .L3 After: movaps xmm2, xmm1 mulss xmm2, xmm0 ucomiss xmm2, xmm2 jnp .L3 ucomiss xmm1, xmm0 jnp .L11 .L3: movaps xmm0, xmm2 ret .L11: pxor xmm2, xmm2 jmp .L3
This commit is contained in:
		
							parent
							
								
									93930a966f
								
							
						
					
					
						commit
						903906da3b
					
				
					 1 changed files with 7 additions and 11 deletions
				
			
		|  | @ -58,11 +58,12 @@ public: | |||
|     } | ||||
| 
 | ||||
|     Float<M, E> operator*(const Float<M, E>& flt) const { | ||||
|         if ((this->value == 0.f && !std::isnan(flt.value)) || | ||||
|             (flt.value == 0.f && !std::isnan(this->value))) | ||||
|             // PICA gives 0 instead of NaN when multiplying by inf
 | ||||
|             return Zero(); | ||||
|         return Float<M, E>::FromFloat32(ToFloat32() * flt.ToFloat32()); | ||||
|         float result = value * flt.ToFloat32(); | ||||
|         // PICA gives 0 instead of NaN when multiplying by inf
 | ||||
|         if (!std::isnan(value) && !std::isnan(flt.ToFloat32())) | ||||
|             if (std::isnan(result)) | ||||
|                 result = 0.f; | ||||
|         return Float<M, E>::FromFloat32(result); | ||||
|     } | ||||
| 
 | ||||
|     Float<M, E> operator/(const Float<M, E>& flt) const { | ||||
|  | @ -78,12 +79,7 @@ public: | |||
|     } | ||||
| 
 | ||||
|     Float<M, E>& operator*=(const Float<M, E>& flt) { | ||||
|         if ((this->value == 0.f && !std::isnan(flt.value)) || | ||||
|             (flt.value == 0.f && !std::isnan(this->value))) | ||||
|             // PICA gives 0 instead of NaN when multiplying by inf
 | ||||
|             *this = Zero(); | ||||
|         else | ||||
|             value *= flt.ToFloat32(); | ||||
|         value = operator*(flt).value; | ||||
|         return *this; | ||||
|     } | ||||
| 
 | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue