321 lines · plain
1// RUN: llvm-mc -triple=aarch64 -show-encoding -mattr=+cmpbr < %s \2// RUN: | FileCheck %s --check-prefixes=CHECK-ENCODING,CHECK-INST3// RUN: not llvm-mc -triple=aarch64 -show-encoding < %s 2>&1 \4// RUN: | FileCheck %s --check-prefix=CHECK-ERROR5// RUN: llvm-mc -triple=aarch64 -filetype=obj -mattr=+cmpbr < %s \6// RUN: | llvm-objdump -d --no-print-imm-hex --mattr=+cmpbr - | FileCheck %s --check-prefix=CHECK-DISASS7// RUN: llvm-mc -triple=aarch64 -filetype=obj -mattr=+cmpbr < %s \8// RUN: | llvm-objdump -d --no-print-imm-hex --mattr=-cmpbr - | FileCheck %s --check-prefix=CHECK-UNKNOWN9 10// Label at address 4, so we can test that the address shows up in the11// disassembly.12 nop13 14lbl:15 16//------------------------------------------------------------------------------17// Compare & branch (Register)18//------------------------------------------------------------------------------19///20// CB<XX>21///22cbgt w5, w5, lbl23// CHECK-INST: cbgt w5, w5, lbl24// CHECK-DISASS: cbgt w5, w5, 0x4 <lbl>25// CHECK-ENCODING: [0bAAA00101,0b00AAAAAA,0x05,0x74]26// CHECK-ENCODING: fixup A - offset: 0, value: lbl, kind: fixup_aarch64_pcrel_branch927// CHECK-ERROR: instruction requires: cmpbr28// CHECK-UNKNOWN: 74050005 <unknown>29 30cbgt x5, x5, lbl31// CHECK-INST: cbgt x5, x5, lbl32// CHECK-DISASS: cbgt x5, x5, 0x4 <lbl>33// CHECK-ENCODING: [0bAAA00101,0b00AAAAAA,0x05,0xf4]34// CHECK-ENCODING: fixup A - offset: 0, value: lbl, kind: fixup_aarch64_pcrel_branch935// CHECK-ERROR: instruction requires: cmpbr36// CHECK-UNKNOWN: f4053fe537 38cbge x2, x2, lbl39// CHECK-INST: cbge x2, x2, lbl40// CHECK-DISASS: cbge x2, x2, 0x4 <lbl>41// CHECK-ENCODING: [0bAAA00010,0b00AAAAAA,0x22,0xf4]42// CHECK-ENCODING: fixup A - offset: 0, value: lbl, kind: fixup_aarch64_pcrel_branch943// CHECK-ERROR: instruction requires: cmpbr44// CHECK-UNKNOWN: f4223fc245 46cbge w5, w5, lbl47// CHECK-INST: cbge w5, w5, lbl48// CHECK-DISASS: cbge w5, w5, 0x4 <lbl>49// CHECK-ENCODING: [0bAAA00101,0b00AAAAAA,0x25,0x74]50// CHECK-ENCODING: fixup A - offset: 0, value: lbl, kind: fixup_aarch64_pcrel_branch951// CHECK-ERROR: instruction requires: cmpbr52// CHECK-UNKNOWN: 74253fa553 54cbhi w5, w5, lbl55// CHECK-INST: cbhi w5, w5, lbl56// CHECK-DISASS: cbhi w5, w5, 0x4 <lbl>57// CHECK-ENCODING: [0bAAA00101,0b00AAAAAA,0x45,0x74]58// CHECK-ENCODING: fixup A - offset: 0, value: lbl, kind: fixup_aarch64_pcrel_branch959// CHECK-ERROR: instruction requires: cmpbr60// CHECK-UNKNOWN: 74453f8561 62cbhi x5, x5, lbl63// CHECK-INST: cbhi x5, x5, lbl64// CHECK-DISASS: cbhi x5, x5, 0x4 <lbl>65// CHECK-ENCODING: [0bAAA00101,0b00AAAAAA,0x45,0xf4]66// CHECK-ENCODING: fixup A - offset: 0, value: lbl, kind: fixup_aarch64_pcrel_branch967// CHECK-ERROR: instruction requires: cmpbr68// CHECK-UNKNOWN: f4453f6569 70cbhs x2, x2, lbl71// CHECK-INST: cbhs x2, x2, lbl72// CHECK-DISASS: cbhs x2, x2, 0x4 <lbl>73// CHECK-ENCODING: [0bAAA00010,0b00AAAAAA,0x62,0xf4]74// CHECK-ENCODING: fixup A - offset: 0, value: lbl, kind: fixup_aarch64_pcrel_branch975// CHECK-ERROR: instruction requires: cmpbr76// CHECK-UNKNOWN: f4623f4277 78cbhs w5, w5, lbl79// CHECK-INST: cbhs w5, w5, lbl80// CHECK-DISASS: cbhs w5, w5, 0x4 <lbl>81// CHECK-ENCODING: [0bAAA00101,0b00AAAAAA,0x65,0x74]82// CHECK-ENCODING: fixup A - offset: 0, value: lbl, kind: fixup_aarch64_pcrel_branch983// CHECK-ERROR: instruction requires: cmpbr84// CHECK-UNKNOWN: 74653f2585 86cbeq w5, w5, lbl87// CHECK-INST: cbeq w5, w5, lbl88// CHECK-DISASS: cbeq w5, w5, 0x4 <lbl>89// CHECK-ENCODING: [0bAAA00101,0b00AAAAAA,0xc5,0x74]90// CHECK-ENCODING: fixup A - offset: 0, value: lbl, kind: fixup_aarch64_pcrel_branch991// CHECK-ERROR: instruction requires: cmpbr92// CHECK-UNKNOWN: 74c53f0593 94cbeq x5, x5, lbl95// CHECK-INST: cbeq x5, x5, lbl96// CHECK-DISASS: cbeq x5, x5, 0x4 <lbl>97// CHECK-ENCODING: [0bAAA00101,0b00AAAAAA,0xc5,0xf4]98// CHECK-ENCODING: fixup A - offset: 0, value: lbl, kind: fixup_aarch64_pcrel_branch999// CHECK-ERROR: instruction requires: cmpbr100// CHECK-UNKNOWN: f4c53ee5101 102cbne x2, x2, lbl103// CHECK-INST: cbne x2, x2, lbl104// CHECK-DISASS: cbne x2, x2, 0x4 <lbl>105// CHECK-ENCODING: [0bAAA00010,0b00AAAAAA,0xe2,0xf4]106// CHECK-ENCODING: fixup A - offset: 0, value: lbl, kind: fixup_aarch64_pcrel_branch9107// CHECK-ERROR: instruction requires: cmpbr108// CHECK-UNKNOWN: f4e23ec2109 110cbne w5, w5, lbl111// CHECK-INST: cbne w5, w5, lbl112// CHECK-DISASS: cbne w5, w5, 0x4 <lbl>113// CHECK-ENCODING: [0bAAA00101,0b00AAAAAA,0xe5,0x74]114// CHECK-ENCODING: fixup A - offset: 0, value: lbl, kind: fixup_aarch64_pcrel_branch9115// CHECK-ERROR: instruction requires: cmpbr116// CHECK-UNKNOWN: 74e53ea5117 118///119// CBH<XX>120///121 122cbhgt w5, w5, lbl123// CHECK-INST: cbhgt w5, w5, lbl124// CHECK-DISASS: cbhgt w5, w5, 0x4 <lbl>125// CHECK-ENCODING: [0bAAA00101,0b11AAAAAA,0x05,0x74]126// CHECK-ENCODING: fixup A - offset: 0, value: lbl, kind: fixup_aarch64_pcrel_branch9127// CHECK-ERROR: instruction requires: cmpbr128// CHECK-UNKNOWN: 7405fe85129 130cbhge w5, w5, lbl131// CHECK-INST: cbhge w5, w5, lbl132// CHECK-DISASS: cbhge w5, w5, 0x4 <lbl>133// CHECK-ENCODING: [0bAAA00101,0b11AAAAAA,0x25,0x74]134// CHECK-ENCODING: fixup A - offset: 0, value: lbl, kind: fixup_aarch64_pcrel_branch9135// CHECK-ERROR: instruction requires: cmpbr136// CHECK-UNKNOWN: 7425fe65137 138cbhhi w5, w5, lbl139// CHECK-INST: cbhhi w5, w5, lbl140// CHECK-DISASS: cbhhi w5, w5, 0x4 <lbl>141// CHECK-ENCODING: [0bAAA00101,0b11AAAAAA,0x45,0x74]142// CHECK-ENCODING: fixup A - offset: 0, value: lbl, kind: fixup_aarch64_pcrel_branch9143// CHECK-ERROR: instruction requires: cmpbr144// CHECK-UNKNOWN: 7445fe45145 146cbhhs w5, w5, lbl147// CHECK-INST: cbhhs w5, w5, lbl148// CHECK-DISASS: cbhhs w5, w5, 0x4 <lbl>149// CHECK-ENCODING: [0bAAA00101,0b11AAAAAA,0x65,0x74]150// CHECK-ENCODING: fixup A - offset: 0, value: lbl, kind: fixup_aarch64_pcrel_branch9151// CHECK-ERROR: instruction requires: cmpbr152// CHECK-UNKNOWN: 7465fe25153 154cbheq w5, w5, lbl155// CHECK-INST: cbheq w5, w5, lbl156// CHECK-DISASS: cbheq w5, w5, 0x4 <lbl>157// CHECK-ENCODING: [0bAAA00101,0b11AAAAAA,0xc5,0x74]158// CHECK-ENCODING: fixup A - offset: 0, value: lbl, kind: fixup_aarch64_pcrel_branch9159// CHECK-ERROR: instruction requires: cmpbr160// CHECK-UNKNOWN: 74c5fe05161 162cbhne w5, w5, lbl163// CHECK-INST: cbhne w5, w5, lbl164// CHECK-DISASS: cbhne w5, w5, 0x4 <lbl>165// CHECK-ENCODING: [0bAAA00101,0b11AAAAAA,0xe5,0x74]166// CHECK-ENCODING: fixup A - offset: 0, value: lbl, kind: fixup_aarch64_pcrel_branch9167// CHECK-ERROR: instruction requires: cmpbr168// CHECK-UNKNOWN: 74e5fde5169 170 171///172// CBB<XX>173///174cbbgt w5, w5, lbl175// CHECK-INST: cbbgt w5, w5, lbl176// CHECK-DISASS: cbbgt w5, w5, 0x4 <lbl>177// CHECK-ENCODING: [0bAAA00101,0b10AAAAAA,0x05,0x74]178// CHECK-ENCODING: fixup A - offset: 0, value: lbl, kind: fixup_aarch64_pcrel_branch9179// CHECK-ERROR: instruction requires: cmpbr180// CHECK-UNKNOWN: 7405bdc5181 182cbbge w5, w5, lbl183// CHECK-INST: cbbge w5, w5, lbl184// CHECK-DISASS: cbbge w5, w5, 0x4 <lbl>185// CHECK-ENCODING: [0bAAA00101,0b10AAAAAA,0x25,0x74]186// CHECK-ENCODING: fixup A - offset: 0, value: lbl, kind: fixup_aarch64_pcrel_branch9187// CHECK-ERROR: instruction requires: cmpbr188// CHECK-UNKNOWN: 7425bda5189 190cbbhi w5, w5, lbl191// CHECK-INST: cbbhi w5, w5, lbl192// CHECK-DISASS: cbbhi w5, w5, 0x4 <lbl>193// CHECK-ENCODING: [0bAAA00101,0b10AAAAAA,0x45,0x74]194// CHECK-ENCODING: fixup A - offset: 0, value: lbl, kind: fixup_aarch64_pcrel_branch9195// CHECK-ERROR: instruction requires: cmpbr196// CHECK-UNKNOWN: 7445bd85197 198cbbhs w5, w5, lbl199// CHECK-INST: cbbhs w5, w5, lbl200// CHECK-DISASS: cbbhs w5, w5, 0x4 <lbl>201// CHECK-ENCODING: [0bAAA00101,0b10AAAAAA,0x65,0x74]202// CHECK-ENCODING: fixup A - offset: 0, value: lbl, kind: fixup_aarch64_pcrel_branch9203// CHECK-ERROR: instruction requires: cmpbr204// CHECK-UNKNOWN: 7465bd65205 206cbbeq w5, w5, lbl207// CHECK-INST: cbbeq w5, w5, lbl208// CHECK-DISASS: cbbeq w5, w5, 0x4 <lbl>209// CHECK-ENCODING: [0bAAA00101,0b10AAAAAA,0xc5,0x74]210// CHECK-ENCODING: fixup A - offset: 0, value: lbl, kind: fixup_aarch64_pcrel_branch9211// CHECK-ERROR: instruction requires: cmpbr212// CHECK-UNKNOWN: 74c5bd45213 214cbbne w5, w5, lbl215// CHECK-INST: cbbne w5, w5, lbl216// CHECK-DISASS: cbbne w5, w5, 0x4 <lbl>217// CHECK-ENCODING: [0bAAA00101,0b10AAAAAA,0xe5,0x74]218// CHECK-ENCODING: fixup A - offset: 0, value: lbl, kind: fixup_aarch64_pcrel_branch9219// CHECK-ERROR: instruction requires: cmpbr220// CHECK-UNKNOWN: 74e5bd25221 222//------------------------------------------------------------------------------223// Compare & branch (Immediate)224//------------------------------------------------------------------------------225 226cbgt w5, #63, lbl227// CHECK-INST: cbgt w5, #63, lbl228// CHECK-DISASS: cbgt w5, #63, 0x4 <lbl>229// CHECK-ENCODING: [0bAAA00101,0b10AAAAAA,0x1f,0x75]230// CHECK-ENCODING: fixup A - offset: 0, value: lbl, kind: fixup_aarch64_pcrel_branch9231// CHECK-ERROR: instruction requires: cmpbr232// CHECK-UNKNOWN: 751fbd05233 234cbgt x5, #0, lbl235// CHECK-INST: cbgt x5, #0, lbl236// CHECK-DISASS: cbgt x5, #0, 0x4 <lbl>237// CHECK-ENCODING: [0bAAA00101,0b00AAAAAA,0x00,0xf5]238// CHECK-ENCODING: fixup A - offset: 0, value: lbl, kind: fixup_aarch64_pcrel_branch9239// CHECK-ERROR: instruction requires: cmpbr240// CHECK-UNKNOWN: f5003ce5241 242cbhi w5, #31, lbl243// CHECK-INST: cbhi w5, #31, lbl244// CHECK-DISASS: cbhi w5, #31, 0x4 <lbl>245// CHECK-ENCODING: [0bAAA00101,0b10AAAAAA,0x4f,0x75]246// CHECK-ENCODING: fixup A - offset: 0, value: lbl, kind: fixup_aarch64_pcrel_branch9247// CHECK-ERROR: instruction requires: cmpbr248// CHECK-UNKNOWN: 754fbcc5249 250cbhi x5, #31, lbl251// CHECK-INST: cbhi x5, #31, lbl252// CHECK-DISASS: cbhi x5, #31, 0x4 <lbl>253// CHECK-ENCODING: [0bAAA00101,0b10AAAAAA,0x4f,0xf5]254// CHECK-ENCODING: fixup A - offset: 0, value: lbl, kind: fixup_aarch64_pcrel_branch9255// CHECK-ERROR: instruction requires: cmpbr256// CHECK-UNKNOWN: f54fbca5257 258cblt w5, #63, lbl259// CHECK-INST: cblt w5, #63, lbl260// CHECK-DISASS: cblt w5, #63, 0x4 <lbl>261// CHECK-ENCODING: [0bAAA00101,0b10AAAAAA,0x3f,0x75]262// CHECK-ENCODING: fixup A - offset: 0, value: lbl, kind: fixup_aarch64_pcrel_branch9263// CHECK-ERROR: instruction requires: cmpbr264// CHECK-UNKNOWN: 753fbc85265 266cblt x5, #0, lbl267// CHECK-INST: cblt x5, #0, lbl268// CHECK-DISASS: cblt x5, #0, 0x4 <lbl>269// CHECK-ENCODING: [0bAAA00101,0b00AAAAAA,0x20,0xf5]270// CHECK-ENCODING: fixup A - offset: 0, value: lbl, kind: fixup_aarch64_pcrel_branch9271// CHECK-ERROR: instruction requires: cmpbr272// CHECK-UNKNOWN: f5203c65273 274cblo w5, #31, lbl275// CHECK-INST: cblo w5, #31, lbl276// CHECK-DISASS: cblo w5, #31, 0x4 <lbl>277// CHECK-ENCODING: [0bAAA00101,0b10AAAAAA,0x6f,0x75]278// CHECK-ENCODING: fixup A - offset: 0, value: lbl, kind: fixup_aarch64_pcrel_branch9279// CHECK-ERROR: instruction requires: cmpbr280// CHECK-UNKNOWN: 756fbc45281 282cblo x5, #31, lbl283// CHECK-INST: cblo x5, #31, lbl284// CHECK-DISASS: cblo x5, #31, 0x4 <lbl>285// CHECK-ENCODING: [0bAAA00101,0b10AAAAAA,0x6f,0xf5]286// CHECK-ENCODING: fixup A - offset: 0, value: lbl, kind: fixup_aarch64_pcrel_branch9287// CHECK-ERROR: instruction requires: cmpbr288// CHECK-UNKNOWN: f56fbc25289 290cbeq w5, #31, lbl291// CHECK-INST: cbeq w5, #31, lbl292// CHECK-DISASS: cbeq w5, #31, 0x4 <lbl>293// CHECK-ENCODING: [0bAAA00101,0b10AAAAAA,0xcf,0x75]294// CHECK-ENCODING: fixup A - offset: 0, value: lbl, kind: fixup_aarch64_pcrel_branch9295// CHECK-ERROR: instruction requires: cmpbr296// CHECK-UNKNOWN: 75cfbc05297 298cbeq x5, #31, lbl299// CHECK-INST: cbeq x5, #31, lbl300// CHECK-DISASS: cbeq x5, #31, 0x4 <lbl>301// CHECK-ENCODING: [0bAAA00101,0b10AAAAAA,0xcf,0xf5]302// CHECK-ENCODING: fixup A - offset: 0, value: lbl, kind: fixup_aarch64_pcrel_branch9303// CHECK-ERROR: instruction requires: cmpbr304// CHECK-UNKNOWN: f5cfbbe5305 306cbne w5, #31, lbl307// CHECK-INST: cbne w5, #31, lbl308// CHECK-DISASS: cbne w5, #31, 0x4 <lbl>309// CHECK-ENCODING: [0bAAA00101,0b10AAAAAA,0xef,0x75]310// CHECK-ENCODING: fixup A - offset: 0, value: lbl, kind: fixup_aarch64_pcrel_branch9311// CHECK-ERROR: instruction requires: cmpbr312// CHECK-UNKNOWN: 75efbbc5313 314cbne x5, #31, lbl315// CHECK-INST: cbne x5, #31, lbl316// CHECK-DISASS: cbne x5, #31, 0x4 <lbl>317// CHECK-ENCODING: [0bAAA00101,0b10AAAAAA,0xef,0xf5]318// CHECK-ENCODING: fixup A - offset: 0, value: lbl, kind: fixup_aarch64_pcrel_branch9319// CHECK-ERROR: instruction requires: cmpbr320// CHECK-UNKNOWN: f5efbba5321