1@ RUN: llvm-mc -triple=thumbv7-apple-darwin -mcpu=cortex-a8 -show-encoding < %s | FileCheck %s 2 3@------------------------------------------------------------------------------ 4@ unconditional branches accept narrow suffix and encode to short encodings 5@------------------------------------------------------------------------------ 6 7 b.n #-2048 8 b.n #2046 9 10@ CHECK: b #-2048 @ encoding: [0x00,0xe4] 11@ CHECK: b #2046 @ encoding: [0xff,0xe3] 12 13@------------------------------------------------------------------------------ 14@ unconditional branches accept wide suffix and encode to wide encodings 15@------------------------------------------------------------------------------ 16 17 b.w #-2048 18 b.w #2046 19 b.w #-1677216 20 b.w #1677214 21 22@ CHECK: b.w #-2048 @ encoding: [0xff,0xf7,0x00,0xbc] 23@ CHECK: b.w #2046 @ encoding: [0x00,0xf0,0xff,0xbb] 24@ CHECK: b.w #-1677216 @ encoding: [0x66,0xf6,0x30,0xbc] 25@ CHECK: b.w #1677214 @ encoding: [0x99,0xf1,0xcf,0xbb] 26 27@------------------------------------------------------------------------------ 28@ unconditional branches without width suffix encode depending of offset size 29@------------------------------------------------------------------------------ 30 31 b #-2048 32 b #2046 33 b #-2050 34 b #2048 35 b #-1677216 36 b #1677214 37 38@ CHECK: b #-2048 @ encoding: [0x00,0xe4] 39@ CHECK: b #2046 @ encoding: [0xff,0xe3] 40@ CHECK: b.w #-2050 @ encoding: [0xff,0xf7,0xff,0xbb] 41@ CHECK: b.w #2048 @ encoding: [0x00,0xf0,0x00,0xbc] 42@ CHECK: b.w #-1677216 @ encoding: [0x66,0xf6,0x30,0xbc] 43@ CHECK: b.w #1677214 @ encoding: [0x99,0xf1,0xcf,0xbb] 44 45@------------------------------------------------------------------------------ 46@ unconditional branches with width narrow suffix in IT block 47@------------------------------------------------------------------------------ 48 49 it eq 50 beq.n #-2048 51 it ne 52 bne.n #-2046 53 54@ CHECK: it eq @ encoding: [0x08,0xbf] 55@ CHECK: beq #-2048 @ encoding: [0x00,0xe4] 56@ CHECK: it ne @ encoding: [0x18,0xbf] 57@ CHECK: bne #-2046 @ encoding: [0x01,0xe4] 58 59@------------------------------------------------------------------------------ 60@ unconditional branches with wide suffix in IT block 61@------------------------------------------------------------------------------ 62 63 it gt 64 bgt.w #-2048 65 it le 66 ble.w #2046 67 it ge 68 bge.w #-1677216 69 it lt 70 blt.w #1677214 71 72@ CHECK: it gt @ encoding: [0xc8,0xbf] 73@ CHECK: bgt.w #-2048 @ encoding: [0xff,0xf7,0x00,0xbc] 74@ CHECK: it le @ encoding: [0xd8,0xbf] 75@ CHECK: ble.w #2046 @ encoding: [0x00,0xf0,0xff,0xbb] 76@ CHECK: it ge @ encoding: [0xa8,0xbf] 77@ CHECK: bge.w #-1677216 @ encoding: [0x66,0xf6,0x30,0xbc] 78@ CHECK: it lt @ encoding: [0xb8,0xbf] 79@ CHECK: blt.w #1677214 @ encoding: [0x99,0xf1,0xcf,0xbb] 80 81@------------------------------------------------------------------------------ 82@ conditional branches accept narrow suffix and encode to short encodings 83@------------------------------------------------------------------------------ 84 85 beq.n #-256 86 bne.n #254 87 88@ CHECK: beq #-256 @ encoding: [0x80,0xd0] 89@ CHECK: bne #254 @ encoding: [0x7f,0xd1] 90 91@------------------------------------------------------------------------------ 92@ unconditional branches accept wide suffix and encode to wide encodings 93@------------------------------------------------------------------------------ 94 95 bmi.w #-256 96 bne.w #254 97 blt.w #-1048576 98 bge.w #1048574 99 100@ CHECK: bmi.w #-256 @ encoding: [0x3f,0xf5,0x80,0xaf] 101@ CHECK: bne.w #254 @ encoding: [0x40,0xf0,0x7f,0x80] 102@ CHECK: blt.w #-1048576 @ encoding: [0xc0,0xf6,0x00,0x80] 103@ CHECK: bge.w #1048574 @ encoding: [0xbf,0xf2,0xff,0xaf] 104 105@------------------------------------------------------------------------------ 106@ unconditional branches without width suffix encode depending of offset size 107@------------------------------------------------------------------------------ 108 109 bne #-256 110 bgt #254 111 bne #-258 112 bgt #256 113 bne #-1048576 114 bgt #1048574 115 116@ CHECK: bne #-256 @ encoding: [0x80,0xd1] 117@ CHECK: bgt #254 @ encoding: [0x7f,0xdc] 118@ CHECK: bne.w #-258 @ encoding: [0x7f,0xf4,0x7f,0xaf] 119@ CHECK: bgt.w #256 @ encoding: [0x00,0xf3,0x80,0x80] 120@ CHECK: bne.w #-1048576 @ encoding: [0x40,0xf4,0x00,0x80] 121@ CHECK: bgt.w #1048574 @ encoding: [0x3f,0xf3,0xff,0xaf] 122 123@------------------------------------------------------------------------------ 124@ same branch insturction encoding to conditional or unconditional depending 125@ on whether it is in an IT block or not 126@------------------------------------------------------------------------------ 127 128 it eq 129 addeq r0, r1 130 bne #128 131 132@ CHECK: it eq @ encoding: [0x08,0xbf] 133@ CHECK: addeq r0, r1 @ encoding: [0x08,0x44] 134@ CHECK: bne #128 @ encoding: [0x40,0xd1] 135 136 ite eq 137 addeq r0, r1 138 bne #128 139 140@ CHECK: ite eq @ encoding: [0x0c,0xbf] 141@ CHECK: addeq r0, r1 @ encoding: [0x08,0x44] 142@ CHECK: bne #128 @ encoding: [0x40,0xe0] 143 144@ RUN: llvm-mc -triple=thumbv7-apple-darwin -mcpu=cortex-a8 -show-encoding < %s | FileCheck %s 145 146@------------------------------------------------------------------------------ 147@ unconditional branches accept narrow suffix and encode to short encodings 148@------------------------------------------------------------------------------ 149 150 b.n #-2048 151 b.n #2046 152 153@ CHECK: b #-2048 @ encoding: [0x00,0xe4] 154@ CHECK: b #2046 @ encoding: [0xff,0xe3] 155 156@------------------------------------------------------------------------------ 157@ unconditional branches accept wide suffix and encode to wide encodings 158@------------------------------------------------------------------------------ 159 160 b.w #-2048 161 b.w #2046 162 b.w #-1677216 163 b.w #1677214 164 165@ CHECK: b.w #-2048 @ encoding: [0xff,0xf7,0x00,0xbc] 166@ CHECK: b.w #2046 @ encoding: [0x00,0xf0,0xff,0xbb] 167@ CHECK: b.w #-1677216 @ encoding: [0x66,0xf6,0x30,0xbc] 168@ CHECK: b.w #1677214 @ encoding: [0x99,0xf1,0xcf,0xbb] 169 170@------------------------------------------------------------------------------ 171@ unconditional branches without width suffix encode depending of offset size 172@------------------------------------------------------------------------------ 173 174 b #-2048 175 b #2046 176 b #-2050 177 b #2048 178 b #-1677216 179 b #1677214 180 181@ CHECK: b #-2048 @ encoding: [0x00,0xe4] 182@ CHECK: b #2046 @ encoding: [0xff,0xe3] 183@ CHECK: b.w #-2050 @ encoding: [0xff,0xf7,0xff,0xbb] 184@ CHECK: b.w #2048 @ encoding: [0x00,0xf0,0x00,0xbc] 185@ CHECK: b.w #-1677216 @ encoding: [0x66,0xf6,0x30,0xbc] 186@ CHECK: b.w #1677214 @ encoding: [0x99,0xf1,0xcf,0xbb] 187 188@------------------------------------------------------------------------------ 189@ unconditional branches with width narrow suffix in IT block 190@------------------------------------------------------------------------------ 191 192 it eq 193 beq.n #-2048 194 it ne 195 bne.n #-2046 196 197@ CHECK: it eq @ encoding: [0x08,0xbf] 198@ CHECK: beq #-2048 @ encoding: [0x00,0xe4] 199@ CHECK: it ne @ encoding: [0x18,0xbf] 200@ CHECK: bne #-2046 @ encoding: [0x01,0xe4] 201 202@------------------------------------------------------------------------------ 203@ unconditional branches with wide suffix in IT block 204@------------------------------------------------------------------------------ 205 206 it gt 207 bgt.w #-2048 208 it le 209 ble.w #2046 210 it ge 211 bge.w #-1677216 212 it lt 213 blt.w #1677214 214 215@ CHECK: it gt @ encoding: [0xc8,0xbf] 216@ CHECK: bgt.w #-2048 @ encoding: [0xff,0xf7,0x00,0xbc] 217@ CHECK: it le @ encoding: [0xd8,0xbf] 218@ CHECK: ble.w #2046 @ encoding: [0x00,0xf0,0xff,0xbb] 219@ CHECK: it ge @ encoding: [0xa8,0xbf] 220@ CHECK: bge.w #-1677216 @ encoding: [0x66,0xf6,0x30,0xbc] 221@ CHECK: it lt @ encoding: [0xb8,0xbf] 222@ CHECK: blt.w #1677214 @ encoding: [0x99,0xf1,0xcf,0xbb] 223 224@------------------------------------------------------------------------------ 225@ conditional branches accept narrow suffix and encode to short encodings 226@------------------------------------------------------------------------------ 227 228 beq.n #-256 229 bne.n #254 230 231@ CHECK: beq #-256 @ encoding: [0x80,0xd0] 232@ CHECK: bne #254 @ encoding: [0x7f,0xd1] 233 234@------------------------------------------------------------------------------ 235@ unconditional branches accept wide suffix and encode to wide encodings 236@------------------------------------------------------------------------------ 237 238 bmi.w #-256 239 bne.w #254 240 blt.w #-1048576 241 bge.w #1048574 242 243@ CHECK: bmi.w #-256 @ encoding: [0x3f,0xf5,0x80,0xaf] 244@ CHECK: bne.w #254 @ encoding: [0x40,0xf0,0x7f,0x80] 245@ CHECK: blt.w #-1048576 @ encoding: [0xc0,0xf6,0x00,0x80] 246@ CHECK: bge.w #1048574 @ encoding: [0xbf,0xf2,0xff,0xaf] 247 248@------------------------------------------------------------------------------ 249@ unconditional branches without width suffix encode depending of offset size 250@------------------------------------------------------------------------------ 251 252 bne #-256 253 bgt #254 254 bne #-258 255 bgt #256 256 bne #-1048576 257 bgt #1048574 258 259@ CHECK: bne #-256 @ encoding: [0x80,0xd1] 260@ CHECK: bgt #254 @ encoding: [0x7f,0xdc] 261@ CHECK: bne.w #-258 @ encoding: [0x7f,0xf4,0x7f,0xaf] 262@ CHECK: bgt.w #256 @ encoding: [0x00,0xf3,0x80,0x80] 263@ CHECK: bne.w #-1048576 @ encoding: [0x40,0xf4,0x00,0x80] 264@ CHECK: bgt.w #1048574 @ encoding: [0x3f,0xf3,0xff,0xaf] 265 266@------------------------------------------------------------------------------ 267@ same branch insturction encoding to conditional or unconditional depending 268@ on whether it is in an IT block or not 269@------------------------------------------------------------------------------ 270 271 it eq 272 addeq r0, r1 273 bne #128 274 275@ CHECK: it eq @ encoding: [0x08,0xbf] 276@ CHECK: addeq r0, r1 @ encoding: [0x08,0x44] 277@ CHECK: bne #128 @ encoding: [0x40,0xd1] 278 279 ite eq 280 addeq r0, r1 281 bne #128 282 283@ CHECK: ite eq @ encoding: [0x0c,0xbf] 284@ CHECK: addeq r0, r1 @ encoding: [0x08,0x44] 285@ CHECK: bne #128 @ encoding: [0x40,0xe0] 286 287 288@------------------------------------------------------------------------------ 289@ Branch targets destined for ARM mode must == 0 (mod 4), otherwise (mod 2). 290@------------------------------------------------------------------------------ 291 292 b #2 293 bl #2 294 beq #2 295 cbz r0, #2 296 @ N.b. destination is "align(PC, 4) + imm" so imm is still 4-byte 297 @ aligned even though current PC may not and destination must be. 298 blx #4 299 300@ CHECK: b #2 @ encoding: [0x01,0xe0] 301@ CHECK: bl #2 @ encoding: [0x00,0xf0,0x01,0xf8] 302@ CHECK: beq #2 @ encoding: [0x01,0xd0] 303@ CHECK: cbz r0, #2 @ encoding: [0x08,0xb1] 304@ CHECK: blx #4 @ encoding: [0x00,0xf0,0x02,0xe8] 305