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