dyncom: Implement missing shifts in ScaledRegisterPostIndexed, etc
This commit is contained in:
parent
1cb31f4f06
commit
a873f157d0
|
@ -410,10 +410,21 @@ void LnSWoUB(ScaledRegisterPreIndexed)(arm_processor *cpu, unsigned int inst, un
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case 2:
|
case 2:
|
||||||
DEBUG_MSG;
|
if (shift_imm == 0) { // ASR #32
|
||||||
|
if (BIT(rm, 31) == 1)
|
||||||
|
index = 0xFFFFFFFF;
|
||||||
|
else
|
||||||
|
index = 0;
|
||||||
|
} else {
|
||||||
|
index = static_cast<int>(rm) >> shift_imm;
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
case 3:
|
case 3:
|
||||||
DEBUG_MSG;
|
if (shift_imm == 0) {
|
||||||
|
index = (cpu->CFlag << 31) | (rm >> 1);
|
||||||
|
} else {
|
||||||
|
index = ROTATE_RIGHT_32(rm, shift_imm);
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -449,10 +460,21 @@ void LnSWoUB(ScaledRegisterPostIndexed)(arm_processor *cpu, unsigned int inst, u
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case 2:
|
case 2:
|
||||||
DEBUG_MSG;
|
if (shift_imm == 0) { // ASR #32
|
||||||
|
if (BIT(rm, 31) == 1)
|
||||||
|
index = 0xFFFFFFFF;
|
||||||
|
else
|
||||||
|
index = 0;
|
||||||
|
} else {
|
||||||
|
index = static_cast<int>(rm) >> shift_imm;
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
case 3:
|
case 3:
|
||||||
DEBUG_MSG;
|
if (shift_imm == 0) {
|
||||||
|
index = (cpu->CFlag << 31) | (rm >> 1);
|
||||||
|
} else {
|
||||||
|
index = ROTATE_RIGHT_32(rm, shift_imm);
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -655,7 +677,7 @@ void LnSWoUB(ScaledRegisterOffset)(arm_processor *cpu, unsigned int inst, unsign
|
||||||
break;
|
break;
|
||||||
case 2:
|
case 2:
|
||||||
if (shift_imm == 0) { // ASR #32
|
if (shift_imm == 0) { // ASR #32
|
||||||
if (rm >> 31)
|
if (BIT(rm, 31) == 1)
|
||||||
index = 0xFFFFFFFF;
|
index = 0xFFFFFFFF;
|
||||||
else
|
else
|
||||||
index = 0;
|
index = 0;
|
||||||
|
@ -664,7 +686,11 @@ void LnSWoUB(ScaledRegisterOffset)(arm_processor *cpu, unsigned int inst, unsign
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case 3:
|
case 3:
|
||||||
DEBUG_MSG;
|
if (shift_imm == 0) {
|
||||||
|
index = (cpu->CFlag << 31) | (rm >> 1);
|
||||||
|
} else {
|
||||||
|
index = ROTATE_RIGHT_32(rm, shift_imm);
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Reference in New Issue