aboutsummaryrefslogtreecommitdiff
path: root/src/core/arm/dyncom/arm_dyncom_trans.inc
diff options
context:
space:
mode:
authorarchshift <gh@archshift.com>2016-06-10 18:45:48 -0700
committerarchshift <gh@archshift.com>2016-06-10 18:45:48 -0700
commit765eef33197c55b524b9880c24fc9dcb8cf451fb (patch)
tree78bfb06ef6f62db334914d5a140448764d489ddb /src/core/arm/dyncom/arm_dyncom_trans.inc
parenteac4c016cb498e49a0f48803a7ea07be3caf0e1b (diff)
arm_dyncom_interpreter: Add specialized GetAddressingOpLoadStoreT func
This allows us to get the addressing operation for STRT, LDRT, STRBT, and LDRBT. We do this so that translation functions don't need to see the addressing ops directly.
Diffstat (limited to 'src/core/arm/dyncom/arm_dyncom_trans.inc')
-rw-r--r--src/core/arm/dyncom/arm_dyncom_trans.inc43
1 files changed, 4 insertions, 39 deletions
diff --git a/src/core/arm/dyncom/arm_dyncom_trans.inc b/src/core/arm/dyncom/arm_dyncom_trans.inc
index 70a585939..48c6f81e7 100644
--- a/src/core/arm/dyncom/arm_dyncom_trans.inc
+++ b/src/core/arm/dyncom/arm_dyncom_trans.inc
@@ -420,13 +420,7 @@ static ARM_INST_PTR INTERPRETER_TRANSLATE(ldrbt)(unsigned int inst, int index)
inst_base->br = TransExtData::NON_BRANCH;
inst_cream->inst = inst;
- if (BITS(inst, 25, 27) == 2) {
- inst_cream->get_addr = LnSWoUB(ImmediatePostIndexed);
- } else if (BITS(inst, 25, 27) == 3) {
- inst_cream->get_addr = LnSWoUB(ScaledRegisterPostIndexed);
- } else {
- DEBUG_MSG;
- }
+ inst_cream->get_addr = GetAddressingOpLoadStoreT(inst);
return inst_base;
}
@@ -522,18 +516,7 @@ static ARM_INST_PTR INTERPRETER_TRANSLATE(ldrt)(unsigned int inst, int index)
inst_base->br = TransExtData::NON_BRANCH;
inst_cream->inst = inst;
- if (BITS(inst, 25, 27) == 2) {
- inst_cream->get_addr = LnSWoUB(ImmediatePostIndexed);
- } else if (BITS(inst, 25, 27) == 3) {
- inst_cream->get_addr = LnSWoUB(ScaledRegisterPostIndexed);
- } else {
- // Reaching this would indicate the thumb version
- // of this instruction, however the 3DS CPU doesn't
- // support this variant (the 3DS CPU is only ARMv6K,
- // while this variant is added in ARMv6T2).
- // So it's sufficient for citra to not implement this.
- DEBUG_MSG;
- }
+ inst_cream->get_addr = GetAddressingOpLoadStoreT(inst);
if (BITS(inst, 12, 15) == 15) {
inst_base->br = TransExtData::INDIRECT_BRANCH;
@@ -1424,14 +1407,7 @@ static ARM_INST_PTR INTERPRETER_TRANSLATE(strbt)(unsigned int inst, int index)
inst_base->br = TransExtData::NON_BRANCH;
inst_cream->inst = inst;
-
- if (BITS(inst, 25, 27) == 2) {
- inst_cream->get_addr = LnSWoUB(ImmediatePostIndexed);
- } else if (BITS(inst, 25, 27) == 3) {
- inst_cream->get_addr = LnSWoUB(ScaledRegisterPostIndexed);
- } else {
- DEBUG_MSG;
- }
+ inst_cream->get_addr = GetAddressingOpLoadStoreT(inst);
return inst_base;
}
@@ -1499,18 +1475,7 @@ static ARM_INST_PTR INTERPRETER_TRANSLATE(strt)(unsigned int inst, int index)
inst_base->br = TransExtData::NON_BRANCH;
inst_cream->inst = inst;
- if (BITS(inst, 25, 27) == 2) {
- inst_cream->get_addr = LnSWoUB(ImmediatePostIndexed);
- } else if (BITS(inst, 25, 27) == 3) {
- inst_cream->get_addr = LnSWoUB(ScaledRegisterPostIndexed);
- } else {
- // Reaching this would indicate the thumb version
- // of this instruction, however the 3DS CPU doesn't
- // support this variant (the 3DS CPU is only ARMv6K,
- // while this variant is added in ARMv6T2).
- // So it's sufficient for citra to not implement this.
- DEBUG_MSG;
- }
+ inst_cream->get_addr = GetAddressingOpLoadStoreT(inst);
return inst_base;
}