diff options
Diffstat (limited to 'src/core/arm/interpreter/armemu.cpp')
| -rw-r--r-- | src/core/arm/interpreter/armemu.cpp | 8 |
1 files changed, 4 insertions, 4 deletions
diff --git a/src/core/arm/interpreter/armemu.cpp b/src/core/arm/interpreter/armemu.cpp index cffbae7e7..a62658b7c 100644 --- a/src/core/arm/interpreter/armemu.cpp +++ b/src/core/arm/interpreter/armemu.cpp | |||
| @@ -6176,7 +6176,7 @@ L_stm_s_takeabort: | |||
| 6176 | break; | 6176 | break; |
| 6177 | } | 6177 | } |
| 6178 | 6178 | ||
| 6179 | Rm = ((state->Reg[BITS(0, 3)] >> ror) & 0xFF); | 6179 | Rm = ((state->Reg[BITS(0, 3)] >> ror) & 0xFF) | ((state->Reg[BITS(0, 3)] << (32 - ror)) & 0xFF) & 0xFF; |
| 6180 | 6180 | ||
| 6181 | if (BITS(16, 19) == 0xf) | 6181 | if (BITS(16, 19) == 0xf) |
| 6182 | /* UXTB */ | 6182 | /* UXTB */ |
| @@ -6216,13 +6216,13 @@ L_stm_s_takeabort: | |||
| 6216 | if (ror == -1) | 6216 | if (ror == -1) |
| 6217 | break; | 6217 | break; |
| 6218 | 6218 | ||
| 6219 | Rm = ((state->Reg[BITS(0, 3)] >> ror) & 0xFFFF); | 6219 | Rm = ((state->Reg[BITS(0, 3)] >> ror) & 0xFFFF) | ((state->Reg[BITS(0, 3)] << (32 - ror)) & 0xFFFF) & 0xFFFF; |
| 6220 | 6220 | ||
| 6221 | /* UXT */ | 6221 | /* UXT */ |
| 6222 | /* state->Reg[BITS (12, 15)] = Rm; */ | 6222 | /* state->Reg[BITS (12, 15)] = Rm; */ |
| 6223 | /* dyf add */ | 6223 | /* dyf add */ |
| 6224 | if (BITS(16, 19) == 0xf) { | 6224 | if (BITS(16, 19) == 0xf) { |
| 6225 | state->Reg[BITS(12, 15)] = (Rm >> (8 * BITS(10, 11))) & 0x0000FFFF; | 6225 | state->Reg[BITS(12, 15)] = Rm; |
| 6226 | } | 6226 | } |
| 6227 | else { | 6227 | else { |
| 6228 | /* UXTAH */ | 6228 | /* UXTAH */ |
| @@ -6230,7 +6230,7 @@ L_stm_s_takeabort: | |||
| 6230 | // printf("rd is %x rn is %x rm is %x rotate is %x\n", state->Reg[BITS (12, 15)], state->Reg[BITS (16, 19)] | 6230 | // printf("rd is %x rn is %x rm is %x rotate is %x\n", state->Reg[BITS (12, 15)], state->Reg[BITS (16, 19)] |
| 6231 | // , Rm, BITS(10, 11)); | 6231 | // , Rm, BITS(10, 11)); |
| 6232 | // printf("icounter is %lld\n", state->NumInstrs); | 6232 | // printf("icounter is %lld\n", state->NumInstrs); |
| 6233 | state->Reg[BITS(12, 15)] = (state->Reg[BITS(16, 19)] >> (8 * (BITS(10, 11)))) + Rm; | 6233 | state->Reg[BITS(12, 15)] = state->Reg[BITS(16, 19)] + Rm; |
| 6234 | // printf("rd is %x\n", state->Reg[BITS (12, 15)]); | 6234 | // printf("rd is %x\n", state->Reg[BITS (12, 15)]); |
| 6235 | // exit(-1); | 6235 | // exit(-1); |
| 6236 | } | 6236 | } |