xref: /aosp_15_r20/external/llvm/lib/Target/AArch64/AArch64SchedA57.td (revision 9880d6810fe72a1726cb53787c6711e909410d58)
1*9880d681SAndroid Build Coastguard Worker//=- AArch64SchedA57.td - ARM Cortex-A57 Scheduling Defs -----*- tablegen -*-=//
2*9880d681SAndroid Build Coastguard Worker//
3*9880d681SAndroid Build Coastguard Worker//                     The LLVM Compiler Infrastructure
4*9880d681SAndroid Build Coastguard Worker//
5*9880d681SAndroid Build Coastguard Worker// This file is distributed under the University of Illinois Open Source
6*9880d681SAndroid Build Coastguard Worker// License. See LICENSE.TXT for details.
7*9880d681SAndroid Build Coastguard Worker//
8*9880d681SAndroid Build Coastguard Worker//===----------------------------------------------------------------------===//
9*9880d681SAndroid Build Coastguard Worker//
10*9880d681SAndroid Build Coastguard Worker// This file defines the machine model for ARM Cortex-A57 to support
11*9880d681SAndroid Build Coastguard Worker// instruction scheduling and other instruction cost heuristics.
12*9880d681SAndroid Build Coastguard Worker//
13*9880d681SAndroid Build Coastguard Worker//===----------------------------------------------------------------------===//
14*9880d681SAndroid Build Coastguard Worker
15*9880d681SAndroid Build Coastguard Worker//===----------------------------------------------------------------------===//
16*9880d681SAndroid Build Coastguard Worker// The Cortex-A57 is a traditional superscaler microprocessor with a
17*9880d681SAndroid Build Coastguard Worker// conservative 3-wide in-order stage for decode and dispatch. Combined with the
18*9880d681SAndroid Build Coastguard Worker// much wider out-of-order issue stage, this produced a need to carefully
19*9880d681SAndroid Build Coastguard Worker// schedule micro-ops so that all three decoded each cycle are successfully
20*9880d681SAndroid Build Coastguard Worker// issued as the reservation station(s) simply don't stay occupied for long.
21*9880d681SAndroid Build Coastguard Worker// Therefore, IssueWidth is set to the narrower of the two at three, while still
22*9880d681SAndroid Build Coastguard Worker// modeling the machine as out-of-order.
23*9880d681SAndroid Build Coastguard Worker
24*9880d681SAndroid Build Coastguard Workerdef CortexA57Model : SchedMachineModel {
25*9880d681SAndroid Build Coastguard Worker  let IssueWidth        =   3; // 3-way decode and dispatch
26*9880d681SAndroid Build Coastguard Worker  let MicroOpBufferSize = 128; // 128 micro-op re-order buffer
27*9880d681SAndroid Build Coastguard Worker  let LoadLatency       =   4; // Optimistic load latency
28*9880d681SAndroid Build Coastguard Worker  let MispredictPenalty =  14; // Fetch + Decode/Rename/Dispatch + Branch
29*9880d681SAndroid Build Coastguard Worker
30*9880d681SAndroid Build Coastguard Worker  // Enable partial & runtime unrolling. The magic number is chosen based on
31*9880d681SAndroid Build Coastguard Worker  // experiments and benchmarking data.
32*9880d681SAndroid Build Coastguard Worker  let LoopMicroOpBufferSize = 16;
33*9880d681SAndroid Build Coastguard Worker  let CompleteModel = 1;
34*9880d681SAndroid Build Coastguard Worker}
35*9880d681SAndroid Build Coastguard Worker
36*9880d681SAndroid Build Coastguard Worker//===----------------------------------------------------------------------===//
37*9880d681SAndroid Build Coastguard Worker// Define each kind of processor resource and number available on Cortex-A57.
38*9880d681SAndroid Build Coastguard Worker// Cortex A-57 has 8 pipelines that each has its own 8-entry queue where
39*9880d681SAndroid Build Coastguard Worker// micro-ops wait for their operands and then issue out-of-order.
40*9880d681SAndroid Build Coastguard Worker
41*9880d681SAndroid Build Coastguard Workerdef A57UnitB : ProcResource<1>;  // Type B micro-ops
42*9880d681SAndroid Build Coastguard Workerdef A57UnitI : ProcResource<2>;  // Type I micro-ops
43*9880d681SAndroid Build Coastguard Workerdef A57UnitM : ProcResource<1>;  // Type M micro-ops
44*9880d681SAndroid Build Coastguard Workerdef A57UnitL : ProcResource<1>;  // Type L micro-ops
45*9880d681SAndroid Build Coastguard Workerdef A57UnitS : ProcResource<1>;  // Type S micro-ops
46*9880d681SAndroid Build Coastguard Workerdef A57UnitX : ProcResource<1>;  // Type X micro-ops
47*9880d681SAndroid Build Coastguard Workerdef A57UnitW : ProcResource<1>;  // Type W micro-ops
48*9880d681SAndroid Build Coastguard Workerlet SchedModel = CortexA57Model in {
49*9880d681SAndroid Build Coastguard Worker  def A57UnitV : ProcResGroup<[A57UnitX, A57UnitW]>;    // Type V micro-ops
50*9880d681SAndroid Build Coastguard Worker}
51*9880d681SAndroid Build Coastguard Worker
52*9880d681SAndroid Build Coastguard Workerlet SchedModel = CortexA57Model in {
53*9880d681SAndroid Build Coastguard Worker
54*9880d681SAndroid Build Coastguard Worker//===----------------------------------------------------------------------===//
55*9880d681SAndroid Build Coastguard Worker// Define customized scheduler read/write types specific to the Cortex-A57.
56*9880d681SAndroid Build Coastguard Worker
57*9880d681SAndroid Build Coastguard Workerinclude "AArch64SchedA57WriteRes.td"
58*9880d681SAndroid Build Coastguard Worker
59*9880d681SAndroid Build Coastguard Worker//===----------------------------------------------------------------------===//
60*9880d681SAndroid Build Coastguard Worker// Map the target-defined scheduler read/write resources and latency for
61*9880d681SAndroid Build Coastguard Worker// Cortex-A57. The Cortex-A57 types are directly associated with resources, so
62*9880d681SAndroid Build Coastguard Worker// defining the aliases precludes the need for mapping them using WriteRes. The
63*9880d681SAndroid Build Coastguard Worker// aliases are sufficient for creating a coarse, working model. As the model
64*9880d681SAndroid Build Coastguard Worker// evolves, InstRWs will be used to override some of these SchedAliases.
65*9880d681SAndroid Build Coastguard Worker//
66*9880d681SAndroid Build Coastguard Worker// WARNING: Using SchedAliases is convenient and works well for latency and
67*9880d681SAndroid Build Coastguard Worker//          resource lookup for instructions. However, this creates an entry in
68*9880d681SAndroid Build Coastguard Worker//          AArch64WriteLatencyTable with a WriteResourceID of 0, breaking
69*9880d681SAndroid Build Coastguard Worker//          any SchedReadAdvance since the lookup will fail.
70*9880d681SAndroid Build Coastguard Worker
71*9880d681SAndroid Build Coastguard Workerdef : SchedAlias<WriteImm,   A57Write_1cyc_1I>;
72*9880d681SAndroid Build Coastguard Workerdef : SchedAlias<WriteI,     A57Write_1cyc_1I>;
73*9880d681SAndroid Build Coastguard Workerdef : SchedAlias<WriteISReg, A57Write_2cyc_1M>;
74*9880d681SAndroid Build Coastguard Workerdef : SchedAlias<WriteIEReg, A57Write_2cyc_1M>;
75*9880d681SAndroid Build Coastguard Workerdef : SchedAlias<WriteExtr,  A57Write_1cyc_1I>;
76*9880d681SAndroid Build Coastguard Workerdef : SchedAlias<WriteIS,    A57Write_1cyc_1I>;
77*9880d681SAndroid Build Coastguard Workerdef : SchedAlias<WriteID32,  A57Write_19cyc_1M>;
78*9880d681SAndroid Build Coastguard Workerdef : SchedAlias<WriteID64,  A57Write_35cyc_1M>;
79*9880d681SAndroid Build Coastguard Workerdef : WriteRes<WriteIM32, [A57UnitM]> { let Latency = 3; }
80*9880d681SAndroid Build Coastguard Workerdef : WriteRes<WriteIM64, [A57UnitM]> { let Latency = 5; }
81*9880d681SAndroid Build Coastguard Workerdef : SchedAlias<WriteBr,    A57Write_1cyc_1B>;
82*9880d681SAndroid Build Coastguard Workerdef : SchedAlias<WriteBrReg, A57Write_1cyc_1B>;
83*9880d681SAndroid Build Coastguard Workerdef : SchedAlias<WriteLD,    A57Write_4cyc_1L>;
84*9880d681SAndroid Build Coastguard Workerdef : SchedAlias<WriteST,    A57Write_1cyc_1S>;
85*9880d681SAndroid Build Coastguard Workerdef : SchedAlias<WriteSTP,   A57Write_1cyc_1S>;
86*9880d681SAndroid Build Coastguard Workerdef : SchedAlias<WriteAdr,   A57Write_1cyc_1I>;
87*9880d681SAndroid Build Coastguard Workerdef : SchedAlias<WriteLDIdx, A57Write_4cyc_1I_1L>;
88*9880d681SAndroid Build Coastguard Workerdef : SchedAlias<WriteSTIdx, A57Write_1cyc_1I_1S>;
89*9880d681SAndroid Build Coastguard Workerdef : SchedAlias<WriteF,     A57Write_3cyc_1V>;
90*9880d681SAndroid Build Coastguard Workerdef : SchedAlias<WriteFCmp,  A57Write_3cyc_1V>;
91*9880d681SAndroid Build Coastguard Workerdef : SchedAlias<WriteFCvt,  A57Write_5cyc_1V>;
92*9880d681SAndroid Build Coastguard Workerdef : SchedAlias<WriteFCopy, A57Write_5cyc_1L>;
93*9880d681SAndroid Build Coastguard Workerdef : SchedAlias<WriteFImm,  A57Write_3cyc_1V>;
94*9880d681SAndroid Build Coastguard Workerdef : SchedAlias<WriteFMul,  A57Write_5cyc_1V>;
95*9880d681SAndroid Build Coastguard Workerdef : SchedAlias<WriteFDiv,  A57Write_18cyc_1X>;
96*9880d681SAndroid Build Coastguard Workerdef : SchedAlias<WriteV,     A57Write_3cyc_1V>;
97*9880d681SAndroid Build Coastguard Workerdef : SchedAlias<WriteVLD,   A57Write_5cyc_1L>;
98*9880d681SAndroid Build Coastguard Workerdef : SchedAlias<WriteVST,   A57Write_1cyc_1S>;
99*9880d681SAndroid Build Coastguard Worker
100*9880d681SAndroid Build Coastguard Workerdef : WriteRes<WriteAtomic,  []> { let Unsupported = 1; }
101*9880d681SAndroid Build Coastguard Worker
102*9880d681SAndroid Build Coastguard Workerdef : WriteRes<WriteSys,     []> { let Latency = 1; }
103*9880d681SAndroid Build Coastguard Workerdef : WriteRes<WriteBarrier, []> { let Latency = 1; }
104*9880d681SAndroid Build Coastguard Workerdef : WriteRes<WriteHint,    []> { let Latency = 1; }
105*9880d681SAndroid Build Coastguard Worker
106*9880d681SAndroid Build Coastguard Workerdef : WriteRes<WriteLDHi,    []> { let Latency = 4; }
107*9880d681SAndroid Build Coastguard Worker
108*9880d681SAndroid Build Coastguard Worker// Forwarding logic is only modeled for multiply and accumulate
109*9880d681SAndroid Build Coastguard Workerdef : ReadAdvance<ReadI,       0>;
110*9880d681SAndroid Build Coastguard Workerdef : ReadAdvance<ReadISReg,   0>;
111*9880d681SAndroid Build Coastguard Workerdef : ReadAdvance<ReadIEReg,   0>;
112*9880d681SAndroid Build Coastguard Workerdef : ReadAdvance<ReadIM,      0>;
113*9880d681SAndroid Build Coastguard Workerdef : ReadAdvance<ReadIMA,     2, [WriteIM32, WriteIM64]>;
114*9880d681SAndroid Build Coastguard Workerdef : ReadAdvance<ReadID,      0>;
115*9880d681SAndroid Build Coastguard Workerdef : ReadAdvance<ReadExtrHi,  0>;
116*9880d681SAndroid Build Coastguard Workerdef : ReadAdvance<ReadAdrBase, 0>;
117*9880d681SAndroid Build Coastguard Workerdef : ReadAdvance<ReadVLD,     0>;
118*9880d681SAndroid Build Coastguard Worker
119*9880d681SAndroid Build Coastguard Worker
120*9880d681SAndroid Build Coastguard Worker//===----------------------------------------------------------------------===//
121*9880d681SAndroid Build Coastguard Worker// Specialize the coarse model by associating instruction groups with the
122*9880d681SAndroid Build Coastguard Worker// subtarget-defined types. As the modeled is refined, this will override most
123*9880d681SAndroid Build Coastguard Worker// of the above ShchedAlias mappings.
124*9880d681SAndroid Build Coastguard Worker
125*9880d681SAndroid Build Coastguard Worker// Miscellaneous
126*9880d681SAndroid Build Coastguard Worker// -----------------------------------------------------------------------------
127*9880d681SAndroid Build Coastguard Worker
128*9880d681SAndroid Build Coastguard Workerdef : InstRW<[WriteI], (instrs COPY)>;
129*9880d681SAndroid Build Coastguard Worker
130*9880d681SAndroid Build Coastguard Worker
131*9880d681SAndroid Build Coastguard Worker// Branch Instructions
132*9880d681SAndroid Build Coastguard Worker// -----------------------------------------------------------------------------
133*9880d681SAndroid Build Coastguard Worker
134*9880d681SAndroid Build Coastguard Workerdef : InstRW<[A57Write_1cyc_1B_1I], (instrs BL)>;
135*9880d681SAndroid Build Coastguard Workerdef : InstRW<[A57Write_2cyc_1B_1I], (instrs BLR)>;
136*9880d681SAndroid Build Coastguard Worker
137*9880d681SAndroid Build Coastguard Worker
138*9880d681SAndroid Build Coastguard Worker// Shifted Register with Shift == 0
139*9880d681SAndroid Build Coastguard Worker// ----------------------------------------------------------------------------
140*9880d681SAndroid Build Coastguard Worker
141*9880d681SAndroid Build Coastguard Workerdef A57WriteISReg : SchedWriteVariant<[
142*9880d681SAndroid Build Coastguard Worker       SchedVar<RegShiftedPred, [WriteISReg]>,
143*9880d681SAndroid Build Coastguard Worker       SchedVar<NoSchedPred, [WriteI]>]>;
144*9880d681SAndroid Build Coastguard Workerdef : InstRW<[A57WriteISReg], (instregex ".*rs$")>;
145*9880d681SAndroid Build Coastguard Worker
146*9880d681SAndroid Build Coastguard Worker
147*9880d681SAndroid Build Coastguard Worker// Divide and Multiply Instructions
148*9880d681SAndroid Build Coastguard Worker// -----------------------------------------------------------------------------
149*9880d681SAndroid Build Coastguard Worker
150*9880d681SAndroid Build Coastguard Worker// Multiply high
151*9880d681SAndroid Build Coastguard Workerdef : InstRW<[A57Write_6cyc_1M], (instrs SMULHrr, UMULHrr)>;
152*9880d681SAndroid Build Coastguard Worker
153*9880d681SAndroid Build Coastguard Worker
154*9880d681SAndroid Build Coastguard Worker// Miscellaneous Data-Processing Instructions
155*9880d681SAndroid Build Coastguard Worker// -----------------------------------------------------------------------------
156*9880d681SAndroid Build Coastguard Worker
157*9880d681SAndroid Build Coastguard Workerdef : InstRW<[A57Write_1cyc_1I],    (instrs EXTRWrri)>;
158*9880d681SAndroid Build Coastguard Workerdef : InstRW<[A57Write_3cyc_1I_1M], (instrs EXTRXrri)>;
159*9880d681SAndroid Build Coastguard Workerdef : InstRW<[A57Write_2cyc_1M],    (instregex "BFM")>;
160*9880d681SAndroid Build Coastguard Worker
161*9880d681SAndroid Build Coastguard Worker
162*9880d681SAndroid Build Coastguard Worker// Cryptography Extensions
163*9880d681SAndroid Build Coastguard Worker// -----------------------------------------------------------------------------
164*9880d681SAndroid Build Coastguard Worker
165*9880d681SAndroid Build Coastguard Workerdef : InstRW<[A57Write_3cyc_1W], (instregex "^AES")>;
166*9880d681SAndroid Build Coastguard Workerdef : InstRW<[A57Write_6cyc_2V], (instregex "^SHA1SU0")>;
167*9880d681SAndroid Build Coastguard Workerdef : InstRW<[A57Write_3cyc_1W], (instregex "^SHA1(H|SU1)")>;
168*9880d681SAndroid Build Coastguard Workerdef : InstRW<[A57Write_6cyc_2W], (instregex "^SHA1[CMP]")>;
169*9880d681SAndroid Build Coastguard Workerdef : InstRW<[A57Write_3cyc_1W], (instregex "^SHA256SU0")>;
170*9880d681SAndroid Build Coastguard Workerdef : InstRW<[A57Write_6cyc_2W], (instregex "^SHA256(H|H2|SU1)")>;
171*9880d681SAndroid Build Coastguard Workerdef : InstRW<[A57Write_3cyc_1W], (instregex "^CRC32")>;
172*9880d681SAndroid Build Coastguard Worker
173*9880d681SAndroid Build Coastguard Worker
174*9880d681SAndroid Build Coastguard Worker// Vector Load
175*9880d681SAndroid Build Coastguard Worker// -----------------------------------------------------------------------------
176*9880d681SAndroid Build Coastguard Worker
177*9880d681SAndroid Build Coastguard Workerdef : InstRW<[A57Write_8cyc_1L_1V],           (instregex "LD1i(8|16|32)$")>;
178*9880d681SAndroid Build Coastguard Workerdef : InstRW<[A57Write_8cyc_1L_1V, WriteAdr], (instregex "LD1i(8|16|32)_POST$")>;
179*9880d681SAndroid Build Coastguard Workerdef : InstRW<[A57Write_5cyc_1L],            (instregex "LD1i(64)$")>;
180*9880d681SAndroid Build Coastguard Workerdef : InstRW<[A57Write_5cyc_1L, WriteAdr],  (instregex "LD1i(64)_POST$")>;
181*9880d681SAndroid Build Coastguard Worker
182*9880d681SAndroid Build Coastguard Workerdef : InstRW<[A57Write_8cyc_1L_1V],           (instregex "LD1Rv(8b|4h|2s)$")>;
183*9880d681SAndroid Build Coastguard Workerdef : InstRW<[A57Write_8cyc_1L_1V, WriteAdr], (instregex "LD1Rv(8b|4h|2s)_POST$")>;
184*9880d681SAndroid Build Coastguard Workerdef : InstRW<[A57Write_5cyc_1L],            (instregex "LD1Rv(1d)$")>;
185*9880d681SAndroid Build Coastguard Workerdef : InstRW<[A57Write_5cyc_1L, WriteAdr],  (instregex "LD1Rv(1d)_POST$")>;
186*9880d681SAndroid Build Coastguard Workerdef : InstRW<[A57Write_8cyc_1L_1V],           (instregex "LD1Rv(16b|8h|4s|2d)$")>;
187*9880d681SAndroid Build Coastguard Workerdef : InstRW<[A57Write_8cyc_1L_1V, WriteAdr], (instregex "LD1Rv(16b|8h|4s|2d)_POST$")>;
188*9880d681SAndroid Build Coastguard Worker
189*9880d681SAndroid Build Coastguard Workerdef : InstRW<[A57Write_5cyc_1L],              (instregex "LD1Onev(8b|4h|2s|1d)$")>;
190*9880d681SAndroid Build Coastguard Workerdef : InstRW<[A57Write_5cyc_1L, WriteAdr],    (instregex "LD1Onev(8b|4h|2s|1d)_POST$")>;
191*9880d681SAndroid Build Coastguard Workerdef : InstRW<[A57Write_5cyc_1L],              (instregex "LD1Onev(16b|8h|4s|2d)$")>;
192*9880d681SAndroid Build Coastguard Workerdef : InstRW<[A57Write_5cyc_1L, WriteAdr],    (instregex "LD1Onev(16b|8h|4s|2d)_POST$")>;
193*9880d681SAndroid Build Coastguard Workerdef : InstRW<[A57Write_5cyc_1L],              (instregex "LD1Twov(8b|4h|2s|1d)$")>;
194*9880d681SAndroid Build Coastguard Workerdef : InstRW<[A57Write_5cyc_1L, WriteAdr],    (instregex "LD1Twov(8b|4h|2s|1d)_POST$")>;
195*9880d681SAndroid Build Coastguard Workerdef : InstRW<[A57Write_6cyc_2L],             (instregex "LD1Twov(16b|8h|4s|2d)$")>;
196*9880d681SAndroid Build Coastguard Workerdef : InstRW<[A57Write_6cyc_2L, WriteAdr],   (instregex "LD1Twov(16b|8h|4s|2d)_POST$")>;
197*9880d681SAndroid Build Coastguard Workerdef : InstRW<[A57Write_6cyc_2L],             (instregex "LD1Threev(8b|4h|2s|1d)$")>;
198*9880d681SAndroid Build Coastguard Workerdef : InstRW<[A57Write_6cyc_2L, WriteAdr],   (instregex "LD1Threev(8b|4h|2s|1d)_POST$")>;
199*9880d681SAndroid Build Coastguard Workerdef : InstRW<[A57Write_7cyc_3L],            (instregex "LD1Threev(16b|8h|4s|2d)$")>;
200*9880d681SAndroid Build Coastguard Workerdef : InstRW<[A57Write_7cyc_3L, WriteAdr],  (instregex "LD1Threev(16b|8h|4s|2d)_POST$")>;
201*9880d681SAndroid Build Coastguard Workerdef : InstRW<[A57Write_6cyc_2L],             (instregex "LD1Fourv(8b|4h|2s|1d)$")>;
202*9880d681SAndroid Build Coastguard Workerdef : InstRW<[A57Write_6cyc_2L, WriteAdr],   (instregex "LD1Fourv(8b|4h|2s|1d)_POST$")>;
203*9880d681SAndroid Build Coastguard Workerdef : InstRW<[A57Write_8cyc_4L],           (instregex "LD1Fourv(16b|8h|4s|2d)$")>;
204*9880d681SAndroid Build Coastguard Workerdef : InstRW<[A57Write_8cyc_4L, WriteAdr], (instregex "LD1Fourv(16b|8h|4s|2d)_POST$")>;
205*9880d681SAndroid Build Coastguard Worker
206*9880d681SAndroid Build Coastguard Workerdef : InstRW<[A57Write_8cyc_1L_2V],           (instregex "LD2i(8|16)$")>;
207*9880d681SAndroid Build Coastguard Workerdef : InstRW<[A57Write_8cyc_1L_2V, WriteAdr], (instregex "LD2i(8|16)_POST$")>;
208*9880d681SAndroid Build Coastguard Workerdef : InstRW<[A57Write_6cyc_2L],            (instregex "LD2i(32)$")>;
209*9880d681SAndroid Build Coastguard Workerdef : InstRW<[A57Write_6cyc_2L, WriteAdr],  (instregex "LD2i(32)_POST$")>;
210*9880d681SAndroid Build Coastguard Workerdef : InstRW<[A57Write_8cyc_1L_1V],            (instregex "LD2i(64)$")>;
211*9880d681SAndroid Build Coastguard Workerdef : InstRW<[A57Write_8cyc_1L_1V, WriteAdr],  (instregex "LD2i(64)_POST$")>;
212*9880d681SAndroid Build Coastguard Worker
213*9880d681SAndroid Build Coastguard Workerdef : InstRW<[A57Write_8cyc_1L_1V],            (instregex "LD2Rv(8b|4h|2s)$")>;
214*9880d681SAndroid Build Coastguard Workerdef : InstRW<[A57Write_8cyc_1L_1V, WriteAdr],  (instregex "LD2Rv(8b|4h|2s)_POST$")>;
215*9880d681SAndroid Build Coastguard Workerdef : InstRW<[A57Write_5cyc_1L],             (instregex "LD2Rv(1d)$")>;
216*9880d681SAndroid Build Coastguard Workerdef : InstRW<[A57Write_5cyc_1L, WriteAdr],   (instregex "LD2Rv(1d)_POST$")>;
217*9880d681SAndroid Build Coastguard Workerdef : InstRW<[A57Write_8cyc_1L_2V],           (instregex "LD2Rv(16b|8h|4s|2d)$")>;
218*9880d681SAndroid Build Coastguard Workerdef : InstRW<[A57Write_8cyc_1L_2V, WriteAdr], (instregex "LD2Rv(16b|8h|4s|2d)_POST$")>;
219*9880d681SAndroid Build Coastguard Worker
220*9880d681SAndroid Build Coastguard Workerdef : InstRW<[A57Write_8cyc_1L_1V],             (instregex "LD2Twov(8b|4h|2s)$")>;
221*9880d681SAndroid Build Coastguard Workerdef : InstRW<[A57Write_8cyc_1L_1V, WriteAdr],   (instregex "LD2Twov(8b|4h|2s)_POST$")>;
222*9880d681SAndroid Build Coastguard Workerdef : InstRW<[A57Write_9cyc_2L_2V],           (instregex "LD2Twov(16b|8h|4s)$")>;
223*9880d681SAndroid Build Coastguard Workerdef : InstRW<[A57Write_9cyc_2L_2V, WriteAdr], (instregex "LD2Twov(16b|8h|4s)_POST$")>;
224*9880d681SAndroid Build Coastguard Workerdef : InstRW<[A57Write_6cyc_2L],             (instregex "LD2Twov(2d)$")>;
225*9880d681SAndroid Build Coastguard Workerdef : InstRW<[A57Write_6cyc_2L, WriteAdr],   (instregex "LD2Twov(2d)_POST$")>;
226*9880d681SAndroid Build Coastguard Worker
227*9880d681SAndroid Build Coastguard Workerdef : InstRW<[A57Write_9cyc_1L_3V],           (instregex "LD3i(8|16)$")>;
228*9880d681SAndroid Build Coastguard Workerdef : InstRW<[A57Write_9cyc_1L_3V, WriteAdr], (instregex "LD3i(8|16)_POST$")>;
229*9880d681SAndroid Build Coastguard Workerdef : InstRW<[A57Write_8cyc_1L_2V],            (instregex "LD3i(32)$")>;
230*9880d681SAndroid Build Coastguard Workerdef : InstRW<[A57Write_8cyc_1L_2V, WriteAdr],  (instregex "LD3i(32)_POST$")>;
231*9880d681SAndroid Build Coastguard Workerdef : InstRW<[A57Write_6cyc_2L],             (instregex "LD3i(64)$")>;
232*9880d681SAndroid Build Coastguard Workerdef : InstRW<[A57Write_6cyc_2L, WriteAdr],   (instregex "LD3i(64)_POST$")>;
233*9880d681SAndroid Build Coastguard Worker
234*9880d681SAndroid Build Coastguard Workerdef : InstRW<[A57Write_8cyc_1L_2V],             (instregex "LD3Rv(8b|4h|2s)$")>;
235*9880d681SAndroid Build Coastguard Workerdef : InstRW<[A57Write_8cyc_1L_2V, WriteAdr],   (instregex "LD3Rv(8b|4h|2s)_POST$")>;
236*9880d681SAndroid Build Coastguard Workerdef : InstRW<[A57Write_6cyc_2L],              (instregex "LD3Rv(1d)$")>;
237*9880d681SAndroid Build Coastguard Workerdef : InstRW<[A57Write_6cyc_2L, WriteAdr],    (instregex "LD3Rv(1d)_POST$")>;
238*9880d681SAndroid Build Coastguard Workerdef : InstRW<[A57Write_9cyc_1L_3V],            (instregex "LD3Rv(16b|8h|4s)$")>;
239*9880d681SAndroid Build Coastguard Workerdef : InstRW<[A57Write_9cyc_1L_3V, WriteAdr],  (instregex "LD3Rv(16b|8h|4s)_POST$")>;
240*9880d681SAndroid Build Coastguard Workerdef : InstRW<[A57Write_9cyc_2L_3V],           (instregex "LD3Rv(2d)$")>;
241*9880d681SAndroid Build Coastguard Workerdef : InstRW<[A57Write_9cyc_2L_3V, WriteAdr], (instregex "LD3Rv(2d)_POST$")>;
242*9880d681SAndroid Build Coastguard Worker
243*9880d681SAndroid Build Coastguard Workerdef : InstRW<[A57Write_9cyc_2L_2V],               (instregex "LD3Threev(8b|4h|2s)$")>;
244*9880d681SAndroid Build Coastguard Workerdef : InstRW<[A57Write_9cyc_2L_2V, WriteAdr],     (instregex "LD3Threev(8b|4h|2s)_POST$")>;
245*9880d681SAndroid Build Coastguard Workerdef : InstRW<[A57Write_10cyc_3L_4V],           (instregex "LD3Threev(16b|8h|4s)$")>;
246*9880d681SAndroid Build Coastguard Workerdef : InstRW<[A57Write_10cyc_3L_4V, WriteAdr], (instregex "LD3Threev(16b|8h|4s)_POST$")>;
247*9880d681SAndroid Build Coastguard Workerdef : InstRW<[A57Write_8cyc_4L],               (instregex "LD3Threev(2d)$")>;
248*9880d681SAndroid Build Coastguard Workerdef : InstRW<[A57Write_8cyc_4L, WriteAdr],     (instregex "LD3Threev(2d)_POST$")>;
249*9880d681SAndroid Build Coastguard Worker
250*9880d681SAndroid Build Coastguard Workerdef : InstRW<[A57Write_9cyc_2L_3V],           (instregex "LD4i(8|16)$")>;
251*9880d681SAndroid Build Coastguard Workerdef : InstRW<[A57Write_9cyc_2L_3V, WriteAdr], (instregex "LD4i(8|16)_POST$")>;
252*9880d681SAndroid Build Coastguard Workerdef : InstRW<[A57Write_8cyc_1L_2V],             (instregex "LD4i(32)$")>;
253*9880d681SAndroid Build Coastguard Workerdef : InstRW<[A57Write_8cyc_1L_2V, WriteAdr],   (instregex "LD4i(32)_POST$")>;
254*9880d681SAndroid Build Coastguard Workerdef : InstRW<[A57Write_9cyc_2L_3V],           (instregex "LD4i(64)$")>;
255*9880d681SAndroid Build Coastguard Workerdef : InstRW<[A57Write_9cyc_2L_3V, WriteAdr], (instregex "LD4i(64)_POST$")>;
256*9880d681SAndroid Build Coastguard Worker
257*9880d681SAndroid Build Coastguard Workerdef : InstRW<[A57Write_8cyc_1L_2V],              (instregex "LD4Rv(8b|4h|2s)$")>;
258*9880d681SAndroid Build Coastguard Workerdef : InstRW<[A57Write_8cyc_1L_2V, WriteAdr],    (instregex "LD4Rv(8b|4h|2s)_POST$")>;
259*9880d681SAndroid Build Coastguard Workerdef : InstRW<[A57Write_6cyc_2L],               (instregex "LD4Rv(1d)$")>;
260*9880d681SAndroid Build Coastguard Workerdef : InstRW<[A57Write_6cyc_2L, WriteAdr],     (instregex "LD4Rv(1d)_POST$")>;
261*9880d681SAndroid Build Coastguard Workerdef : InstRW<[A57Write_9cyc_2L_3V],            (instregex "LD4Rv(16b|8h|4s)$")>;
262*9880d681SAndroid Build Coastguard Workerdef : InstRW<[A57Write_9cyc_2L_3V, WriteAdr],  (instregex "LD4Rv(16b|8h|4s)_POST$")>;
263*9880d681SAndroid Build Coastguard Workerdef : InstRW<[A57Write_9cyc_2L_4V],           (instregex "LD4Rv(2d)$")>;
264*9880d681SAndroid Build Coastguard Workerdef : InstRW<[A57Write_9cyc_2L_4V, WriteAdr], (instregex "LD4Rv(2d)_POST$")>;
265*9880d681SAndroid Build Coastguard Worker
266*9880d681SAndroid Build Coastguard Workerdef : InstRW<[A57Write_9cyc_2L_2V],                (instregex "LD4Fourv(8b|4h|2s)$")>;
267*9880d681SAndroid Build Coastguard Workerdef : InstRW<[A57Write_9cyc_2L_2V, WriteAdr],      (instregex "LD4Fourv(8b|4h|2s)_POST$")>;
268*9880d681SAndroid Build Coastguard Workerdef : InstRW<[A57Write_11cyc_4L_4V],           (instregex "LD4Fourv(16b|8h|4s)$")>;
269*9880d681SAndroid Build Coastguard Workerdef : InstRW<[A57Write_11cyc_4L_4V, WriteAdr], (instregex "LD4Fourv(16b|8h|4s)_POST$")>;
270*9880d681SAndroid Build Coastguard Workerdef : InstRW<[A57Write_8cyc_4L],                (instregex "LD4Fourv(2d)$")>;
271*9880d681SAndroid Build Coastguard Workerdef : InstRW<[A57Write_8cyc_4L, WriteAdr],      (instregex "LD4Fourv(2d)_POST$")>;
272*9880d681SAndroid Build Coastguard Worker
273*9880d681SAndroid Build Coastguard Worker// Vector Store
274*9880d681SAndroid Build Coastguard Worker// -----------------------------------------------------------------------------
275*9880d681SAndroid Build Coastguard Worker
276*9880d681SAndroid Build Coastguard Workerdef : InstRW<[A57Write_1cyc_1S],            (instregex "ST1i(8|16|32)$")>;
277*9880d681SAndroid Build Coastguard Workerdef : InstRW<[A57Write_1cyc_1S, WriteAdr],  (instregex "ST1i(8|16|32)_POST$")>;
278*9880d681SAndroid Build Coastguard Workerdef : InstRW<[A57Write_3cyc_1S_1V],           (instregex "ST1i(64)$")>;
279*9880d681SAndroid Build Coastguard Workerdef : InstRW<[A57Write_3cyc_1S_1V, WriteAdr], (instregex "ST1i(64)_POST$")>;
280*9880d681SAndroid Build Coastguard Worker
281*9880d681SAndroid Build Coastguard Workerdef : InstRW<[A57Write_1cyc_1S],                  (instregex "ST1Onev(8b|4h|2s|1d)$")>;
282*9880d681SAndroid Build Coastguard Workerdef : InstRW<[A57Write_1cyc_1S, WriteAdr],        (instregex "ST1Onev(8b|4h|2s|1d)_POST$")>;
283*9880d681SAndroid Build Coastguard Workerdef : InstRW<[A57Write_2cyc_2S],                 (instregex "ST1Onev(16b|8h|4s|2d)$")>;
284*9880d681SAndroid Build Coastguard Workerdef : InstRW<[A57Write_2cyc_2S, WriteAdr],       (instregex "ST1Onev(16b|8h|4s|2d)_POST$")>;
285*9880d681SAndroid Build Coastguard Workerdef : InstRW<[A57Write_2cyc_2S],                 (instregex "ST1Twov(8b|4h|2s|1d)$")>;
286*9880d681SAndroid Build Coastguard Workerdef : InstRW<[A57Write_2cyc_2S, WriteAdr],       (instregex "ST1Twov(8b|4h|2s|1d)_POST$")>;
287*9880d681SAndroid Build Coastguard Workerdef : InstRW<[A57Write_4cyc_4S],               (instregex "ST1Twov(16b|8h|4s|2d)$")>;
288*9880d681SAndroid Build Coastguard Workerdef : InstRW<[A57Write_4cyc_4S, WriteAdr],     (instregex "ST1Twov(16b|8h|4s|2d)_POST$")>;
289*9880d681SAndroid Build Coastguard Workerdef : InstRW<[A57Write_3cyc_3S],                (instregex "ST1Threev(8b|4h|2s|1d)$")>;
290*9880d681SAndroid Build Coastguard Workerdef : InstRW<[A57Write_3cyc_3S, WriteAdr],      (instregex "ST1Threev(8b|4h|2s|1d)_POST$")>;
291*9880d681SAndroid Build Coastguard Workerdef : InstRW<[A57Write_6cyc_6S],             (instregex "ST1Threev(16b|8h|4s|2d)$")>;
292*9880d681SAndroid Build Coastguard Workerdef : InstRW<[A57Write_6cyc_6S, WriteAdr],   (instregex "ST1Threev(16b|8h|4s|2d)_POST$")>;
293*9880d681SAndroid Build Coastguard Workerdef : InstRW<[A57Write_4cyc_4S],               (instregex "ST1Fourv(8b|4h|2s|1d)$")>;
294*9880d681SAndroid Build Coastguard Workerdef : InstRW<[A57Write_4cyc_4S, WriteAdr],     (instregex "ST1Fourv(8b|4h|2s|1d)_POST$")>;
295*9880d681SAndroid Build Coastguard Workerdef : InstRW<[A57Write_8cyc_8S],           (instregex "ST1Fourv(16b|8h|4s|2d)$")>;
296*9880d681SAndroid Build Coastguard Workerdef : InstRW<[A57Write_8cyc_8S, WriteAdr], (instregex "ST1Fourv(16b|8h|4s|2d)_POST$")>;
297*9880d681SAndroid Build Coastguard Worker
298*9880d681SAndroid Build Coastguard Workerdef : InstRW<[A57Write_3cyc_1S_1V],           (instregex "ST2i(8|16|32)$")>;
299*9880d681SAndroid Build Coastguard Workerdef : InstRW<[A57Write_3cyc_1S_1V, WriteAdr], (instregex "ST2i(8|16|32)_POST$")>;
300*9880d681SAndroid Build Coastguard Workerdef : InstRW<[A57Write_2cyc_2S],           (instregex "ST2i(64)$")>;
301*9880d681SAndroid Build Coastguard Workerdef : InstRW<[A57Write_2cyc_2S, WriteAdr], (instregex "ST2i(64)_POST$")>;
302*9880d681SAndroid Build Coastguard Worker
303*9880d681SAndroid Build Coastguard Workerdef : InstRW<[A57Write_3cyc_2S_1V],              (instregex "ST2Twov(8b|4h|2s)$")>;
304*9880d681SAndroid Build Coastguard Workerdef : InstRW<[A57Write_3cyc_2S_1V, WriteAdr],    (instregex "ST2Twov(8b|4h|2s)_POST$")>;
305*9880d681SAndroid Build Coastguard Workerdef : InstRW<[A57Write_4cyc_4S_2V],           (instregex "ST2Twov(16b|8h|4s)$")>;
306*9880d681SAndroid Build Coastguard Workerdef : InstRW<[A57Write_4cyc_4S_2V, WriteAdr], (instregex "ST2Twov(16b|8h|4s)_POST$")>;
307*9880d681SAndroid Build Coastguard Workerdef : InstRW<[A57Write_4cyc_4S],             (instregex "ST2Twov(2d)$")>;
308*9880d681SAndroid Build Coastguard Workerdef : InstRW<[A57Write_4cyc_4S, WriteAdr],   (instregex "ST2Twov(2d)_POST$")>;
309*9880d681SAndroid Build Coastguard Worker
310*9880d681SAndroid Build Coastguard Workerdef : InstRW<[A57Write_3cyc_1S_1V],            (instregex "ST3i(8|16)$")>;
311*9880d681SAndroid Build Coastguard Workerdef : InstRW<[A57Write_3cyc_1S_1V, WriteAdr],  (instregex "ST3i(8|16)_POST$")>;
312*9880d681SAndroid Build Coastguard Workerdef : InstRW<[A57Write_3cyc_3S],           (instregex "ST3i(32)$")>;
313*9880d681SAndroid Build Coastguard Workerdef : InstRW<[A57Write_3cyc_3S, WriteAdr], (instregex "ST3i(32)_POST$")>;
314*9880d681SAndroid Build Coastguard Workerdef : InstRW<[A57Write_3cyc_2S_1V],           (instregex "ST3i(64)$")>;
315*9880d681SAndroid Build Coastguard Workerdef : InstRW<[A57Write_3cyc_2S_1V, WriteAdr], (instregex "ST3i(64)_POST$")>;
316*9880d681SAndroid Build Coastguard Worker
317*9880d681SAndroid Build Coastguard Workerdef : InstRW<[A57Write_3cyc_3S_2V],                 (instregex "ST3Threev(8b|4h|2s)$")>;
318*9880d681SAndroid Build Coastguard Workerdef : InstRW<[A57Write_3cyc_3S_2V, WriteAdr],       (instregex "ST3Threev(8b|4h|2s)_POST$")>;
319*9880d681SAndroid Build Coastguard Workerdef : InstRW<[A57Write_6cyc_6S_4V],           (instregex "ST3Threev(16b|8h|4s)$")>;
320*9880d681SAndroid Build Coastguard Workerdef : InstRW<[A57Write_6cyc_6S_4V, WriteAdr], (instregex "ST3Threev(16b|8h|4s)_POST$")>;
321*9880d681SAndroid Build Coastguard Workerdef : InstRW<[A57Write_6cyc_6S],                (instregex "ST3Threev(2d)$")>;
322*9880d681SAndroid Build Coastguard Workerdef : InstRW<[A57Write_6cyc_6S, WriteAdr],      (instregex "ST3Threev(2d)_POST$")>;
323*9880d681SAndroid Build Coastguard Worker
324*9880d681SAndroid Build Coastguard Workerdef : InstRW<[A57Write_3cyc_1S_1V],             (instregex "ST4i(8|16)$")>;
325*9880d681SAndroid Build Coastguard Workerdef : InstRW<[A57Write_3cyc_1S_1V, WriteAdr],   (instregex "ST4i(8|16)_POST$")>;
326*9880d681SAndroid Build Coastguard Workerdef : InstRW<[A57Write_4cyc_4S],           (instregex "ST4i(32)$")>;
327*9880d681SAndroid Build Coastguard Workerdef : InstRW<[A57Write_4cyc_4S, WriteAdr], (instregex "ST4i(32)_POST$")>;
328*9880d681SAndroid Build Coastguard Workerdef : InstRW<[A57Write_3cyc_2S_1V],            (instregex "ST4i(64)$")>;
329*9880d681SAndroid Build Coastguard Workerdef : InstRW<[A57Write_3cyc_2S_1V, WriteAdr],  (instregex "ST4i(64)_POST$")>;
330*9880d681SAndroid Build Coastguard Worker
331*9880d681SAndroid Build Coastguard Workerdef : InstRW<[A57Write_4cyc_4S_2V],                  (instregex "ST4Fourv(8b|4h|2s)$")>;
332*9880d681SAndroid Build Coastguard Workerdef : InstRW<[A57Write_4cyc_4S_2V, WriteAdr],        (instregex "ST4Fourv(8b|4h|2s)_POST$")>;
333*9880d681SAndroid Build Coastguard Workerdef : InstRW<[A57Write_8cyc_8S_4V],           (instregex "ST4Fourv(16b|8h|4s)$")>;
334*9880d681SAndroid Build Coastguard Workerdef : InstRW<[A57Write_8cyc_8S_4V, WriteAdr], (instregex "ST4Fourv(16b|8h|4s)_POST$")>;
335*9880d681SAndroid Build Coastguard Workerdef : InstRW<[A57Write_8cyc_8S],                (instregex "ST4Fourv(2d)$")>;
336*9880d681SAndroid Build Coastguard Workerdef : InstRW<[A57Write_8cyc_8S, WriteAdr],      (instregex "ST4Fourv(2d)_POST$")>;
337*9880d681SAndroid Build Coastguard Worker
338*9880d681SAndroid Build Coastguard Worker// Vector - Integer
339*9880d681SAndroid Build Coastguard Worker// -----------------------------------------------------------------------------
340*9880d681SAndroid Build Coastguard Worker
341*9880d681SAndroid Build Coastguard Worker// Reference for forms in this group
342*9880d681SAndroid Build Coastguard Worker//   D form - v8i8, v4i16, v2i32
343*9880d681SAndroid Build Coastguard Worker//   Q form - v16i8, v8i16, v4i32
344*9880d681SAndroid Build Coastguard Worker//   D form - v1i8, v1i16, v1i32, v1i64
345*9880d681SAndroid Build Coastguard Worker//   Q form - v16i8, v8i16, v4i32, v2i64
346*9880d681SAndroid Build Coastguard Worker//   D form - v8i8_v8i16, v4i16_v4i32, v2i32_v2i64
347*9880d681SAndroid Build Coastguard Worker//   Q form - v16i8_v8i16, v8i16_v4i32, v4i32_v2i64
348*9880d681SAndroid Build Coastguard Worker
349*9880d681SAndroid Build Coastguard Worker// ASIMD absolute diff accum, D-form
350*9880d681SAndroid Build Coastguard Workerdef : InstRW<[A57Write_4cyc_1X], (instregex "^[SU]ABA(v8i8|v4i16|v2i32)$")>;
351*9880d681SAndroid Build Coastguard Worker// ASIMD absolute diff accum, Q-form
352*9880d681SAndroid Build Coastguard Workerdef : InstRW<[A57Write_5cyc_2X], (instregex "^[SU]ABA(v16i8|v8i16|v4i32)$")>;
353*9880d681SAndroid Build Coastguard Worker// ASIMD absolute diff accum long
354*9880d681SAndroid Build Coastguard Workerdef : InstRW<[A57Write_4cyc_1X], (instregex "^[SU]ABAL")>;
355*9880d681SAndroid Build Coastguard Worker
356*9880d681SAndroid Build Coastguard Worker// ASIMD arith, reduce, 4H/4S
357*9880d681SAndroid Build Coastguard Workerdef : InstRW<[A57Write_4cyc_1X], (instregex "^[SU]?ADDL?V(v8i8|v4i16|v2i32)v$")>;
358*9880d681SAndroid Build Coastguard Worker// ASIMD arith, reduce, 8B/8H
359*9880d681SAndroid Build Coastguard Workerdef : InstRW<[A57Write_7cyc_1V_1X], (instregex "^[SU]?ADDL?V(v8i16|v4i32)v$")>;
360*9880d681SAndroid Build Coastguard Worker// ASIMD arith, reduce, 16B
361*9880d681SAndroid Build Coastguard Workerdef : InstRW<[A57Write_8cyc_2X], (instregex "^[SU]?ADDL?Vv16i8v$")>;
362*9880d681SAndroid Build Coastguard Worker
363*9880d681SAndroid Build Coastguard Worker// ASIMD max/min, reduce, 4H/4S
364*9880d681SAndroid Build Coastguard Workerdef : InstRW<[A57Write_4cyc_1X], (instregex "^[SU](MIN|MAX)V(v4i16|v4i32)v$")>;
365*9880d681SAndroid Build Coastguard Worker// ASIMD max/min, reduce, 8B/8H
366*9880d681SAndroid Build Coastguard Workerdef : InstRW<[A57Write_7cyc_1V_1X], (instregex "^[SU](MIN|MAX)V(v8i8|v8i16)v$")>;
367*9880d681SAndroid Build Coastguard Worker// ASIMD max/min, reduce, 16B
368*9880d681SAndroid Build Coastguard Workerdef : InstRW<[A57Write_8cyc_2X], (instregex "^[SU](MIN|MAX)Vv16i8v$")>;
369*9880d681SAndroid Build Coastguard Worker
370*9880d681SAndroid Build Coastguard Worker// ASIMD multiply, D-form
371*9880d681SAndroid Build Coastguard Workerdef : InstRW<[A57Write_5cyc_1W], (instregex "^(P?MUL|SQR?DMULH)(v8i8|v4i16|v2i32|v1i8|v1i16|v1i32|v1i64)(_indexed)?$")>;
372*9880d681SAndroid Build Coastguard Worker// ASIMD multiply, Q-form
373*9880d681SAndroid Build Coastguard Workerdef : InstRW<[A57Write_6cyc_2W], (instregex "^(P?MUL|SQR?DMULH)(v16i8|v8i16|v4i32)(_indexed)?$")>;
374*9880d681SAndroid Build Coastguard Worker
375*9880d681SAndroid Build Coastguard Worker// ASIMD multiply accumulate, D-form
376*9880d681SAndroid Build Coastguard Workerdef : InstRW<[A57Write_5cyc_1W], (instregex "^ML[AS](v8i8|v4i16|v2i32)(_indexed)?$")>;
377*9880d681SAndroid Build Coastguard Worker// ASIMD multiply accumulate, Q-form
378*9880d681SAndroid Build Coastguard Workerdef : InstRW<[A57Write_6cyc_2W], (instregex "^ML[AS](v16i8|v8i16|v4i32)(_indexed)?$")>;
379*9880d681SAndroid Build Coastguard Worker
380*9880d681SAndroid Build Coastguard Worker// ASIMD multiply accumulate long
381*9880d681SAndroid Build Coastguard Worker// ASIMD multiply accumulate saturating long
382*9880d681SAndroid Build Coastguard Workerdef A57WriteIVMA   : SchedWriteRes<[A57UnitW]> { let Latency = 5;  }
383*9880d681SAndroid Build Coastguard Workerdef A57ReadIVMA4   : SchedReadAdvance<4, [A57WriteIVMA]>;
384*9880d681SAndroid Build Coastguard Workerdef : InstRW<[A57WriteIVMA, A57ReadIVMA4], (instregex "^(S|U|SQD)ML[AS]L")>;
385*9880d681SAndroid Build Coastguard Worker
386*9880d681SAndroid Build Coastguard Worker// ASIMD multiply long
387*9880d681SAndroid Build Coastguard Workerdef : InstRW<[A57Write_5cyc_1W], (instregex "^(S|U|SQD)MULL")>;
388*9880d681SAndroid Build Coastguard Workerdef : InstRW<[A57Write_5cyc_1W], (instregex "^PMULL(v8i8|v16i8)")>;
389*9880d681SAndroid Build Coastguard Workerdef : InstRW<[A57Write_3cyc_1W], (instregex "^PMULL(v1i64|v2i64)")>;
390*9880d681SAndroid Build Coastguard Worker
391*9880d681SAndroid Build Coastguard Worker// ASIMD pairwise add and accumulate
392*9880d681SAndroid Build Coastguard Worker// ASIMD shift accumulate
393*9880d681SAndroid Build Coastguard Workerdef A57WriteIVA    : SchedWriteRes<[A57UnitX]> { let Latency = 4;  }
394*9880d681SAndroid Build Coastguard Workerdef A57ReadIVA3    : SchedReadAdvance<3, [A57WriteIVA]>;
395*9880d681SAndroid Build Coastguard Workerdef : InstRW<[A57WriteIVA, A57ReadIVA3], (instregex "^[SU]ADALP")>;
396*9880d681SAndroid Build Coastguard Workerdef : InstRW<[A57WriteIVA, A57ReadIVA3], (instregex "^(S|SR|U|UR)SRA")>;
397*9880d681SAndroid Build Coastguard Worker
398*9880d681SAndroid Build Coastguard Worker// ASIMD shift by immed, complex
399*9880d681SAndroid Build Coastguard Workerdef : InstRW<[A57Write_4cyc_1X], (instregex "^[SU]?(Q|R){1,2}SHR")>;
400*9880d681SAndroid Build Coastguard Workerdef : InstRW<[A57Write_4cyc_1X], (instregex "^SQSHLU")>;
401*9880d681SAndroid Build Coastguard Worker
402*9880d681SAndroid Build Coastguard Worker
403*9880d681SAndroid Build Coastguard Worker// ASIMD shift by register, basic, Q-form
404*9880d681SAndroid Build Coastguard Workerdef : InstRW<[A57Write_4cyc_2X], (instregex "^[SU]SHL(v16i8|v8i16|v4i32|v2i64)")>;
405*9880d681SAndroid Build Coastguard Worker
406*9880d681SAndroid Build Coastguard Worker// ASIMD shift by register, complex, D-form
407*9880d681SAndroid Build Coastguard Workerdef : InstRW<[A57Write_4cyc_1X], (instregex "^[SU][QR]{1,2}SHL(v1i8|v1i16|v1i32|v1i64|v8i8|v4i16|v2i32|b|d|h|s)")>;
408*9880d681SAndroid Build Coastguard Worker
409*9880d681SAndroid Build Coastguard Worker// ASIMD shift by register, complex, Q-form
410*9880d681SAndroid Build Coastguard Workerdef : InstRW<[A57Write_5cyc_2X], (instregex "^[SU][QR]{1,2}SHL(v16i8|v8i16|v4i32|v2i64)")>;
411*9880d681SAndroid Build Coastguard Worker
412*9880d681SAndroid Build Coastguard Worker
413*9880d681SAndroid Build Coastguard Worker// Vector - Floating Point
414*9880d681SAndroid Build Coastguard Worker// -----------------------------------------------------------------------------
415*9880d681SAndroid Build Coastguard Worker
416*9880d681SAndroid Build Coastguard Worker// Reference for forms in this group
417*9880d681SAndroid Build Coastguard Worker//   D form - v2f32
418*9880d681SAndroid Build Coastguard Worker//   Q form - v4f32, v2f64
419*9880d681SAndroid Build Coastguard Worker//   D form - 32, 64
420*9880d681SAndroid Build Coastguard Worker//   D form - v1i32, v1i64
421*9880d681SAndroid Build Coastguard Worker//   D form - v2i32
422*9880d681SAndroid Build Coastguard Worker//   Q form - v4i32, v2i64
423*9880d681SAndroid Build Coastguard Worker
424*9880d681SAndroid Build Coastguard Worker// ASIMD FP arith, normal, D-form
425*9880d681SAndroid Build Coastguard Workerdef : InstRW<[A57Write_5cyc_1V], (instregex "^(FABD|FADD|FSUB)(v2f32|32|64|v2i32p)")>;
426*9880d681SAndroid Build Coastguard Worker// ASIMD FP arith, normal, Q-form
427*9880d681SAndroid Build Coastguard Workerdef : InstRW<[A57Write_5cyc_2V], (instregex "^(FABD|FADD|FSUB)(v4f32|v2f64|v2i64p)")>;
428*9880d681SAndroid Build Coastguard Worker
429*9880d681SAndroid Build Coastguard Worker// ASIMD FP arith, pairwise, D-form
430*9880d681SAndroid Build Coastguard Workerdef : InstRW<[A57Write_5cyc_1V], (instregex "^FADDP(v2f32|32|64|v2i32)")>;
431*9880d681SAndroid Build Coastguard Worker// ASIMD FP arith, pairwise, Q-form
432*9880d681SAndroid Build Coastguard Workerdef : InstRW<[A57Write_9cyc_3V], (instregex "^FADDP(v4f32|v2f64|v2i64)")>;
433*9880d681SAndroid Build Coastguard Worker
434*9880d681SAndroid Build Coastguard Worker// ASIMD FP compare, D-form
435*9880d681SAndroid Build Coastguard Workerdef : InstRW<[A57Write_5cyc_1V], (instregex "^(FACGE|FACGT|FCMEQ|FCMGE|FCMGT|FCMLE|FCMLT)(v2f32|32|64|v1i32|v2i32|v1i64)")>;
436*9880d681SAndroid Build Coastguard Worker// ASIMD FP compare, Q-form
437*9880d681SAndroid Build Coastguard Workerdef : InstRW<[A57Write_5cyc_2V], (instregex "^(FACGE|FACGT|FCMEQ|FCMGE|FCMGT|FCMLE|FCMLT)(v4f32|v2f64|v4i32|v2i64)")>;
438*9880d681SAndroid Build Coastguard Worker
439*9880d681SAndroid Build Coastguard Worker// ASIMD FP convert, long and narrow
440*9880d681SAndroid Build Coastguard Workerdef : InstRW<[A57Write_8cyc_3V], (instregex "^FCVT(L|N|XN)v")>;
441*9880d681SAndroid Build Coastguard Worker// ASIMD FP convert, other, D-form
442*9880d681SAndroid Build Coastguard Workerdef : InstRW<[A57Write_5cyc_1V], (instregex "^[FVSU]CVT([AMNPZ][SU])?(_Int)?(v2f32|v1i32|v2i32|v1i64)")>;
443*9880d681SAndroid Build Coastguard Worker// ASIMD FP convert, other, Q-form
444*9880d681SAndroid Build Coastguard Workerdef : InstRW<[A57Write_5cyc_2V], (instregex "^[FVSU]CVT([AMNPZ][SU])?(_Int)?(v4f32|v2f64|v4i32|v2i64)")>;
445*9880d681SAndroid Build Coastguard Worker
446*9880d681SAndroid Build Coastguard Worker// ASIMD FP divide, D-form, F32
447*9880d681SAndroid Build Coastguard Workerdef : InstRW<[A57Write_18cyc_1X], (instregex "FDIVv2f32")>;
448*9880d681SAndroid Build Coastguard Worker// ASIMD FP divide, Q-form, F32
449*9880d681SAndroid Build Coastguard Workerdef : InstRW<[A57Write_36cyc_2X], (instregex "FDIVv4f32")>;
450*9880d681SAndroid Build Coastguard Worker// ASIMD FP divide, Q-form, F64
451*9880d681SAndroid Build Coastguard Workerdef : InstRW<[A57Write_64cyc_2X], (instregex "FDIVv2f64")>;
452*9880d681SAndroid Build Coastguard Worker
453*9880d681SAndroid Build Coastguard Worker// Note: These were simply duplicated from ASIMD FDIV because of missing documentation
454*9880d681SAndroid Build Coastguard Worker// ASIMD FP square root, D-form, F32
455*9880d681SAndroid Build Coastguard Workerdef : InstRW<[A57Write_18cyc_1X], (instregex "FSQRTv2f32")>;
456*9880d681SAndroid Build Coastguard Worker// ASIMD FP square root, Q-form, F32
457*9880d681SAndroid Build Coastguard Workerdef : InstRW<[A57Write_36cyc_2X], (instregex "FSQRTv4f32")>;
458*9880d681SAndroid Build Coastguard Worker// ASIMD FP square root, Q-form, F64
459*9880d681SAndroid Build Coastguard Workerdef : InstRW<[A57Write_64cyc_2X], (instregex "FSQRTv2f64")>;
460*9880d681SAndroid Build Coastguard Worker
461*9880d681SAndroid Build Coastguard Worker// ASIMD FP max/min, normal, D-form
462*9880d681SAndroid Build Coastguard Workerdef : InstRW<[A57Write_5cyc_1V], (instregex "^(FMAX|FMIN)(NM)?(v2f32)")>;
463*9880d681SAndroid Build Coastguard Worker// ASIMD FP max/min, normal, Q-form
464*9880d681SAndroid Build Coastguard Workerdef : InstRW<[A57Write_5cyc_2V], (instregex "^(FMAX|FMIN)(NM)?(v4f32|v2f64)")>;
465*9880d681SAndroid Build Coastguard Worker// ASIMD FP max/min, pairwise, D-form
466*9880d681SAndroid Build Coastguard Workerdef : InstRW<[A57Write_5cyc_1V], (instregex "^(FMAX|FMIN)(NM)?P(v2f32|v2i32)")>;
467*9880d681SAndroid Build Coastguard Worker// ASIMD FP max/min, pairwise, Q-form
468*9880d681SAndroid Build Coastguard Workerdef : InstRW<[A57Write_9cyc_3V], (instregex "^(FMAX|FMIN)(NM)?P(v4f32|v2f64|v2i64)")>;
469*9880d681SAndroid Build Coastguard Worker// ASIMD FP max/min, reduce
470*9880d681SAndroid Build Coastguard Workerdef : InstRW<[A57Write_10cyc_3V], (instregex "^(FMAX|FMIN)(NM)?Vv")>;
471*9880d681SAndroid Build Coastguard Worker
472*9880d681SAndroid Build Coastguard Worker// ASIMD FP multiply, D-form, FZ
473*9880d681SAndroid Build Coastguard Workerdef : InstRW<[A57Write_5cyc_1V], (instregex "^FMULX?(v2f32|v1i32|v2i32|v1i64|32|64)")>;
474*9880d681SAndroid Build Coastguard Worker// ASIMD FP multiply, Q-form, FZ
475*9880d681SAndroid Build Coastguard Workerdef : InstRW<[A57Write_5cyc_2V], (instregex "^FMULX?(v4f32|v2f64|v4i32|v2i64)")>;
476*9880d681SAndroid Build Coastguard Worker
477*9880d681SAndroid Build Coastguard Worker// ASIMD FP multiply accumulate, D-form, FZ
478*9880d681SAndroid Build Coastguard Worker// ASIMD FP multiply accumulate, Q-form, FZ
479*9880d681SAndroid Build Coastguard Workerdef A57WriteFPVMAD : SchedWriteRes<[A57UnitV]> { let Latency = 9;  }
480*9880d681SAndroid Build Coastguard Workerdef A57WriteFPVMAQ : SchedWriteRes<[A57UnitV, A57UnitV]> { let Latency = 10;  }
481*9880d681SAndroid Build Coastguard Workerdef A57ReadFPVMA5  : SchedReadAdvance<5, [A57WriteFPVMAD, A57WriteFPVMAQ]>;
482*9880d681SAndroid Build Coastguard Workerdef : InstRW<[A57WriteFPVMAD, A57ReadFPVMA5], (instregex "^FML[AS](v2f32|v1i32|v2i32|v1i64)")>;
483*9880d681SAndroid Build Coastguard Workerdef : InstRW<[A57WriteFPVMAQ, A57ReadFPVMA5], (instregex "^FML[AS](v4f32|v2f64|v4i32|v2i64)")>;
484*9880d681SAndroid Build Coastguard Worker
485*9880d681SAndroid Build Coastguard Worker// ASIMD FP round, D-form
486*9880d681SAndroid Build Coastguard Workerdef : InstRW<[A57Write_5cyc_1V], (instregex "^FRINT[AIMNPXZ](v2f32)")>;
487*9880d681SAndroid Build Coastguard Worker// ASIMD FP round, Q-form
488*9880d681SAndroid Build Coastguard Workerdef : InstRW<[A57Write_5cyc_2V], (instregex "^FRINT[AIMNPXZ](v4f32|v2f64)")>;
489*9880d681SAndroid Build Coastguard Worker
490*9880d681SAndroid Build Coastguard Worker
491*9880d681SAndroid Build Coastguard Worker// Vector - Miscellaneous
492*9880d681SAndroid Build Coastguard Worker// -----------------------------------------------------------------------------
493*9880d681SAndroid Build Coastguard Worker
494*9880d681SAndroid Build Coastguard Worker// Reference for forms in this group
495*9880d681SAndroid Build Coastguard Worker//   D form - v8i8, v4i16, v2i32
496*9880d681SAndroid Build Coastguard Worker//   Q form - v16i8, v8i16, v4i32
497*9880d681SAndroid Build Coastguard Worker//   D form - v1i8, v1i16, v1i32, v1i64
498*9880d681SAndroid Build Coastguard Worker//   Q form - v16i8, v8i16, v4i32, v2i64
499*9880d681SAndroid Build Coastguard Worker
500*9880d681SAndroid Build Coastguard Worker// ASIMD bitwise insert, Q-form
501*9880d681SAndroid Build Coastguard Workerdef : InstRW<[A57Write_3cyc_2V], (instregex "^(BIF|BIT|BSL)v16i8")>;
502*9880d681SAndroid Build Coastguard Worker
503*9880d681SAndroid Build Coastguard Worker// ASIMD duplicate, gen reg, D-form and Q-form
504*9880d681SAndroid Build Coastguard Workerdef : InstRW<[A57Write_8cyc_1L_1V], (instregex "^CPY")>;
505*9880d681SAndroid Build Coastguard Workerdef : InstRW<[A57Write_8cyc_1L_1V], (instregex "^DUPv.+gpr")>;
506*9880d681SAndroid Build Coastguard Worker
507*9880d681SAndroid Build Coastguard Worker// ASIMD move, saturating
508*9880d681SAndroid Build Coastguard Workerdef : InstRW<[A57Write_4cyc_1X], (instregex "^[SU]QXTU?N")>;
509*9880d681SAndroid Build Coastguard Worker
510*9880d681SAndroid Build Coastguard Worker// ASIMD reciprocal estimate, D-form
511*9880d681SAndroid Build Coastguard Workerdef : InstRW<[A57Write_5cyc_1V], (instregex "^[FU](RECP|RSQRT)(E|X)(v2f32|v1i32|v2i32|v1i64)")>;
512*9880d681SAndroid Build Coastguard Worker// ASIMD reciprocal estimate, Q-form
513*9880d681SAndroid Build Coastguard Workerdef : InstRW<[A57Write_5cyc_2V], (instregex "^[FU](RECP|RSQRT)(E|X)(v2f64|v4f32|v4i32)")>;
514*9880d681SAndroid Build Coastguard Worker
515*9880d681SAndroid Build Coastguard Worker// ASIMD reciprocal step, D-form, FZ
516*9880d681SAndroid Build Coastguard Workerdef : InstRW<[A57Write_9cyc_1V], (instregex "^F(RECP|RSQRT)S(v2f32|v1i32|v2i32|v1i64|32|64)")>;
517*9880d681SAndroid Build Coastguard Worker// ASIMD reciprocal step, Q-form, FZ
518*9880d681SAndroid Build Coastguard Workerdef : InstRW<[A57Write_9cyc_2V], (instregex "^F(RECP|RSQRT)S(v2f64|v4f32|v4i32)")>;
519*9880d681SAndroid Build Coastguard Worker
520*9880d681SAndroid Build Coastguard Worker// ASIMD table lookup, D-form
521*9880d681SAndroid Build Coastguard Workerdef : InstRW<[A57Write_3cyc_1V], (instregex "^TB[LX]v8i8One")>;
522*9880d681SAndroid Build Coastguard Workerdef : InstRW<[A57Write_6cyc_2V], (instregex "^TB[LX]v8i8Two")>;
523*9880d681SAndroid Build Coastguard Workerdef : InstRW<[A57Write_9cyc_3V], (instregex "^TB[LX]v8i8Three")>;
524*9880d681SAndroid Build Coastguard Workerdef : InstRW<[A57Write_12cyc_4V], (instregex "^TB[LX]v8i8Four")>;
525*9880d681SAndroid Build Coastguard Worker// ASIMD table lookup, Q-form
526*9880d681SAndroid Build Coastguard Workerdef : InstRW<[A57Write_6cyc_3V], (instregex "^TB[LX]v16i8One")>;
527*9880d681SAndroid Build Coastguard Workerdef : InstRW<[A57Write_9cyc_5V], (instregex "^TB[LX]v16i8Two")>;
528*9880d681SAndroid Build Coastguard Workerdef : InstRW<[A57Write_12cyc_7V], (instregex "^TB[LX]v16i8Three")>;
529*9880d681SAndroid Build Coastguard Workerdef : InstRW<[A57Write_15cyc_9V], (instregex "^TB[LX]v16i8Four")>;
530*9880d681SAndroid Build Coastguard Worker
531*9880d681SAndroid Build Coastguard Worker// ASIMD transfer, element to gen reg
532*9880d681SAndroid Build Coastguard Workerdef : InstRW<[A57Write_6cyc_1I_1L], (instregex "^[SU]MOVv")>;
533*9880d681SAndroid Build Coastguard Worker
534*9880d681SAndroid Build Coastguard Worker// ASIMD transfer, gen reg to element
535*9880d681SAndroid Build Coastguard Workerdef : InstRW<[A57Write_8cyc_1L_1V], (instregex "^INSv")>;
536*9880d681SAndroid Build Coastguard Worker
537*9880d681SAndroid Build Coastguard Worker// ASIMD unzip/zip, Q-form
538*9880d681SAndroid Build Coastguard Workerdef : InstRW<[A57Write_6cyc_3V], (instregex "^(UZP|ZIP)(1|2)(v16i8|v8i16|v4i32|v2i64)")>;
539*9880d681SAndroid Build Coastguard Worker
540*9880d681SAndroid Build Coastguard Worker
541*9880d681SAndroid Build Coastguard Worker// Remainder
542*9880d681SAndroid Build Coastguard Worker// -----------------------------------------------------------------------------
543*9880d681SAndroid Build Coastguard Worker
544*9880d681SAndroid Build Coastguard Workerdef : InstRW<[A57Write_5cyc_1V], (instregex "^F(ADD|SUB)[DS]rr")>;
545*9880d681SAndroid Build Coastguard Worker
546*9880d681SAndroid Build Coastguard Workerdef A57WriteFPMA  : SchedWriteRes<[A57UnitV]> { let Latency = 9;  }
547*9880d681SAndroid Build Coastguard Workerdef A57ReadFPMA5  : SchedReadAdvance<5, [A57WriteFPMA]>;
548*9880d681SAndroid Build Coastguard Workerdef A57ReadFPM    : SchedReadAdvance<0>;
549*9880d681SAndroid Build Coastguard Workerdef : InstRW<[A57WriteFPMA, A57ReadFPM, A57ReadFPM, A57ReadFPMA5], (instregex "^FN?M(ADD|SUB)[DS]rrr")>;
550*9880d681SAndroid Build Coastguard Worker
551*9880d681SAndroid Build Coastguard Workerdef : InstRW<[A57Write_10cyc_1L_1V], (instregex "^[FSU]CVT[AMNPZ][SU](_Int)?[SU]?[XW]?[DS]?[rds]i?")>;
552*9880d681SAndroid Build Coastguard Workerdef : InstRW<[A57Write_10cyc_1L_1V], (instregex "^[SU]CVTF")>;
553*9880d681SAndroid Build Coastguard Worker
554*9880d681SAndroid Build Coastguard Workerdef : InstRW<[A57Write_32cyc_1X], (instrs FDIVDrr)>;
555*9880d681SAndroid Build Coastguard Workerdef : InstRW<[A57Write_18cyc_1X], (instrs FDIVSrr)>;
556*9880d681SAndroid Build Coastguard Worker
557*9880d681SAndroid Build Coastguard Workerdef : InstRW<[A57Write_5cyc_1V], (instregex "^F(MAX|MIN).+rr")>;
558*9880d681SAndroid Build Coastguard Worker
559*9880d681SAndroid Build Coastguard Workerdef : InstRW<[A57Write_5cyc_1V], (instregex "^FRINT.+r")>;
560*9880d681SAndroid Build Coastguard Worker
561*9880d681SAndroid Build Coastguard Workerdef : InstRW<[A57Write_32cyc_1X], (instrs FSQRTDr)>;
562*9880d681SAndroid Build Coastguard Workerdef : InstRW<[A57Write_18cyc_1X], (instrs FSQRTSr)>;
563*9880d681SAndroid Build Coastguard Worker
564*9880d681SAndroid Build Coastguard Workerdef : InstRW<[A57Write_5cyc_1L, WriteLDHi], (instrs LDNPDi)>;
565*9880d681SAndroid Build Coastguard Workerdef : InstRW<[A57Write_6cyc_2L, WriteLDHi], (instrs LDNPQi)>;
566*9880d681SAndroid Build Coastguard Workerdef : InstRW<[A57Write_5cyc_1L, WriteLDHi], (instrs LDNPSi)>;
567*9880d681SAndroid Build Coastguard Workerdef : InstRW<[A57Write_5cyc_1L, WriteLDHi], (instrs LDPDi)>;
568*9880d681SAndroid Build Coastguard Workerdef : InstRW<[A57Write_5cyc_1L, WriteLDHi, WriteAdr], (instrs LDPDpost)>;
569*9880d681SAndroid Build Coastguard Workerdef : InstRW<[A57Write_5cyc_1L, WriteLDHi, WriteAdr], (instrs LDPDpre)>;
570*9880d681SAndroid Build Coastguard Workerdef : InstRW<[A57Write_6cyc_2L, WriteLDHi], (instrs LDPQi)>;
571*9880d681SAndroid Build Coastguard Workerdef : InstRW<[A57Write_6cyc_2L, WriteLDHi, WriteAdr], (instrs LDPQpost)>;
572*9880d681SAndroid Build Coastguard Workerdef : InstRW<[A57Write_6cyc_2L, WriteLDHi, WriteAdr], (instrs LDPQpre)>;
573*9880d681SAndroid Build Coastguard Workerdef : InstRW<[A57Write_5cyc_1I_2L, WriteLDHi], (instrs LDPSWi)>;
574*9880d681SAndroid Build Coastguard Workerdef : InstRW<[A57Write_5cyc_1I_2L, WriteLDHi, WriteAdr], (instrs LDPSWpost)>;
575*9880d681SAndroid Build Coastguard Workerdef : InstRW<[A57Write_5cyc_1I_2L, WriteLDHi, WriteAdr], (instrs LDPSWpre)>;
576*9880d681SAndroid Build Coastguard Workerdef : InstRW<[A57Write_5cyc_1L, WriteLDHi], (instrs LDPSi)>;
577*9880d681SAndroid Build Coastguard Workerdef : InstRW<[A57Write_5cyc_1L, WriteLDHi, WriteAdr], (instrs LDPSpost)>;
578*9880d681SAndroid Build Coastguard Workerdef : InstRW<[A57Write_5cyc_1L, WriteLDHi, WriteAdr], (instrs LDPSpre)>;
579*9880d681SAndroid Build Coastguard Workerdef : InstRW<[A57Write_5cyc_1L, WriteI], (instrs LDRBpost)>;
580*9880d681SAndroid Build Coastguard Workerdef : InstRW<[A57Write_5cyc_1L, WriteAdr], (instrs LDRBpre)>;
581*9880d681SAndroid Build Coastguard Workerdef : InstRW<[A57Write_5cyc_1L, ReadAdrBase], (instrs LDRBroW)>;
582*9880d681SAndroid Build Coastguard Workerdef : InstRW<[A57Write_5cyc_1L, ReadAdrBase], (instrs LDRBroX)>;
583*9880d681SAndroid Build Coastguard Workerdef : InstRW<[A57Write_5cyc_1L], (instrs LDRBui)>;
584*9880d681SAndroid Build Coastguard Workerdef : InstRW<[A57Write_5cyc_1L], (instrs LDRDl)>;
585*9880d681SAndroid Build Coastguard Workerdef : InstRW<[A57Write_5cyc_1L, WriteI], (instrs LDRDpost)>;
586*9880d681SAndroid Build Coastguard Workerdef : InstRW<[A57Write_5cyc_1L, WriteAdr], (instrs LDRDpre)>;
587*9880d681SAndroid Build Coastguard Workerdef : InstRW<[A57Write_5cyc_1L, ReadAdrBase], (instrs LDRDroW)>;
588*9880d681SAndroid Build Coastguard Workerdef : InstRW<[A57Write_5cyc_1L, ReadAdrBase], (instrs LDRDroX)>;
589*9880d681SAndroid Build Coastguard Workerdef : InstRW<[A57Write_5cyc_1L], (instrs LDRDui)>;
590*9880d681SAndroid Build Coastguard Workerdef : InstRW<[A57Write_5cyc_1I_1L, ReadAdrBase], (instrs LDRHHroW)>;
591*9880d681SAndroid Build Coastguard Workerdef : InstRW<[A57Write_5cyc_1I_1L, ReadAdrBase], (instrs LDRHHroX)>;
592*9880d681SAndroid Build Coastguard Workerdef : InstRW<[A57Write_5cyc_1L, WriteI], (instrs LDRHpost)>;
593*9880d681SAndroid Build Coastguard Workerdef : InstRW<[A57Write_5cyc_1L, WriteAdr], (instrs LDRHpre)>;
594*9880d681SAndroid Build Coastguard Workerdef : InstRW<[A57Write_6cyc_1I_1L, ReadAdrBase], (instrs LDRHroW)>;
595*9880d681SAndroid Build Coastguard Workerdef : InstRW<[A57Write_6cyc_1I_1L, ReadAdrBase], (instrs LDRHroX)>;
596*9880d681SAndroid Build Coastguard Workerdef : InstRW<[A57Write_5cyc_1L], (instrs LDRHui)>;
597*9880d681SAndroid Build Coastguard Workerdef : InstRW<[A57Write_5cyc_1L], (instrs LDRQl)>;
598*9880d681SAndroid Build Coastguard Workerdef : InstRW<[A57Write_5cyc_1L, WriteI], (instrs LDRQpost)>;
599*9880d681SAndroid Build Coastguard Workerdef : InstRW<[A57Write_5cyc_1L, WriteAdr], (instrs LDRQpre)>;
600*9880d681SAndroid Build Coastguard Workerdef : InstRW<[A57Write_6cyc_1I_1L, ReadAdrBase], (instrs LDRQroW)>;
601*9880d681SAndroid Build Coastguard Workerdef : InstRW<[A57Write_6cyc_1I_1L, ReadAdrBase], (instrs LDRQroX)>;
602*9880d681SAndroid Build Coastguard Workerdef : InstRW<[A57Write_5cyc_1L], (instrs LDRQui)>;
603*9880d681SAndroid Build Coastguard Workerdef : InstRW<[A57Write_5cyc_1I_1L, ReadAdrBase], (instrs LDRSHWroW)>;
604*9880d681SAndroid Build Coastguard Workerdef : InstRW<[A57Write_5cyc_1I_1L, ReadAdrBase], (instrs LDRSHWroX)>;
605*9880d681SAndroid Build Coastguard Workerdef : InstRW<[A57Write_5cyc_1I_1L, ReadAdrBase], (instrs LDRSHXroW)>;
606*9880d681SAndroid Build Coastguard Workerdef : InstRW<[A57Write_5cyc_1I_1L, ReadAdrBase], (instrs LDRSHXroX)>;
607*9880d681SAndroid Build Coastguard Workerdef : InstRW<[A57Write_5cyc_1L], (instrs LDRSl)>;
608*9880d681SAndroid Build Coastguard Workerdef : InstRW<[A57Write_5cyc_1L, WriteI], (instrs LDRSpost)>;
609*9880d681SAndroid Build Coastguard Workerdef : InstRW<[A57Write_5cyc_1L, WriteAdr], (instrs LDRSpre)>;
610*9880d681SAndroid Build Coastguard Workerdef : InstRW<[A57Write_5cyc_1L, ReadAdrBase], (instrs LDRSroW)>;
611*9880d681SAndroid Build Coastguard Workerdef : InstRW<[A57Write_5cyc_1L, ReadAdrBase], (instrs LDRSroX)>;
612*9880d681SAndroid Build Coastguard Workerdef : InstRW<[A57Write_5cyc_1L], (instrs LDRSui)>;
613*9880d681SAndroid Build Coastguard Workerdef : InstRW<[A57Write_5cyc_1L], (instrs LDURBi)>;
614*9880d681SAndroid Build Coastguard Workerdef : InstRW<[A57Write_5cyc_1L], (instrs LDURDi)>;
615*9880d681SAndroid Build Coastguard Workerdef : InstRW<[A57Write_5cyc_1L], (instrs LDURHi)>;
616*9880d681SAndroid Build Coastguard Workerdef : InstRW<[A57Write_5cyc_1L], (instrs LDURQi)>;
617*9880d681SAndroid Build Coastguard Workerdef : InstRW<[A57Write_5cyc_1L], (instrs LDURSi)>;
618*9880d681SAndroid Build Coastguard Worker
619*9880d681SAndroid Build Coastguard Workerdef : InstRW<[A57Write_2cyc_2S], (instrs STNPDi)>;
620*9880d681SAndroid Build Coastguard Workerdef : InstRW<[A57Write_4cyc_1I_4S], (instrs STNPQi)>;
621*9880d681SAndroid Build Coastguard Workerdef : InstRW<[A57Write_2cyc_2S], (instrs STNPXi)>;
622*9880d681SAndroid Build Coastguard Workerdef : InstRW<[A57Write_2cyc_2S], (instrs STPDi)>;
623*9880d681SAndroid Build Coastguard Workerdef : InstRW<[WriteAdr, A57Write_2cyc_1I_2S], (instrs STPDpost)>;
624*9880d681SAndroid Build Coastguard Workerdef : InstRW<[WriteAdr, A57Write_2cyc_1I_2S], (instrs STPDpre)>;
625*9880d681SAndroid Build Coastguard Workerdef : InstRW<[A57Write_4cyc_1I_4S], (instrs STPQi)>;
626*9880d681SAndroid Build Coastguard Workerdef : InstRW<[WriteAdr, A57Write_4cyc_1I_4S], (instrs STPQpost)>;
627*9880d681SAndroid Build Coastguard Workerdef : InstRW<[WriteAdr, A57Write_4cyc_2I_4S], (instrs STPQpre)>;
628*9880d681SAndroid Build Coastguard Workerdef : InstRW<[WriteAdr, A57Write_1cyc_1I_1S], (instrs STPSpost)>;
629*9880d681SAndroid Build Coastguard Workerdef : InstRW<[WriteAdr, A57Write_1cyc_1I_1S], (instrs STPSpre)>;
630*9880d681SAndroid Build Coastguard Workerdef : InstRW<[WriteAdr, A57Write_1cyc_1I_1S], (instrs STPWpost)>;
631*9880d681SAndroid Build Coastguard Workerdef : InstRW<[WriteAdr, A57Write_1cyc_1I_1S], (instrs STPWpre)>;
632*9880d681SAndroid Build Coastguard Workerdef : InstRW<[A57Write_2cyc_2S], (instrs STPXi)>;
633*9880d681SAndroid Build Coastguard Workerdef : InstRW<[WriteAdr, A57Write_2cyc_1I_2S], (instrs STPXpost)>;
634*9880d681SAndroid Build Coastguard Workerdef : InstRW<[WriteAdr, A57Write_2cyc_1I_2S], (instrs STPXpre)>;
635*9880d681SAndroid Build Coastguard Workerdef : InstRW<[WriteAdr, A57Write_1cyc_1I_1S, ReadAdrBase], (instrs STRBBpost)>;
636*9880d681SAndroid Build Coastguard Workerdef : InstRW<[WriteAdr, A57Write_1cyc_1I_1S, ReadAdrBase], (instrs STRBBpre)>;
637*9880d681SAndroid Build Coastguard Workerdef : InstRW<[WriteAdr, A57Write_1cyc_1I_1S, ReadAdrBase], (instrs STRBpost)>;
638*9880d681SAndroid Build Coastguard Workerdef : InstRW<[WriteAdr, A57Write_1cyc_1I_1S], (instrs STRBpre)>;
639*9880d681SAndroid Build Coastguard Workerdef : InstRW<[A57Write_3cyc_1I_1S, ReadAdrBase], (instrs STRBroW)>;
640*9880d681SAndroid Build Coastguard Workerdef : InstRW<[A57Write_3cyc_1I_1S, ReadAdrBase], (instrs STRBroX)>;
641*9880d681SAndroid Build Coastguard Workerdef : InstRW<[WriteAdr, A57Write_1cyc_1I_1S, ReadAdrBase], (instrs STRDpost)>;
642*9880d681SAndroid Build Coastguard Workerdef : InstRW<[WriteAdr, A57Write_1cyc_1I_1S], (instrs STRDpre)>;
643*9880d681SAndroid Build Coastguard Workerdef : InstRW<[WriteAdr, A57Write_1cyc_1I_1S, ReadAdrBase], (instrs STRHHpost)>;
644*9880d681SAndroid Build Coastguard Workerdef : InstRW<[WriteAdr, A57Write_1cyc_1I_1S, ReadAdrBase], (instrs STRHHpre)>;
645*9880d681SAndroid Build Coastguard Workerdef : InstRW<[A57Write_3cyc_1I_1S, ReadAdrBase], (instrs STRHHroW)>;
646*9880d681SAndroid Build Coastguard Workerdef : InstRW<[A57Write_3cyc_1I_1S, ReadAdrBase], (instrs STRHHroX)>;
647*9880d681SAndroid Build Coastguard Workerdef : InstRW<[WriteAdr, A57Write_1cyc_1I_1S, ReadAdrBase], (instrs STRHpost)>;
648*9880d681SAndroid Build Coastguard Workerdef : InstRW<[WriteAdr, A57Write_1cyc_1I_1S], (instrs STRHpre)>;
649*9880d681SAndroid Build Coastguard Workerdef : InstRW<[A57Write_3cyc_1I_1S, ReadAdrBase], (instrs STRHroW)>;
650*9880d681SAndroid Build Coastguard Workerdef : InstRW<[A57Write_3cyc_1I_1S, ReadAdrBase], (instrs STRHroX)>;
651*9880d681SAndroid Build Coastguard Workerdef : InstRW<[WriteAdr, A57Write_2cyc_1I_2S, ReadAdrBase], (instrs STRQpost)>;
652*9880d681SAndroid Build Coastguard Workerdef : InstRW<[WriteAdr, A57Write_2cyc_1I_2S], (instrs STRQpre)>;
653*9880d681SAndroid Build Coastguard Workerdef : InstRW<[A57Write_2cyc_1I_2S, ReadAdrBase], (instrs STRQroW)>;
654*9880d681SAndroid Build Coastguard Workerdef : InstRW<[A57Write_2cyc_1I_2S, ReadAdrBase], (instrs STRQroX)>;
655*9880d681SAndroid Build Coastguard Workerdef : InstRW<[A57Write_2cyc_1I_2S], (instrs STRQui)>;
656*9880d681SAndroid Build Coastguard Workerdef : InstRW<[WriteAdr, A57Write_1cyc_1I_1S, ReadAdrBase], (instrs STRSpost)>;
657*9880d681SAndroid Build Coastguard Workerdef : InstRW<[WriteAdr, A57Write_1cyc_1I_1S], (instrs STRSpre)>;
658*9880d681SAndroid Build Coastguard Workerdef : InstRW<[WriteAdr, A57Write_1cyc_1I_1S, ReadAdrBase], (instrs STRWpost)>;
659*9880d681SAndroid Build Coastguard Workerdef : InstRW<[WriteAdr, A57Write_1cyc_1I_1S, ReadAdrBase], (instrs STRWpre)>;
660*9880d681SAndroid Build Coastguard Workerdef : InstRW<[WriteAdr, A57Write_1cyc_1I_1S, ReadAdrBase], (instrs STRXpost)>;
661*9880d681SAndroid Build Coastguard Workerdef : InstRW<[WriteAdr, A57Write_1cyc_1I_1S, ReadAdrBase], (instrs STRXpre)>;
662*9880d681SAndroid Build Coastguard Workerdef : InstRW<[A57Write_2cyc_2S], (instrs STURQi)>;
663*9880d681SAndroid Build Coastguard Worker
664*9880d681SAndroid Build Coastguard Worker} // SchedModel = CortexA57Model
665