|  | @ RUN: llvm-mc -triple armv6t2-linux-eabi -filetype asm -o - %s 2>&1 \ | 
|  | @ RUN:   | FileCheck %s | 
|  | @ RUN: not llvm-mc -triple armv6t2-linux-eabi --fatal-warnings -filetype asm -o - %s 2>&1 \ | 
|  | @ RUN:   | FileCheck -check-prefix CHECK-ERROR %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 | 
|  |  | 
|  | @ RUN: not llvm-mc -triple armv8-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 PC in the list is deprecated | 
|  | @ CHECK-ERROR: error: use of PC in the list is deprecated | 
|  | @ CHECK: stm sp!, {r0, pc} | 
|  | @ CHECK: ^ | 
|  | stm r1!, {r0, sp, pc} | 
|  | @ CHECK: warning: use of PC in the list is deprecated | 
|  | @ CHECK: stm r1!, {r0, sp, pc} | 
|  | @ CHECK: ^ | 
|  | stm r2!, {sp, pc} | 
|  | @ CHECK: warning: use of PC in the list is deprecated | 
|  | @ CHECK: stm r2!, {sp, pc} | 
|  | @ CHECK: ^ | 
|  | stm sp!, {pc} | 
|  | @ CHECK: warning: use of PC in the list is deprecated | 
|  | @ CHECK: stm sp!, {pc} | 
|  | @ CHECK: ^ | 
|  |  | 
|  | .global stmda | 
|  | .type stmda,%function | 
|  | stmda: | 
|  | stmda sp!, {r0, pc} | 
|  | @ CHECK: warning: use of PC in the list is deprecated | 
|  | @ CHECK: stmda sp!, {r0, pc} | 
|  | @ CHECK: ^ | 
|  | stmda r1!, {r0, sp, pc} | 
|  | @ CHECK: warning: use of PC in the list is deprecated | 
|  | @ CHECK: stmda r1!, {r0, sp, pc} | 
|  | @ CHECK: ^ | 
|  | stmda r2!, {sp, pc} | 
|  | @ CHECK: warning: use of PC in the list is deprecated | 
|  | @ CHECK: stmda r2!, {sp, pc} | 
|  | @ CHECK: ^ | 
|  | stmda sp!, {pc} | 
|  | @ CHECK: warning: use of PC in the list is deprecated | 
|  | @ CHECK: stmda sp!, {pc} | 
|  | @ CHECK: ^ | 
|  |  | 
|  | .global stmdb | 
|  | .type stmdb,%function | 
|  | stmdb: | 
|  | stmdb sp!, {r0, pc} | 
|  | @ CHECK: warning: use of PC in the list is deprecated | 
|  | @ CHECK: stmdb sp!, {r0, pc} | 
|  | @ CHECK: ^ | 
|  | stmdb r1!, {r0, sp, pc} | 
|  | @ CHECK: warning: use of PC in the list is deprecated | 
|  | @ CHECK: stmdb r1!, {r0, sp, pc} | 
|  | @ CHECK: ^ | 
|  | stmdb r2!, {sp, pc} | 
|  | @ CHECK: warning: use of PC in the list is deprecated | 
|  | @ CHECK: stmdb r2!, {sp, pc} | 
|  | @ CHECK: ^ | 
|  | stmdb sp!, {pc} | 
|  | @ CHECK: warning: use of PC in the list is deprecated | 
|  | @ CHECK: stmdb sp!, {pc} | 
|  | @ CHECK: ^ | 
|  |  | 
|  | .global stmib | 
|  | .type stmib,%function | 
|  | stmib: | 
|  | stmib sp!, {r0, pc} | 
|  | @ CHECK: warning: use of PC in the list is deprecated | 
|  | @ CHECK: stmib sp!, {r0, pc} | 
|  | @ CHECK: ^ | 
|  | stmib r1!, {r0, sp, pc} | 
|  | @ CHECK: warning: use of PC in the list is deprecated | 
|  | @ CHECK: stmib r1!, {r0, sp, pc} | 
|  | @ CHECK: ^ | 
|  | stmib r2!, {sp, pc} | 
|  | @ CHECK: warning: use of PC in the list is deprecated | 
|  | @ CHECK: stmib r2!, {sp, pc} | 
|  | @ CHECK: ^ | 
|  | stmib sp!, {pc} | 
|  | @ CHECK: warning: use of PC in the list is deprecated | 
|  | @ CHECK: stmib sp!, {pc} | 
|  | @ CHECK: ^ | 
|  |  | 
|  |  | 
|  | .global push | 
|  | .type push,%function | 
|  | push: | 
|  | push {r0, pc} | 
|  | @ CHECK: warning: use of PC in the list is deprecated | 
|  | @ CHECK: push {r0, pc} | 
|  | @ CHECK: ^ | 
|  | push {r0, sp, pc} | 
|  | @ CHECK: warning: use of PC in the list is deprecated | 
|  | @ CHECK: push {r0, sp, pc} | 
|  | @ CHECK: ^ | 
|  | push {sp, pc} | 
|  | @ CHECK: warning: use of PC in the list is deprecated | 
|  | @ CHECK: push {sp, pc} | 
|  | @ CHECK: ^ | 
|  | push {pc} | 
|  | @ CHECK: warning: use of PC in the list is deprecated | 
|  | @ CHECK: push {pc} | 
|  | @ CHECK: ^ | 
|  |  | 
|  | .global ldm | 
|  | .type ldm,%function | 
|  | ldm: | 
|  | 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, 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, 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, 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-V7: error: writeback register not allowed in register list | 
|  | pop {sp} | 
|  | @ 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_stm | 
|  | .type valid,%function | 
|  | valid_stm: | 
|  | stm r0!, {r0, sp} | 
|  | @ CHECK: stm r0!, {r0, sp} | 
|  | stm r0!, {sp} | 
|  | @ CHECK: stm r0!, {sp} | 
|  | stmda r0!, {r0, sp} | 
|  | @ CHECK: stmda r0!, {r0, sp} | 
|  | stmda r0!, {sp} | 
|  | @ CHECK: stmda r0!, {sp} | 
|  | stmdb r0!, {r0, sp} | 
|  | @ CHECK: stmdb r0!, {r0, sp} | 
|  | stmdb r0!, {sp} | 
|  | @ CHECK: stmdb r0!, {sp} | 
|  | stmib r0!, {r0, sp} | 
|  | @ CHECK: stmib r0!, {r0, sp} | 
|  | stmib r0!, {sp} | 
|  | @ CHECK: stmib r0!, {sp} | 
|  | stmdaeq r0, {r0} | 
|  | @ CHECK: stmdaeq r0, {r0} | 
|  |  | 
|  | .global valid_push | 
|  | .type valid,%function | 
|  | valid_push: | 
|  | push {r0, sp} | 
|  | @ CHECK: push {r0, sp} | 
|  | push {sp} | 
|  | @ CHECK: push {sp} | 
|  |  | 
|  | .global valid_ldm | 
|  | .type valid,%function | 
|  | valid_ldm: | 
|  | ldm r0!, {r1, sp} | 
|  | @ CHECK: ldm r0!, {r1, sp} | 
|  | ldm r0!, {sp} | 
|  | @ CHECK: ldm r0!, {sp} | 
|  | ldmda r0!, {r1, sp} | 
|  | @ CHECK: ldmda r0!, {r1, sp} | 
|  | ldmda r0!, {sp} | 
|  | @ CHECK: ldmda r0!, {sp} | 
|  | ldmdb r0!, {r1, sp} | 
|  | @ CHECK: ldmdb r0!, {r1, sp} | 
|  | ldmdb r0!, {sp} | 
|  | @ CHECK: ldmdb r0!, {sp} | 
|  | ldmib r0!, {r1, sp} | 
|  | @ CHECK: ldmib r0!, {r1, sp} | 
|  | ldmib r0!, {sp} | 
|  | @ CHECK: ldmib r0!, {sp} | 
|  | ldmdaeq r0, {r0} | 
|  | @ CHECK: ldmdaeq r0, {r0} | 
|  |  | 
|  | .global valid_pop | 
|  | .type valid,%function | 
|  | valid_pop: | 
|  | pop {r0, pc} | 
|  | @ CHECK: pop {r0, pc} | 
|  |  |