mirror of
				https://github.com/ryujinx-mirror/ryujinx.git
				synced 2025-11-04 08:18:58 -06:00 
			
		
		
		
	CPU: Produce non-inf results for RSQRTE instruction with subnormal inputs (#6634)
* CPU: Produce non-inf results for RSQRTE instruction with subnormal inputs * PPTC version bump
This commit is contained in:
		@@ -2426,7 +2426,11 @@ namespace ARMeilleure.Instructions
 | 
			
		||||
            }
 | 
			
		||||
            else if (Optimizations.FastFP && Optimizations.UseSse41 && sizeF == 0)
 | 
			
		||||
            {
 | 
			
		||||
                Operand res = EmitSse41Round32Exp8OpF(context, context.AddIntrinsic(Intrinsic.X86Rsqrtss, GetVec(op.Rn)), scalar: true);
 | 
			
		||||
                // RSQRTSS handles subnormals as zero, which differs from Arm, so we can't use it here.
 | 
			
		||||
 | 
			
		||||
                Operand res = context.AddIntrinsic(Intrinsic.X86Sqrtss, GetVec(op.Rn));
 | 
			
		||||
                res = context.AddIntrinsic(Intrinsic.X86Rcpss, res);
 | 
			
		||||
                res = EmitSse41Round32Exp8OpF(context, res, scalar: true);
 | 
			
		||||
 | 
			
		||||
                context.Copy(GetVec(op.Rd), context.VectorZeroUpper96(res));
 | 
			
		||||
            }
 | 
			
		||||
@@ -2451,7 +2455,11 @@ namespace ARMeilleure.Instructions
 | 
			
		||||
            }
 | 
			
		||||
            else if (Optimizations.FastFP && Optimizations.UseSse41 && sizeF == 0)
 | 
			
		||||
            {
 | 
			
		||||
                Operand res = EmitSse41Round32Exp8OpF(context, context.AddIntrinsic(Intrinsic.X86Rsqrtps, GetVec(op.Rn)), scalar: false);
 | 
			
		||||
                // RSQRTPS handles subnormals as zero, which differs from Arm, so we can't use it here.
 | 
			
		||||
 | 
			
		||||
                Operand res = context.AddIntrinsic(Intrinsic.X86Sqrtps, GetVec(op.Rn));
 | 
			
		||||
                res = context.AddIntrinsic(Intrinsic.X86Rcpps, res);
 | 
			
		||||
                res = EmitSse41Round32Exp8OpF(context, res, scalar: false);
 | 
			
		||||
 | 
			
		||||
                if (op.RegisterSize == RegisterSize.Simd64)
 | 
			
		||||
                {
 | 
			
		||||
 
 | 
			
		||||
@@ -29,7 +29,7 @@ namespace ARMeilleure.Translation.PTC
 | 
			
		||||
        private const string OuterHeaderMagicString = "PTCohd\0\0";
 | 
			
		||||
        private const string InnerHeaderMagicString = "PTCihd\0\0";
 | 
			
		||||
 | 
			
		||||
        private const uint InternalVersion = 6613; //! To be incremented manually for each change to the ARMeilleure project.
 | 
			
		||||
        private const uint InternalVersion = 6634; //! To be incremented manually for each change to the ARMeilleure project.
 | 
			
		||||
 | 
			
		||||
        private const string ActualDir = "0";
 | 
			
		||||
        private const string BackupDir = "1";
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user