Home | History | Annotate | Download | only in AArch64
      1 ; RUN: llvm-mc -triple arm64-apple-darwin -show-encoding < %s | FileCheck %s
      2 
      3 foo:
      4 
      5 ;-----------------------------------------------------------------------------
      6 ; Unconditional branch (register) instructions.
      7 ;-----------------------------------------------------------------------------
      8 
      9   ret
     10 ; CHECK: encoding: [0xc0,0x03,0x5f,0xd6]
     11   ret x1
     12 ; CHECK: encoding: [0x20,0x00,0x5f,0xd6]
     13   drps
     14 ; CHECK: encoding: [0xe0,0x03,0xbf,0xd6]
     15   eret
     16 ; CHECK: encoding: [0xe0,0x03,0x9f,0xd6]
     17   br  x5
     18 ; CHECK: encoding: [0xa0,0x00,0x1f,0xd6]
     19   blr x9
     20 ; CHECK: encoding: [0x20,0x01,0x3f,0xd6]
     21   bl  L1
     22 ; CHECK: bl L1   ; encoding: [A,A,A,0b100101AA]
     23 ; CHECK: fixup A - offset: 0, value: L1, kind: fixup_aarch64_pcrel_call26
     24 
     25 ;-----------------------------------------------------------------------------
     26 ; Contitional branch instructions.
     27 ;-----------------------------------------------------------------------------
     28 
     29   b     L1
     30 ; CHECK: b L1      ; encoding: [A,A,A,0b000101AA]
     31 ; CHECK: fixup A - offset: 0, value: L1, kind: fixup_aarch64_pcrel_branch26
     32   b.eq  L1
     33 ; CHECK: b.eq L1   ; encoding: [0bAAA00000,A,A,0x54]
     34 ; CHECK: fixup A - offset: 0, value: L1, kind: fixup_aarch64_pcrel_branch19
     35   b.ne  L1
     36 ; CHECK: b.ne L1   ; encoding: [0bAAA00001,A,A,0x54]
     37 ; CHECK: fixup A - offset: 0, value: L1, kind: fixup_aarch64_pcrel_branch19
     38   b.cs  L1
     39 ; CHECK: b.hs L1   ; encoding: [0bAAA00010,A,A,0x54]
     40 ; CHECK: fixup A - offset: 0, value: L1, kind: fixup_aarch64_pcrel_branch19
     41   b.cc  L1
     42 ; CHECK: b.lo L1   ; encoding: [0bAAA00011,A,A,0x54]
     43 ; CHECK: fixup A - offset: 0, value: L1, kind: fixup_aarch64_pcrel_branch19
     44   b.mi  L1
     45 ; CHECK: b.mi L1   ; encoding: [0bAAA00100,A,A,0x54]
     46 ; CHECK: fixup A - offset: 0, value: L1, kind: fixup_aarch64_pcrel_branch19
     47   b.pl  L1
     48 ; CHECK: b.pl L1   ; encoding: [0bAAA00101,A,A,0x54]
     49 ; CHECK: fixup A - offset: 0, value: L1, kind: fixup_aarch64_pcrel_branch19
     50   b.vs  L1
     51 ; CHECK: b.vs L1   ; encoding: [0bAAA00110,A,A,0x54]
     52 ; CHECK: fixup A - offset: 0, value: L1, kind: fixup_aarch64_pcrel_branch19
     53   b.vc  L1
     54 ; CHECK: b.vc L1   ; encoding: [0bAAA00111,A,A,0x54]
     55 ; CHECK: fixup A - offset: 0, value: L1, kind: fixup_aarch64_pcrel_branch19
     56   b.hi  L1
     57 ; CHECK: b.hi L1   ; encoding: [0bAAA01000,A,A,0x54]
     58 ; CHECK: fixup A - offset: 0, value: L1, kind: fixup_aarch64_pcrel_branch19
     59   b.ls  L1
     60 ; CHECK: b.ls L1   ; encoding: [0bAAA01001,A,A,0x54]
     61 ; CHECK: fixup A - offset: 0, value: L1, kind: fixup_aarch64_pcrel_branch19
     62   b.ge  L1
     63 ; CHECK: b.ge L1   ; encoding: [0bAAA01010,A,A,0x54]
     64 ; CHECK: fixup A - offset: 0, value: L1, kind: fixup_aarch64_pcrel_branch19
     65   b.lt  L1
     66 ; CHECK: b.lt L1   ; encoding: [0bAAA01011,A,A,0x54]
     67 ; CHECK: fixup A - offset: 0, value: L1, kind: fixup_aarch64_pcrel_branch19
     68   b.gt  L1
     69 ; CHECK: b.gt L1   ; encoding: [0bAAA01100,A,A,0x54]
     70 ; CHECK: fixup A - offset: 0, value: L1, kind: fixup_aarch64_pcrel_branch19
     71   b.le  L1
     72 ; CHECK: b.le L1   ; encoding: [0bAAA01101,A,A,0x54]
     73 ; CHECK: fixup A - offset: 0, value: L1, kind: fixup_aarch64_pcrel_branch19
     74   b.al  L1
     75 ; CHECK: b.al L1      ; encoding: [0bAAA01110,A,A,0x54]
     76 ; CHECK: fixup A - offset: 0, value: L1, kind: fixup_aarch64_pcrel_branch19
     77 L1:
     78   b #28
     79 ; CHECK: b #28
     80   b.lt #28
     81 ; CHECK: b.lt #28
     82   b.cc #1048572
     83 ; CHECK: b.lo	#1048572                ; encoding: [0xe3,0xff,0x7f,0x54]
     84   b #134217724
     85 ; CHECK: b	#134217724              ; encoding: [0xff,0xff,0xff,0x15]
     86   b #-134217728
     87 ; CHECK: b	#-134217728             ; encoding: [0x00,0x00,0x00,0x16]
     88 
     89 ;-----------------------------------------------------------------------------
     90 ; Compare-and-branch instructions.
     91 ;-----------------------------------------------------------------------------
     92 
     93   cbz w1, foo
     94 ; CHECK: encoding: [0bAAA00001,A,A,0x34]
     95   cbz x1, foo
     96 ; CHECK: encoding: [0bAAA00001,A,A,0xb4]
     97   cbnz w2, foo
     98 ; CHECK: encoding: [0bAAA00010,A,A,0x35]
     99   cbnz x2, foo
    100 ; CHECK: encoding: [0bAAA00010,A,A,0xb5]
    101   cbz w1, #28
    102 ; CHECK: cbz w1, #28
    103   cbz     w20, #1048572
    104 ; CHECK: cbz	w20, #1048572           ; encoding: [0xf4,0xff,0x7f,0x34]
    105   cbnz x2, #-1048576
    106 ; CHECK: cbnz	x2, #-1048576           ; encoding: [0x02,0x00,0x80,0xb5]
    107 
    108 
    109 ;-----------------------------------------------------------------------------
    110 ; Bit-test-and-branch instructions.
    111 ;-----------------------------------------------------------------------------
    112 
    113   tbz x1, #3, foo
    114 ; CHECK: encoding: [0bAAA00001,A,0b00011AAA,0x36]
    115   tbnz x1, #63, foo
    116 ; CHECK: encoding: [0bAAA00001,A,0b11111AAA,0xb7]
    117 
    118   tbz w1, #3, foo
    119 ; CHECK: encoding: [0bAAA00001,A,0b00011AAA,0x36]
    120   tbnz w1, #31, foo
    121 ; CHECK: encoding: [0bAAA00001,A,0b11111AAA,0x37]
    122 
    123   tbz w1, #3, #28
    124 ; CHECK: tbz w1, #3, #28
    125   tbz w3, #5, #32764
    126 ; CHECK: tbz	w3, #5, #32764          ; encoding: [0xe3,0xff,0x2b,0x36]
    127   tbnz x3, #8, #-32768
    128 ; CHECK: tbnz	w3, #8, #-32768         ; encoding: [0x03,0x00,0x44,0x37]
    129 
    130 ;-----------------------------------------------------------------------------
    131 ; Exception generation instructions.
    132 ;-----------------------------------------------------------------------------
    133 
    134   brk   #1
    135 ; CHECK: encoding: [0x20,0x00,0x20,0xd4]
    136   dcps1 #2
    137 ; CHECK: encoding: [0x41,0x00,0xa0,0xd4]
    138   dcps2 #3
    139 ; CHECK: encoding: [0x62,0x00,0xa0,0xd4]
    140   dcps3 #4
    141 ; CHECK: encoding: [0x83,0x00,0xa0,0xd4]
    142   hlt   #5
    143 ; CHECK: encoding: [0xa0,0x00,0x40,0xd4]
    144   hvc   #6
    145 ; CHECK: encoding: [0xc2,0x00,0x00,0xd4]
    146   smc   #7
    147 ; CHECK: encoding: [0xe3,0x00,0x00,0xd4]
    148   svc   #8
    149 ; CHECK: encoding: [0x01,0x01,0x00,0xd4]
    150 
    151 ; The immediate defaults to zero for DCPSn
    152   dcps1
    153   dcps2
    154   dcps3
    155 
    156 ; CHECK: dcps1                     ; encoding: [0x01,0x00,0xa0,0xd4]
    157 ; CHECK: dcps2                     ; encoding: [0x02,0x00,0xa0,0xd4]
    158 ; CHECK: dcps3                     ; encoding: [0x03,0x00,0xa0,0xd4]
    159 
    160