mirror of
				https://github.com/Ryujinx/Ryujinx.git
				synced 2025-11-04 00:33:41 +00:00 
			
		
		
		
	SIMD&FP load/store with scale > 4 should be undefined (#1522)
* SIMD&FP load/store with scale > 4 should be undefined * Catch more invalid encodings for FP&SIMD LDR/STR (reg variant) * Set PTC version to PR number
This commit is contained in:
		
							parent
							
								
									3d294a9a6c
								
							
						
					
					
						commit
						6cc187da59
					
				@ -6,7 +6,16 @@ namespace ARMeilleure.Decoders
 | 
			
		||||
        {
 | 
			
		||||
            Size |= (opCode >> 21) & 4;
 | 
			
		||||
 | 
			
		||||
            if (!WBack && !Unscaled && Size >= 4)
 | 
			
		||||
            if (Size > 4)
 | 
			
		||||
            {
 | 
			
		||||
                Instruction = InstDescriptor.Undefined;
 | 
			
		||||
 | 
			
		||||
                return;
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            // Base class already shifts the immediate, we only
 | 
			
		||||
            // need to shift it if size (scale) is 4, since this value is only set here.
 | 
			
		||||
            if (!WBack && !Unscaled && Size == 4)
 | 
			
		||||
            {
 | 
			
		||||
                Immediate <<= 4;
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
@ -6,6 +6,13 @@ namespace ARMeilleure.Decoders
 | 
			
		||||
        {
 | 
			
		||||
            Size |= (opCode >> 21) & 4;
 | 
			
		||||
 | 
			
		||||
            if (Size > 4)
 | 
			
		||||
            {
 | 
			
		||||
                Instruction = InstDescriptor.Undefined;
 | 
			
		||||
 | 
			
		||||
                return;
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            Extend64 = false;
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
@ -412,7 +412,7 @@ namespace ARMeilleure.Decoders
 | 
			
		||||
            SetA64("xx111100x10xxxxxxxxx01xxxxxxxxxx", InstName.Ldr,             InstEmit.Ldr,             typeof(OpCodeSimdMemImm));
 | 
			
		||||
            SetA64("xx111100x10xxxxxxxxx11xxxxxxxxxx", InstName.Ldr,             InstEmit.Ldr,             typeof(OpCodeSimdMemImm));
 | 
			
		||||
            SetA64("xx111101x1xxxxxxxxxxxxxxxxxxxxxx", InstName.Ldr,             InstEmit.Ldr,             typeof(OpCodeSimdMemImm));
 | 
			
		||||
            SetA64("xx111100x11xxxxxxxxx10xxxxxxxxxx", InstName.Ldr,             InstEmit.Ldr,             typeof(OpCodeSimdMemReg));
 | 
			
		||||
            SetA64("xx111100x11xxxxxx1xx10xxxxxxxxxx", InstName.Ldr,             InstEmit.Ldr,             typeof(OpCodeSimdMemReg));
 | 
			
		||||
            SetA64("xx011100xxxxxxxxxxxxxxxxxxxxxxxx", InstName.Ldr_Literal,     InstEmit.Ldr_Literal,     typeof(OpCodeSimdMemLit));
 | 
			
		||||
            SetA64("0x001110<<1xxxxx100101xxxxxxxxxx", InstName.Mla_V,           InstEmit.Mla_V,           typeof(OpCodeSimdReg));
 | 
			
		||||
            SetA64("0x101111xxxxxxxx0000x0xxxxxxxxxx", InstName.Mla_Ve,          InstEmit.Mla_Ve,          typeof(OpCodeSimdRegElem));
 | 
			
		||||
@ -554,7 +554,7 @@ namespace ARMeilleure.Decoders
 | 
			
		||||
            SetA64("xx111100x00xxxxxxxxx01xxxxxxxxxx", InstName.Str,             InstEmit.Str,             typeof(OpCodeSimdMemImm));
 | 
			
		||||
            SetA64("xx111100x00xxxxxxxxx11xxxxxxxxxx", InstName.Str,             InstEmit.Str,             typeof(OpCodeSimdMemImm));
 | 
			
		||||
            SetA64("xx111101x0xxxxxxxxxxxxxxxxxxxxxx", InstName.Str,             InstEmit.Str,             typeof(OpCodeSimdMemImm));
 | 
			
		||||
            SetA64("xx111100x01xxxxxxxxx10xxxxxxxxxx", InstName.Str,             InstEmit.Str,             typeof(OpCodeSimdMemReg));
 | 
			
		||||
            SetA64("xx111100x01xxxxxx1xx10xxxxxxxxxx", InstName.Str,             InstEmit.Str,             typeof(OpCodeSimdMemReg));
 | 
			
		||||
            SetA64("01111110111xxxxx100001xxxxxxxxxx", InstName.Sub_S,           InstEmit.Sub_S,           typeof(OpCodeSimdReg));
 | 
			
		||||
            SetA64("0>101110<<1xxxxx100001xxxxxxxxxx", InstName.Sub_V,           InstEmit.Sub_V,           typeof(OpCodeSimdReg));
 | 
			
		||||
            SetA64("0x001110<<1xxxxx011000xxxxxxxxxx", InstName.Subhn_V,         InstEmit.Subhn_V,         typeof(OpCodeSimdReg));
 | 
			
		||||
 | 
			
		||||
@ -21,7 +21,7 @@ namespace ARMeilleure.Translation.PTC
 | 
			
		||||
    {
 | 
			
		||||
        private const string HeaderMagic = "PTChd";
 | 
			
		||||
 | 
			
		||||
        private const int InternalVersion = 1484; //! To be incremented manually for each change to the ARMeilleure project.
 | 
			
		||||
        private const int InternalVersion = 1522; //! To be incremented manually for each change to the ARMeilleure project.
 | 
			
		||||
 | 
			
		||||
        private const string ActualDir = "0";
 | 
			
		||||
        private const string BackupDir = "1";
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user