|
From: <sv...@va...> - 2011-07-21 06:22:11
|
Author: sewardj
Date: 2011-07-21 07:17:21 +0100 (Thu, 21 Jul 2011)
New Revision: 2179
Log:
Add support for Thumb2 encodings of PLD and PLDW. Bug 277653.
(Mans Rullgard, ma...@ma...)
Modified:
trunk/priv/guest_arm_toIR.c
Modified: trunk/priv/guest_arm_toIR.c
===================================================================
--- trunk/priv/guest_arm_toIR.c 2011-07-19 15:48:29 UTC (rev 2178)
+++ trunk/priv/guest_arm_toIR.c 2011-07-21 06:17:21 UTC (rev 2179)
@@ -18015,6 +18015,38 @@
}
}
+ /* ---------------------- PLD{,W} ---------------------- */
+ if ((INSN0(15,4) & 0xFFD) == 0xF89 && INSN1(15,12) == 0xF) {
+ /* PLD/PLDW immediate, encoding T1 */
+ UInt rN = INSN0(3,0);
+ UInt bW = INSN0(5,5);
+ UInt imm12 = INSN1(11,0);
+ DIP("pld%s [r%u, #%u]\n", bW ? "w" : "", rN, imm12);
+ goto decode_success;
+ }
+
+ if ((INSN0(15,4) & 0xFFD) == 0xF81 && INSN1(15,8) == 0xFC) {
+ /* PLD/PLDW immediate, encoding T2 */
+ UInt rN = INSN0(3,0);
+ UInt bW = INSN0(5,5);
+ UInt imm8 = INSN1(7,0);
+ DIP("pld%s [r%u, #-%u]\n", bW ? "w" : "", rN, imm8);
+ goto decode_success;
+ }
+
+ if ((INSN0(15,4) & 0xFFD) == 0xF81 && INSN1(15,6) == 0x3C0) {
+ /* PLD/PLDW register, encoding T1 */
+ UInt rN = INSN0(3,0);
+ UInt rM = INSN1(3,0);
+ UInt bW = INSN0(5,5);
+ UInt imm2 = INSN1(5,4);
+ if (!isBadRegT(rM)) {
+ DIP("pld%s [r%u, r%u, lsl %d]\n", bW ? "w" : "", rN, rM, imm2);
+ goto decode_success;
+ }
+ /* fall through */
+ }
+
/* -------------- read CP15 TPIDRURO register ------------- */
/* mrc p15, 0, r0, c13, c0, 3 up to
mrc p15, 0, r14, c13, c0, 3
|