diff options
| author | 2014-05-08 17:16:35 -0400 | |
|---|---|---|
| committer | 2014-05-08 17:16:35 -0400 | |
| commit | bdc54d0d4897841a4d24aee80311bfb1f0eba884 (patch) | |
| tree | 558d87c83fe8f7e8e3e57644407c872244ee5a3a /src/core/arm/interpreter/armemu.cpp | |
| parent | Merge pull request #16 from Sethpaien/master (diff) | |
| parent | removed unknown fields from GX_CmdBufferHeader (diff) | |
| download | yuzu-bdc54d0d4897841a4d24aee80311bfb1f0eba884.tar.gz yuzu-bdc54d0d4897841a4d24aee80311bfb1f0eba884.tar.xz yuzu-bdc54d0d4897841a4d24aee80311bfb1f0eba884.zip | |
Merge pull request #15 from bunnei/hle-services
Various fixes/improvements to HLE of 3DS services, mostly cleans up GSP call decoding
Diffstat (limited to 'src/core/arm/interpreter/armemu.cpp')
| -rw-r--r-- | src/core/arm/interpreter/armemu.cpp | 39 |
1 files changed, 22 insertions, 17 deletions
diff --git a/src/core/arm/interpreter/armemu.cpp b/src/core/arm/interpreter/armemu.cpp index a35c5c8dc..1af684fe3 100644 --- a/src/core/arm/interpreter/armemu.cpp +++ b/src/core/arm/interpreter/armemu.cpp | |||
| @@ -5536,14 +5536,15 @@ Handle_Load_Double (ARMul_State * state, ARMword instr) | |||
| 5536 | addr = base; | 5536 | addr = base; |
| 5537 | 5537 | ||
| 5538 | /* The address must be aligned on a 8 byte boundary. */ | 5538 | /* The address must be aligned on a 8 byte boundary. */ |
| 5539 | if (addr & 0x7) { | 5539 | // FIX(Normatt): Disable strict alignment on LDRD/STRD |
| 5540 | #ifdef ABORTS | 5540 | // if (addr & 0x7) { |
| 5541 | ARMul_DATAABORT (addr); | 5541 | //#ifdef ABORTS |
| 5542 | #else | 5542 | // ARMul_DATAABORT (addr); |
| 5543 | ARMul_UndefInstr (state, instr); | 5543 | //#else |
| 5544 | #endif | 5544 | // ARMul_UndefInstr (state, instr); |
| 5545 | return; | 5545 | //#endif |
| 5546 | } | 5546 | // return; |
| 5547 | // } | ||
| 5547 | 5548 | ||
| 5548 | /* For pre indexed or post indexed addressing modes, | 5549 | /* For pre indexed or post indexed addressing modes, |
| 5549 | check that the destination registers do not overlap | 5550 | check that the destination registers do not overlap |
| @@ -5640,14 +5641,15 @@ Handle_Store_Double (ARMul_State * state, ARMword instr) | |||
| 5640 | addr = base; | 5641 | addr = base; |
| 5641 | 5642 | ||
| 5642 | /* The address must be aligned on a 8 byte boundary. */ | 5643 | /* The address must be aligned on a 8 byte boundary. */ |
| 5643 | if (addr & 0x7) { | 5644 | // FIX(Normatt): Disable strict alignment on LDRD/STRD |
| 5644 | #ifdef ABORTS | 5645 | // if (addr & 0x7) { |
| 5645 | ARMul_DATAABORT (addr); | 5646 | //#ifdef ABORTS |
| 5646 | #else | 5647 | // ARMul_DATAABORT (addr); |
| 5647 | ARMul_UndefInstr (state, instr); | 5648 | //#else |
| 5648 | #endif | 5649 | // ARMul_UndefInstr (state, instr); |
| 5649 | return; | 5650 | //#endif |
| 5650 | } | 5651 | // return; |
| 5652 | // } | ||
| 5651 | 5653 | ||
| 5652 | /* For pre indexed or post indexed addressing modes, | 5654 | /* For pre indexed or post indexed addressing modes, |
| 5653 | check that the destination registers do not overlap | 5655 | check that the destination registers do not overlap |
| @@ -6405,6 +6407,8 @@ handle_v6_insn (ARMul_State * state, ARMword instr) | |||
| 6405 | if (state->Aborted) { | 6407 | if (state->Aborted) { |
| 6406 | TAKEABORT; | 6408 | TAKEABORT; |
| 6407 | } | 6409 | } |
| 6410 | // FIX(Normmatt): Handle RD in STREX/STREXB | ||
| 6411 | state->Reg[DESTReg] = 0; //Always succeed | ||
| 6408 | 6412 | ||
| 6409 | return 1; | 6413 | return 1; |
| 6410 | } | 6414 | } |
| @@ -6432,7 +6436,8 @@ handle_v6_insn (ARMul_State * state, ARMword instr) | |||
| 6432 | if (state->Aborted) { | 6436 | if (state->Aborted) { |
| 6433 | TAKEABORT; | 6437 | TAKEABORT; |
| 6434 | } | 6438 | } |
| 6435 | 6439 | // FIX(Normmatt): Handle RD in STREX/STREXB | |
| 6440 | state->Reg[DESTReg] = 0; //Always succeed | ||
| 6436 | //printf("In %s, strexb not implemented\n", __FUNCTION__); | 6441 | //printf("In %s, strexb not implemented\n", __FUNCTION__); |
| 6437 | UNDEF_LSRBPC; | 6442 | UNDEF_LSRBPC; |
| 6438 | /* WRITESDEST (dest); */ | 6443 | /* WRITESDEST (dest); */ |