diff options
| author | 2014-05-16 23:21:03 -0700 | |
|---|---|---|
| committer | 2014-05-16 23:21:03 -0700 | |
| commit | b8c8d0903ec9be4c7d580464480a0136277be803 (patch) | |
| tree | 9280a9f01e1312d0d8aed493282ae65d2384963c /src/core/arm/interpreter/armemu.cpp | |
| parent | Added FindGLEW to cmake-modules (diff) | |
| parent | Merge pull request #17 from bunnei/arm-vfp (diff) | |
| download | yuzu-b8c8d0903ec9be4c7d580464480a0136277be803.tar.gz yuzu-b8c8d0903ec9be4c7d580464480a0136277be803.tar.xz yuzu-b8c8d0903ec9be4c7d580464480a0136277be803.zip | |
Merge remote-tracking branch 'upstream/master' into issue-7-fix
Diffstat (limited to 'src/core/arm/interpreter/armemu.cpp')
| -rw-r--r-- | src/core/arm/interpreter/armemu.cpp | 50 |
1 files changed, 22 insertions, 28 deletions
diff --git a/src/core/arm/interpreter/armemu.cpp b/src/core/arm/interpreter/armemu.cpp index a35c5c8dc..87141653f 100644 --- a/src/core/arm/interpreter/armemu.cpp +++ b/src/core/arm/interpreter/armemu.cpp | |||
| @@ -23,17 +23,6 @@ | |||
| 23 | #include "armemu.h" | 23 | #include "armemu.h" |
| 24 | #include "armos.h" | 24 | #include "armos.h" |
| 25 | 25 | ||
| 26 | void | ||
| 27 | XScale_set_fsr_far(ARMul_State * state, ARMword fsr, ARMword _far) | ||
| 28 | { | ||
| 29 | _dbg_assert_msg_(ARM11, false, "ImplementMe: XScale_set_fsr_far!"); | ||
| 30 | //if (!state->is_XScale || (read_cp14_reg(10) & (1UL << 31)) == 0) | ||
| 31 | // return; | ||
| 32 | // | ||
| 33 | //write_cp15_reg(state, 5, 0, 0, fsr); | ||
| 34 | //write_cp15_reg(state, 6, 0, 0, _far); | ||
| 35 | } | ||
| 36 | |||
| 37 | #define ARMul_Debug(x,y,z) 0 // Disabling this /bunnei | 26 | #define ARMul_Debug(x,y,z) 0 // Disabling this /bunnei |
| 38 | 27 | ||
| 39 | //#include "skyeye_callback.h" | 28 | //#include "skyeye_callback.h" |
| @@ -5536,14 +5525,15 @@ Handle_Load_Double (ARMul_State * state, ARMword instr) | |||
| 5536 | addr = base; | 5525 | addr = base; |
| 5537 | 5526 | ||
| 5538 | /* The address must be aligned on a 8 byte boundary. */ | 5527 | /* The address must be aligned on a 8 byte boundary. */ |
| 5539 | if (addr & 0x7) { | 5528 | // FIX(Normatt): Disable strict alignment on LDRD/STRD |
| 5540 | #ifdef ABORTS | 5529 | // if (addr & 0x7) { |
| 5541 | ARMul_DATAABORT (addr); | 5530 | //#ifdef ABORTS |
| 5542 | #else | 5531 | // ARMul_DATAABORT (addr); |
| 5543 | ARMul_UndefInstr (state, instr); | 5532 | //#else |
| 5544 | #endif | 5533 | // ARMul_UndefInstr (state, instr); |
| 5545 | return; | 5534 | //#endif |
| 5546 | } | 5535 | // return; |
| 5536 | // } | ||
| 5547 | 5537 | ||
| 5548 | /* For pre indexed or post indexed addressing modes, | 5538 | /* For pre indexed or post indexed addressing modes, |
| 5549 | check that the destination registers do not overlap | 5539 | check that the destination registers do not overlap |
| @@ -5640,14 +5630,15 @@ Handle_Store_Double (ARMul_State * state, ARMword instr) | |||
| 5640 | addr = base; | 5630 | addr = base; |
| 5641 | 5631 | ||
| 5642 | /* The address must be aligned on a 8 byte boundary. */ | 5632 | /* The address must be aligned on a 8 byte boundary. */ |
| 5643 | if (addr & 0x7) { | 5633 | // FIX(Normatt): Disable strict alignment on LDRD/STRD |
| 5644 | #ifdef ABORTS | 5634 | // if (addr & 0x7) { |
| 5645 | ARMul_DATAABORT (addr); | 5635 | //#ifdef ABORTS |
| 5646 | #else | 5636 | // ARMul_DATAABORT (addr); |
| 5647 | ARMul_UndefInstr (state, instr); | 5637 | //#else |
| 5648 | #endif | 5638 | // ARMul_UndefInstr (state, instr); |
| 5649 | return; | 5639 | //#endif |
| 5650 | } | 5640 | // return; |
| 5641 | // } | ||
| 5651 | 5642 | ||
| 5652 | /* For pre indexed or post indexed addressing modes, | 5643 | /* For pre indexed or post indexed addressing modes, |
| 5653 | check that the destination registers do not overlap | 5644 | check that the destination registers do not overlap |
| @@ -6405,6 +6396,8 @@ handle_v6_insn (ARMul_State * state, ARMword instr) | |||
| 6405 | if (state->Aborted) { | 6396 | if (state->Aborted) { |
| 6406 | TAKEABORT; | 6397 | TAKEABORT; |
| 6407 | } | 6398 | } |
| 6399 | // FIX(Normmatt): Handle RD in STREX/STREXB | ||
| 6400 | state->Reg[DESTReg] = 0; //Always succeed | ||
| 6408 | 6401 | ||
| 6409 | return 1; | 6402 | return 1; |
| 6410 | } | 6403 | } |
| @@ -6432,7 +6425,8 @@ handle_v6_insn (ARMul_State * state, ARMword instr) | |||
| 6432 | if (state->Aborted) { | 6425 | if (state->Aborted) { |
| 6433 | TAKEABORT; | 6426 | TAKEABORT; |
| 6434 | } | 6427 | } |
| 6435 | 6428 | // FIX(Normmatt): Handle RD in STREX/STREXB | |
| 6429 | state->Reg[DESTReg] = 0; //Always succeed | ||
| 6436 | //printf("In %s, strexb not implemented\n", __FUNCTION__); | 6430 | //printf("In %s, strexb not implemented\n", __FUNCTION__); |
| 6437 | UNDEF_LSRBPC; | 6431 | UNDEF_LSRBPC; |
| 6438 | /* WRITESDEST (dest); */ | 6432 | /* WRITESDEST (dest); */ |