xref: /aosp_15_r20/external/llvm/lib/Target/ARM/ARMScheduleV6.td (revision 9880d6810fe72a1726cb53787c6711e909410d58)
1*9880d681SAndroid Build Coastguard Worker//===-- ARMScheduleV6.td - ARM v6 Scheduling Definitions ---*- 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 itinerary class data for the ARM v6 processors.
11*9880d681SAndroid Build Coastguard Worker//
12*9880d681SAndroid Build Coastguard Worker//===----------------------------------------------------------------------===//
13*9880d681SAndroid Build Coastguard Worker
14*9880d681SAndroid Build Coastguard Worker// Model based on ARM1176
15*9880d681SAndroid Build Coastguard Worker//
16*9880d681SAndroid Build Coastguard Worker// Functional Units
17*9880d681SAndroid Build Coastguard Workerdef V6_Pipe : FuncUnit; // pipeline
18*9880d681SAndroid Build Coastguard Worker
19*9880d681SAndroid Build Coastguard Worker// Scheduling information derived from "ARM1176JZF-S Technical Reference Manual"
20*9880d681SAndroid Build Coastguard Worker//
21*9880d681SAndroid Build Coastguard Workerdef ARMV6Itineraries : ProcessorItineraries<
22*9880d681SAndroid Build Coastguard Worker  [V6_Pipe], [], [
23*9880d681SAndroid Build Coastguard Worker  //
24*9880d681SAndroid Build Coastguard Worker  // No operand cycles
25*9880d681SAndroid Build Coastguard Worker  InstrItinData<IIC_iALUx    , [InstrStage<1, [V6_Pipe]>]>,
26*9880d681SAndroid Build Coastguard Worker  //
27*9880d681SAndroid Build Coastguard Worker  // Binary Instructions that produce a result
28*9880d681SAndroid Build Coastguard Worker  InstrItinData<IIC_iALUi    , [InstrStage<1, [V6_Pipe]>], [2, 2]>,
29*9880d681SAndroid Build Coastguard Worker  InstrItinData<IIC_iALUr    , [InstrStage<1, [V6_Pipe]>], [2, 2, 2]>,
30*9880d681SAndroid Build Coastguard Worker  InstrItinData<IIC_iALUsi   , [InstrStage<1, [V6_Pipe]>], [2, 2, 1]>,
31*9880d681SAndroid Build Coastguard Worker  InstrItinData<IIC_iALUsr   , [InstrStage<2, [V6_Pipe]>], [3, 3, 2, 1]>,
32*9880d681SAndroid Build Coastguard Worker  //
33*9880d681SAndroid Build Coastguard Worker  // Bitwise Instructions that produce a result
34*9880d681SAndroid Build Coastguard Worker  InstrItinData<IIC_iBITi    , [InstrStage<1, [V6_Pipe]>], [2, 2]>,
35*9880d681SAndroid Build Coastguard Worker  InstrItinData<IIC_iBITr    , [InstrStage<1, [V6_Pipe]>], [2, 2, 2]>,
36*9880d681SAndroid Build Coastguard Worker  InstrItinData<IIC_iBITsi   , [InstrStage<1, [V6_Pipe]>], [2, 2, 1]>,
37*9880d681SAndroid Build Coastguard Worker  InstrItinData<IIC_iBITsr   , [InstrStage<2, [V6_Pipe]>], [3, 3, 2, 1]>,
38*9880d681SAndroid Build Coastguard Worker  //
39*9880d681SAndroid Build Coastguard Worker  // Unary Instructions that produce a result
40*9880d681SAndroid Build Coastguard Worker  InstrItinData<IIC_iUNAr    , [InstrStage<1, [V6_Pipe]>], [2, 2]>,
41*9880d681SAndroid Build Coastguard Worker  InstrItinData<IIC_iUNAsi   , [InstrStage<1, [V6_Pipe]>], [2, 1]>,
42*9880d681SAndroid Build Coastguard Worker  //
43*9880d681SAndroid Build Coastguard Worker  // Zero and sign extension instructions
44*9880d681SAndroid Build Coastguard Worker  InstrItinData<IIC_iEXTr    , [InstrStage<1, [V6_Pipe]>], [1, 1]>,
45*9880d681SAndroid Build Coastguard Worker  InstrItinData<IIC_iEXTAr   , [InstrStage<1, [V6_Pipe]>], [2, 2, 1]>,
46*9880d681SAndroid Build Coastguard Worker  InstrItinData<IIC_iEXTAsr  , [InstrStage<2, [V6_Pipe]>], [3, 3, 2, 1]>,
47*9880d681SAndroid Build Coastguard Worker  //
48*9880d681SAndroid Build Coastguard Worker  // Compare instructions
49*9880d681SAndroid Build Coastguard Worker  InstrItinData<IIC_iCMPi    , [InstrStage<1, [V6_Pipe]>], [2]>,
50*9880d681SAndroid Build Coastguard Worker  InstrItinData<IIC_iCMPr    , [InstrStage<1, [V6_Pipe]>], [2, 2]>,
51*9880d681SAndroid Build Coastguard Worker  InstrItinData<IIC_iCMPsi   , [InstrStage<1, [V6_Pipe]>], [2, 1]>,
52*9880d681SAndroid Build Coastguard Worker  InstrItinData<IIC_iCMPsr   , [InstrStage<2, [V6_Pipe]>], [3, 2, 1]>,
53*9880d681SAndroid Build Coastguard Worker  //
54*9880d681SAndroid Build Coastguard Worker  // Test instructions
55*9880d681SAndroid Build Coastguard Worker  InstrItinData<IIC_iTSTi    , [InstrStage<1, [V6_Pipe]>], [2]>,
56*9880d681SAndroid Build Coastguard Worker  InstrItinData<IIC_iTSTr    , [InstrStage<1, [V6_Pipe]>], [2, 2]>,
57*9880d681SAndroid Build Coastguard Worker  InstrItinData<IIC_iTSTsi   , [InstrStage<1, [V6_Pipe]>], [2, 1]>,
58*9880d681SAndroid Build Coastguard Worker  InstrItinData<IIC_iTSTsr   , [InstrStage<2, [V6_Pipe]>], [3, 2, 1]>,
59*9880d681SAndroid Build Coastguard Worker  //
60*9880d681SAndroid Build Coastguard Worker  // Move instructions, unconditional
61*9880d681SAndroid Build Coastguard Worker  InstrItinData<IIC_iMOVi    , [InstrStage<1, [V6_Pipe]>], [2]>,
62*9880d681SAndroid Build Coastguard Worker  InstrItinData<IIC_iMOVr    , [InstrStage<1, [V6_Pipe]>], [2, 2]>,
63*9880d681SAndroid Build Coastguard Worker  InstrItinData<IIC_iMOVsi   , [InstrStage<1, [V6_Pipe]>], [2, 1]>,
64*9880d681SAndroid Build Coastguard Worker  InstrItinData<IIC_iMOVsr   , [InstrStage<2, [V6_Pipe]>], [3, 2, 1]>,
65*9880d681SAndroid Build Coastguard Worker  InstrItinData<IIC_iMOVix2  , [InstrStage<1, [V6_Pipe]>,
66*9880d681SAndroid Build Coastguard Worker                                InstrStage<1, [V6_Pipe]>], [2]>,
67*9880d681SAndroid Build Coastguard Worker  InstrItinData<IIC_iMOVix2addpc,[InstrStage<1, [V6_Pipe]>,
68*9880d681SAndroid Build Coastguard Worker                                  InstrStage<1, [V6_Pipe]>,
69*9880d681SAndroid Build Coastguard Worker                                  InstrStage<1, [V6_Pipe]>], [3]>,
70*9880d681SAndroid Build Coastguard Worker  InstrItinData<IIC_iMOVix2ld , [InstrStage<1, [V6_Pipe]>,
71*9880d681SAndroid Build Coastguard Worker                                 InstrStage<1, [V6_Pipe]>,
72*9880d681SAndroid Build Coastguard Worker                                 InstrStage<1, [V6_Pipe]>], [5]>,
73*9880d681SAndroid Build Coastguard Worker  //
74*9880d681SAndroid Build Coastguard Worker  // Move instructions, conditional
75*9880d681SAndroid Build Coastguard Worker  InstrItinData<IIC_iCMOVi   , [InstrStage<1, [V6_Pipe]>], [3]>,
76*9880d681SAndroid Build Coastguard Worker  InstrItinData<IIC_iCMOVr   , [InstrStage<1, [V6_Pipe]>], [3, 2]>,
77*9880d681SAndroid Build Coastguard Worker  InstrItinData<IIC_iCMOVsi  , [InstrStage<1, [V6_Pipe]>], [3, 1]>,
78*9880d681SAndroid Build Coastguard Worker  InstrItinData<IIC_iCMOVsr  , [InstrStage<1, [V6_Pipe]>], [4, 2, 1]>,
79*9880d681SAndroid Build Coastguard Worker  InstrItinData<IIC_iCMOVix2 , [InstrStage<1, [V6_Pipe]>,
80*9880d681SAndroid Build Coastguard Worker                                InstrStage<1, [V6_Pipe]>], [4]>,
81*9880d681SAndroid Build Coastguard Worker  //
82*9880d681SAndroid Build Coastguard Worker  // MVN instructions
83*9880d681SAndroid Build Coastguard Worker  InstrItinData<IIC_iMVNi    , [InstrStage<1, [V6_Pipe]>], [2]>,
84*9880d681SAndroid Build Coastguard Worker  InstrItinData<IIC_iMVNr    , [InstrStage<1, [V6_Pipe]>], [2, 2]>,
85*9880d681SAndroid Build Coastguard Worker  InstrItinData<IIC_iMVNsi   , [InstrStage<1, [V6_Pipe]>], [2, 1]>,
86*9880d681SAndroid Build Coastguard Worker  InstrItinData<IIC_iMVNsr   , [InstrStage<2, [V6_Pipe]>], [3, 2, 1]>,
87*9880d681SAndroid Build Coastguard Worker
88*9880d681SAndroid Build Coastguard Worker  // Integer multiply pipeline
89*9880d681SAndroid Build Coastguard Worker  //
90*9880d681SAndroid Build Coastguard Worker  InstrItinData<IIC_iMUL16   , [InstrStage<1, [V6_Pipe]>], [4, 1, 1]>,
91*9880d681SAndroid Build Coastguard Worker  InstrItinData<IIC_iMAC16   , [InstrStage<1, [V6_Pipe]>], [4, 1, 1, 2]>,
92*9880d681SAndroid Build Coastguard Worker  InstrItinData<IIC_iMUL32   , [InstrStage<2, [V6_Pipe]>], [5, 1, 1]>,
93*9880d681SAndroid Build Coastguard Worker  InstrItinData<IIC_iMAC32   , [InstrStage<2, [V6_Pipe]>], [5, 1, 1, 2]>,
94*9880d681SAndroid Build Coastguard Worker  InstrItinData<IIC_iMUL64   , [InstrStage<3, [V6_Pipe]>], [6, 1, 1]>,
95*9880d681SAndroid Build Coastguard Worker  InstrItinData<IIC_iMAC64   , [InstrStage<3, [V6_Pipe]>], [6, 1, 1, 2]>,
96*9880d681SAndroid Build Coastguard Worker
97*9880d681SAndroid Build Coastguard Worker  // Integer load pipeline
98*9880d681SAndroid Build Coastguard Worker  //
99*9880d681SAndroid Build Coastguard Worker  // Immediate offset
100*9880d681SAndroid Build Coastguard Worker  InstrItinData<IIC_iLoad_i   , [InstrStage<1, [V6_Pipe]>], [4, 1]>,
101*9880d681SAndroid Build Coastguard Worker  InstrItinData<IIC_iLoad_bh_i, [InstrStage<1, [V6_Pipe]>], [4, 1]>,
102*9880d681SAndroid Build Coastguard Worker  InstrItinData<IIC_iLoad_d_i , [InstrStage<1, [V6_Pipe]>], [4, 1]>,
103*9880d681SAndroid Build Coastguard Worker  //
104*9880d681SAndroid Build Coastguard Worker  // Register offset
105*9880d681SAndroid Build Coastguard Worker  InstrItinData<IIC_iLoad_r   , [InstrStage<1, [V6_Pipe]>], [4, 1, 1]>,
106*9880d681SAndroid Build Coastguard Worker  InstrItinData<IIC_iLoad_bh_r, [InstrStage<1, [V6_Pipe]>], [4, 1, 1]>,
107*9880d681SAndroid Build Coastguard Worker  InstrItinData<IIC_iLoad_d_r , [InstrStage<1, [V6_Pipe]>], [4, 1, 1]>,
108*9880d681SAndroid Build Coastguard Worker  //
109*9880d681SAndroid Build Coastguard Worker  // Scaled register offset, issues over 2 cycles
110*9880d681SAndroid Build Coastguard Worker  InstrItinData<IIC_iLoad_si   , [InstrStage<2, [V6_Pipe]>], [5, 2, 1]>,
111*9880d681SAndroid Build Coastguard Worker  InstrItinData<IIC_iLoad_bh_si, [InstrStage<2, [V6_Pipe]>], [5, 2, 1]>,
112*9880d681SAndroid Build Coastguard Worker  //
113*9880d681SAndroid Build Coastguard Worker  // Immediate offset with update
114*9880d681SAndroid Build Coastguard Worker  InstrItinData<IIC_iLoad_iu   , [InstrStage<1, [V6_Pipe]>], [4, 2, 1]>,
115*9880d681SAndroid Build Coastguard Worker  InstrItinData<IIC_iLoad_bh_iu, [InstrStage<1, [V6_Pipe]>], [4, 2, 1]>,
116*9880d681SAndroid Build Coastguard Worker  //
117*9880d681SAndroid Build Coastguard Worker  // Register offset with update
118*9880d681SAndroid Build Coastguard Worker  InstrItinData<IIC_iLoad_ru   , [InstrStage<1, [V6_Pipe]>], [4, 2, 1, 1]>,
119*9880d681SAndroid Build Coastguard Worker  InstrItinData<IIC_iLoad_bh_ru, [InstrStage<1, [V6_Pipe]>], [4, 2, 1, 1]>,
120*9880d681SAndroid Build Coastguard Worker  InstrItinData<IIC_iLoad_d_ru , [InstrStage<1, [V6_Pipe]>], [4, 2, 1, 1]>,
121*9880d681SAndroid Build Coastguard Worker  //
122*9880d681SAndroid Build Coastguard Worker  // Scaled register offset with update, issues over 2 cycles
123*9880d681SAndroid Build Coastguard Worker  InstrItinData<IIC_iLoad_siu,   [InstrStage<2, [V6_Pipe]>], [5, 2, 2, 1]>,
124*9880d681SAndroid Build Coastguard Worker  InstrItinData<IIC_iLoad_bh_siu,[InstrStage<2, [V6_Pipe]>], [5, 2, 2, 1]>,
125*9880d681SAndroid Build Coastguard Worker
126*9880d681SAndroid Build Coastguard Worker  //
127*9880d681SAndroid Build Coastguard Worker  // Load multiple, def is the 5th operand.
128*9880d681SAndroid Build Coastguard Worker  InstrItinData<IIC_iLoad_m  , [InstrStage<3, [V6_Pipe]>], [1, 1, 1, 1, 4]>,
129*9880d681SAndroid Build Coastguard Worker  //
130*9880d681SAndroid Build Coastguard Worker  // Load multiple + update, defs are the 1st and 5th operands.
131*9880d681SAndroid Build Coastguard Worker  InstrItinData<IIC_iLoad_mu , [InstrStage<3, [V6_Pipe]>], [2, 1, 1, 1, 4]>,
132*9880d681SAndroid Build Coastguard Worker  //
133*9880d681SAndroid Build Coastguard Worker  // Load multiple plus branch
134*9880d681SAndroid Build Coastguard Worker  InstrItinData<IIC_iLoad_mBr, [InstrStage<3, [V6_Pipe]>,
135*9880d681SAndroid Build Coastguard Worker                                InstrStage<1, [V6_Pipe]>], [1, 2, 1, 1, 4]>,
136*9880d681SAndroid Build Coastguard Worker
137*9880d681SAndroid Build Coastguard Worker  //
138*9880d681SAndroid Build Coastguard Worker  // iLoadi + iALUr for t2LDRpci_pic.
139*9880d681SAndroid Build Coastguard Worker  InstrItinData<IIC_iLoadiALU, [InstrStage<1, [V6_Pipe]>,
140*9880d681SAndroid Build Coastguard Worker                                InstrStage<1, [V6_Pipe]>], [3, 1]>,
141*9880d681SAndroid Build Coastguard Worker
142*9880d681SAndroid Build Coastguard Worker  //
143*9880d681SAndroid Build Coastguard Worker  // Pop, def is the 3rd operand.
144*9880d681SAndroid Build Coastguard Worker  InstrItinData<IIC_iPop     , [InstrStage<3, [V6_Pipe]>], [1, 1, 4]>,
145*9880d681SAndroid Build Coastguard Worker  //
146*9880d681SAndroid Build Coastguard Worker  // Pop + branch, def is the 3rd operand.
147*9880d681SAndroid Build Coastguard Worker  InstrItinData<IIC_iPop_Br,   [InstrStage<3, [V6_Pipe]>,
148*9880d681SAndroid Build Coastguard Worker                                InstrStage<1, [V6_Pipe]>], [1, 2, 4]>,
149*9880d681SAndroid Build Coastguard Worker
150*9880d681SAndroid Build Coastguard Worker  // Integer store pipeline
151*9880d681SAndroid Build Coastguard Worker  //
152*9880d681SAndroid Build Coastguard Worker  // Immediate offset
153*9880d681SAndroid Build Coastguard Worker  InstrItinData<IIC_iStore_i   , [InstrStage<1, [V6_Pipe]>], [2, 1]>,
154*9880d681SAndroid Build Coastguard Worker  InstrItinData<IIC_iStore_bh_i, [InstrStage<1, [V6_Pipe]>], [2, 1]>,
155*9880d681SAndroid Build Coastguard Worker  InstrItinData<IIC_iStore_d_i , [InstrStage<1, [V6_Pipe]>], [2, 1]>,
156*9880d681SAndroid Build Coastguard Worker  //
157*9880d681SAndroid Build Coastguard Worker  // Register offset
158*9880d681SAndroid Build Coastguard Worker  InstrItinData<IIC_iStore_r   , [InstrStage<1, [V6_Pipe]>], [2, 1, 1]>,
159*9880d681SAndroid Build Coastguard Worker  InstrItinData<IIC_iStore_bh_r, [InstrStage<1, [V6_Pipe]>], [2, 1, 1]>,
160*9880d681SAndroid Build Coastguard Worker  InstrItinData<IIC_iStore_d_r , [InstrStage<1, [V6_Pipe]>], [2, 1, 1]>,
161*9880d681SAndroid Build Coastguard Worker  //
162*9880d681SAndroid Build Coastguard Worker  // Scaled register offset, issues over 2 cycles
163*9880d681SAndroid Build Coastguard Worker  InstrItinData<IIC_iStore_si   , [InstrStage<2, [V6_Pipe]>], [2, 2, 1]>,
164*9880d681SAndroid Build Coastguard Worker  InstrItinData<IIC_iStore_bh_si, [InstrStage<2, [V6_Pipe]>], [2, 2, 1]>,
165*9880d681SAndroid Build Coastguard Worker  //
166*9880d681SAndroid Build Coastguard Worker  // Immediate offset with update
167*9880d681SAndroid Build Coastguard Worker  InstrItinData<IIC_iStore_iu   , [InstrStage<1, [V6_Pipe]>], [2, 2, 1]>,
168*9880d681SAndroid Build Coastguard Worker  InstrItinData<IIC_iStore_bh_iu, [InstrStage<1, [V6_Pipe]>], [2, 2, 1]>,
169*9880d681SAndroid Build Coastguard Worker  //
170*9880d681SAndroid Build Coastguard Worker  // Register offset with update
171*9880d681SAndroid Build Coastguard Worker  InstrItinData<IIC_iStore_ru,   [InstrStage<1, [V6_Pipe]>], [2, 2, 1, 1]>,
172*9880d681SAndroid Build Coastguard Worker  InstrItinData<IIC_iStore_bh_ru,[InstrStage<1, [V6_Pipe]>], [2, 2, 1, 1]>,
173*9880d681SAndroid Build Coastguard Worker  InstrItinData<IIC_iStore_d_ru, [InstrStage<1, [V6_Pipe]>], [2, 2, 1, 1]>,
174*9880d681SAndroid Build Coastguard Worker  //
175*9880d681SAndroid Build Coastguard Worker  // Scaled register offset with update, issues over 2 cycles
176*9880d681SAndroid Build Coastguard Worker  InstrItinData<IIC_iStore_siu,   [InstrStage<2, [V6_Pipe]>], [2, 2, 2, 1]>,
177*9880d681SAndroid Build Coastguard Worker  InstrItinData<IIC_iStore_bh_siu,[InstrStage<2, [V6_Pipe]>], [2, 2, 2, 1]>,
178*9880d681SAndroid Build Coastguard Worker  //
179*9880d681SAndroid Build Coastguard Worker  // Store multiple
180*9880d681SAndroid Build Coastguard Worker  InstrItinData<IIC_iStore_m  , [InstrStage<3, [V6_Pipe]>]>,
181*9880d681SAndroid Build Coastguard Worker  //
182*9880d681SAndroid Build Coastguard Worker  // Store multiple + update
183*9880d681SAndroid Build Coastguard Worker  InstrItinData<IIC_iStore_mu , [InstrStage<3, [V6_Pipe]>], [2]>,
184*9880d681SAndroid Build Coastguard Worker
185*9880d681SAndroid Build Coastguard Worker  // Branch
186*9880d681SAndroid Build Coastguard Worker  //
187*9880d681SAndroid Build Coastguard Worker  // no delay slots, so the latency of a branch is unimportant
188*9880d681SAndroid Build Coastguard Worker  InstrItinData<IIC_Br      , [InstrStage<1, [V6_Pipe]>]>,
189*9880d681SAndroid Build Coastguard Worker
190*9880d681SAndroid Build Coastguard Worker  // VFP
191*9880d681SAndroid Build Coastguard Worker  // Issue through integer pipeline, and execute in NEON unit. We assume
192*9880d681SAndroid Build Coastguard Worker  // RunFast mode so that NFP pipeline is used for single-precision when
193*9880d681SAndroid Build Coastguard Worker  // possible.
194*9880d681SAndroid Build Coastguard Worker  //
195*9880d681SAndroid Build Coastguard Worker  // FP Special Register to Integer Register File Move
196*9880d681SAndroid Build Coastguard Worker  InstrItinData<IIC_fpSTAT , [InstrStage<1, [V6_Pipe]>], [3]>,
197*9880d681SAndroid Build Coastguard Worker  //
198*9880d681SAndroid Build Coastguard Worker  // Single-precision FP Unary
199*9880d681SAndroid Build Coastguard Worker  InstrItinData<IIC_fpUNA32 , [InstrStage<1, [V6_Pipe]>], [5, 2]>,
200*9880d681SAndroid Build Coastguard Worker  //
201*9880d681SAndroid Build Coastguard Worker  // Double-precision FP Unary
202*9880d681SAndroid Build Coastguard Worker  InstrItinData<IIC_fpUNA64 , [InstrStage<1, [V6_Pipe]>], [5, 2]>,
203*9880d681SAndroid Build Coastguard Worker  //
204*9880d681SAndroid Build Coastguard Worker  // Single-precision FP Compare
205*9880d681SAndroid Build Coastguard Worker  InstrItinData<IIC_fpCMP32 , [InstrStage<1, [V6_Pipe]>], [2, 2]>,
206*9880d681SAndroid Build Coastguard Worker  //
207*9880d681SAndroid Build Coastguard Worker  // Double-precision FP Compare
208*9880d681SAndroid Build Coastguard Worker  InstrItinData<IIC_fpCMP64 , [InstrStage<1, [V6_Pipe]>], [2, 2]>,
209*9880d681SAndroid Build Coastguard Worker  //
210*9880d681SAndroid Build Coastguard Worker  // Single to Double FP Convert
211*9880d681SAndroid Build Coastguard Worker  InstrItinData<IIC_fpCVTSD , [InstrStage<1, [V6_Pipe]>], [5, 2]>,
212*9880d681SAndroid Build Coastguard Worker  //
213*9880d681SAndroid Build Coastguard Worker  // Double to Single FP Convert
214*9880d681SAndroid Build Coastguard Worker  InstrItinData<IIC_fpCVTDS , [InstrStage<1, [V6_Pipe]>], [5, 2]>,
215*9880d681SAndroid Build Coastguard Worker  //
216*9880d681SAndroid Build Coastguard Worker  // Single-Precision FP to Integer Convert
217*9880d681SAndroid Build Coastguard Worker  InstrItinData<IIC_fpCVTSI , [InstrStage<1, [V6_Pipe]>], [9, 2]>,
218*9880d681SAndroid Build Coastguard Worker  //
219*9880d681SAndroid Build Coastguard Worker  // Double-Precision FP to Integer Convert
220*9880d681SAndroid Build Coastguard Worker  InstrItinData<IIC_fpCVTDI , [InstrStage<1, [V6_Pipe]>], [9, 2]>,
221*9880d681SAndroid Build Coastguard Worker  //
222*9880d681SAndroid Build Coastguard Worker  // Integer to Single-Precision FP Convert
223*9880d681SAndroid Build Coastguard Worker  InstrItinData<IIC_fpCVTIS , [InstrStage<1, [V6_Pipe]>], [9, 2]>,
224*9880d681SAndroid Build Coastguard Worker  //
225*9880d681SAndroid Build Coastguard Worker  // Integer to Double-Precision FP Convert
226*9880d681SAndroid Build Coastguard Worker  InstrItinData<IIC_fpCVTID , [InstrStage<1, [V6_Pipe]>], [9, 2]>,
227*9880d681SAndroid Build Coastguard Worker  //
228*9880d681SAndroid Build Coastguard Worker  // Single-precision FP ALU
229*9880d681SAndroid Build Coastguard Worker  InstrItinData<IIC_fpALU32 , [InstrStage<1, [V6_Pipe]>], [9, 2, 2]>,
230*9880d681SAndroid Build Coastguard Worker  //
231*9880d681SAndroid Build Coastguard Worker  // Double-precision FP ALU
232*9880d681SAndroid Build Coastguard Worker  InstrItinData<IIC_fpALU64 , [InstrStage<1, [V6_Pipe]>], [9, 2, 2]>,
233*9880d681SAndroid Build Coastguard Worker  //
234*9880d681SAndroid Build Coastguard Worker  // Single-precision FP Multiply
235*9880d681SAndroid Build Coastguard Worker  InstrItinData<IIC_fpMUL32 , [InstrStage<1, [V6_Pipe]>], [9, 2, 2]>,
236*9880d681SAndroid Build Coastguard Worker  //
237*9880d681SAndroid Build Coastguard Worker  // Double-precision FP Multiply
238*9880d681SAndroid Build Coastguard Worker  InstrItinData<IIC_fpMUL64 , [InstrStage<2, [V6_Pipe]>], [9, 2, 2]>,
239*9880d681SAndroid Build Coastguard Worker  //
240*9880d681SAndroid Build Coastguard Worker  // Single-precision FP MAC
241*9880d681SAndroid Build Coastguard Worker  InstrItinData<IIC_fpMAC32 , [InstrStage<1, [V6_Pipe]>], [9, 2, 2, 2]>,
242*9880d681SAndroid Build Coastguard Worker  //
243*9880d681SAndroid Build Coastguard Worker  // Double-precision FP MAC
244*9880d681SAndroid Build Coastguard Worker  InstrItinData<IIC_fpMAC64 , [InstrStage<2, [V6_Pipe]>], [9, 2, 2, 2]>,
245*9880d681SAndroid Build Coastguard Worker  //
246*9880d681SAndroid Build Coastguard Worker  // Single-precision Fused FP MAC
247*9880d681SAndroid Build Coastguard Worker  InstrItinData<IIC_fpFMAC32, [InstrStage<1, [V6_Pipe]>], [9, 2, 2, 2]>,
248*9880d681SAndroid Build Coastguard Worker  //
249*9880d681SAndroid Build Coastguard Worker  // Double-precision Fused FP MAC
250*9880d681SAndroid Build Coastguard Worker  InstrItinData<IIC_fpFMAC64, [InstrStage<2, [V6_Pipe]>], [9, 2, 2, 2]>,
251*9880d681SAndroid Build Coastguard Worker  //
252*9880d681SAndroid Build Coastguard Worker  // Single-precision FP DIV
253*9880d681SAndroid Build Coastguard Worker  InstrItinData<IIC_fpDIV32 , [InstrStage<15, [V6_Pipe]>], [20, 2, 2]>,
254*9880d681SAndroid Build Coastguard Worker  //
255*9880d681SAndroid Build Coastguard Worker  // Double-precision FP DIV
256*9880d681SAndroid Build Coastguard Worker  InstrItinData<IIC_fpDIV64 , [InstrStage<29, [V6_Pipe]>], [34, 2, 2]>,
257*9880d681SAndroid Build Coastguard Worker  //
258*9880d681SAndroid Build Coastguard Worker  // Single-precision FP SQRT
259*9880d681SAndroid Build Coastguard Worker  InstrItinData<IIC_fpSQRT32 , [InstrStage<15, [V6_Pipe]>], [20, 2, 2]>,
260*9880d681SAndroid Build Coastguard Worker  //
261*9880d681SAndroid Build Coastguard Worker  // Double-precision FP SQRT
262*9880d681SAndroid Build Coastguard Worker  InstrItinData<IIC_fpSQRT64 , [InstrStage<29, [V6_Pipe]>], [34, 2, 2]>,
263*9880d681SAndroid Build Coastguard Worker  //
264*9880d681SAndroid Build Coastguard Worker  // Integer to Single-precision Move
265*9880d681SAndroid Build Coastguard Worker  InstrItinData<IIC_fpMOVIS,  [InstrStage<1, [V6_Pipe]>], [10, 1]>,
266*9880d681SAndroid Build Coastguard Worker  //
267*9880d681SAndroid Build Coastguard Worker  // Integer to Double-precision Move
268*9880d681SAndroid Build Coastguard Worker  InstrItinData<IIC_fpMOVID,  [InstrStage<1, [V6_Pipe]>], [10, 1, 1]>,
269*9880d681SAndroid Build Coastguard Worker  //
270*9880d681SAndroid Build Coastguard Worker  // Single-precision to Integer Move
271*9880d681SAndroid Build Coastguard Worker  InstrItinData<IIC_fpMOVSI,  [InstrStage<1, [V6_Pipe]>], [10, 1]>,
272*9880d681SAndroid Build Coastguard Worker  //
273*9880d681SAndroid Build Coastguard Worker  // Double-precision to Integer Move
274*9880d681SAndroid Build Coastguard Worker  InstrItinData<IIC_fpMOVDI,  [InstrStage<1, [V6_Pipe]>], [10, 10, 1]>,
275*9880d681SAndroid Build Coastguard Worker  //
276*9880d681SAndroid Build Coastguard Worker  // Single-precision FP Load
277*9880d681SAndroid Build Coastguard Worker  InstrItinData<IIC_fpLoad32 , [InstrStage<1, [V6_Pipe]>], [5, 2, 2]>,
278*9880d681SAndroid Build Coastguard Worker  //
279*9880d681SAndroid Build Coastguard Worker  // Double-precision FP Load
280*9880d681SAndroid Build Coastguard Worker  InstrItinData<IIC_fpLoad64 , [InstrStage<1, [V6_Pipe]>], [5, 2, 2]>,
281*9880d681SAndroid Build Coastguard Worker  //
282*9880d681SAndroid Build Coastguard Worker  // FP Load Multiple
283*9880d681SAndroid Build Coastguard Worker  InstrItinData<IIC_fpLoad_m , [InstrStage<3, [V6_Pipe]>], [2, 1, 1, 5]>,
284*9880d681SAndroid Build Coastguard Worker  //
285*9880d681SAndroid Build Coastguard Worker  // FP Load Multiple + update
286*9880d681SAndroid Build Coastguard Worker  InstrItinData<IIC_fpLoad_mu, [InstrStage<3, [V6_Pipe]>], [3, 2, 1, 1, 5]>,
287*9880d681SAndroid Build Coastguard Worker  //
288*9880d681SAndroid Build Coastguard Worker  // Single-precision FP Store
289*9880d681SAndroid Build Coastguard Worker  InstrItinData<IIC_fpStore32 , [InstrStage<1, [V6_Pipe]>], [2, 2, 2]>,
290*9880d681SAndroid Build Coastguard Worker  //
291*9880d681SAndroid Build Coastguard Worker  // Double-precision FP Store
292*9880d681SAndroid Build Coastguard Worker  // use FU_Issue to enforce the 1 load/store per cycle limit
293*9880d681SAndroid Build Coastguard Worker  InstrItinData<IIC_fpStore64 , [InstrStage<1, [V6_Pipe]>], [2, 2, 2]>,
294*9880d681SAndroid Build Coastguard Worker  //
295*9880d681SAndroid Build Coastguard Worker  // FP Store Multiple
296*9880d681SAndroid Build Coastguard Worker  InstrItinData<IIC_fpStore_m, [InstrStage<3, [V6_Pipe]>], [2, 2, 2, 2]>,
297*9880d681SAndroid Build Coastguard Worker  //
298*9880d681SAndroid Build Coastguard Worker  // FP Store Multiple + update
299*9880d681SAndroid Build Coastguard Worker  InstrItinData<IIC_fpStore_mu,[InstrStage<3, [V6_Pipe]>], [3, 2, 2, 2, 2]>
300*9880d681SAndroid Build Coastguard Worker]>;
301