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 12 stm: 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 40 stmda: 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 68 stmdb: 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 96 stmib: 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 125 push: 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 153 ldm: 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 165 ldmda: 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 177 ldmdb: 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 189 ldmib: 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 201 pop: 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 215 valid: 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