mirror of
				https://git.zaroz.cloud/nintendo-back-up/yuzu/yuzu.git
				synced 2025-05-12 00:45:25 +00:00 
			
		
		
		
	Merge pull request #1814 from JayFoxRox/fix-read-after-write
Fix read-after-write in SMUAD, SMLAD, SMUSD, SMLSD
This commit is contained in:
		
						commit
						7a7488a0bb
					
				@ -5527,28 +5527,32 @@ unsigned InterpreterMainLoop(ARMul_State* cpu) {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
            // SMUAD and SMLAD
 | 
					            // SMUAD and SMLAD
 | 
				
			||||||
            if (BIT(op2, 1) == 0) {
 | 
					            if (BIT(op2, 1) == 0) {
 | 
				
			||||||
                RD = (product1 + product2);
 | 
					                u32 rd_val = (product1 + product2);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                if (inst_cream->Ra != 15) {
 | 
					                if (inst_cream->Ra != 15) {
 | 
				
			||||||
                    RD += cpu->Reg[inst_cream->Ra];
 | 
					                    rd_val += cpu->Reg[inst_cream->Ra];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                    if (ARMul_AddOverflowQ(product1 + product2, cpu->Reg[inst_cream->Ra]))
 | 
					                    if (ARMul_AddOverflowQ(product1 + product2, cpu->Reg[inst_cream->Ra]))
 | 
				
			||||||
                        cpu->Cpsr |= (1 << 27);
 | 
					                        cpu->Cpsr |= (1 << 27);
 | 
				
			||||||
                }
 | 
					                }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                RD = rd_val;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                if (ARMul_AddOverflowQ(product1, product2))
 | 
					                if (ARMul_AddOverflowQ(product1, product2))
 | 
				
			||||||
                    cpu->Cpsr |= (1 << 27);
 | 
					                    cpu->Cpsr |= (1 << 27);
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
            // SMUSD and SMLSD
 | 
					            // SMUSD and SMLSD
 | 
				
			||||||
            else {
 | 
					            else {
 | 
				
			||||||
                RD = (product1 - product2);
 | 
					                u32 rd_val = (product1 - product2);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                if (inst_cream->Ra != 15) {
 | 
					                if (inst_cream->Ra != 15) {
 | 
				
			||||||
                    RD += cpu->Reg[inst_cream->Ra];
 | 
					                    rd_val += cpu->Reg[inst_cream->Ra];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                    if (ARMul_AddOverflowQ(product1 - product2, cpu->Reg[inst_cream->Ra]))
 | 
					                    if (ARMul_AddOverflowQ(product1 - product2, cpu->Reg[inst_cream->Ra]))
 | 
				
			||||||
                        cpu->Cpsr |= (1 << 27);
 | 
					                        cpu->Cpsr |= (1 << 27);
 | 
				
			||||||
                }
 | 
					                }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                RD = rd_val;
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
		Reference in New Issue
	
	Block a user