ARM: Fix the integer register indexes.
The PC indexes in the various register sets was defined in the section for unaliased registers which was throwing off the indexing. This moves those where they belong. Also, to make detecting accesses to the PC easier and because it's in the same place in all modes, the intRegForceUser function now passes it through as index 15.
This commit is contained in:
parent
53e27c0277
commit
4779020e13
|
@ -63,31 +63,26 @@ enum IntRegIndex
|
||||||
INTREG_SP_SVC = INTREG_R13_SVC,
|
INTREG_SP_SVC = INTREG_R13_SVC,
|
||||||
INTREG_R14_SVC,
|
INTREG_R14_SVC,
|
||||||
INTREG_LR_SVC = INTREG_R14_SVC,
|
INTREG_LR_SVC = INTREG_R14_SVC,
|
||||||
INTREG_R15_SVC = INTREG_R15,
|
|
||||||
|
|
||||||
INTREG_R13_MON,
|
INTREG_R13_MON,
|
||||||
INTREG_SP_MON = INTREG_R13_MON,
|
INTREG_SP_MON = INTREG_R13_MON,
|
||||||
INTREG_R14_MON,
|
INTREG_R14_MON,
|
||||||
INTREG_LR_MON = INTREG_R14_MON,
|
INTREG_LR_MON = INTREG_R14_MON,
|
||||||
INTREG_R15_MON = INTREG_R15,
|
|
||||||
|
|
||||||
INTREG_R13_ABT,
|
INTREG_R13_ABT,
|
||||||
INTREG_SP_ABT = INTREG_R13_ABT,
|
INTREG_SP_ABT = INTREG_R13_ABT,
|
||||||
INTREG_R14_ABT,
|
INTREG_R14_ABT,
|
||||||
INTREG_LR_ABT = INTREG_R14_ABT,
|
INTREG_LR_ABT = INTREG_R14_ABT,
|
||||||
INTREG_R15_ABT = INTREG_R15,
|
|
||||||
|
|
||||||
INTREG_R13_UND,
|
INTREG_R13_UND,
|
||||||
INTREG_SP_UND = INTREG_R13_UND,
|
INTREG_SP_UND = INTREG_R13_UND,
|
||||||
INTREG_R14_UND,
|
INTREG_R14_UND,
|
||||||
INTREG_LR_UND = INTREG_R14_UND,
|
INTREG_LR_UND = INTREG_R14_UND,
|
||||||
INTREG_R15_UND = INTREG_R15,
|
|
||||||
|
|
||||||
INTREG_R13_IRQ,
|
INTREG_R13_IRQ,
|
||||||
INTREG_SP_IRQ = INTREG_R13_IRQ,
|
INTREG_SP_IRQ = INTREG_R13_IRQ,
|
||||||
INTREG_R14_IRQ,
|
INTREG_R14_IRQ,
|
||||||
INTREG_LR_IRQ = INTREG_R14_IRQ,
|
INTREG_LR_IRQ = INTREG_R14_IRQ,
|
||||||
INTREG_R15_IRQ = INTREG_R15,
|
|
||||||
|
|
||||||
INTREG_R8_FIQ,
|
INTREG_R8_FIQ,
|
||||||
INTREG_R9_FIQ,
|
INTREG_R9_FIQ,
|
||||||
|
@ -98,7 +93,6 @@ enum IntRegIndex
|
||||||
INTREG_SP_FIQ = INTREG_R13_FIQ,
|
INTREG_SP_FIQ = INTREG_R13_FIQ,
|
||||||
INTREG_R14_FIQ,
|
INTREG_R14_FIQ,
|
||||||
INTREG_LR_FIQ = INTREG_R14_FIQ,
|
INTREG_LR_FIQ = INTREG_R14_FIQ,
|
||||||
INTREG_R15_FIQ = INTREG_R15,
|
|
||||||
|
|
||||||
INTREG_ZERO, // Dummy zero reg since there has to be one.
|
INTREG_ZERO, // Dummy zero reg since there has to be one.
|
||||||
INTREG_UREG0,
|
INTREG_UREG0,
|
||||||
|
@ -147,6 +141,7 @@ enum IntRegIndex
|
||||||
INTREG_R11_SVC = INTREG_R11,
|
INTREG_R11_SVC = INTREG_R11,
|
||||||
INTREG_R12_SVC = INTREG_R12,
|
INTREG_R12_SVC = INTREG_R12,
|
||||||
INTREG_PC_SVC = INTREG_PC,
|
INTREG_PC_SVC = INTREG_PC,
|
||||||
|
INTREG_R15_SVC = INTREG_R15,
|
||||||
|
|
||||||
/* MON mode */
|
/* MON mode */
|
||||||
INTREG_R0_MON = INTREG_R0,
|
INTREG_R0_MON = INTREG_R0,
|
||||||
|
@ -163,6 +158,7 @@ enum IntRegIndex
|
||||||
INTREG_R11_MON = INTREG_R11,
|
INTREG_R11_MON = INTREG_R11,
|
||||||
INTREG_R12_MON = INTREG_R12,
|
INTREG_R12_MON = INTREG_R12,
|
||||||
INTREG_PC_MON = INTREG_PC,
|
INTREG_PC_MON = INTREG_PC,
|
||||||
|
INTREG_R15_MON = INTREG_R15,
|
||||||
|
|
||||||
/* ABT mode */
|
/* ABT mode */
|
||||||
INTREG_R0_ABT = INTREG_R0,
|
INTREG_R0_ABT = INTREG_R0,
|
||||||
|
@ -179,6 +175,7 @@ enum IntRegIndex
|
||||||
INTREG_R11_ABT = INTREG_R11,
|
INTREG_R11_ABT = INTREG_R11,
|
||||||
INTREG_R12_ABT = INTREG_R12,
|
INTREG_R12_ABT = INTREG_R12,
|
||||||
INTREG_PC_ABT = INTREG_PC,
|
INTREG_PC_ABT = INTREG_PC,
|
||||||
|
INTREG_R15_ABT = INTREG_R15,
|
||||||
|
|
||||||
/* UND mode */
|
/* UND mode */
|
||||||
INTREG_R0_UND = INTREG_R0,
|
INTREG_R0_UND = INTREG_R0,
|
||||||
|
@ -195,6 +192,7 @@ enum IntRegIndex
|
||||||
INTREG_R11_UND = INTREG_R11,
|
INTREG_R11_UND = INTREG_R11,
|
||||||
INTREG_R12_UND = INTREG_R12,
|
INTREG_R12_UND = INTREG_R12,
|
||||||
INTREG_PC_UND = INTREG_PC,
|
INTREG_PC_UND = INTREG_PC,
|
||||||
|
INTREG_R15_UND = INTREG_R15,
|
||||||
|
|
||||||
/* IRQ mode */
|
/* IRQ mode */
|
||||||
INTREG_R0_IRQ = INTREG_R0,
|
INTREG_R0_IRQ = INTREG_R0,
|
||||||
|
@ -211,6 +209,7 @@ enum IntRegIndex
|
||||||
INTREG_R11_IRQ = INTREG_R11,
|
INTREG_R11_IRQ = INTREG_R11,
|
||||||
INTREG_R12_IRQ = INTREG_R12,
|
INTREG_R12_IRQ = INTREG_R12,
|
||||||
INTREG_PC_IRQ = INTREG_PC,
|
INTREG_PC_IRQ = INTREG_PC,
|
||||||
|
INTREG_R15_IRQ = INTREG_R15,
|
||||||
|
|
||||||
/* FIQ mode */
|
/* FIQ mode */
|
||||||
INTREG_R0_FIQ = INTREG_R0,
|
INTREG_R0_FIQ = INTREG_R0,
|
||||||
|
@ -222,6 +221,7 @@ enum IntRegIndex
|
||||||
INTREG_R6_FIQ = INTREG_R6,
|
INTREG_R6_FIQ = INTREG_R6,
|
||||||
INTREG_R7_FIQ = INTREG_R7,
|
INTREG_R7_FIQ = INTREG_R7,
|
||||||
INTREG_PC_FIQ = INTREG_PC,
|
INTREG_PC_FIQ = INTREG_PC,
|
||||||
|
INTREG_R15_FIQ = INTREG_R15,
|
||||||
};
|
};
|
||||||
|
|
||||||
typedef IntRegIndex IntRegMap[NUM_ARCH_INTREGS];
|
typedef IntRegIndex IntRegMap[NUM_ARCH_INTREGS];
|
||||||
|
@ -328,7 +328,8 @@ static inline IntRegIndex
|
||||||
intRegForceUser(unsigned index)
|
intRegForceUser(unsigned index)
|
||||||
{
|
{
|
||||||
assert(index < NUM_ARCH_INTREGS);
|
assert(index < NUM_ARCH_INTREGS);
|
||||||
return (IntRegIndex)(index + NUM_INTREGS);
|
|
||||||
|
return index == 15 ? (IntRegIndex)15 : (IntRegIndex)(index + NUM_INTREGS);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue