diff options
| author | 2014-12-17 22:06:27 -0500 | |
|---|---|---|
| committer | 2014-12-17 22:06:27 -0500 | |
| commit | 797efbde1ae722653a894ec4e3d2fa64bb6a68fd (patch) | |
| tree | b5f9e73f1c730943e25f3b3d09e94533ee1e9a88 | |
| parent | Merge pull request #295 from lioncash/umaal (diff) | |
| parent | armemu: Unset GE flags for UADD8 if results are < 0x100 (diff) | |
| download | yuzu-797efbde1ae722653a894ec4e3d2fa64bb6a68fd.tar.gz yuzu-797efbde1ae722653a894ec4e3d2fa64bb6a68fd.tar.xz yuzu-797efbde1ae722653a894ec4e3d2fa64bb6a68fd.zip | |
Merge pull request #298 from lioncash/flags
armemu: Unset GE flags for UADD8 if results are < 0x100
| -rw-r--r-- | src/core/arm/interpreter/armemu.cpp | 26 |
1 files changed, 22 insertions, 4 deletions
diff --git a/src/core/arm/interpreter/armemu.cpp b/src/core/arm/interpreter/armemu.cpp index a36035e96..3b1a36bdd 100644 --- a/src/core/arm/interpreter/armemu.cpp +++ b/src/core/arm/interpreter/armemu.cpp | |||
| @@ -5958,11 +5958,29 @@ L_stm_s_takeabort: | |||
| 5958 | b2 = ((u8)(from >> 8) + (u8)(to >> 8)); | 5958 | b2 = ((u8)(from >> 8) + (u8)(to >> 8)); |
| 5959 | b3 = ((u8)(from >> 16) + (u8)(to >> 16)); | 5959 | b3 = ((u8)(from >> 16) + (u8)(to >> 16)); |
| 5960 | b4 = ((u8)(from >> 24) + (u8)(to >> 24)); | 5960 | b4 = ((u8)(from >> 24) + (u8)(to >> 24)); |
| 5961 | if (b1 & 0xffffff00) state->Cpsr |= (1 << 16); | 5961 | |
| 5962 | if (b2 & 0xffffff00) state->Cpsr |= (1 << 17); | 5962 | if (b1 & 0xffffff00) |
| 5963 | if (b3 & 0xffffff00) state->Cpsr |= (1 << 18); | 5963 | state->Cpsr |= (1 << 16); |
| 5964 | if (b4 & 0xffffff00) state->Cpsr |= (1 << 19); | 5964 | else |
| 5965 | state->Cpsr &= ~(1 << 16); | ||
| 5966 | |||
| 5967 | if (b2 & 0xffffff00) | ||
| 5968 | state->Cpsr |= (1 << 17); | ||
| 5969 | else | ||
| 5970 | state->Cpsr &= ~(1 << 17); | ||
| 5971 | |||
| 5972 | if (b3 & 0xffffff00) | ||
| 5973 | state->Cpsr |= (1 << 18); | ||
| 5974 | else | ||
| 5975 | state->Cpsr &= ~(1 << 18); | ||
| 5976 | |||
| 5977 | |||
| 5978 | if (b4 & 0xffffff00) | ||
| 5979 | state->Cpsr |= (1 << 19); | ||
| 5980 | else | ||
| 5981 | state->Cpsr &= ~(1 << 19); | ||
| 5965 | } | 5982 | } |
| 5983 | |||
| 5966 | state->Reg[rd] = (u32)(b1 | (b2 & 0xff) << 8 | (b3 & 0xff) << 16 | (b4 & 0xff) << 24); | 5984 | state->Reg[rd] = (u32)(b1 | (b2 & 0xff) << 8 | (b3 & 0xff) << 16 | (b4 & 0xff) << 24); |
| 5967 | return 1; | 5985 | return 1; |
| 5968 | } | 5986 | } |