mirror of
				https://github.com/Ryujinx/Ryujinx.git
				synced 2025-10-24 23:22:26 -07:00 
			
		
		
		
	* Implement VMOVL and VORR.I32 AArch32 SIMD instructions * Rename <dt> to <size> on test description * Rename Widen to Long and improve VMOVL implementation a bit
		
			
				
	
	
		
			36 lines
		
	
	
		
			1.1 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
			
		
		
	
	
			36 lines
		
	
	
		
			1.1 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
| namespace ARMeilleure.Decoders
 | |
| {
 | |
|     class OpCode32SimdImm : OpCode32SimdBase, IOpCode32SimdImm
 | |
|     {
 | |
|         public bool Q { get; private set; }
 | |
|         public long Immediate { get; private set; }
 | |
|         public int Elems => GetBytesCount() >> Size;
 | |
| 
 | |
|         public OpCode32SimdImm(InstDescriptor inst, ulong address, int opCode) : base(inst, address, opCode)
 | |
|         {
 | |
|             Vd = (opCode >> 12) & 0xf;
 | |
|             Vd |= (opCode >> 18) & 0x10;
 | |
|             
 | |
|             Q = ((opCode >> 6) & 0x1) > 0;
 | |
| 
 | |
|             int cMode = (opCode >> 8) & 0xf;
 | |
|             int op = (opCode >> 5) & 0x1;
 | |
| 
 | |
|             long imm;
 | |
| 
 | |
|             imm = ((uint)opCode >> 0) & 0xf;
 | |
|             imm |= ((uint)opCode >> 12) & 0x70;
 | |
|             imm |= ((uint)opCode >> 17) & 0x80;
 | |
| 
 | |
|             (Immediate, Size) = OpCodeSimdHelper.GetSimdImmediateAndSize(cMode, op, imm);
 | |
| 
 | |
|             RegisterSize = Q ? RegisterSize.Simd128 : RegisterSize.Simd64;
 | |
| 
 | |
|             if (DecoderHelper.VectorArgumentsInvalid(Q, Vd))
 | |
|             {
 | |
|                 Instruction = InstDescriptor.Undefined;
 | |
|             }
 | |
|         }
 | |
|     }
 | |
| }
 |