--- /dev/null
+@ RUN: llvm-mc -triple armv6t2-linux-eabi -filetype asm -o - %s 2>&1 \
+@ RUN: | FileCheck %s
+
+@ RUN: not llvm-mc -triple armv7-linux-eabi -filetype asm -o - %s 2>&1 \
+@ RUN: | FileCheck %s -check-prefix CHECK -check-prefix CHECK-V7
+
+ .syntax unified
+ .arm
+
+ .global stm
+ .type stm,%function
+stm:
+ stm sp!, {r0, pc}
+@ CHECK: warning: use of SP or PC in the list is deprecated
+@ CHECK: stm sp!, {r0, pc}
+@ CHECK: ^
+ stm r0!, {r0, sp}
+@ CHECK: warning: use of SP or PC in the list is deprecated
+@ CHECK: stm r0!, {r0, sp}
+@ CHECK: ^
+ stm r1!, {r0, sp, pc}
+@ CHECK: warning: use of SP or PC in the list is deprecated
+@ CHECK: stm r1!, {r0, sp, pc}
+@ CHECK: ^
+ stm r2!, {sp, pc}
+@ CHECK: warning: use of SP or PC in the list is deprecated
+@ CHECK: stm r2!, {sp, pc}
+@ CHECK: ^
+ stm sp!, {pc}
+@ CHECK: warning: use of SP or PC in the list is deprecated
+@ CHECK: stm sp!, {pc}
+@ CHECK: ^
+ stm r0!, {sp}
+@ CHECK: warning: use of SP or PC in the list is deprecated
+@ CHECK: stm r0!, {sp}
+@ CHECK: ^
+
+ .global stmda
+ .type stmda,%function
+stmda:
+ stmda sp!, {r0, pc}
+@ CHECK: warning: use of SP or PC in the list is deprecated
+@ CHECK: stmda sp!, {r0, pc}
+@ CHECK: ^
+ stmda r0!, {r0, sp}
+@ CHECK: warning: use of SP or PC in the list is deprecated
+@ CHECK: stmda r0!, {r0, sp}
+@ CHECK: ^
+ stmda r1!, {r0, sp, pc}
+@ CHECK: warning: use of SP or PC in the list is deprecated
+@ CHECK: stmda r1!, {r0, sp, pc}
+@ CHECK: ^
+ stmda r2!, {sp, pc}
+@ CHECK: warning: use of SP or PC in the list is deprecated
+@ CHECK: stmda r2!, {sp, pc}
+@ CHECK: ^
+ stmda sp!, {pc}
+@ CHECK: warning: use of SP or PC in the list is deprecated
+@ CHECK: stmda sp!, {pc}
+@ CHECK: ^
+ stmda r0!, {sp}
+@ CHECK: warning: use of SP or PC in the list is deprecated
+@ CHECK: stmda r0!, {sp}
+@ CHECK: ^
+
+ .global stmdb
+ .type stmdb,%function
+stmdb:
+ stmdb sp!, {r0, pc}
+@ CHECK: warning: use of SP or PC in the list is deprecated
+@ CHECK: stmdb sp!, {r0, pc}
+@ CHECK: ^
+ stmdb r0!, {r0, sp}
+@ CHECK: warning: use of SP or PC in the list is deprecated
+@ CHECK: stmdb r0!, {r0, sp}
+@ CHECK: ^
+ stmdb r1!, {r0, sp, pc}
+@ CHECK: warning: use of SP or PC in the list is deprecated
+@ CHECK: stmdb r1!, {r0, sp, pc}
+@ CHECK: ^
+ stmdb r2!, {sp, pc}
+@ CHECK: warning: use of SP or PC in the list is deprecated
+@ CHECK: stmdb r2!, {sp, pc}
+@ CHECK: ^
+ stmdb sp!, {pc}
+@ CHECK: warning: use of SP or PC in the list is deprecated
+@ CHECK: stmdb sp!, {pc}
+@ CHECK: ^
+ stmdb r0!, {sp}
+@ CHECK: warning: use of SP or PC in the list is deprecated
+@ CHECK: stmdb r0!, {sp}
+@ CHECK: ^
+
+ .global stmib
+ .type stmib,%function
+stmib:
+ stmib sp!, {r0, pc}
+@ CHECK: warning: use of SP or PC in the list is deprecated
+@ CHECK: stmib sp!, {r0, pc}
+@ CHECK: ^
+ stmib r0!, {r0, sp}
+@ CHECK: warning: use of SP or PC in the list is deprecated
+@ CHECK: stmib r0!, {r0, sp}
+@ CHECK: ^
+ stmib r1!, {r0, sp, pc}
+@ CHECK: warning: use of SP or PC in the list is deprecated
+@ CHECK: stmib r1!, {r0, sp, pc}
+@ CHECK: ^
+ stmib r2!, {sp, pc}
+@ CHECK: warning: use of SP or PC in the list is deprecated
+@ CHECK: stmib r2!, {sp, pc}
+@ CHECK: ^
+ stmib sp!, {pc}
+@ CHECK: warning: use of SP or PC in the list is deprecated
+@ CHECK: stmib sp!, {pc}
+@ CHECK: ^
+ stmib r0!, {sp}
+@ CHECK: warning: use of SP or PC in the list is deprecated
+@ CHECK: stmib r0!, {sp}
+@ CHECK: ^
+
+
+ .global push
+ .type push,%function
+push:
+ push {r0, pc}
+@ CHECK: warning: use of SP or PC in the list is deprecated
+@ CHECK: push {r0, pc}
+@ CHECK: ^
+ push {r0, sp}
+@ CHECK: warning: use of SP or PC in the list is deprecated
+@ CHECK: push {r0, sp}
+@ CHECK: ^
+ push {r0, sp, pc}
+@ CHECK: warning: use of SP or PC in the list is deprecated
+@ CHECK: push {r0, sp, pc}
+@ CHECK: ^
+ push {sp, pc}
+@ CHECK: warning: use of SP or PC in the list is deprecated
+@ CHECK: push {sp, pc}
+@ CHECK: ^
+ push {pc}
+@ CHECK: warning: use of SP or PC in the list is deprecated
+@ CHECK: push {pc}
+@ CHECK: ^
+ push {sp}
+@ CHECK: warning: use of SP or PC in the list is deprecated
+@ CHECK: push {sp}
+@ CHECK: ^
+
+ .global ldm
+ .type ldm,%function
+ldm:
+ ldm r0!, {r1, sp}
+@ CHECK: warning: use of SP in the list is deprecated
+ ldm r0!, {sp}
+@ CHECK: warning: use of SP in the list is deprecated
+ ldm r0!, {r1, lr, pc}
+@ CHECK: warning: use of LR and PC simultaneously in the list is deprecated
+ ldm r0!, {lr, pc}
+@ CHECK: warning: use of LR and PC simultaneously in the list is deprecated
+
+ .global ldmda
+ .type ldmda,%function
+ldmda:
+ ldmda r0!, {r1, sp}
+@ CHECK: warning: use of SP in the list is deprecated
+ ldmda r0!, {sp}
+@ CHECK: warning: use of SP in the list is deprecated
+ ldmda r0!, {r1, lr, pc}
+@ CHECK: warning: use of LR and PC simultaneously in the list is deprecated
+ ldmda r0!, {lr, pc}
+@ CHECK: warning: use of LR and PC simultaneously in the list is deprecated
+
+ .global ldmdb
+ .type ldmdb,%function
+ldmdb:
+ ldmdb r0!, {r1, sp}
+@ CHECK: warning: use of SP in the list is deprecated
+ ldmdb r0!, {sp}
+@ CHECK: warning: use of SP in the list is deprecated
+ ldmdb r0!, {r1, lr, pc}
+@ CHECK: warning: use of LR and PC simultaneously in the list is deprecated
+ ldmdb r0!, {lr, pc}
+@ CHECK: warning: use of LR and PC simultaneously in the list is deprecated
+
+ .global ldmib
+ .type ldmib,%function
+ldmib:
+ ldmib r0!, {r1, sp}
+@ CHECK: warning: use of SP in the list is deprecated
+ ldmib r0!, {sp}
+@ CHECK: warning: use of SP in the list is deprecated
+ ldmib r0!, {r1, lr, pc}
+@ CHECK: warning: use of LR and PC simultaneously in the list is deprecated
+ ldmib r0!, {lr, pc}
+@ CHECK: warning: use of LR and PC simultaneously in the list is deprecated
+
+ .global pop
+ .type pop,%function
+pop:
+ pop {r0, sp}
+@ CHECK: warning: use of SP in the list is deprecated
+@ CHECK-V7: error: writeback register not allowed in register list
+ pop {sp}
+@ CHECK: warning: use of SP in the list is deprecated
+@ CHECK-V7: error: writeback register not allowed in register list
+ pop {r0, lr, pc}
+@ CHECK: warning: use of LR and PC simultaneously in the list is deprecated
+ pop {lr, pc}
+@ CHECK: warning: use of LR and PC simultaneously in the list is deprecated
+
+ .global valid
+ .type valid,%function
+valid:
+ stmdaeq r0, {r0}
+@ CHECK: stmdaeq r0, {r0}
+ ldmdaeq r0, {r0}
+@ CHECK: ldmdaeq r0, {r0}
+ pop {r0, pc}
+@ CHECK: pop {r0, pc}
+
+++ /dev/null
-@ RUN: llvm-mc -triple armv7-linux-eabi -filetype asm -o /dev/null %s 2>&1 \
-@ RUN: | FileCheck %s
-
- .syntax unified
- .arm
-
- .global stm
- .type stm,%function
-stm:
- stm sp!, {r0, pc}
-@ CHECK: warning: use of SP or PC in the list is deprecated
-@ CHECK: stm sp!, {r0, pc}
-@ CHECK: ^
- stm r0!, {r0, sp}
-@ CHECK: warning: use of SP or PC in the list is deprecated
-@ CHECK: stm r0!, {r0, sp}
-@ CHECK: ^
- stm r1!, {r0, sp, pc}
-@ CHECK: warning: use of SP or PC in the list is deprecated
-@ CHECK: stm r1!, {r0, sp, pc}
-@ CHECK: ^
- stm r2!, {sp, pc}
-@ CHECK: warning: use of SP or PC in the list is deprecated
-@ CHECK: stm r2!, {sp, pc}
-@ CHECK: ^
- stm sp!, {pc}
-@ CHECK: warning: use of SP or PC in the list is deprecated
-@ CHECK: stm sp!, {pc}
-@ CHECK: ^
- stm r0!, {sp}
-@ CHECK: warning: use of SP or PC in the list is deprecated
-@ CHECK: stm r0!, {sp}
-@ CHECK: ^
-
- .global stmda
- .type stmda,%function
-stmda:
- stmda sp!, {r0, pc}
-@ CHECK: warning: use of SP or PC in the list is deprecated
-@ CHECK: stmda sp!, {r0, pc}
-@ CHECK: ^
- stmda r0!, {r0, sp}
-@ CHECK: warning: use of SP or PC in the list is deprecated
-@ CHECK: stmda r0!, {r0, sp}
-@ CHECK: ^
- stmda r1!, {r0, sp, pc}
-@ CHECK: warning: use of SP or PC in the list is deprecated
-@ CHECK: stmda r1!, {r0, sp, pc}
-@ CHECK: ^
- stmda r2!, {sp, pc}
-@ CHECK: warning: use of SP or PC in the list is deprecated
-@ CHECK: stmda r2!, {sp, pc}
-@ CHECK: ^
- stmda sp!, {pc}
-@ CHECK: warning: use of SP or PC in the list is deprecated
-@ CHECK: stmda sp!, {pc}
-@ CHECK: ^
- stmda r0!, {sp}
-@ CHECK: warning: use of SP or PC in the list is deprecated
-@ CHECK: stmda r0!, {sp}
-@ CHECK: ^
-
- .global stmdb
- .type stmdb,%function
-stmdb:
- stmdb sp!, {r0, pc}
-@ CHECK: warning: use of SP or PC in the list is deprecated
-@ CHECK: stmdb sp!, {r0, pc}
-@ CHECK: ^
- stmdb r0!, {r0, sp}
-@ CHECK: warning: use of SP or PC in the list is deprecated
-@ CHECK: stmdb r0!, {r0, sp}
-@ CHECK: ^
- stmdb r1!, {r0, sp, pc}
-@ CHECK: warning: use of SP or PC in the list is deprecated
-@ CHECK: stmdb r1!, {r0, sp, pc}
-@ CHECK: ^
- stmdb r2!, {sp, pc}
-@ CHECK: warning: use of SP or PC in the list is deprecated
-@ CHECK: stmdb r2!, {sp, pc}
-@ CHECK: ^
- stmdb sp!, {pc}
-@ CHECK: warning: use of SP or PC in the list is deprecated
-@ CHECK: stmdb sp!, {pc}
-@ CHECK: ^
- stmdb r0!, {sp}
-@ CHECK: warning: use of SP or PC in the list is deprecated
-@ CHECK: stmdb r0!, {sp}
-@ CHECK: ^
-
- .global stmib
- .type stmib,%function
-stmib:
- stmib sp!, {r0, pc}
-@ CHECK: warning: use of SP or PC in the list is deprecated
-@ CHECK: stmib sp!, {r0, pc}
-@ CHECK: ^
- stmib r0!, {r0, sp}
-@ CHECK: warning: use of SP or PC in the list is deprecated
-@ CHECK: stmib r0!, {r0, sp}
-@ CHECK: ^
- stmib r1!, {r0, sp, pc}
-@ CHECK: warning: use of SP or PC in the list is deprecated
-@ CHECK: stmib r1!, {r0, sp, pc}
-@ CHECK: ^
- stmib r2!, {sp, pc}
-@ CHECK: warning: use of SP or PC in the list is deprecated
-@ CHECK: stmib r2!, {sp, pc}
-@ CHECK: ^
- stmib sp!, {pc}
-@ CHECK: warning: use of SP or PC in the list is deprecated
-@ CHECK: stmib sp!, {pc}
-@ CHECK: ^
- stmib r0!, {sp}
-@ CHECK: warning: use of SP or PC in the list is deprecated
-@ CHECK: stmib r0!, {sp}
-@ CHECK: ^
-
-
- .global push
- .type push,%function
-push:
- push {r0, pc}
-@ CHECK: warning: use of SP or PC in the list is deprecated
-@ CHECK: push {r0, pc}
-@ CHECK: ^
- push {r0, sp}
-@ CHECK: warning: use of SP or PC in the list is deprecated
-@ CHECK: push {r0, sp}
-@ CHECK: ^
- push {r0, sp, pc}
-@ CHECK: warning: use of SP or PC in the list is deprecated
-@ CHECK: push {r0, sp, pc}
-@ CHECK: ^
- push {sp, pc}
-@ CHECK: warning: use of SP or PC in the list is deprecated
-@ CHECK: push {sp, pc}
-@ CHECK: ^
- push {pc}
-@ CHECK: warning: use of SP or PC in the list is deprecated
-@ CHECK: push {pc}
-@ CHECK: ^
- push {sp}
-@ CHECK: warning: use of SP or PC in the list is deprecated
-@ CHECK: push {sp}
-@ CHECK: ^
-
- .global single
- .type single,%function
-single:
- stmdaeq r0, {r0}
-@ CHECK-NOT: warning
-