mirror of
				https://github.com/yuzu-emu/yuzu.git
				synced 2025-11-04 00:53:43 +00:00 
			
		
		
		
	Merge pull request #941 from citra-emu/armv6-thumb-mov
Dyncom: Support for a new ARMv6 Thumb MOV encoding
This commit is contained in:
		
						commit
						71be5853e0
					
				@ -130,14 +130,13 @@ tdstate thumb_translate(u32 addr, u32 instr, u32* ainstr, u32* inst_size) {
 | 
			
		||||
            }
 | 
			
		||||
        } else {
 | 
			
		||||
            ARMword Rd = ((tinstr & 0x0007) >> 0);
 | 
			
		||||
            ARMword Rs = ((tinstr & 0x0038) >> 3);
 | 
			
		||||
            ARMword Rs = ((tinstr & 0x0078) >> 3);
 | 
			
		||||
 | 
			
		||||
            if (tinstr & (1 << 7))
 | 
			
		||||
                Rd += 8;
 | 
			
		||||
            if (tinstr & (1 << 6))
 | 
			
		||||
                Rs += 8;
 | 
			
		||||
 | 
			
		||||
            switch ((tinstr & 0x03C0) >> 6) {
 | 
			
		||||
            case 0x0:                           // ADD Rd,Rd,Rs
 | 
			
		||||
            case 0x1:                           // ADD Rd,Rd,Hs
 | 
			
		||||
            case 0x2:                           // ADD Hd,Hd,Rs
 | 
			
		||||
            case 0x3:                           // ADD Hd,Hd,Hs
 | 
			
		||||
@ -146,19 +145,19 @@ tdstate thumb_translate(u32 addr, u32 instr, u32* ainstr, u32* inst_size) {
 | 
			
		||||
                    |(Rd << 12)                 // Rd
 | 
			
		||||
                    |(Rs << 0);                 // Rm
 | 
			
		||||
                break;
 | 
			
		||||
            case 0x4:                           // CMP Rd,Rs
 | 
			
		||||
            case 0x5:                           // CMP Rd,Hs
 | 
			
		||||
            case 0x6:                           // CMP Hd,Rs
 | 
			
		||||
            case 0x7:                           // CMP Hd,Hs
 | 
			
		||||
                *ainstr = 0xE1500000            // base
 | 
			
		||||
                    | (Rd << 16)                // Rn
 | 
			
		||||
                    |(Rd << 12)                 // Rd
 | 
			
		||||
                    |(Rs << 0);                 // Rm
 | 
			
		||||
                break;
 | 
			
		||||
            case 0x8:                           // MOV Rd,Rs
 | 
			
		||||
            case 0x9:                           // MOV Rd,Hs
 | 
			
		||||
            case 0xA:                           // MOV Hd,Rs
 | 
			
		||||
            case 0xB:                           // MOV Hd,Hs
 | 
			
		||||
                *ainstr = 0xE1A00000            // base
 | 
			
		||||
                    | (Rd << 16)                // Rn
 | 
			
		||||
                    |(Rd << 12)                 // Rd
 | 
			
		||||
                    |(Rs << 0);                 // Rm
 | 
			
		||||
                break;
 | 
			
		||||
@ -167,11 +166,6 @@ tdstate thumb_translate(u32 addr, u32 instr, u32* ainstr, u32* inst_size) {
 | 
			
		||||
                *ainstr = 0xE12FFF10            // base
 | 
			
		||||
                    | ((tinstr & 0x0078) >> 3); // Rd
 | 
			
		||||
                break;
 | 
			
		||||
            case 0x0:                           // UNDEFINED
 | 
			
		||||
            case 0x4:                           // UNDEFINED
 | 
			
		||||
            case 0x8:                           // UNDEFINED
 | 
			
		||||
                valid = t_undefined;
 | 
			
		||||
                break;
 | 
			
		||||
            case 0xE:                           // BLX
 | 
			
		||||
            case 0xF:                           // BLX
 | 
			
		||||
                *ainstr = 0xE1200030            // base
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user