| @ RUN: llvm-mc -triple=thumbv7-apple-darwin -mcpu=cortex-a8 -show-encoding < %s | FileCheck %s |
| |
| @------------------------------------------------------------------------------ |
| @ unconditional branches accept narrow suffix and encode to short encodings |
| @------------------------------------------------------------------------------ |
| |
| b.n #-2048 |
| b.n #2046 |
| |
| @ CHECK: b #-2048 @ encoding: [0x00,0xe4] |
| @ CHECK: b #2046 @ encoding: [0xff,0xe3] |
| |
| @------------------------------------------------------------------------------ |
| @ unconditional branches accept wide suffix and encode to wide encodings |
| @------------------------------------------------------------------------------ |
| |
| b.w #-2048 |
| b.w #2046 |
| b.w #-1677216 |
| b.w #1677214 |
| |
| @ CHECK: b.w #-2048 @ encoding: [0xff,0xf7,0x00,0xbc] |
| @ CHECK: b.w #2046 @ encoding: [0x00,0xf0,0xff,0xbb] |
| @ CHECK: b.w #-1677216 @ encoding: [0x66,0xf6,0x30,0xbc] |
| @ CHECK: b.w #1677214 @ encoding: [0x99,0xf1,0xcf,0xbb] |
| |
| @------------------------------------------------------------------------------ |
| @ unconditional branches without width suffix encode depending of offset size |
| @------------------------------------------------------------------------------ |
| |
| b #-2048 |
| b #2046 |
| b #-2050 |
| b #2048 |
| b #-1677216 |
| b #1677214 |
| |
| @ CHECK: b #-2048 @ encoding: [0x00,0xe4] |
| @ CHECK: b #2046 @ encoding: [0xff,0xe3] |
| @ CHECK: b.w #-2050 @ encoding: [0xff,0xf7,0xff,0xbb] |
| @ CHECK: b.w #2048 @ encoding: [0x00,0xf0,0x00,0xbc] |
| @ CHECK: b.w #-1677216 @ encoding: [0x66,0xf6,0x30,0xbc] |
| @ CHECK: b.w #1677214 @ encoding: [0x99,0xf1,0xcf,0xbb] |
| |
| @------------------------------------------------------------------------------ |
| @ unconditional branches with width narrow suffix in IT block |
| @------------------------------------------------------------------------------ |
| |
| it eq |
| beq.n #-2048 |
| it ne |
| bne.n #-2046 |
| |
| @ CHECK: it eq @ encoding: [0x08,0xbf] |
| @ CHECK: beq #-2048 @ encoding: [0x00,0xe4] |
| @ CHECK: it ne @ encoding: [0x18,0xbf] |
| @ CHECK: bne #-2046 @ encoding: [0x01,0xe4] |
| |
| @------------------------------------------------------------------------------ |
| @ unconditional branches with wide suffix in IT block |
| @------------------------------------------------------------------------------ |
| |
| it gt |
| bgt.w #-2048 |
| it le |
| ble.w #2046 |
| it ge |
| bge.w #-1677216 |
| it lt |
| blt.w #1677214 |
| |
| @ CHECK: it gt @ encoding: [0xc8,0xbf] |
| @ CHECK: bgt.w #-2048 @ encoding: [0xff,0xf7,0x00,0xbc] |
| @ CHECK: it le @ encoding: [0xd8,0xbf] |
| @ CHECK: ble.w #2046 @ encoding: [0x00,0xf0,0xff,0xbb] |
| @ CHECK: it ge @ encoding: [0xa8,0xbf] |
| @ CHECK: bge.w #-1677216 @ encoding: [0x66,0xf6,0x30,0xbc] |
| @ CHECK: it lt @ encoding: [0xb8,0xbf] |
| @ CHECK: blt.w #1677214 @ encoding: [0x99,0xf1,0xcf,0xbb] |
| |
| @------------------------------------------------------------------------------ |
| @ conditional branches accept narrow suffix and encode to short encodings |
| @------------------------------------------------------------------------------ |
| |
| beq.n #-256 |
| bne.n #254 |
| |
| @ CHECK: beq #-256 @ encoding: [0x80,0xd0] |
| @ CHECK: bne #254 @ encoding: [0x7f,0xd1] |
| |
| @------------------------------------------------------------------------------ |
| @ unconditional branches accept wide suffix and encode to wide encodings |
| @------------------------------------------------------------------------------ |
| |
| bl.w #256 |
| it ne |
| blne.w #256 |
| bmi.w #-256 |
| bne.w #254 |
| blt.w #-1048576 |
| bge.w #1048574 |
| |
| @ CHECK: bl #256 @ encoding: [0x00,0xf0,0x80,0xf8] |
| @ CHECK: it ne @ encoding: [0x18,0xbf] |
| @ CHECK: blne #256 @ encoding: [0x00,0xf0,0x80,0xf8] |
| @ CHECK: bmi.w #-256 @ encoding: [0x3f,0xf5,0x80,0xaf] |
| @ CHECK: bne.w #254 @ encoding: [0x40,0xf0,0x7f,0x80] |
| @ CHECK: blt.w #-1048576 @ encoding: [0xc0,0xf6,0x00,0x80] |
| @ CHECK: bge.w #1048574 @ encoding: [0xbf,0xf2,0xff,0xaf] |
| |
| @------------------------------------------------------------------------------ |
| @ unconditional branches without width suffix encode depending of offset size |
| @------------------------------------------------------------------------------ |
| |
| bne #-256 |
| bgt #254 |
| bne #-258 |
| bgt #256 |
| bne #-1048576 |
| bgt #1048574 |
| |
| @ CHECK: bne #-256 @ encoding: [0x80,0xd1] |
| @ CHECK: bgt #254 @ encoding: [0x7f,0xdc] |
| @ CHECK: bne.w #-258 @ encoding: [0x7f,0xf4,0x7f,0xaf] |
| @ CHECK: bgt.w #256 @ encoding: [0x00,0xf3,0x80,0x80] |
| @ CHECK: bne.w #-1048576 @ encoding: [0x40,0xf4,0x00,0x80] |
| @ CHECK: bgt.w #1048574 @ encoding: [0x3f,0xf3,0xff,0xaf] |
| |
| @------------------------------------------------------------------------------ |
| @ same branch insturction encoding to conditional or unconditional depending |
| @ on whether it is in an IT block or not |
| @------------------------------------------------------------------------------ |
| |
| it eq |
| addeq r0, r1 |
| bne #128 |
| |
| @ CHECK: it eq @ encoding: [0x08,0xbf] |
| @ CHECK: addeq r0, r1 @ encoding: [0x08,0x44] |
| @ CHECK: bne #128 @ encoding: [0x40,0xd1] |
| |
| ite eq |
| addeq r0, r1 |
| bne #128 |
| |
| @ CHECK: ite eq @ encoding: [0x0c,0xbf] |
| @ CHECK: addeq r0, r1 @ encoding: [0x08,0x44] |
| @ CHECK: bne #128 @ encoding: [0x40,0xe0] |
| |
| @ RUN: llvm-mc -triple=thumbv7-apple-darwin -mcpu=cortex-a8 -show-encoding < %s | FileCheck %s |
| |
| @------------------------------------------------------------------------------ |
| @ unconditional branches accept narrow suffix and encode to short encodings |
| @------------------------------------------------------------------------------ |
| |
| b.n #-2048 |
| b.n #2046 |
| |
| @ CHECK: b #-2048 @ encoding: [0x00,0xe4] |
| @ CHECK: b #2046 @ encoding: [0xff,0xe3] |
| |
| @------------------------------------------------------------------------------ |
| @ unconditional branches accept wide suffix and encode to wide encodings |
| @------------------------------------------------------------------------------ |
| |
| b.w #-2048 |
| b.w #2046 |
| b.w #-1677216 |
| b.w #1677214 |
| |
| @ CHECK: b.w #-2048 @ encoding: [0xff,0xf7,0x00,0xbc] |
| @ CHECK: b.w #2046 @ encoding: [0x00,0xf0,0xff,0xbb] |
| @ CHECK: b.w #-1677216 @ encoding: [0x66,0xf6,0x30,0xbc] |
| @ CHECK: b.w #1677214 @ encoding: [0x99,0xf1,0xcf,0xbb] |
| |
| @------------------------------------------------------------------------------ |
| @ unconditional branches without width suffix encode depending of offset size |
| @------------------------------------------------------------------------------ |
| |
| b #-2048 |
| b #2046 |
| b #-2050 |
| b #2048 |
| b #-1677216 |
| b #1677214 |
| |
| @ CHECK: b #-2048 @ encoding: [0x00,0xe4] |
| @ CHECK: b #2046 @ encoding: [0xff,0xe3] |
| @ CHECK: b.w #-2050 @ encoding: [0xff,0xf7,0xff,0xbb] |
| @ CHECK: b.w #2048 @ encoding: [0x00,0xf0,0x00,0xbc] |
| @ CHECK: b.w #-1677216 @ encoding: [0x66,0xf6,0x30,0xbc] |
| @ CHECK: b.w #1677214 @ encoding: [0x99,0xf1,0xcf,0xbb] |
| |
| @------------------------------------------------------------------------------ |
| @ unconditional branches with width narrow suffix in IT block |
| @------------------------------------------------------------------------------ |
| |
| it eq |
| beq.n #-2048 |
| it ne |
| bne.n #-2046 |
| |
| @ CHECK: it eq @ encoding: [0x08,0xbf] |
| @ CHECK: beq #-2048 @ encoding: [0x00,0xe4] |
| @ CHECK: it ne @ encoding: [0x18,0xbf] |
| @ CHECK: bne #-2046 @ encoding: [0x01,0xe4] |
| |
| @------------------------------------------------------------------------------ |
| @ unconditional branches with wide suffix in IT block |
| @------------------------------------------------------------------------------ |
| |
| it gt |
| bgt.w #-2048 |
| it le |
| ble.w #2046 |
| it ge |
| bge.w #-1677216 |
| it lt |
| blt.w #1677214 |
| |
| @ CHECK: it gt @ encoding: [0xc8,0xbf] |
| @ CHECK: bgt.w #-2048 @ encoding: [0xff,0xf7,0x00,0xbc] |
| @ CHECK: it le @ encoding: [0xd8,0xbf] |
| @ CHECK: ble.w #2046 @ encoding: [0x00,0xf0,0xff,0xbb] |
| @ CHECK: it ge @ encoding: [0xa8,0xbf] |
| @ CHECK: bge.w #-1677216 @ encoding: [0x66,0xf6,0x30,0xbc] |
| @ CHECK: it lt @ encoding: [0xb8,0xbf] |
| @ CHECK: blt.w #1677214 @ encoding: [0x99,0xf1,0xcf,0xbb] |
| |
| @------------------------------------------------------------------------------ |
| @ conditional branches accept narrow suffix and encode to short encodings |
| @------------------------------------------------------------------------------ |
| |
| beq.n #-256 |
| bne.n #254 |
| |
| @ CHECK: beq #-256 @ encoding: [0x80,0xd0] |
| @ CHECK: bne #254 @ encoding: [0x7f,0xd1] |
| |
| @------------------------------------------------------------------------------ |
| @ unconditional branches accept wide suffix and encode to wide encodings |
| @------------------------------------------------------------------------------ |
| |
| bmi.w #-256 |
| bne.w #254 |
| blt.w #-1048576 |
| bge.w #1048574 |
| |
| @ CHECK: bmi.w #-256 @ encoding: [0x3f,0xf5,0x80,0xaf] |
| @ CHECK: bne.w #254 @ encoding: [0x40,0xf0,0x7f,0x80] |
| @ CHECK: blt.w #-1048576 @ encoding: [0xc0,0xf6,0x00,0x80] |
| @ CHECK: bge.w #1048574 @ encoding: [0xbf,0xf2,0xff,0xaf] |
| |
| @------------------------------------------------------------------------------ |
| @ unconditional branches without width suffix encode depending of offset size |
| @------------------------------------------------------------------------------ |
| |
| bne #-256 |
| bgt #254 |
| bne #-258 |
| bgt #256 |
| bne #-1048576 |
| bgt #1048574 |
| |
| @ CHECK: bne #-256 @ encoding: [0x80,0xd1] |
| @ CHECK: bgt #254 @ encoding: [0x7f,0xdc] |
| @ CHECK: bne.w #-258 @ encoding: [0x7f,0xf4,0x7f,0xaf] |
| @ CHECK: bgt.w #256 @ encoding: [0x00,0xf3,0x80,0x80] |
| @ CHECK: bne.w #-1048576 @ encoding: [0x40,0xf4,0x00,0x80] |
| @ CHECK: bgt.w #1048574 @ encoding: [0x3f,0xf3,0xff,0xaf] |
| |
| @------------------------------------------------------------------------------ |
| @ same branch insturction encoding to conditional or unconditional depending |
| @ on whether it is in an IT block or not |
| @------------------------------------------------------------------------------ |
| |
| it eq |
| addeq r0, r1 |
| bne #128 |
| |
| @ CHECK: it eq @ encoding: [0x08,0xbf] |
| @ CHECK: addeq r0, r1 @ encoding: [0x08,0x44] |
| @ CHECK: bne #128 @ encoding: [0x40,0xd1] |
| |
| ite eq |
| addeq r0, r1 |
| bne #128 |
| |
| @ CHECK: ite eq @ encoding: [0x0c,0xbf] |
| @ CHECK: addeq r0, r1 @ encoding: [0x08,0x44] |
| @ CHECK: bne #128 @ encoding: [0x40,0xe0] |
| |
| |
| @------------------------------------------------------------------------------ |
| @ Branch targets destined for ARM mode must == 0 (mod 4), otherwise (mod 2). |
| @------------------------------------------------------------------------------ |
| |
| b #2 |
| bl #2 |
| beq #2 |
| cbz r0, #2 |
| @ N.b. destination is "align(PC, 4) + imm" so imm is still 4-byte |
| @ aligned even though current PC may not and destination must be. |
| blx #4 |
| |
| @ CHECK: b #2 @ encoding: [0x01,0xe0] |
| @ CHECK: bl #2 @ encoding: [0x00,0xf0,0x01,0xf8] |
| @ CHECK: beq #2 @ encoding: [0x01,0xd0] |
| @ CHECK: cbz r0, #2 @ encoding: [0x08,0xb1] |
| @ CHECK: blx #4 @ encoding: [0x00,0xf0,0x02,0xe8] |