1@ RUN: llvm-mc -triple armv6t2-linux-eabi -filetype asm -o - %s 2>&1 \ 2@ RUN: | FileCheck %s 3 4@ RUN: not llvm-mc -triple armv7-linux-eabi -filetype asm -o - %s 2>&1 \ 5@ RUN: | FileCheck %s -check-prefix CHECK -check-prefix CHECK-V7 6 7 .syntax unified 8 .arm 9 10 .global stm 11 .type stm,%function 12stm: 13 stm sp!, {r0, pc} 14@ CHECK: warning: use of SP or PC in the list is deprecated 15@ CHECK: stm sp!, {r0, pc} 16@ CHECK: ^ 17 stm r0!, {r0, sp} 18@ CHECK: warning: use of SP or PC in the list is deprecated 19@ CHECK: stm r0!, {r0, sp} 20@ CHECK: ^ 21 stm r1!, {r0, sp, pc} 22@ CHECK: warning: use of SP or PC in the list is deprecated 23@ CHECK: stm r1!, {r0, sp, pc} 24@ CHECK: ^ 25 stm r2!, {sp, pc} 26@ CHECK: warning: use of SP or PC in the list is deprecated 27@ CHECK: stm r2!, {sp, pc} 28@ CHECK: ^ 29 stm sp!, {pc} 30@ CHECK: warning: use of SP or PC in the list is deprecated 31@ CHECK: stm sp!, {pc} 32@ CHECK: ^ 33 stm r0!, {sp} 34@ CHECK: warning: use of SP or PC in the list is deprecated 35@ CHECK: stm r0!, {sp} 36@ CHECK: ^ 37 38 .global stmda 39 .type stmda,%function 40stmda: 41 stmda sp!, {r0, pc} 42@ CHECK: warning: use of SP or PC in the list is deprecated 43@ CHECK: stmda sp!, {r0, pc} 44@ CHECK: ^ 45 stmda r0!, {r0, sp} 46@ CHECK: warning: use of SP or PC in the list is deprecated 47@ CHECK: stmda r0!, {r0, sp} 48@ CHECK: ^ 49 stmda r1!, {r0, sp, pc} 50@ CHECK: warning: use of SP or PC in the list is deprecated 51@ CHECK: stmda r1!, {r0, sp, pc} 52@ CHECK: ^ 53 stmda r2!, {sp, pc} 54@ CHECK: warning: use of SP or PC in the list is deprecated 55@ CHECK: stmda r2!, {sp, pc} 56@ CHECK: ^ 57 stmda sp!, {pc} 58@ CHECK: warning: use of SP or PC in the list is deprecated 59@ CHECK: stmda sp!, {pc} 60@ CHECK: ^ 61 stmda r0!, {sp} 62@ CHECK: warning: use of SP or PC in the list is deprecated 63@ CHECK: stmda r0!, {sp} 64@ CHECK: ^ 65 66 .global stmdb 67 .type stmdb,%function 68stmdb: 69 stmdb sp!, {r0, pc} 70@ CHECK: warning: use of SP or PC in the list is deprecated 71@ CHECK: stmdb sp!, {r0, pc} 72@ CHECK: ^ 73 stmdb r0!, {r0, sp} 74@ CHECK: warning: use of SP or PC in the list is deprecated 75@ CHECK: stmdb r0!, {r0, sp} 76@ CHECK: ^ 77 stmdb r1!, {r0, sp, pc} 78@ CHECK: warning: use of SP or PC in the list is deprecated 79@ CHECK: stmdb r1!, {r0, sp, pc} 80@ CHECK: ^ 81 stmdb r2!, {sp, pc} 82@ CHECK: warning: use of SP or PC in the list is deprecated 83@ CHECK: stmdb r2!, {sp, pc} 84@ CHECK: ^ 85 stmdb sp!, {pc} 86@ CHECK: warning: use of SP or PC in the list is deprecated 87@ CHECK: stmdb sp!, {pc} 88@ CHECK: ^ 89 stmdb r0!, {sp} 90@ CHECK: warning: use of SP or PC in the list is deprecated 91@ CHECK: stmdb r0!, {sp} 92@ CHECK: ^ 93 94 .global stmib 95 .type stmib,%function 96stmib: 97 stmib sp!, {r0, pc} 98@ CHECK: warning: use of SP or PC in the list is deprecated 99@ CHECK: stmib sp!, {r0, pc} 100@ CHECK: ^ 101 stmib r0!, {r0, sp} 102@ CHECK: warning: use of SP or PC in the list is deprecated 103@ CHECK: stmib r0!, {r0, sp} 104@ CHECK: ^ 105 stmib r1!, {r0, sp, pc} 106@ CHECK: warning: use of SP or PC in the list is deprecated 107@ CHECK: stmib r1!, {r0, sp, pc} 108@ CHECK: ^ 109 stmib r2!, {sp, pc} 110@ CHECK: warning: use of SP or PC in the list is deprecated 111@ CHECK: stmib r2!, {sp, pc} 112@ CHECK: ^ 113 stmib sp!, {pc} 114@ CHECK: warning: use of SP or PC in the list is deprecated 115@ CHECK: stmib sp!, {pc} 116@ CHECK: ^ 117 stmib r0!, {sp} 118@ CHECK: warning: use of SP or PC in the list is deprecated 119@ CHECK: stmib r0!, {sp} 120@ CHECK: ^ 121 122 123 .global push 124 .type push,%function 125push: 126 push {r0, pc} 127@ CHECK: warning: use of SP or PC in the list is deprecated 128@ CHECK: push {r0, pc} 129@ CHECK: ^ 130 push {r0, sp} 131@ CHECK: warning: use of SP or PC in the list is deprecated 132@ CHECK: push {r0, sp} 133@ CHECK: ^ 134 push {r0, sp, pc} 135@ CHECK: warning: use of SP or PC in the list is deprecated 136@ CHECK: push {r0, sp, pc} 137@ CHECK: ^ 138 push {sp, pc} 139@ CHECK: warning: use of SP or PC in the list is deprecated 140@ CHECK: push {sp, pc} 141@ CHECK: ^ 142 push {pc} 143@ CHECK: warning: use of SP or PC in the list is deprecated 144@ CHECK: push {pc} 145@ CHECK: ^ 146 push {sp} 147@ CHECK: warning: use of SP or PC in the list is deprecated 148@ CHECK: push {sp} 149@ CHECK: ^ 150 151 .global ldm 152 .type ldm,%function 153ldm: 154 ldm r0!, {r1, sp} 155@ CHECK: warning: use of SP in the list is deprecated 156 ldm r0!, {sp} 157@ CHECK: warning: use of SP in the list is deprecated 158 ldm r0!, {r1, lr, pc} 159@ CHECK: warning: use of LR and PC simultaneously in the list is deprecated 160 ldm r0!, {lr, pc} 161@ CHECK: warning: use of LR and PC simultaneously in the list is deprecated 162 163 .global ldmda 164 .type ldmda,%function 165ldmda: 166 ldmda r0!, {r1, sp} 167@ CHECK: warning: use of SP in the list is deprecated 168 ldmda r0!, {sp} 169@ CHECK: warning: use of SP in the list is deprecated 170 ldmda r0!, {r1, lr, pc} 171@ CHECK: warning: use of LR and PC simultaneously in the list is deprecated 172 ldmda r0!, {lr, pc} 173@ CHECK: warning: use of LR and PC simultaneously in the list is deprecated 174 175 .global ldmdb 176 .type ldmdb,%function 177ldmdb: 178 ldmdb r0!, {r1, sp} 179@ CHECK: warning: use of SP in the list is deprecated 180 ldmdb r0!, {sp} 181@ CHECK: warning: use of SP in the list is deprecated 182 ldmdb r0!, {r1, lr, pc} 183@ CHECK: warning: use of LR and PC simultaneously in the list is deprecated 184 ldmdb r0!, {lr, pc} 185@ CHECK: warning: use of LR and PC simultaneously in the list is deprecated 186 187 .global ldmib 188 .type ldmib,%function 189ldmib: 190 ldmib r0!, {r1, sp} 191@ CHECK: warning: use of SP in the list is deprecated 192 ldmib r0!, {sp} 193@ CHECK: warning: use of SP in the list is deprecated 194 ldmib r0!, {r1, lr, pc} 195@ CHECK: warning: use of LR and PC simultaneously in the list is deprecated 196 ldmib r0!, {lr, pc} 197@ CHECK: warning: use of LR and PC simultaneously in the list is deprecated 198 199 .global pop 200 .type pop,%function 201pop: 202 pop {r0, sp} 203@ CHECK: warning: use of SP in the list is deprecated 204@ CHECK-V7: error: writeback register not allowed in register list 205 pop {sp} 206@ CHECK: warning: use of SP in the list is deprecated 207@ CHECK-V7: error: writeback register not allowed in register list 208 pop {r0, lr, pc} 209@ CHECK: warning: use of LR and PC simultaneously in the list is deprecated 210 pop {lr, pc} 211@ CHECK: warning: use of LR and PC simultaneously in the list is deprecated 212 213 .global valid 214 .type valid,%function 215valid: 216 stmdaeq r0, {r0} 217@ CHECK: stmdaeq r0, {r0} 218 ldmdaeq r0, {r0} 219@ CHECK: ldmdaeq r0, {r0} 220 pop {r0, pc} 221@ CHECK: pop {r0, pc} 222 223