aboutsummaryrefslogtreecommitdiff
path: root/gas
diff options
context:
space:
mode:
authorMatthew Gretton-Dann <matthew.gretton-dann@arm.com>2011-12-07 16:58:35 +0000
committerMatthew Gretton-Dann <matthew.gretton-dann@arm.com>2011-12-07 16:58:35 +0000
commitbd340a044ccea7f1810df7626726ab7ff731693f (patch)
tree1ffc7315aea39f10a264ae75239afab032e9cf8b /gas
parentad6cec4372cbd9c17151f4b6b84759a2fb30f2b2 (diff)
downloadgdb-bd340a044ccea7f1810df7626726ab7ff731693f.zip
gdb-bd340a044ccea7f1810df7626726ab7ff731693f.tar.gz
gdb-bd340a044ccea7f1810df7626726ab7ff731693f.tar.bz2
2011-12-07 Sameera Deshpande <sameera.deshpande@arm.com>
* gas/config/tc-arm.c (do_t_ldstd): Warn for unpredictable cases. * gas/testsuite/gas/arm/thumb2_ldstd_unpredictable.d: New testcase. * gas/testsuite/gas/arm/thumb2_ldstd_unpredictable.l: Likewise. * gas/testsuite/gas/arm/thumb2_ldstd_unpredictable.s: Likewise. * gas/testsuite/gas/testsuite/gas/arm/sp-pc-validations-bad-t.l: Update testcase. * gas/testsuite/gas/testsuite/gas/arm/sp-pc-validations-bad-t.s: Likewise.
Diffstat (limited to 'gas')
-rw-r--r--gas/ChangeLog4
-rw-r--r--gas/config/tc-arm.c10
-rw-r--r--gas/testsuite/ChangeLog9
-rw-r--r--gas/testsuite/gas/arm/sp-pc-validations-bad-t.l414
-rw-r--r--gas/testsuite/gas/arm/sp-pc-validations-bad-t.s6
-rw-r--r--gas/testsuite/gas/arm/thumb2_ldstd_unpredictable.d2
-rw-r--r--gas/testsuite/gas/arm/thumb2_ldstd_unpredictable.l9
-rw-r--r--gas/testsuite/gas/arm/thumb2_ldstd_unpredictable.s13
8 files changed, 263 insertions, 204 deletions
diff --git a/gas/ChangeLog b/gas/ChangeLog
index d52c5b6..ebbd477 100644
--- a/gas/ChangeLog
+++ b/gas/ChangeLog
@@ -1,3 +1,7 @@
+2011-12-07 Sameera Deshpande <sameera.deshpande@arm.com>
+
+ * config/tc-arm.c (do_t_ldstd): Warn for unpredictable cases.
+
2011-11-07 Matthew Gretton-Dann <matthew.gretton-dann@arm.com>
* config/tc-arm.c (ARM_IT_MAX_OPERANDS): New define.
diff --git a/gas/config/tc-arm.c b/gas/config/tc-arm.c
index 064267e..a73f01a 100644
--- a/gas/config/tc-arm.c
+++ b/gas/config/tc-arm.c
@@ -563,6 +563,7 @@ const char * const reg_expected_msgs[] =
};
/* Some well known registers that we refer to directly elsewhere. */
+#define REG_R12 12
#define REG_SP 13
#define REG_LR 14
#define REG_PC 15
@@ -10654,7 +10655,16 @@ do_t_ldstd (void)
inst.operands[1].reg = inst.operands[0].reg + 1;
constraint (inst.operands[0].reg == REG_LR,
_("r14 not allowed here"));
+ constraint (inst.operands[0].reg == REG_R12,
+ _("r12 not allowed here"));
}
+
+ if (inst.operands[2].writeback
+ && (inst.operands[0].reg == inst.operands[2].reg
+ || inst.operands[1].reg == inst.operands[2].reg))
+ as_warn (_("base register written back, and overlaps "
+ "one of transfer registers"));
+
inst.instruction |= inst.operands[0].reg << 12;
inst.instruction |= inst.operands[1].reg << 8;
encode_thumb32_addr_mode (2, /*is_t=*/FALSE, /*is_d=*/TRUE);
diff --git a/gas/testsuite/ChangeLog b/gas/testsuite/ChangeLog
index 8d6e8b6..446f260 100644
--- a/gas/testsuite/ChangeLog
+++ b/gas/testsuite/ChangeLog
@@ -1,3 +1,12 @@
+2011-12-07 Sameera Deshpande <sameera.deshpande@arm.com>
+
+ * gas/arm/thumb2_ldstd_unpredictable.d: New testcase.
+ * gas/arm/thumb2_ldstd_unpredictable.l: Likewise.
+ * gas/arm/thumb2_ldstd_unpredictable.s: Likewise.
+ * gas/testsuite/gas/arm/sp-pc-validations-bad-t.l: Update
+ testcase.
+ * gas/testsuite/gas/arm/sp-pc-validations-bad-t.s: Likewise.
+
2011-11-07 Matthew Gretton-Dann <matthew.gretton-dann@arm.com>
* gas/arm/neon-suffix-bad.l: Add testcase.
diff --git a/gas/testsuite/gas/arm/sp-pc-validations-bad-t.l b/gas/testsuite/gas/arm/sp-pc-validations-bad-t.l
index 120f6f3..d20f1c5 100644
--- a/gas/testsuite/gas/arm/sp-pc-validations-bad-t.l
+++ b/gas/testsuite/gas/arm/sp-pc-validations-bad-t.l
@@ -37,207 +37,213 @@
[^:]*:76: Error: r13 not allowed here -- `ldrbt sp,\[r0,#4\]'
[^:]*:79: Error: r15 not allowed here -- `ldrd pc,r0,\[r1\]'
[^:]*:80: Error: r13 not allowed here -- `ldrd sp,r0,\[r1\]'
-[^:]*:81: Error: r15 not allowed here -- `ldrd r0,pc,\[r1\]'
-[^:]*:82: Error: r13 not allowed here -- `ldrd r0,sp,\[r1\]'
-[^:]*:83: Error: r15 not allowed here -- `ldrd pc,r0,\[r1\],#4'
-[^:]*:84: Error: r13 not allowed here -- `ldrd sp,r0,\[r1\],#4'
-[^:]*:85: Error: r15 not allowed here -- `ldrd r0,pc,\[r1\],#4'
-[^:]*:86: Error: r13 not allowed here -- `ldrd r0,sp,\[r1\],#4'
-[^:]*:87: Error: r15 not allowed here -- `ldrd pc,r0,\[r1,#4\]!'
-[^:]*:88: Error: r13 not allowed here -- `ldrd sp,r0,\[r1,#4\]!'
-[^:]*:89: Error: r15 not allowed here -- `ldrd r0,pc,\[r1,#4\]!'
-[^:]*:90: Error: r13 not allowed here -- `ldrd r0,sp,\[r1,#4\]!'
-[^:]*:93: Error: r15 not allowed here -- `ldrd pc,r0,label'
-[^:]*:94: Error: r13 not allowed here -- `ldrd sp,r0,label'
-[^:]*:95: Error: r15 not allowed here -- `ldrd r0,pc,label'
-[^:]*:96: Error: r13 not allowed here -- `ldrd r0,sp,label'
-[^:]*:97: Error: r15 not allowed here -- `ldrd pc,r0,\[pc,#-0\]'
-[^:]*:98: Error: r13 not allowed here -- `ldrd sp,r0,\[pc,#-0\]'
-[^:]*:99: Error: r15 not allowed here -- `ldrd r0,pc,\[pc,#-0\]'
-[^:]*:100: Error: r13 not allowed here -- `ldrd r0,sp,\[pc,#-0\]'
-[^:]*:105: Error: r15 not allowed here -- `ldrex pc,\[r0\]'
-[^:]*:106: Error: r13 not allowed here -- `ldrex sp,\[r0\]'
-[^:]*:107: Error: r15 not allowed here -- `ldrex r0,\[pc\]'
-[^:]*:108: Error: r15 not allowed here -- `ldrexb pc,\[r0\]'
-[^:]*:109: Error: r13 not allowed here -- `ldrexb sp,\[r0\]'
-[^:]*:110: Error: r15 not allowed here -- `ldrexb r0,\[pc\]'
-[^:]*:111: Error: r15 not allowed here -- `ldrexd pc,r0,\[r1\]'
-[^:]*:112: Error: r13 not allowed here -- `ldrexd sp,r0,\[r1\]'
-[^:]*:113: Error: r15 not allowed here -- `ldrexd r0,pc,\[r1\]'
-[^:]*:114: Error: r13 not allowed here -- `ldrexd r0,sp,\[r1\]'
-[^:]*:115: Error: r15 not allowed here -- `ldrexd r0,r1,\[pc\]'
-[^:]*:116: Error: r15 not allowed here -- `ldrexh pc,\[r0\]'
-[^:]*:117: Error: r13 not allowed here -- `ldrexh sp,\[r0\]'
-[^:]*:118: Error: r15 not allowed here -- `ldrexh r0,\[pc\]'
-[^:]*:121: Error: r15 not allowed here -- `ldrh pc,\[r0\]'
-[^:]*:122: Error: r15 not allowed here -- `ldrh pc,\[r0,#4\]'
-[^:]*:125: Error: r15 not allowed here -- `ldrh.w pc,\[r0\]'
-[^:]*:126: Error: r15 not allowed here -- `ldrh.w pc,\[r0,#4\]'
-[^:]*:127: Error: r13 not allowed here -- `ldrh.w sp,\[r0\]'
-[^:]*:128: Error: r13 not allowed here -- `ldrh.w sp,\[r0,#4\]'
-[^:]*:129: Error: r15 not allowed here -- `ldrh pc,\[r0,#-3\]'
-[^:]*:131: Error: r15 not allowed here -- `ldrh pc,\[r0\],#4'
-[^:]*:132: Error: r13 not allowed here -- `ldrh sp,\[r0\],#4'
-[^:]*:133: Error: r15 not allowed here -- `ldrh pc,\[r0,#4\]!'
-[^:]*:134: Error: r13 not allowed here -- `ldrh sp,\[r0,#4\]!'
-[^:]*:137: Error: r15 not allowed here -- `ldrh pc,label'
-[^:]*:138: Error: r15 not allowed here -- `ldrh pc,\[pc,#-0\]'
-[^:]*:139: Error: r13 not allowed here -- `ldrh sp,label'
-[^:]*:140: Error: r13 not allowed here -- `ldrh sp,\[pc,#-0\]'
-[^:]*:143: Error: r15 not allowed here -- `ldrh pc,\[r0,r1\]'
-[^:]*:144: Error: cannot use register index with PC-relative addressing -- `ldrh r0,\[pc,r1\]'
-[^:]*:145: Error: r15 not allowed here -- `ldrh r0,\[r1,pc\]'
-[^:]*:146: Error: r15 not allowed here -- `ldrh.w pc,\[r0,r1,LSL#1\]'
-[^:]*:147: Error: r13 not allowed here -- `ldrh.w sp,\[r0,r1,LSL#1\]'
-[^:]*:148: Error: r15 not allowed here -- `ldrh.w r2,\[r0,pc,LSL#1\]'
-[^:]*:149: Error: r13 not allowed here -- `ldrh.w r2,\[r0,sp,LSL#1\]'
-[^:]*:152: Error: r15 not allowed here -- `ldrht pc,\[r0,#4\]'
-[^:]*:153: Error: r13 not allowed here -- `ldrht sp,\[r0,#4\]'
-[^:]*:156: Error: r15 not allowed here -- `ldrsb pc,\[r0,#4\]'
-[^:]*:158: Error: r13 not allowed here -- `ldrsb sp,\[r0,#4\]'
-[^:]*:159: Error: r15 not allowed here -- `ldrsb pc,\[r0,#-4\]'
-[^:]*:160: Error: r13 not allowed here -- `ldrsb sp,\[r0,#-4\]'
-[^:]*:161: Error: r15 not allowed here -- `ldrsb pc,\[r0\],#4'
-[^:]*:162: Error: r13 not allowed here -- `ldrsb sp,\[r0\],#4'
-[^:]*:163: Error: r15 not allowed here -- `ldrsb pc,\[r0,#4\]!'
-[^:]*:164: Error: r13 not allowed here -- `ldrsb sp,\[r0,#4\]!'
-[^:]*:167: Error: r15 not allowed here -- `ldrsb pc,label'
-[^:]*:168: Error: r15 not allowed here -- `ldrsb pc,\[pc,#-0\]'
-[^:]*:169: Error: r13 not allowed here -- `ldrsb sp,label'
-[^:]*:170: Error: r13 not allowed here -- `ldrsb sp,\[pc,#-0\]'
-[^:]*:173: Error: r15 not allowed here -- `ldrsb pc,\[r0,r1\]'
-[^:]*:174: Error: cannot use register index with PC-relative addressing -- `ldrsb r0,\[pc,r1\]'
-[^:]*:175: Error: r15 not allowed here -- `ldrsb r0,\[r1,pc\]'
-[^:]*:176: Error: r15 not allowed here -- `ldrsb.w pc,\[r0,r1,LSL#2\]'
-[^:]*:178: Error: r13 not allowed here -- `ldrsb.w sp,\[r0,r1,LSL#2\]'
-[^:]*:179: Error: r15 not allowed here -- `ldrsb.w r2,\[r0,pc,LSL#2\]'
-[^:]*:180: Error: r13 not allowed here -- `ldrsb.w r2,\[r0,sp,LSL#2\]'
-[^:]*:184: Error: r15 not allowed here -- `ldrsbt pc,\[r0,#4\]'
-[^:]*:185: Error: r13 not allowed here -- `ldrsbt sp,\[r0,#4\]'
-[^:]*:189: Error: r15 not allowed here -- `ldrsh pc,\[r0,#4\]'
-[^:]*:190: Error: r13 not allowed here -- `ldrsh sp,\[r0,#4\]'
-[^:]*:191: Error: r15 not allowed here -- `ldrsh pc,\[r0,#-4\]'
-[^:]*:192: Error: r15 not allowed here -- `ldrsh pc,\[r0\],#4'
-[^:]*:193: Error: r15 not allowed here -- `ldrsh pc,\[r0,#4\]!'
-[^:]*:194: Error: r13 not allowed here -- `ldrsh sp,\[r0,#-4\]'
-[^:]*:195: Error: r13 not allowed here -- `ldrsh sp,\[r0\],#4'
-[^:]*:196: Error: r13 not allowed here -- `ldrsh sp,\[r0,#4\]!'
-[^:]*:199: Error: r15 not allowed here -- `ldrsh pc,label'
-[^:]*:200: Error: r13 not allowed here -- `ldrsh sp,label'
-[^:]*:201: Error: r13 not allowed here -- `ldrsh sp,\[pc,#-0\]'
-[^:]*:204: Error: r15 not allowed here -- `ldrsh pc,\[r0,r1\]'
-[^:]*:205: Error: cannot use register index with PC-relative addressing -- `ldrsh r0,\[pc,r1\]'
-[^:]*:206: Error: r15 not allowed here -- `ldrsh r0,\[r1,pc\]'
-[^:]*:208: Error: r15 not allowed here -- `ldrsh.w pc,\[r0,r1,LSL#3\]'
-[^:]*:209: Error: r13 not allowed here -- `ldrsh.w sp,\[r0,r1,LSL#3\]'
-[^:]*:210: Error: r13 not allowed here -- `ldrsh.w r0,\[r1,sp,LSL#3\]'
-[^:]*:211: Error: r15 not allowed here -- `ldrsh.w r0,\[r1,pc,LSL#3\]'
-[^:]*:215: Error: r15 not allowed here -- `ldrsht pc,\[r0,#4\]'
-[^:]*:216: Error: r13 not allowed here -- `ldrsht sp,\[r0,#4\]'
-[^:]*:220: Error: r15 not allowed here -- `ldrt pc,\[r0,#4\]'
-[^:]*:221: Error: r13 not allowed here -- `ldrt sp,\[r0,#4\]'
-[^:]*:226: Error: r15 not allowed here -- `str pc,\[r0,#4\]'
-[^:]*:227: Error: cannot use register index with PC-relative addressing -- `str.w r0,\[pc,#4\]'
-[^:]*:228: Error: cannot use register index with PC-relative addressing -- `str r0,\[pc,#-4\]'
-[^:]*:229: Error: cannot use post-indexing with PC-relative addressing -- `str r0,\[pc\],#4'
-[^:]*:230: Error: cannot use writeback with PC-relative addressing -- `str r0,\[pc,#4\]!'
-[^:]*:233: Error: cannot use register index with PC-relative addressing -- `str.w r0,\[pc,r1\]'
-[^:]*:234: Error: cannot use register index with PC-relative addressing -- `str.w r0,\[pc,r1,LSL#2\]'
-[^:]*:240: Error: cannot use register index with PC-relative addressing -- `strb.w r0,\[pc,#4\]'
-[^:]*:241: Error: r15 not allowed here -- `strb.w pc,\[r0,#4\]'
-[^:]*:242: Error: r13 not allowed here -- `strb.w sp,\[r0,#4\]'
-[^:]*:243: Error: cannot use register index with PC-relative addressing -- `strb r0,\[pc,#-4\]'
-[^:]*:244: Error: cannot use post-indexing with PC-relative addressing -- `strb r0,\[pc\],#4'
-[^:]*:245: Error: cannot use writeback with PC-relative addressing -- `strb r0,\[pc,#4\]!'
-[^:]*:246: Error: r15 not allowed here -- `strb pc,\[r0,#-4\]'
-[^:]*:247: Error: r15 not allowed here -- `strb pc,\[r0\],#4'
-[^:]*:248: Error: r15 not allowed here -- `strb pc,\[r0,#4\]!'
-[^:]*:249: Error: r13 not allowed here -- `strb sp,\[r0,#-4\]'
-[^:]*:250: Error: r13 not allowed here -- `strb sp,\[r0\],#4'
-[^:]*:251: Error: r13 not allowed here -- `strb sp,\[r0,#4\]!'
-[^:]*:254: Error: cannot use register index with PC-relative addressing -- `strb.w r0,\[pc,r1\]'
-[^:]*:255: Error: cannot use register index with PC-relative addressing -- `strb.w r0,\[pc,r1,LSL#2\]'
-[^:]*:256: Error: r15 not allowed here -- `strb.w pc,\[r0,r1\]'
-[^:]*:257: Error: r15 not allowed here -- `strb.w pc,\[r0,r1,LSL#2\]'
-[^:]*:258: Error: r13 not allowed here -- `strb.w sp,\[r0,r1\]'
-[^:]*:259: Error: r13 not allowed here -- `strb.w sp,\[r0,r1,LSL#2\]'
-[^:]*:260: Error: r15 not allowed here -- `strb.w r0,\[r1,pc\]'
-[^:]*:261: Error: r15 not allowed here -- `strb.w r0,\[r1,pc,LSL#2\]'
-[^:]*:262: Error: r13 not allowed here -- `strb.w r0,\[r1,sp\]'
-[^:]*:263: Error: r13 not allowed here -- `strb.w r0,\[r1,sp,LSL#2\]'
-[^:]*:266: Error: cannot use register index with PC-relative addressing -- `strbt r0,\[pc,#4\]'
-[^:]*:267: Error: r15 not allowed here -- `strbt pc,\[r0,#4\]'
-[^:]*:268: Error: r13 not allowed here -- `strbt sp,\[r0,#4\]'
-[^:]*:271: Error: cannot use register index with PC-relative addressing -- `strd r0,r1,\[pc,#4\]'
-[^:]*:272: Error: cannot use post-indexing with PC-relative addressing -- `strd r0,r1,\[pc\],#4'
-[^:]*:273: Error: cannot use writeback with PC-relative addressing -- `strd r0,r1,\[pc,#4\]!'
-[^:]*:274: Error: r15 not allowed here -- `strd pc,r0,\[r1,#4\]'
-[^:]*:275: Error: r15 not allowed here -- `strd pc,r0,\[r1\],#4'
-[^:]*:276: Error: r15 not allowed here -- `strd pc,r0,\[r1,#4\]!'
-[^:]*:277: Error: r13 not allowed here -- `strd sp,r0,\[r1,#4\]'
-[^:]*:278: Error: r13 not allowed here -- `strd sp,r0,\[r1\],#4'
-[^:]*:279: Error: r13 not allowed here -- `strd sp,r0,\[r1,#4\]!'
-[^:]*:280: Error: r15 not allowed here -- `strd r0,pc,\[r1,#4\]'
-[^:]*:281: Error: r15 not allowed here -- `strd r0,pc,\[r1\],#4'
-[^:]*:282: Error: r15 not allowed here -- `strd r0,pc,\[r1,#4\]!'
-[^:]*:283: Error: r13 not allowed here -- `strd r0,sp,\[r1,#4\]'
-[^:]*:284: Error: r13 not allowed here -- `strd r0,sp,\[r1\],#4'
-[^:]*:285: Error: r13 not allowed here -- `strd r0,sp,\[r1,#4\]!'
-[^:]*:291: Error: r15 not allowed here -- `strex pc,r0,\[r1\]'
-[^:]*:292: Error: r15 not allowed here -- `strex pc,r0,\[r1,#4\]'
-[^:]*:293: Error: r13 not allowed here -- `strex sp,r0,\[r1\]'
-[^:]*:294: Error: r13 not allowed here -- `strex sp,r0,\[r1,#4\]'
-[^:]*:295: Error: r15 not allowed here -- `strex r0,pc,\[r1\]'
-[^:]*:296: Error: r15 not allowed here -- `strex r0,pc,\[r1,#4\]'
-[^:]*:297: Error: r13 not allowed here -- `strex r0,sp,\[r1\]'
-[^:]*:298: Error: r13 not allowed here -- `strex r0,sp,\[r1,#4\]'
-[^:]*:299: Error: r15 not allowed here -- `strex r0,r1,\[pc\]'
-[^:]*:300: Error: r15 not allowed here -- `strex r0,r1,\[pc,#4\]'
-[^:]*:303: Error: r15 not allowed here -- `strexb pc,r0,\[r1\]'
-[^:]*:304: Error: r13 not allowed here -- `strexb sp,r0,\[r1\]'
-[^:]*:305: Error: r15 not allowed here -- `strexb r0,pc,\[r1\]'
-[^:]*:306: Error: r13 not allowed here -- `strexb r0,sp,\[r1\]'
-[^:]*:307: Error: r15 not allowed here -- `strexb r0,r1,\[pc\]'
-[^:]*:310: Error: r15 not allowed here -- `strexd pc,r0,r1,\[r2\]'
-[^:]*:311: Error: r13 not allowed here -- `strexd sp,r0,r1,\[r2\]'
-[^:]*:312: Error: r15 not allowed here -- `strexd r0,pc,r1,\[r2\]'
-[^:]*:313: Error: r13 not allowed here -- `strexd r0,sp,r1,\[r2\]'
-[^:]*:314: Error: r15 not allowed here -- `strexd r0,r1,pc,\[r2\]'
-[^:]*:315: Error: r13 not allowed here -- `strexd r0,r1,sp,\[r2\]'
-[^:]*:316: Error: r15 not allowed here -- `strexd r0,r1,r2,\[pc\]'
-[^:]*:319: Error: r15 not allowed here -- `strexh pc,r0,\[r1\]'
-[^:]*:320: Error: r13 not allowed here -- `strexh sp,r0,\[r1\]'
-[^:]*:321: Error: r15 not allowed here -- `strexh r0,pc,\[r1\]'
-[^:]*:322: Error: r13 not allowed here -- `strexh r0,sp,\[r1\]'
-[^:]*:323: Error: r15 not allowed here -- `strexh r0,r1,\[pc\]'
-[^:]*:326: Error: cannot use register index with PC-relative addressing -- `strh.w r0,\[pc\]'
-[^:]*:327: Error: cannot use register index with PC-relative addressing -- `strh.w r0,\[pc,#4\]'
-[^:]*:328: Error: cannot use register index with PC-relative addressing -- `strh r0,\[pc,#-4\]'
-[^:]*:329: Error: cannot use post-indexing with PC-relative addressing -- `strh r0,\[pc\],#4'
-[^:]*:330: Error: cannot use writeback with PC-relative addressing -- `strh r0,\[pc,#4\]!'
-[^:]*:333: Error: cannot use register index with PC-relative addressing -- `strh.w r0,\[pc,r1\]'
-[^:]*:334: Error: cannot use register index with PC-relative addressing -- `strh.w r0,\[pc,r1,LSL#2\]'
-[^:]*:335: Error: r15 not allowed here -- `strh.w pc,\[r0,#4\]'
-[^:]*:336: Error: r15 not allowed here -- `strh.w pc,\[r0\]'
-[^:]*:337: Error: r13 not allowed here -- `strh.w sp,\[r0,#4\]'
-[^:]*:338: Error: r13 not allowed here -- `strh.w sp,\[r0\]'
-[^:]*:339: Error: r15 not allowed here -- `strh pc,\[r0,#-4\]'
-[^:]*:340: Error: r15 not allowed here -- `strh pc,\[r0\],#4'
-[^:]*:341: Error: r15 not allowed here -- `strh pc,\[r0,#4\]!'
-[^:]*:342: Error: r13 not allowed here -- `strh sp,\[r0,#-4\]'
-[^:]*:343: Error: r13 not allowed here -- `strh sp,\[r0\],#4'
-[^:]*:344: Error: r13 not allowed here -- `strh sp,\[r0,#4\]!'
-[^:]*:345: Error: r15 not allowed here -- `strh.w pc,\[r0,r1\]'
-[^:]*:346: Error: r13 not allowed here -- `strh.w sp,\[r0,r1\]'
-[^:]*:347: Error: r15 not allowed here -- `strh.w r0,\[r1,pc\]'
-[^:]*:348: Error: r13 not allowed here -- `strh.w r0,\[r1,sp\]'
-[^:]*:349: Error: r15 not allowed here -- `strh.w pc,\[r0,r1,LSL#2\]'
-[^:]*:350: Error: r13 not allowed here -- `strh.w sp,\[r0,r1,LSL#2\]'
-[^:]*:351: Error: r15 not allowed here -- `strh.w r0,\[r1,pc,LSL#2\]'
-[^:]*:352: Error: r13 not allowed here -- `strh.w r0,\[r1,sp,LSL#2\]'
-[^:]*:355: Error: cannot use register index with PC-relative addressing -- `strht r0,\[pc,#4\]'
-[^:]*:356: Error: r15 not allowed here -- `strht pc,\[r0,#4\]'
-[^:]*:357: Error: r13 not allowed here -- `strht sp,\[pc,#4\]'
-[^:]*:360: Error: cannot use register index with PC-relative addressing -- `strt r0,\[pc,#4\]'
-[^:]*:361: Error: r15 not allowed here -- `strt pc,\[r0,#4\]'
-[^:]*:362: Error: r13 not allowed here -- `strt sp,\[r0,#4\]'
+[^:]*:81: Error: r12 not allowed here -- `ldrd r12,\[r1\]'
+[^:]*:82: Error: r14 not allowed here -- `ldrd r14,\[r1\]'
+[^:]*:83: Error: r15 not allowed here -- `ldrd r0,pc,\[r1\]'
+[^:]*:84: Error: r13 not allowed here -- `ldrd r0,sp,\[r1\]'
+[^:]*:85: Error: r15 not allowed here -- `ldrd pc,r0,\[r1\],#4'
+[^:]*:86: Error: r13 not allowed here -- `ldrd sp,r0,\[r1\],#4'
+[^:]*:87: Error: r15 not allowed here -- `ldrd r0,pc,\[r1\],#4'
+[^:]*:88: Error: r13 not allowed here -- `ldrd r0,sp,\[r1\],#4'
+[^:]*:89: Error: r12 not allowed here -- `ldrd r12,\[r1\],#4'
+[^:]*:90: Error: r14 not allowed here -- `ldrd r14,\[r1\],#4'
+[^:]*:91: Error: r15 not allowed here -- `ldrd pc,r0,\[r1,#4\]!'
+[^:]*:92: Error: r13 not allowed here -- `ldrd sp,r0,\[r1,#4\]!'
+[^:]*:93: Error: r15 not allowed here -- `ldrd r0,pc,\[r1,#4\]!'
+[^:]*:94: Error: r13 not allowed here -- `ldrd r0,sp,\[r1,#4\]!'
+[^:]*:95: Error: r12 not allowed here -- `ldrd r12,\[r1,#4\]!'
+[^:]*:96: Error: r14 not allowed here -- `ldrd r14,\[r1,#4\]!'
+[^:]*:99: Error: r15 not allowed here -- `ldrd pc,r0,label'
+[^:]*:100: Error: r13 not allowed here -- `ldrd sp,r0,label'
+[^:]*:101: Error: r15 not allowed here -- `ldrd r0,pc,label'
+[^:]*:102: Error: r13 not allowed here -- `ldrd r0,sp,label'
+[^:]*:103: Error: r15 not allowed here -- `ldrd pc,r0,\[pc,#-0\]'
+[^:]*:104: Error: r13 not allowed here -- `ldrd sp,r0,\[pc,#-0\]'
+[^:]*:105: Error: r15 not allowed here -- `ldrd r0,pc,\[pc,#-0\]'
+[^:]*:106: Error: r13 not allowed here -- `ldrd r0,sp,\[pc,#-0\]'
+[^:]*:111: Error: r15 not allowed here -- `ldrex pc,\[r0\]'
+[^:]*:112: Error: r13 not allowed here -- `ldrex sp,\[r0\]'
+[^:]*:113: Error: r15 not allowed here -- `ldrex r0,\[pc\]'
+[^:]*:114: Error: r15 not allowed here -- `ldrexb pc,\[r0\]'
+[^:]*:115: Error: r13 not allowed here -- `ldrexb sp,\[r0\]'
+[^:]*:116: Error: r15 not allowed here -- `ldrexb r0,\[pc\]'
+[^:]*:117: Error: r15 not allowed here -- `ldrexd pc,r0,\[r1\]'
+[^:]*:118: Error: r13 not allowed here -- `ldrexd sp,r0,\[r1\]'
+[^:]*:119: Error: r15 not allowed here -- `ldrexd r0,pc,\[r1\]'
+[^:]*:120: Error: r13 not allowed here -- `ldrexd r0,sp,\[r1\]'
+[^:]*:121: Error: r15 not allowed here -- `ldrexd r0,r1,\[pc\]'
+[^:]*:122: Error: r15 not allowed here -- `ldrexh pc,\[r0\]'
+[^:]*:123: Error: r13 not allowed here -- `ldrexh sp,\[r0\]'
+[^:]*:124: Error: r15 not allowed here -- `ldrexh r0,\[pc\]'
+[^:]*:127: Error: r15 not allowed here -- `ldrh pc,\[r0\]'
+[^:]*:128: Error: r15 not allowed here -- `ldrh pc,\[r0,#4\]'
+[^:]*:131: Error: r15 not allowed here -- `ldrh.w pc,\[r0\]'
+[^:]*:132: Error: r15 not allowed here -- `ldrh.w pc,\[r0,#4\]'
+[^:]*:133: Error: r13 not allowed here -- `ldrh.w sp,\[r0\]'
+[^:]*:134: Error: r13 not allowed here -- `ldrh.w sp,\[r0,#4\]'
+[^:]*:135: Error: r15 not allowed here -- `ldrh pc,\[r0,#-3\]'
+[^:]*:137: Error: r15 not allowed here -- `ldrh pc,\[r0\],#4'
+[^:]*:138: Error: r13 not allowed here -- `ldrh sp,\[r0\],#4'
+[^:]*:139: Error: r15 not allowed here -- `ldrh pc,\[r0,#4\]!'
+[^:]*:140: Error: r13 not allowed here -- `ldrh sp,\[r0,#4\]!'
+[^:]*:143: Error: r15 not allowed here -- `ldrh pc,label'
+[^:]*:144: Error: r15 not allowed here -- `ldrh pc,\[pc,#-0\]'
+[^:]*:145: Error: r13 not allowed here -- `ldrh sp,label'
+[^:]*:146: Error: r13 not allowed here -- `ldrh sp,\[pc,#-0\]'
+[^:]*:149: Error: r15 not allowed here -- `ldrh pc,\[r0,r1\]'
+[^:]*:150: Error: cannot use register index with PC-relative addressing -- `ldrh r0,\[pc,r1\]'
+[^:]*:151: Error: r15 not allowed here -- `ldrh r0,\[r1,pc\]'
+[^:]*:152: Error: r15 not allowed here -- `ldrh.w pc,\[r0,r1,LSL#1\]'
+[^:]*:153: Error: r13 not allowed here -- `ldrh.w sp,\[r0,r1,LSL#1\]'
+[^:]*:154: Error: r15 not allowed here -- `ldrh.w r2,\[r0,pc,LSL#1\]'
+[^:]*:155: Error: r13 not allowed here -- `ldrh.w r2,\[r0,sp,LSL#1\]'
+[^:]*:158: Error: r15 not allowed here -- `ldrht pc,\[r0,#4\]'
+[^:]*:159: Error: r13 not allowed here -- `ldrht sp,\[r0,#4\]'
+[^:]*:162: Error: r15 not allowed here -- `ldrsb pc,\[r0,#4\]'
+[^:]*:164: Error: r13 not allowed here -- `ldrsb sp,\[r0,#4\]'
+[^:]*:165: Error: r15 not allowed here -- `ldrsb pc,\[r0,#-4\]'
+[^:]*:166: Error: r13 not allowed here -- `ldrsb sp,\[r0,#-4\]'
+[^:]*:167: Error: r15 not allowed here -- `ldrsb pc,\[r0\],#4'
+[^:]*:168: Error: r13 not allowed here -- `ldrsb sp,\[r0\],#4'
+[^:]*:169: Error: r15 not allowed here -- `ldrsb pc,\[r0,#4\]!'
+[^:]*:170: Error: r13 not allowed here -- `ldrsb sp,\[r0,#4\]!'
+[^:]*:173: Error: r15 not allowed here -- `ldrsb pc,label'
+[^:]*:174: Error: r15 not allowed here -- `ldrsb pc,\[pc,#-0\]'
+[^:]*:175: Error: r13 not allowed here -- `ldrsb sp,label'
+[^:]*:176: Error: r13 not allowed here -- `ldrsb sp,\[pc,#-0\]'
+[^:]*:179: Error: r15 not allowed here -- `ldrsb pc,\[r0,r1\]'
+[^:]*:180: Error: cannot use register index with PC-relative addressing -- `ldrsb r0,\[pc,r1\]'
+[^:]*:181: Error: r15 not allowed here -- `ldrsb r0,\[r1,pc\]'
+[^:]*:182: Error: r15 not allowed here -- `ldrsb.w pc,\[r0,r1,LSL#2\]'
+[^:]*:184: Error: r13 not allowed here -- `ldrsb.w sp,\[r0,r1,LSL#2\]'
+[^:]*:185: Error: r15 not allowed here -- `ldrsb.w r2,\[r0,pc,LSL#2\]'
+[^:]*:186: Error: r13 not allowed here -- `ldrsb.w r2,\[r0,sp,LSL#2\]'
+[^:]*:190: Error: r15 not allowed here -- `ldrsbt pc,\[r0,#4\]'
+[^:]*:191: Error: r13 not allowed here -- `ldrsbt sp,\[r0,#4\]'
+[^:]*:195: Error: r15 not allowed here -- `ldrsh pc,\[r0,#4\]'
+[^:]*:196: Error: r13 not allowed here -- `ldrsh sp,\[r0,#4\]'
+[^:]*:197: Error: r15 not allowed here -- `ldrsh pc,\[r0,#-4\]'
+[^:]*:198: Error: r15 not allowed here -- `ldrsh pc,\[r0\],#4'
+[^:]*:199: Error: r15 not allowed here -- `ldrsh pc,\[r0,#4\]!'
+[^:]*:200: Error: r13 not allowed here -- `ldrsh sp,\[r0,#-4\]'
+[^:]*:201: Error: r13 not allowed here -- `ldrsh sp,\[r0\],#4'
+[^:]*:202: Error: r13 not allowed here -- `ldrsh sp,\[r0,#4\]!'
+[^:]*:205: Error: r15 not allowed here -- `ldrsh pc,label'
+[^:]*:206: Error: r13 not allowed here -- `ldrsh sp,label'
+[^:]*:207: Error: r13 not allowed here -- `ldrsh sp,\[pc,#-0\]'
+[^:]*:210: Error: r15 not allowed here -- `ldrsh pc,\[r0,r1\]'
+[^:]*:211: Error: cannot use register index with PC-relative addressing -- `ldrsh r0,\[pc,r1\]'
+[^:]*:212: Error: r15 not allowed here -- `ldrsh r0,\[r1,pc\]'
+[^:]*:214: Error: r15 not allowed here -- `ldrsh.w pc,\[r0,r1,LSL#3\]'
+[^:]*:215: Error: r13 not allowed here -- `ldrsh.w sp,\[r0,r1,LSL#3\]'
+[^:]*:216: Error: r13 not allowed here -- `ldrsh.w r0,\[r1,sp,LSL#3\]'
+[^:]*:217: Error: r15 not allowed here -- `ldrsh.w r0,\[r1,pc,LSL#3\]'
+[^:]*:221: Error: r15 not allowed here -- `ldrsht pc,\[r0,#4\]'
+[^:]*:222: Error: r13 not allowed here -- `ldrsht sp,\[r0,#4\]'
+[^:]*:226: Error: r15 not allowed here -- `ldrt pc,\[r0,#4\]'
+[^:]*:227: Error: r13 not allowed here -- `ldrt sp,\[r0,#4\]'
+[^:]*:232: Error: r15 not allowed here -- `str pc,\[r0,#4\]'
+[^:]*:233: Error: cannot use register index with PC-relative addressing -- `str.w r0,\[pc,#4\]'
+[^:]*:234: Error: cannot use register index with PC-relative addressing -- `str r0,\[pc,#-4\]'
+[^:]*:235: Error: cannot use post-indexing with PC-relative addressing -- `str r0,\[pc\],#4'
+[^:]*:236: Error: cannot use writeback with PC-relative addressing -- `str r0,\[pc,#4\]!'
+[^:]*:239: Error: cannot use register index with PC-relative addressing -- `str.w r0,\[pc,r1\]'
+[^:]*:240: Error: cannot use register index with PC-relative addressing -- `str.w r0,\[pc,r1,LSL#2\]'
+[^:]*:246: Error: cannot use register index with PC-relative addressing -- `strb.w r0,\[pc,#4\]'
+[^:]*:247: Error: r15 not allowed here -- `strb.w pc,\[r0,#4\]'
+[^:]*:248: Error: r13 not allowed here -- `strb.w sp,\[r0,#4\]'
+[^:]*:249: Error: cannot use register index with PC-relative addressing -- `strb r0,\[pc,#-4\]'
+[^:]*:250: Error: cannot use post-indexing with PC-relative addressing -- `strb r0,\[pc\],#4'
+[^:]*:251: Error: cannot use writeback with PC-relative addressing -- `strb r0,\[pc,#4\]!'
+[^:]*:252: Error: r15 not allowed here -- `strb pc,\[r0,#-4\]'
+[^:]*:253: Error: r15 not allowed here -- `strb pc,\[r0\],#4'
+[^:]*:254: Error: r15 not allowed here -- `strb pc,\[r0,#4\]!'
+[^:]*:255: Error: r13 not allowed here -- `strb sp,\[r0,#-4\]'
+[^:]*:256: Error: r13 not allowed here -- `strb sp,\[r0\],#4'
+[^:]*:257: Error: r13 not allowed here -- `strb sp,\[r0,#4\]!'
+[^:]*:260: Error: cannot use register index with PC-relative addressing -- `strb.w r0,\[pc,r1\]'
+[^:]*:261: Error: cannot use register index with PC-relative addressing -- `strb.w r0,\[pc,r1,LSL#2\]'
+[^:]*:262: Error: r15 not allowed here -- `strb.w pc,\[r0,r1\]'
+[^:]*:263: Error: r15 not allowed here -- `strb.w pc,\[r0,r1,LSL#2\]'
+[^:]*:264: Error: r13 not allowed here -- `strb.w sp,\[r0,r1\]'
+[^:]*:265: Error: r13 not allowed here -- `strb.w sp,\[r0,r1,LSL#2\]'
+[^:]*:266: Error: r15 not allowed here -- `strb.w r0,\[r1,pc\]'
+[^:]*:267: Error: r15 not allowed here -- `strb.w r0,\[r1,pc,LSL#2\]'
+[^:]*:268: Error: r13 not allowed here -- `strb.w r0,\[r1,sp\]'
+[^:]*:269: Error: r13 not allowed here -- `strb.w r0,\[r1,sp,LSL#2\]'
+[^:]*:272: Error: cannot use register index with PC-relative addressing -- `strbt r0,\[pc,#4\]'
+[^:]*:273: Error: r15 not allowed here -- `strbt pc,\[r0,#4\]'
+[^:]*:274: Error: r13 not allowed here -- `strbt sp,\[r0,#4\]'
+[^:]*:277: Error: cannot use register index with PC-relative addressing -- `strd r0,r1,\[pc,#4\]'
+[^:]*:278: Error: cannot use post-indexing with PC-relative addressing -- `strd r0,r1,\[pc\],#4'
+[^:]*:279: Error: cannot use writeback with PC-relative addressing -- `strd r0,r1,\[pc,#4\]!'
+[^:]*:280: Error: r15 not allowed here -- `strd pc,r0,\[r1,#4\]'
+[^:]*:281: Error: r15 not allowed here -- `strd pc,r0,\[r1\],#4'
+[^:]*:282: Error: r15 not allowed here -- `strd pc,r0,\[r1,#4\]!'
+[^:]*:283: Error: r13 not allowed here -- `strd sp,r0,\[r1,#4\]'
+[^:]*:284: Error: r13 not allowed here -- `strd sp,r0,\[r1\],#4'
+[^:]*:285: Error: r13 not allowed here -- `strd sp,r0,\[r1,#4\]!'
+[^:]*:286: Error: r15 not allowed here -- `strd r0,pc,\[r1,#4\]'
+[^:]*:287: Error: r15 not allowed here -- `strd r0,pc,\[r1\],#4'
+[^:]*:288: Error: r15 not allowed here -- `strd r0,pc,\[r1,#4\]!'
+[^:]*:289: Error: r13 not allowed here -- `strd r0,sp,\[r1,#4\]'
+[^:]*:290: Error: r13 not allowed here -- `strd r0,sp,\[r1\],#4'
+[^:]*:291: Error: r13 not allowed here -- `strd r0,sp,\[r1,#4\]!'
+[^:]*:297: Error: r15 not allowed here -- `strex pc,r0,\[r1\]'
+[^:]*:298: Error: r15 not allowed here -- `strex pc,r0,\[r1,#4\]'
+[^:]*:299: Error: r13 not allowed here -- `strex sp,r0,\[r1\]'
+[^:]*:300: Error: r13 not allowed here -- `strex sp,r0,\[r1,#4\]'
+[^:]*:301: Error: r15 not allowed here -- `strex r0,pc,\[r1\]'
+[^:]*:302: Error: r15 not allowed here -- `strex r0,pc,\[r1,#4\]'
+[^:]*:303: Error: r13 not allowed here -- `strex r0,sp,\[r1\]'
+[^:]*:304: Error: r13 not allowed here -- `strex r0,sp,\[r1,#4\]'
+[^:]*:305: Error: r15 not allowed here -- `strex r0,r1,\[pc\]'
+[^:]*:306: Error: r15 not allowed here -- `strex r0,r1,\[pc,#4\]'
+[^:]*:309: Error: r15 not allowed here -- `strexb pc,r0,\[r1\]'
+[^:]*:310: Error: r13 not allowed here -- `strexb sp,r0,\[r1\]'
+[^:]*:311: Error: r15 not allowed here -- `strexb r0,pc,\[r1\]'
+[^:]*:312: Error: r13 not allowed here -- `strexb r0,sp,\[r1\]'
+[^:]*:313: Error: r15 not allowed here -- `strexb r0,r1,\[pc\]'
+[^:]*:316: Error: r15 not allowed here -- `strexd pc,r0,r1,\[r2\]'
+[^:]*:317: Error: r13 not allowed here -- `strexd sp,r0,r1,\[r2\]'
+[^:]*:318: Error: r15 not allowed here -- `strexd r0,pc,r1,\[r2\]'
+[^:]*:319: Error: r13 not allowed here -- `strexd r0,sp,r1,\[r2\]'
+[^:]*:320: Error: r15 not allowed here -- `strexd r0,r1,pc,\[r2\]'
+[^:]*:321: Error: r13 not allowed here -- `strexd r0,r1,sp,\[r2\]'
+[^:]*:322: Error: r15 not allowed here -- `strexd r0,r1,r2,\[pc\]'
+[^:]*:325: Error: r15 not allowed here -- `strexh pc,r0,\[r1\]'
+[^:]*:326: Error: r13 not allowed here -- `strexh sp,r0,\[r1\]'
+[^:]*:327: Error: r15 not allowed here -- `strexh r0,pc,\[r1\]'
+[^:]*:328: Error: r13 not allowed here -- `strexh r0,sp,\[r1\]'
+[^:]*:329: Error: r15 not allowed here -- `strexh r0,r1,\[pc\]'
+[^:]*:332: Error: cannot use register index with PC-relative addressing -- `strh.w r0,\[pc\]'
+[^:]*:333: Error: cannot use register index with PC-relative addressing -- `strh.w r0,\[pc,#4\]'
+[^:]*:334: Error: cannot use register index with PC-relative addressing -- `strh r0,\[pc,#-4\]'
+[^:]*:335: Error: cannot use post-indexing with PC-relative addressing -- `strh r0,\[pc\],#4'
+[^:]*:336: Error: cannot use writeback with PC-relative addressing -- `strh r0,\[pc,#4\]!'
+[^:]*:339: Error: cannot use register index with PC-relative addressing -- `strh.w r0,\[pc,r1\]'
+[^:]*:340: Error: cannot use register index with PC-relative addressing -- `strh.w r0,\[pc,r1,LSL#2\]'
+[^:]*:341: Error: r15 not allowed here -- `strh.w pc,\[r0,#4\]'
+[^:]*:342: Error: r15 not allowed here -- `strh.w pc,\[r0\]'
+[^:]*:343: Error: r13 not allowed here -- `strh.w sp,\[r0,#4\]'
+[^:]*:344: Error: r13 not allowed here -- `strh.w sp,\[r0\]'
+[^:]*:345: Error: r15 not allowed here -- `strh pc,\[r0,#-4\]'
+[^:]*:346: Error: r15 not allowed here -- `strh pc,\[r0\],#4'
+[^:]*:347: Error: r15 not allowed here -- `strh pc,\[r0,#4\]!'
+[^:]*:348: Error: r13 not allowed here -- `strh sp,\[r0,#-4\]'
+[^:]*:349: Error: r13 not allowed here -- `strh sp,\[r0\],#4'
+[^:]*:350: Error: r13 not allowed here -- `strh sp,\[r0,#4\]!'
+[^:]*:351: Error: r15 not allowed here -- `strh.w pc,\[r0,r1\]'
+[^:]*:352: Error: r13 not allowed here -- `strh.w sp,\[r0,r1\]'
+[^:]*:353: Error: r15 not allowed here -- `strh.w r0,\[r1,pc\]'
+[^:]*:354: Error: r13 not allowed here -- `strh.w r0,\[r1,sp\]'
+[^:]*:355: Error: r15 not allowed here -- `strh.w pc,\[r0,r1,LSL#2\]'
+[^:]*:356: Error: r13 not allowed here -- `strh.w sp,\[r0,r1,LSL#2\]'
+[^:]*:357: Error: r15 not allowed here -- `strh.w r0,\[r1,pc,LSL#2\]'
+[^:]*:358: Error: r13 not allowed here -- `strh.w r0,\[r1,sp,LSL#2\]'
+[^:]*:361: Error: cannot use register index with PC-relative addressing -- `strht r0,\[pc,#4\]'
+[^:]*:362: Error: r15 not allowed here -- `strht pc,\[r0,#4\]'
+[^:]*:363: Error: r13 not allowed here -- `strht sp,\[pc,#4\]'
+[^:]*:366: Error: cannot use register index with PC-relative addressing -- `strt r0,\[pc,#4\]'
+[^:]*:367: Error: r15 not allowed here -- `strt pc,\[r0,#4\]'
+[^:]*:368: Error: r13 not allowed here -- `strt sp,\[r0,#4\]'
diff --git a/gas/testsuite/gas/arm/sp-pc-validations-bad-t.s b/gas/testsuite/gas/arm/sp-pc-validations-bad-t.s
index 4252cba..0b155fb 100644
--- a/gas/testsuite/gas/arm/sp-pc-validations-bad-t.s
+++ b/gas/testsuite/gas/arm/sp-pc-validations-bad-t.s
@@ -78,16 +78,22 @@ ldrbt sp, [r0, #4] @ ditto
@ LDRD (immediate)
ldrd pc, r0, [r1] @ BadReg
ldrd sp, r0, [r1] @ ditto
+ldrd r12, [r1] @ ditto
+ldrd r14, [r1] @ ditto
ldrd r0, pc, [r1] @ ditto
ldrd r0, sp, [r1] @ ditto
ldrd pc, r0, [r1], #4 @ ditto
ldrd sp, r0, [r1], #4 @ ditto
ldrd r0, pc, [r1], #4 @ ditto
ldrd r0, sp, [r1], #4 @ ditto
+ldrd r12, [r1], #4 @ ditto
+ldrd r14, [r1], #4 @ ditto
ldrd pc, r0, [r1, #4]! @ ditto
ldrd sp, r0, [r1, #4]! @ ditto
ldrd r0, pc, [r1, #4]! @ ditto
ldrd r0, sp, [r1, #4]! @ ditto
+ldrd r12, [r1, #4]! @ ditto
+ldrd r14, [r1, #4]! @ ditto
@ LDRD (literal)
ldrd pc, r0, label @ BadReg
diff --git a/gas/testsuite/gas/arm/thumb2_ldstd_unpredictable.d b/gas/testsuite/gas/arm/thumb2_ldstd_unpredictable.d
new file mode 100644
index 0000000..0f4293e
--- /dev/null
+++ b/gas/testsuite/gas/arm/thumb2_ldstd_unpredictable.d
@@ -0,0 +1,2 @@
+# name: Unpredictable LDRD and STRD instructions. - Thumb-2
+# error-output: thumb2_ldstd_unpredictable.l
diff --git a/gas/testsuite/gas/arm/thumb2_ldstd_unpredictable.l b/gas/testsuite/gas/arm/thumb2_ldstd_unpredictable.l
new file mode 100644
index 0000000..632ecd4
--- /dev/null
+++ b/gas/testsuite/gas/arm/thumb2_ldstd_unpredictable.l
@@ -0,0 +1,9 @@
+[^:]*: Assembler messages:
+[^:]*:5: Warning: base register written back, and overlaps one of transfer registers
+[^:]*:6: Warning: base register written back, and overlaps one of transfer registers
+[^:]*:7: Warning: base register written back, and overlaps one of transfer registers
+[^:]*:8: Warning: base register written back, and overlaps one of transfer registers
+[^:]*:10: Warning: base register written back, and overlaps one of transfer registers
+[^:]*:11: Warning: base register written back, and overlaps one of transfer registers
+[^:]*:12: Warning: base register written back, and overlaps one of transfer registers
+[^:]*:13: Warning: base register written back, and overlaps one of transfer registers
diff --git a/gas/testsuite/gas/arm/thumb2_ldstd_unpredictable.s b/gas/testsuite/gas/arm/thumb2_ldstd_unpredictable.s
new file mode 100644
index 0000000..bc81b7a
--- /dev/null
+++ b/gas/testsuite/gas/arm/thumb2_ldstd_unpredictable.s
@@ -0,0 +1,13 @@
+ .syntax unified
+ .cpu cortex-a9
+ .text
+ .thumb
+ strd r10,r11,[r10], #4 @ Unpredictable
+ strd r10,r11,[r11], #4 @ Ditto
+ strd r4,r6,[r4, #4]! @ Ditto
+ strd r4,r6,[r6, #4]! @ Ditto
+
+ ldrd r4,r6,[r4, #4]! @ Ditto
+ ldrd r4,r6,[r6, #4]! @ Ditto
+ ldrd r10,r11,[r10], #4 @ Ditto
+ ldrd r10,r11,[r11], #4 @ Ditto