xref: /llvm-project/lldb/test/Shell/Commands/command-disassemble-aarch64-extensions.s (revision 639a740035b732e9bc0f43f3f95d1ce3acf82e1b)
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 alphabetical order by extension name
13  aesd v0.16b, v0.16b                   // AEK_AES
14  bfadd z23.h, p3/m, z23.h, z13.h       // AEK_B16B16
15  bfdot v2.2s, v3.4h, v4.4h             // AEK_BF16
16  brb iall                              // AEK_BRBE
17  crc32b w0, w0, w0                     // AEK_CRC
18  // AEK_CRYPTO enables a combination of other features
19  smin x0, x0, #0                       // AEK_CSSC
20  sysp	#0, c2, c0, #0, x0, x1          // AEK_D128
21  sdot v0.2s, v1.8b, v2.8b              // AEK_DOTPROD
22  fmmla z0.s, z1.s, z2.s                // AEK_F32MM
23  fmmla z0.d, z1.d, z2.d                // AEK_F64MM
24  cfinv                                 // AEK_FLAGM
25  fcvt d0, s0                           // AEK_FP
26  fabs h1, h2                           // AEK_FP16
27  fmlal v0.2s, v1.2h, v2.2h             // AEK_FP16FML
28  bc.eq lbl                             // AEK_HBC
29  smmla v1.4s, v16.16b, v31.16b         // AEK_I8MM
30  ld64b x0, [x13]                       // AEK_LS64
31  ldaddab w0, w0, [sp]                  // AEK_LSE
32  ldclrp x1, x2, [x11]                  // AEK_LSE128
33  irg x0, x0                            // AEK_MTE
34  cpyfp [x0]!, [x1]!, x2!               // AEK_MOPS
35  pacia x0, x1                          // AEK_PAUTH
36  mrs x0, pmccntr_el0                   // AEK_PERFMON
37  cfp rctx, x0                          // AEK_PREDRES
38  psb csync                             // AEK_PROFILE/SPE
39  msr erxpfgctl_el1, x0                 // AEK_RAS
40  ldaprb w0, [x0, #0]                   // AEK_RCPC
41  stilp w26, w2, [x18]                  // AEK_RCPC3
42  sqrdmlah v0.4h, v1.4h, v2.4h          // AEK_RDM
43  mrs x0, rndr                          // AEK_RAND
44  sb                                    // AEK_SB
45  sha256h q0, q0, v0.4s                 // AEK_SHA2
46  bcax v0.16b, v0.16b, v0.16b, v0.16b   // AEK_SHA3
47  addp v0.4s, v0.4s, v0.4s              // AEK_SIMD (neon)
48  sm4e v0.4s, v0.4s                     // AEK_SM4
49  addha za0.s, p0/m, p0/m, z0.s         // AEK_SME
50  fadd za.h[w11, 7], {z12.h - z13.h}    // AEK_SMEF16F16
51  fmopa za0.d, p0/m, p0/m, z0.d, z0.d   // AEK_SMEF64F64
52  addha za0.d, p0/m, p0/m, z0.d         // AEK_SMEI16I64
53  add {z0.h, z1.h}, {z0.h, z1.h}, z0.h  // AEK_SME2
54  // AEK_SME2P1: see AEK_SVE2P1
55  mrs x2, ssbs                          // AEK_SSBS
56  abs z31.h, p7/m, z31.h                // AEK_SVE
57  sqdmlslbt z0.d, z1.s, z31.s           // AEK_SVE2
58  aesd z0.b, z0.b, z31.b                // AEK_SVE2AES
59  bdep z0.b, z1.b, z31.b                // AEK_SVE2BITPERM
60  rax1 z0.d, z0.d, z0.d                 // AEK_SVE2SHA3
61  sm4e z0.s, z0.s, z0.s                 // AEK_SVE2SM4
62  addqv   v0.8h, p0, z0.h               // AEK_SVE2P1 / AEK_SME2P1
63  rcwswp x0, x1, [x2]                   // AEK_THE
64  tcommit                               // AEK_TME
65lbl:
66.fn_end:
67  .size   fn, .fn_end-fn
68
69# CHECK: command-disassemble-aarch64-extensions.s.tmp`fn:
70# CHECK-NEXT: aesd   v0.16b, v0.16b
71# CHECK-NEXT: bfadd  z23.h, p3/m, z23.h, z13.h
72# CHECK-NEXT: bfdot  v2.2s, v3.4h, v4.4h
73# CHECK-NEXT: brb    iall
74# CHECK-NEXT: crc32b w0, w0, w0
75# CHECK-NEXT: smin   x0, x0, #0
76# CHECK-NEXT: sysp   #0x0, c2, c0, #0x0, x0, x1
77# CHECK-NEXT: sdot   v0.2s, v1.8b, v2.8b
78# CHECK-NEXT: fmmla  z0.s, z1.s, z2.s
79# CHECK-NEXT: fmmla  z0.d, z1.d, z2.d
80# CHECK-NEXT: cfinv
81# CHECK-NEXT: fcvt   d0, s0
82# CHECK-NEXT: fabs   h1, h2
83# CHECK-NEXT: fmlal  v0.2s, v1.2h, v2.2h
84# CHECK-NEXT: bc.eq 0xc8
85# CHECK-NEXT: smmla  v1.4s, v16.16b, v31.16b
86# CHECK-NEXT: ld64b  x0, [x13]
87# CHECK-NEXT: ldaddab w0, w0, [sp]
88# CHECK-NEXT: ldclrp  x1, x2, [x11]
89# CHECK-NEXT: irg    x0, x0
90# CHECK-NEXT: cpyfp  [x0]!, [x1]!, x2!
91# CHECK-NEXT: pacia  x0, x1
92# CHECK-NEXT: mrs    x0, PMCCNTR_EL0
93# CHECK-NEXT: cfp    rctx, x0
94# CHECK-NEXT: psb    csync
95# CHECK-NEXT: msr    ERXPFGCTL_EL1, x0
96# CHECK-NEXT: ldaprb w0, [x0]
97# CHECK-NEXT: stilp w26, w2, [x18]
98# CHECK-NEXT: sqrdmlah v0.4h, v1.4h, v2.4h
99# CHECK-NEXT: mrs    x0, RNDR
100# CHECK-NEXT: sb
101# CHECK-NEXT: sha256h q0, q0, v0.4s
102# CHECK-NEXT: bcax   v0.16b, v0.16b, v0.16b, v0.16b
103# CHECK-NEXT: addp   v0.4s, v0.4s, v0.4s
104# CHECK-NEXT: sm4e   v0.4s, v0.4s
105# CHECK-NEXT: addha  za0.s, p0/m, p0/m, z0.s
106# CHECK-NEXT: fadd   za.h[w11, 7, vgx2], { z12.h, z13.h }
107# CHECK-NEXT: fmopa  za0.d, p0/m, p0/m, z0.d, z0.d
108# CHECK-NEXT: addha  za0.d, p0/m, p0/m, z0.d
109# CHECK-NEXT: add    { z0.h, z1.h }, { z0.h, z1.h }, z0.h
110# CHECK-NEXT: mrs    x2, SSBS
111# CHECK-NEXT: abs    z31.h, p7/m, z31.h
112# CHECK-NEXT: sqdmlslbt z0.d, z1.s, z31.s
113# CHECK-NEXT: aesd   z0.b, z0.b, z31.b
114# CHECK-NEXT: bdep   z0.b, z1.b, z31.b
115# CHECK-NEXT: rax1   z0.d, z0.d, z0.d
116# CHECK-NEXT: sm4e   z0.s, z0.s, z0.s
117# CHECK-NEXT: addqv  v0.8h, p0, z0.h
118# CHECK-NEXT: rcwswp x0, x1, [x2]
119# CHECK-NEXT: tcommit
120