1# REQUIRES: aarch64
2
3# This checks that lldb's disassembler enables every extension that an AArch64
4# target could have.
5
6# RUN: llvm-mc -filetype=obj -triple aarch64-linux-gnueabihf %s -o %t --mattr=+all
7# RUN: %lldb %t -o "disassemble -n fn" -o exit 2>&1 | FileCheck %s
8
9.globl  fn
10.type   fn, @function
11fn:
12  // These are in the same order as llvm/include/llvm/Support/AArch64TargetParser.def
13  crc32b w0, w0, w0                   // CRC
14  ldaddab w0, w0, [sp]                // LSE
15  sqrdmlah v0.4h, v1.4h, v2.4h        // RDM
16  // CRYPTO enables a combination of other features
17  sm4e v0.4s, v0.4s                   // SM4
18  bcax v0.16b, v0.16b, v0.16b, v0.16b // SHA3
19  sha256h q0, q0, v0.4s               // SHA256
20  aesd v0.16b, v0.16b                 // AES
21  sdot v0.2s, v1.8b, v2.8b            // DOTPROD
22  fcvt d0, s0                         // FP
23  addp v0.4s, v0.4s, v0.4s            // SIMD (neon)
24  fabs h1, h2                         // FP16
25  fmlal v0.2s, v1.2h, v2.2h           // FP16FML
26  psb csync                           // PROFILE/SPE
27  msr erxpfgctl_el1, x0               // RAS
28  abs z31.h, p7/m, z31.h              // SVE
29  sqdmlslbt z0.d, z1.s, z31.s         // SVE2
30  aesd z0.b, z0.b, z31.b              // SVE2AES
31  sm4e z0.s, z0.s, z0.s               // SVE2SM4
32  rax1 z0.d, z0.d, z0.d               // SVE2SHA3
33  bdep z0.b, z1.b, z31.b              // SVE2BITPERM
34  ldaprb w0, [x0, #0]                 // RCPC
35  mrs x0, rndr                        // RAND
36  irg x0, x0                          // MTE
37  mrs x2, ssbs                        // SSBS
38  sb                                  // SB
39  cfp rctx, x0                        // PREDRES
40  bfdot v2.2s, v3.4h, v4.4h           // BF16
41  smmla v1.4s, v16.16b, v31.16b       // I8MM
42  fmmla z0.s, z1.s, z2.s              // F32MM
43  fmmla z0.d, z1.d, z2.d              // F64MM
44  tcommit                             // TME
45  ld64b x0, [x13]                     // LS64
46  brb iall                            // BRBE
47  pacia x0, x1                        // PAUTH
48  cfinv                               // FLAGM
49  addha za0.s, p0/m, p0/m, z0.s       // SME
50  fmopa za0.d, p0/m, p0/m, z0.d, z0.d // SMEF64
51  addha za0.d, p0/m, p0/m, z0.d       // SMEI64
52lbl:
53  bc.eq lbl                           // HBC
54  cpyfp [x0]!, [x1]!, x2!             // MOPS
55  mrs x0, pmccntr_el0                 // PERFMON
56.fn_end:
57  .size   fn, .fn_end-fn
58
59# CHECK: command-disassemble-aarch64-extensions.s.tmp`fn:
60# CHECK: crc32b w0, w0, w0
61# CHECK: ldaddab w0, w0, [sp]
62# CHECK: sqrdmlah v0.4h, v1.4h, v2.4h
63# CHECK: sm4e   v0.4s, v0.4s
64# CHECK: bcax   v0.16b, v0.16b, v0.16b, v0.16b
65# CHECK: sha256h q0, q0, v0.4s
66# CHECK: aesd   v0.16b, v0.16b
67# CHECK: sdot   v0.2s, v1.8b, v2.8b
68# CHECK: fcvt   d0, s0
69# CHECK: addp   v0.4s, v0.4s, v0.4s
70# CHECK: fabs   h1, h2
71# CHECK: fmlal  v0.2s, v1.2h, v2.2h
72# CHECK: psb    csync
73# CHECK: msr    ERXPFGCTL_EL1, x0
74# CHECK: abs    z31.h, p7/m, z31.h
75# CHECK: sqdmlslbt z0.d, z1.s, z31.s
76# CHECK: aesd   z0.b, z0.b, z31.b
77# CHECK: sm4e   z0.s, z0.s, z0.s
78# CHECK: rax1   z0.d, z0.d, z0.d
79# CHECK: bdep   z0.b, z1.b, z31.b
80# CHECK: ldaprb w0, [x0]
81# CHECK: mrs    x0, RNDR
82# CHECK: irg    x0, x0
83# CHECK: mrs    x2, SSBS
84# CHECK: sb
85# CHECK: cfp    rctx, x0
86# CHECK: bfdot  v2.2s, v3.4h, v4.4h
87# CHECK: smmla  v1.4s, v16.16b, v31.16b
88# CHECK: fmmla  z0.s, z1.s, z2.s
89# CHECK: fmmla  z0.d, z1.d, z2.d
90# CHECK: tcommit
91# CHECK: ld64b  x0, [x13]
92# CHECK: brb    iall
93# CHECK: pacia  x0, x1
94# CHECK: cfinv
95# CHECK: addha  za0.s, p0/m, p0/m, z0.s
96# CHECK: fmopa  za0.d, p0/m, p0/m, z0.d, z0.d
97# CHECK: addha  za0.d, p0/m, p0/m, z0.d
98# CHECK: bc.eq  0x98
99# CHECK: cpyfp  [x0]!, [x1]!, x2!
100# CHECK: mrs    x0, PMCCNTR_EL0
101