summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/core/arm/interpreter/armemu.cpp32
1 files changed, 23 insertions, 9 deletions
diff --git a/src/core/arm/interpreter/armemu.cpp b/src/core/arm/interpreter/armemu.cpp
index 81a4fdb92..e69789142 100644
--- a/src/core/arm/interpreter/armemu.cpp
+++ b/src/core/arm/interpreter/armemu.cpp
@@ -6209,16 +6209,23 @@ L_stm_s_takeabort:
6209 s16 rn_lo = (state->Reg[rn_idx]); 6209 s16 rn_lo = (state->Reg[rn_idx]);
6210 s16 rn_hi = (state->Reg[rn_idx] >> 16); 6210 s16 rn_hi = (state->Reg[rn_idx] >> 16);
6211 6211
6212 if (rn_lo > max) 6212 if (rn_lo > max) {
6213 rn_lo = max; 6213 rn_lo = max;
6214 else if (rn_lo < min) 6214 state->Cpsr |= (1 << 27);
6215 } else if (rn_lo < min) {
6215 rn_lo = min; 6216 rn_lo = min;
6217 state->Cpsr |= (1 << 27);
6218 }
6216 6219
6217 if (rn_hi > max) 6220 if (rn_hi > max) {
6218 rn_hi = max; 6221 rn_hi = max;
6219 else if (rn_hi < min) 6222 state->Cpsr |= (1 << 27);
6223 } else if (rn_hi < min) {
6220 rn_hi = min; 6224 rn_hi = min;
6225 state->Cpsr |= (1 << 27);
6226 }
6221 6227
6228 ARMul_CPSRAltered(state);
6222 state->Reg[rd_idx] = (rn_lo & 0xFFFF) | ((rn_hi & 0xFFFF) << 16); 6229 state->Reg[rd_idx] = (rn_lo & 0xFFFF) | ((rn_hi & 0xFFFF) << 16);
6223 return 1; 6230 return 1;
6224 } 6231 }
@@ -6350,16 +6357,23 @@ L_stm_s_takeabort:
6350 s16 rn_lo = (state->Reg[rn_idx]); 6357 s16 rn_lo = (state->Reg[rn_idx]);
6351 s16 rn_hi = (state->Reg[rn_idx] >> 16); 6358 s16 rn_hi = (state->Reg[rn_idx] >> 16);
6352 6359
6353 if (max < rn_lo) 6360 if (max < rn_lo) {
6354 rn_lo = max; 6361 rn_lo = max;
6355 else if (rn_lo < 0) 6362 state->Cpsr |= (1 << 27);
6363 } else if (rn_lo < 0) {
6356 rn_lo = 0; 6364 rn_lo = 0;
6365 state->Cpsr |= (1 << 27);
6366 }
6357 6367
6358 if (max < rn_hi) 6368 if (max < rn_hi) {
6359 rn_hi = max; 6369 rn_hi = max;
6360 else if (rn_hi < 0) 6370 state->Cpsr |= (1 << 27);
6371 } else if (rn_hi < 0) {
6361 rn_hi = 0; 6372 rn_hi = 0;
6362 6373 state->Cpsr |= (1 << 27);
6374 }
6375
6376 ARMul_CPSRAltered(state);
6363 state->Reg[rd_idx] = (rn_lo & 0xFFFF) | ((rn_hi << 16) & 0xFFFF); 6377 state->Reg[rd_idx] = (rn_lo & 0xFFFF) | ((rn_hi << 16) & 0xFFFF);
6364 return 1; 6378 return 1;
6365 } 6379 }