mirror of
				https://github.com/PabloMK7/citra.git
				synced 2025-10-30 21:30:04 +00:00 
			
		
		
		
	- disable strict alignment on LDRD/STRD
- handle RD in STREX/STREXB
This commit is contained in:
		
							parent
							
								
									9db26df05f
								
							
						
					
					
						commit
						d1472b816f
					
				
					 1 changed files with 22 additions and 17 deletions
				
			
		|  | @ -5536,14 +5536,15 @@ Handle_Load_Double (ARMul_State * state, ARMword instr) | ||||||
|         addr = base; |         addr = base; | ||||||
| 
 | 
 | ||||||
|     /* The address must be aligned on a 8 byte boundary.  */ |     /* The address must be aligned on a 8 byte boundary.  */ | ||||||
|     if (addr & 0x7) { |     // FIX(Normatt): Disable strict alignment on LDRD/STRD
 | ||||||
| #ifdef ABORTS | //    if (addr & 0x7) {
 | ||||||
|         ARMul_DATAABORT (addr); | //#ifdef ABORTS
 | ||||||
| #else | //        ARMul_DATAABORT (addr);
 | ||||||
|         ARMul_UndefInstr (state, instr); | //#else
 | ||||||
| #endif | //        ARMul_UndefInstr (state, instr);
 | ||||||
|         return; | //#endif
 | ||||||
|     } | //        return;
 | ||||||
|  | //    }
 | ||||||
| 
 | 
 | ||||||
|     /* For pre indexed or post indexed addressing modes,
 |     /* For pre indexed or post indexed addressing modes,
 | ||||||
|        check that the destination registers do not overlap |        check that the destination registers do not overlap | ||||||
|  | @ -5640,14 +5641,15 @@ Handle_Store_Double (ARMul_State * state, ARMword instr) | ||||||
|         addr = base; |         addr = base; | ||||||
| 
 | 
 | ||||||
|     /* The address must be aligned on a 8 byte boundary.  */ |     /* The address must be aligned on a 8 byte boundary.  */ | ||||||
|     if (addr & 0x7) { |     // FIX(Normatt): Disable strict alignment on LDRD/STRD
 | ||||||
| #ifdef ABORTS | //    if (addr & 0x7) {
 | ||||||
|         ARMul_DATAABORT (addr); | //#ifdef ABORTS
 | ||||||
| #else | //        ARMul_DATAABORT (addr);
 | ||||||
|         ARMul_UndefInstr (state, instr); | //#else
 | ||||||
| #endif | //        ARMul_UndefInstr (state, instr);
 | ||||||
|         return; | //#endif
 | ||||||
|     } | //        return;
 | ||||||
|  | //    }
 | ||||||
| 
 | 
 | ||||||
|     /* For pre indexed or post indexed addressing modes,
 |     /* For pre indexed or post indexed addressing modes,
 | ||||||
|        check that the destination registers do not overlap |        check that the destination registers do not overlap | ||||||
|  | @ -6405,6 +6407,8 @@ handle_v6_insn (ARMul_State * state, ARMword instr) | ||||||
|         if (state->Aborted) { |         if (state->Aborted) { | ||||||
|             TAKEABORT; |             TAKEABORT; | ||||||
|         } |         } | ||||||
|  |         // FIX(Normmatt): Handle RD in STREX/STREXB
 | ||||||
|  |         state->Reg[DESTReg] = 0; //Always succeed
 | ||||||
| 
 | 
 | ||||||
|         return 1; |         return 1; | ||||||
|      } |      } | ||||||
|  | @ -6432,7 +6436,8 @@ handle_v6_insn (ARMul_State * state, ARMword instr) | ||||||
|         if (state->Aborted) { |         if (state->Aborted) { | ||||||
|             TAKEABORT; |             TAKEABORT; | ||||||
|         } |         } | ||||||
| 
 |         // FIX(Normmatt): Handle RD in STREX/STREXB
 | ||||||
|  |         state->Reg[DESTReg] = 0; //Always succeed
 | ||||||
|         //printf("In %s, strexb not implemented\n", __FUNCTION__);
 |         //printf("In %s, strexb not implemented\n", __FUNCTION__);
 | ||||||
|         UNDEF_LSRBPC; |         UNDEF_LSRBPC; | ||||||
|         /* WRITESDEST (dest); */ |         /* WRITESDEST (dest); */ | ||||||
|  |  | ||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue