Home | History | Annotate | Download | only in ARM
      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