diff options
Diffstat (limited to '')
| -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 1a589e39c..b207416dd 100644 --- a/src/core/arm/interpreter/armemu.cpp +++ b/src/core/arm/interpreter/armemu.cpp | |||
| @@ -5930,11 +5930,29 @@ L_stm_s_takeabort: | |||
| 5930 | b2 = ((u8)(from >> 8) + (u8)(to >> 8)); | 5930 | b2 = ((u8)(from >> 8) + (u8)(to >> 8)); |
| 5931 | b3 = ((u8)(from >> 16) + (u8)(to >> 16)); | 5931 | b3 = ((u8)(from >> 16) + (u8)(to >> 16)); |
| 5932 | b4 = ((u8)(from >> 24) + (u8)(to >> 24)); | 5932 | b4 = ((u8)(from >> 24) + (u8)(to >> 24)); |
| 5933 | if (b1 & 0xffffff00) state->Cpsr |= (1 << 16); | 5933 | |
| 5934 | if (b2 & 0xffffff00) state->Cpsr |= (1 << 17); | 5934 | if (b1 & 0xffffff00) |
| 5935 | if (b3 & 0xffffff00) state->Cpsr |= (1 << 18); | 5935 | state->Cpsr |= (1 << 16); |
| 5936 | if (b4 & 0xffffff00) state->Cpsr |= (1 << 19); | 5936 | else |
| 5937 | state->Cpsr &= ~(1 << 16); | ||
| 5938 | |||
| 5939 | if (b2 & 0xffffff00) | ||
| 5940 | state->Cpsr |= (1 << 17); | ||
| 5941 | else | ||
| 5942 | state->Cpsr &= ~(1 << 17); | ||
| 5943 | |||
| 5944 | if (b3 & 0xffffff00) | ||
| 5945 | state->Cpsr |= (1 << 18); | ||
| 5946 | else | ||
| 5947 | state->Cpsr &= ~(1 << 18); | ||
| 5948 | |||
| 5949 | |||
| 5950 | if (b4 & 0xffffff00) | ||
| 5951 | state->Cpsr |= (1 << 19); | ||
| 5952 | else | ||
| 5953 | state->Cpsr &= ~(1 << 19); | ||
| 5937 | } | 5954 | } |
| 5955 | |||
| 5938 | state->Reg[rd] = (u32)(b1 | (b2 & 0xff) << 8 | (b3 & 0xff) << 16 | (b4 & 0xff) << 24); | 5956 | state->Reg[rd] = (u32)(b1 | (b2 & 0xff) << 8 | (b3 & 0xff) << 16 | (b4 & 0xff) << 24); |
| 5939 | return 1; | 5957 | return 1; |
| 5940 | } | 5958 | } |