| ; RUN: llvm-mc -triple arm64-apple-darwin -show-encoding < %s | FileCheck %s | |
| foo: | |
| ;----------------------------------------------------------------------------- | |
| ; Unconditional branch (register) instructions. | |
| ;----------------------------------------------------------------------------- | |
| ret | |
| ; CHECK: encoding: [0xc0,0x03,0x5f,0xd6] | |
| ret x1 | |
| ; CHECK: encoding: [0x20,0x00,0x5f,0xd6] | |
| drps | |
| ; CHECK: encoding: [0xe0,0x03,0xbf,0xd6] | |
| eret | |
| ; CHECK: encoding: [0xe0,0x03,0x9f,0xd6] | |
| br x5 | |
| ; CHECK: encoding: [0xa0,0x00,0x1f,0xd6] | |
| blr x9 | |
| ; CHECK: encoding: [0x20,0x01,0x3f,0xd6] | |
| bl L1 | |
| ; CHECK: bl L1 ; encoding: [A,A,A,0b100101AA] | |
| ; CHECK: fixup A - offset: 0, value: L1, kind: fixup_aarch64_pcrel_call26 | |
| ;----------------------------------------------------------------------------- | |
| ; Contitional branch instructions. | |
| ;----------------------------------------------------------------------------- | |
| b L1 | |
| ; CHECK: b L1 ; encoding: [A,A,A,0b000101AA] | |
| ; CHECK: fixup A - offset: 0, value: L1, kind: fixup_aarch64_pcrel_branch26 | |
| b.eq L1 | |
| ; CHECK: b.eq L1 ; encoding: [0bAAA00000,A,A,0x54] | |
| ; CHECK: fixup A - offset: 0, value: L1, kind: fixup_aarch64_pcrel_branch19 | |
| b.ne L1 | |
| ; CHECK: b.ne L1 ; encoding: [0bAAA00001,A,A,0x54] | |
| ; CHECK: fixup A - offset: 0, value: L1, kind: fixup_aarch64_pcrel_branch19 | |
| b.cs L1 | |
| ; CHECK: b.hs L1 ; encoding: [0bAAA00010,A,A,0x54] | |
| ; CHECK: fixup A - offset: 0, value: L1, kind: fixup_aarch64_pcrel_branch19 | |
| b.cc L1 | |
| ; CHECK: b.lo L1 ; encoding: [0bAAA00011,A,A,0x54] | |
| ; CHECK: fixup A - offset: 0, value: L1, kind: fixup_aarch64_pcrel_branch19 | |
| b.mi L1 | |
| ; CHECK: b.mi L1 ; encoding: [0bAAA00100,A,A,0x54] | |
| ; CHECK: fixup A - offset: 0, value: L1, kind: fixup_aarch64_pcrel_branch19 | |
| b.pl L1 | |
| ; CHECK: b.pl L1 ; encoding: [0bAAA00101,A,A,0x54] | |
| ; CHECK: fixup A - offset: 0, value: L1, kind: fixup_aarch64_pcrel_branch19 | |
| b.vs L1 | |
| ; CHECK: b.vs L1 ; encoding: [0bAAA00110,A,A,0x54] | |
| ; CHECK: fixup A - offset: 0, value: L1, kind: fixup_aarch64_pcrel_branch19 | |
| b.vc L1 | |
| ; CHECK: b.vc L1 ; encoding: [0bAAA00111,A,A,0x54] | |
| ; CHECK: fixup A - offset: 0, value: L1, kind: fixup_aarch64_pcrel_branch19 | |
| b.hi L1 | |
| ; CHECK: b.hi L1 ; encoding: [0bAAA01000,A,A,0x54] | |
| ; CHECK: fixup A - offset: 0, value: L1, kind: fixup_aarch64_pcrel_branch19 | |
| b.ls L1 | |
| ; CHECK: b.ls L1 ; encoding: [0bAAA01001,A,A,0x54] | |
| ; CHECK: fixup A - offset: 0, value: L1, kind: fixup_aarch64_pcrel_branch19 | |
| b.ge L1 | |
| ; CHECK: b.ge L1 ; encoding: [0bAAA01010,A,A,0x54] | |
| ; CHECK: fixup A - offset: 0, value: L1, kind: fixup_aarch64_pcrel_branch19 | |
| b.lt L1 | |
| ; CHECK: b.lt L1 ; encoding: [0bAAA01011,A,A,0x54] | |
| ; CHECK: fixup A - offset: 0, value: L1, kind: fixup_aarch64_pcrel_branch19 | |
| b.gt L1 | |
| ; CHECK: b.gt L1 ; encoding: [0bAAA01100,A,A,0x54] | |
| ; CHECK: fixup A - offset: 0, value: L1, kind: fixup_aarch64_pcrel_branch19 | |
| b.le L1 | |
| ; CHECK: b.le L1 ; encoding: [0bAAA01101,A,A,0x54] | |
| ; CHECK: fixup A - offset: 0, value: L1, kind: fixup_aarch64_pcrel_branch19 | |
| b.al L1 | |
| ; CHECK: b.al L1 ; encoding: [0bAAA01110,A,A,0x54] | |
| ; CHECK: fixup A - offset: 0, value: L1, kind: fixup_aarch64_pcrel_branch19 | |
| L1: | |
| b #28 | |
| ; CHECK: b #28 | |
| b.lt #28 | |
| ; CHECK: b.lt #28 | |
| b.cc #1048572 | |
| ; CHECK: b.lo #1048572 ; encoding: [0xe3,0xff,0x7f,0x54] | |
| b #134217724 | |
| ; CHECK: b #134217724 ; encoding: [0xff,0xff,0xff,0x15] | |
| b #-134217728 | |
| ; CHECK: b #-134217728 ; encoding: [0x00,0x00,0x00,0x16] | |
| ;----------------------------------------------------------------------------- | |
| ; Compare-and-branch instructions. | |
| ;----------------------------------------------------------------------------- | |
| cbz w1, foo | |
| ; CHECK: encoding: [0bAAA00001,A,A,0x34] | |
| cbz x1, foo | |
| ; CHECK: encoding: [0bAAA00001,A,A,0xb4] | |
| cbnz w2, foo | |
| ; CHECK: encoding: [0bAAA00010,A,A,0x35] | |
| cbnz x2, foo | |
| ; CHECK: encoding: [0bAAA00010,A,A,0xb5] | |
| cbz w1, #28 | |
| ; CHECK: cbz w1, #28 | |
| cbz w20, #1048572 | |
| ; CHECK: cbz w20, #1048572 ; encoding: [0xf4,0xff,0x7f,0x34] | |
| cbnz x2, #-1048576 | |
| ; CHECK: cbnz x2, #-1048576 ; encoding: [0x02,0x00,0x80,0xb5] | |
| ;----------------------------------------------------------------------------- | |
| ; Bit-test-and-branch instructions. | |
| ;----------------------------------------------------------------------------- | |
| tbz x1, #3, foo | |
| ; CHECK: encoding: [0bAAA00001,A,0b00011AAA,0x36] | |
| tbnz x1, #63, foo | |
| ; CHECK: encoding: [0bAAA00001,A,0b11111AAA,0xb7] | |
| tbz w1, #3, foo | |
| ; CHECK: encoding: [0bAAA00001,A,0b00011AAA,0x36] | |
| tbnz w1, #31, foo | |
| ; CHECK: encoding: [0bAAA00001,A,0b11111AAA,0x37] | |
| tbz w1, #3, #28 | |
| ; CHECK: tbz w1, #3, #28 | |
| tbz w3, #5, #32764 | |
| ; CHECK: tbz w3, #5, #32764 ; encoding: [0xe3,0xff,0x2b,0x36] | |
| tbnz x3, #8, #-32768 | |
| ; CHECK: tbnz w3, #8, #-32768 ; encoding: [0x03,0x00,0x44,0x37] | |
| ;----------------------------------------------------------------------------- | |
| ; Exception generation instructions. | |
| ;----------------------------------------------------------------------------- | |
| brk #1 | |
| ; CHECK: encoding: [0x20,0x00,0x20,0xd4] | |
| dcps1 #2 | |
| ; CHECK: encoding: [0x41,0x00,0xa0,0xd4] | |
| dcps2 #3 | |
| ; CHECK: encoding: [0x62,0x00,0xa0,0xd4] | |
| dcps3 #4 | |
| ; CHECK: encoding: [0x83,0x00,0xa0,0xd4] | |
| hlt #5 | |
| ; CHECK: encoding: [0xa0,0x00,0x40,0xd4] | |
| hvc #6 | |
| ; CHECK: encoding: [0xc2,0x00,0x00,0xd4] | |
| smc #7 | |
| ; CHECK: encoding: [0xe3,0x00,0x00,0xd4] | |
| svc #8 | |
| ; CHECK: encoding: [0x01,0x01,0x00,0xd4] | |
| ; The immediate defaults to zero for DCPSn | |
| dcps1 | |
| dcps2 | |
| dcps3 | |
| ; CHECK: dcps1 ; encoding: [0x01,0x00,0xa0,0xd4] | |
| ; CHECK: dcps2 ; encoding: [0x02,0x00,0xa0,0xd4] | |
| ; CHECK: dcps3 ; encoding: [0x03,0x00,0xa0,0xd4] | |