mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-11-24 03:33:20 +01:00
Finish scheduling itineraries for NEON.
llvm-svn: 82788
This commit is contained in:
parent
228874127f
commit
89f5854ddd
File diff suppressed because it is too large
Load Diff
@ -225,16 +225,16 @@ def FSQRTS : ASuI<0b11101011, 0b0001, 0b1100, (outs SPR:$dst), (ins SPR:$a),
|
||||
//
|
||||
|
||||
def FMRS : AVConv2I<0b11100001, 0b1010, (outs GPR:$dst), (ins SPR:$src),
|
||||
IIC_fpMOVSI, "fmrs", " $dst, $src",
|
||||
IIC_VMOVSI, "fmrs", " $dst, $src",
|
||||
[(set GPR:$dst, (bitconvert SPR:$src))]>;
|
||||
|
||||
def FMSR : AVConv4I<0b11100000, 0b1010, (outs SPR:$dst), (ins GPR:$src),
|
||||
IIC_fpMOVIS, "fmsr", " $dst, $src",
|
||||
IIC_VMOVIS, "fmsr", " $dst, $src",
|
||||
[(set SPR:$dst, (bitconvert GPR:$src))]>;
|
||||
|
||||
def FMRRD : AVConv3I<0b11000101, 0b1011,
|
||||
(outs GPR:$dst1, GPR:$dst2), (ins DPR:$src),
|
||||
IIC_fpMOVDI, "fmrrd", " $dst1, $dst2, $src",
|
||||
IIC_VMOVDI, "fmrrd", " $dst1, $dst2, $src",
|
||||
[/* FIXME: Can't write pattern for multiple result instr*/]>;
|
||||
|
||||
// FMDHR: GPR -> SPR
|
||||
@ -242,7 +242,7 @@ def FMRRD : AVConv3I<0b11000101, 0b1011,
|
||||
|
||||
def FMDRR : AVConv5I<0b11000100, 0b1011,
|
||||
(outs DPR:$dst), (ins GPR:$src1, GPR:$src2),
|
||||
IIC_fpMOVID, "fmdrr", " $dst, $src1, $src2",
|
||||
IIC_VMOVID, "fmdrr", " $dst, $src1, $src2",
|
||||
[(set DPR:$dst, (arm_fmdrr GPR:$src1, GPR:$src2))]>;
|
||||
|
||||
// FMRDH: SPR -> GPR
|
||||
|
@ -63,10 +63,6 @@ def IIC_iStoresiu : InstrItinClass;
|
||||
def IIC_iStorem : InstrItinClass;
|
||||
def IIC_Br : InstrItinClass;
|
||||
def IIC_fpSTAT : InstrItinClass;
|
||||
def IIC_fpMOVIS : InstrItinClass;
|
||||
def IIC_fpMOVID : InstrItinClass;
|
||||
def IIC_fpMOVSI : InstrItinClass;
|
||||
def IIC_fpMOVDI : InstrItinClass;
|
||||
def IIC_fpUNA32 : InstrItinClass;
|
||||
def IIC_fpUNA64 : InstrItinClass;
|
||||
def IIC_fpCMP32 : InstrItinClass;
|
||||
@ -102,11 +98,21 @@ def IIC_VUNAD : InstrItinClass;
|
||||
def IIC_VUNAQ : InstrItinClass;
|
||||
def IIC_VBIND : InstrItinClass;
|
||||
def IIC_VBINQ : InstrItinClass;
|
||||
def IIC_VMOVImm : InstrItinClass;
|
||||
def IIC_VMOVD : InstrItinClass;
|
||||
def IIC_VMOVQ : InstrItinClass;
|
||||
def IIC_VMOVIS : InstrItinClass;
|
||||
def IIC_VMOVID : InstrItinClass;
|
||||
def IIC_VMOVISL : InstrItinClass;
|
||||
def IIC_VMOVSI : InstrItinClass;
|
||||
def IIC_VMOVDI : InstrItinClass;
|
||||
def IIC_VPERMD : InstrItinClass;
|
||||
def IIC_VPERMQ : InstrItinClass;
|
||||
def IIC_VPERMQ3 : InstrItinClass;
|
||||
def IIC_VMACD : InstrItinClass;
|
||||
def IIC_VMACQ : InstrItinClass;
|
||||
def IIC_VRECSD : InstrItinClass;
|
||||
def IIC_VRECSQ : InstrItinClass;
|
||||
def IIC_VCNTiD : InstrItinClass;
|
||||
def IIC_VCNTiQ : InstrItinClass;
|
||||
def IIC_VUNAiD : InstrItinClass;
|
||||
@ -119,10 +125,30 @@ def IIC_VSUBiD : InstrItinClass;
|
||||
def IIC_VSUBiQ : InstrItinClass;
|
||||
def IIC_VBINi4D : InstrItinClass;
|
||||
def IIC_VBINi4Q : InstrItinClass;
|
||||
def IIC_VSHLiD : InstrItinClass;
|
||||
def IIC_VSHLiQ : InstrItinClass;
|
||||
def IIC_VSHLi4D : InstrItinClass;
|
||||
def IIC_VSHLi4Q : InstrItinClass;
|
||||
def IIC_VPALiD : InstrItinClass;
|
||||
def IIC_VPALiQ : InstrItinClass;
|
||||
def IIC_VMULi16D : InstrItinClass;
|
||||
def IIC_VMULi32D : InstrItinClass;
|
||||
def IIC_VMULi16Q : InstrItinClass;
|
||||
def IIC_VMULi32Q : InstrItinClass;
|
||||
def IIC_VMACi16D : InstrItinClass;
|
||||
def IIC_VMACi32D : InstrItinClass;
|
||||
def IIC_VMACi16Q : InstrItinClass;
|
||||
def IIC_VMACi32Q : InstrItinClass;
|
||||
def IIC_VEXTD : InstrItinClass;
|
||||
def IIC_VEXTQ : InstrItinClass;
|
||||
def IIC_VTB1 : InstrItinClass;
|
||||
def IIC_VTB2 : InstrItinClass;
|
||||
def IIC_VTB3 : InstrItinClass;
|
||||
def IIC_VTB4 : InstrItinClass;
|
||||
def IIC_VTBX1 : InstrItinClass;
|
||||
def IIC_VTBX2 : InstrItinClass;
|
||||
def IIC_VTBX3 : InstrItinClass;
|
||||
def IIC_VTBX4 : InstrItinClass;
|
||||
|
||||
//===----------------------------------------------------------------------===//
|
||||
// Processor instruction itineraries.
|
||||
|
@ -171,23 +171,7 @@ def CortexA8Itineraries : ProcessorItineraries<[
|
||||
//
|
||||
// FP Special Register to Integer Register File Move
|
||||
InstrItinData<IIC_fpSTAT , [InstrStage<1, [FU_Pipe0, FU_Pipe1]>,
|
||||
InstrStage<1, [FU_NLSPipe], 1>]>,
|
||||
//
|
||||
// Integer to Single-Precision FP Register File Move
|
||||
InstrItinData<IIC_fpMOVIS , [InstrStage<1, [FU_Pipe0, FU_Pipe1]>,
|
||||
InstrStage<1, [FU_NLSPipe], 1>]>,
|
||||
//
|
||||
// Integer to Double-Precision FP Register File Move
|
||||
InstrItinData<IIC_fpMOVID , [InstrStage<1, [FU_Pipe0, FU_Pipe1]>,
|
||||
InstrStage<1, [FU_NLSPipe], 1>]>,
|
||||
//
|
||||
// Single-Precision FP to Integer Register File Move
|
||||
InstrItinData<IIC_fpMOVSI , [InstrStage<1, [FU_Pipe0, FU_Pipe1]>,
|
||||
InstrStage<1, [FU_NLSPipe], 1>], [20, 1]>,
|
||||
//
|
||||
// Double-Precision FP to Integer Register File Move
|
||||
InstrItinData<IIC_fpMOVDI , [InstrStage<1, [FU_Pipe0, FU_Pipe1]>,
|
||||
InstrStage<1, [FU_NLSPipe], 1>], [20, 20, 1]>,
|
||||
InstrStage<1, [FU_NLSPipe]>]>,
|
||||
//
|
||||
// Single-precision FP Unary
|
||||
InstrItinData<IIC_fpUNA32 , [InstrStage<1, [FU_Pipe0, FU_Pipe1]>,
|
||||
@ -385,6 +369,10 @@ def CortexA8Itineraries : ProcessorItineraries<[
|
||||
InstrItinData<IIC_VBINQ, [InstrStage<1, [FU_Pipe0, FU_Pipe1]>,
|
||||
InstrStage<2, [FU_NPipe]>], [6, 2, 2]>,
|
||||
//
|
||||
// Move Immediate
|
||||
InstrItinData<IIC_VMOVImm, [InstrStage<1, [FU_Pipe0, FU_Pipe1]>,
|
||||
InstrStage<1, [FU_NPipe]>], [3]>,
|
||||
//
|
||||
// Double-register Permute Move
|
||||
InstrItinData<IIC_VMOVD, [InstrStage<1, [FU_Pipe0, FU_Pipe1]>,
|
||||
InstrStage<1, [FU_NLSPipe]>], [2, 1]>,
|
||||
@ -395,6 +383,26 @@ def CortexA8Itineraries : ProcessorItineraries<[
|
||||
InstrItinData<IIC_VMOVQ, [InstrStage<1, [FU_Pipe0, FU_Pipe1]>,
|
||||
InstrStage<2, [FU_NLSPipe]>], [3, 1]>,
|
||||
//
|
||||
// Integer to Single-precision Move
|
||||
InstrItinData<IIC_VMOVIS , [InstrStage<1, [FU_Pipe0, FU_Pipe1]>,
|
||||
InstrStage<1, [FU_NLSPipe]>], [2, 1]>,
|
||||
//
|
||||
// Integer to Double-precision Move
|
||||
InstrItinData<IIC_VMOVID , [InstrStage<1, [FU_Pipe0, FU_Pipe1]>,
|
||||
InstrStage<1, [FU_NLSPipe]>], [2, 1, 1]>,
|
||||
//
|
||||
// Single-precision to Integer Move
|
||||
InstrItinData<IIC_VMOVSI , [InstrStage<1, [FU_Pipe0, FU_Pipe1]>,
|
||||
InstrStage<1, [FU_NLSPipe]>], [20, 1]>,
|
||||
//
|
||||
// Double-precision to Integer Move
|
||||
InstrItinData<IIC_VMOVDI , [InstrStage<1, [FU_Pipe0, FU_Pipe1]>,
|
||||
InstrStage<1, [FU_NLSPipe]>], [20, 20, 1]>,
|
||||
//
|
||||
// Integer to Lane Move
|
||||
InstrItinData<IIC_VMOVISL , [InstrStage<1, [FU_Pipe0, FU_Pipe1]>,
|
||||
InstrStage<2, [FU_NLSPipe]>], [3, 1, 1]>,
|
||||
//
|
||||
// Double-register Permute
|
||||
InstrItinData<IIC_VPERMD, [InstrStage<1, [FU_Pipe0, FU_Pipe1]>,
|
||||
InstrStage<1, [FU_NLSPipe]>], [2, 2, 1, 1]>,
|
||||
@ -413,15 +421,33 @@ def CortexA8Itineraries : ProcessorItineraries<[
|
||||
InstrStage<1, [FU_NPipe], 0>,
|
||||
InstrStage<2, [FU_NLSPipe]>], [4, 4, 1, 1]>,
|
||||
//
|
||||
// Double-register FP Multiple-Accumulate
|
||||
InstrItinData<IIC_VMACD, [InstrStage<1, [FU_Pipe0, FU_Pipe1]>,
|
||||
InstrStage<1, [FU_NPipe]>], [9, 2, 2, 3]>,
|
||||
//
|
||||
// Quad-register FP Multiple-Accumulate
|
||||
// Result written in N9, but that is relative to the last cycle of multicycle,
|
||||
// so we use 10 for those cases
|
||||
InstrItinData<IIC_VMACQ, [InstrStage<1, [FU_Pipe0, FU_Pipe1]>,
|
||||
InstrStage<2, [FU_NPipe]>], [10, 2, 2, 3]>,
|
||||
//
|
||||
// Double-register Reciprical Step
|
||||
InstrItinData<IIC_VRECSD, [InstrStage<1, [FU_Pipe0, FU_Pipe1]>,
|
||||
InstrStage<1, [FU_NPipe]>], [9, 2, 2]>,
|
||||
//
|
||||
// Quad-register Reciprical Step
|
||||
InstrItinData<IIC_VRECSQ, [InstrStage<1, [FU_Pipe0, FU_Pipe1]>,
|
||||
InstrStage<2, [FU_NPipe]>], [10, 2, 2]>,
|
||||
//
|
||||
// Double-register Integer Count
|
||||
InstrItinData<IIC_VCNTiD, [InstrStage<1, [FU_Pipe0, FU_Pipe1]>,
|
||||
InstrStage<1, [FU_NPipe]>], [3, 2]>,
|
||||
InstrStage<1, [FU_NPipe]>], [3, 2, 2]>,
|
||||
//
|
||||
// Quad-register Integer Count
|
||||
// Result written in N3, but that is relative to the last cycle of multicycle,
|
||||
// so we use 4 for those cases
|
||||
InstrItinData<IIC_VCNTiQ, [InstrStage<1, [FU_Pipe0, FU_Pipe1]>,
|
||||
InstrStage<2, [FU_NPipe]>], [4, 2]>,
|
||||
InstrStage<2, [FU_NPipe]>], [4, 2, 2]>,
|
||||
//
|
||||
// Double-register Integer Unary
|
||||
InstrItinData<IIC_VUNAiD, [InstrStage<1, [FU_Pipe0, FU_Pipe1]>,
|
||||
@ -463,6 +489,30 @@ def CortexA8Itineraries : ProcessorItineraries<[
|
||||
InstrItinData<IIC_VSUBiQ, [InstrStage<1, [FU_Pipe0, FU_Pipe1]>,
|
||||
InstrStage<1, [FU_NPipe]>], [3, 2, 1]>,
|
||||
//
|
||||
// Double-register Integer Shift
|
||||
InstrItinData<IIC_VSHLiD, [InstrStage<1, [FU_Pipe0, FU_Pipe1]>,
|
||||
InstrStage<1, [FU_NPipe]>], [3, 1, 1]>,
|
||||
//
|
||||
// Quad-register Integer Shift
|
||||
InstrItinData<IIC_VSHLiQ, [InstrStage<1, [FU_Pipe0, FU_Pipe1]>,
|
||||
InstrStage<2, [FU_NPipe]>], [4, 1, 1]>,
|
||||
//
|
||||
// Double-register Integer Shift (4 cycle)
|
||||
InstrItinData<IIC_VSHLi4D, [InstrStage<1, [FU_Pipe0, FU_Pipe1]>,
|
||||
InstrStage<1, [FU_NPipe]>], [4, 1, 1]>,
|
||||
//
|
||||
// Quad-register Integer Shift (4 cycle)
|
||||
InstrItinData<IIC_VSHLi4Q, [InstrStage<1, [FU_Pipe0, FU_Pipe1]>,
|
||||
InstrStage<2, [FU_NPipe]>], [5, 1, 1]>,
|
||||
//
|
||||
// Double-register Integer Pair Add Long
|
||||
InstrItinData<IIC_VPALiD, [InstrStage<1, [FU_Pipe0, FU_Pipe1]>,
|
||||
InstrStage<1, [FU_NPipe]>], [6, 3, 2, 1]>,
|
||||
//
|
||||
// Quad-register Integer Pair Add Long
|
||||
InstrItinData<IIC_VPALiQ, [InstrStage<1, [FU_Pipe0, FU_Pipe1]>,
|
||||
InstrStage<2, [FU_NPipe]>], [7, 3, 2, 1]>,
|
||||
//
|
||||
// Double-register Integer Multiply (.8, .16)
|
||||
InstrItinData<IIC_VMULi16D, [InstrStage<1, [FU_Pipe0, FU_Pipe1]>,
|
||||
InstrStage<1, [FU_NPipe]>], [6, 2, 2]>,
|
||||
@ -479,7 +529,59 @@ def CortexA8Itineraries : ProcessorItineraries<[
|
||||
InstrItinData<IIC_VMULi32Q, [InstrStage<1, [FU_Pipe0, FU_Pipe1]>,
|
||||
InstrStage<1, [FU_NPipe]>,
|
||||
InstrStage<2, [FU_NLSPipe], 0>,
|
||||
InstrStage<3, [FU_NPipe]>], [9, 2, 1]>
|
||||
|
||||
|
||||
InstrStage<3, [FU_NPipe]>], [9, 2, 1]>,
|
||||
//
|
||||
// Double-register Integer Multiply-Accumulate (.8, .16)
|
||||
InstrItinData<IIC_VMACi16D, [InstrStage<1, [FU_Pipe0, FU_Pipe1]>,
|
||||
InstrStage<1, [FU_NPipe]>], [6, 2, 2, 3]>,
|
||||
//
|
||||
// Double-register Integer Multiply-Accumulate (.32)
|
||||
InstrItinData<IIC_VMACi32D, [InstrStage<1, [FU_Pipe0, FU_Pipe1]>,
|
||||
InstrStage<2, [FU_NPipe]>], [7, 2, 1, 3]>,
|
||||
//
|
||||
// Quad-register Integer Multiply-Accumulate (.8, .16)
|
||||
InstrItinData<IIC_VMACi16Q, [InstrStage<1, [FU_Pipe0, FU_Pipe1]>,
|
||||
InstrStage<2, [FU_NPipe]>], [7, 2, 2, 3]>,
|
||||
//
|
||||
// Quad-register Integer Multiply-Accumulate (.32)
|
||||
InstrItinData<IIC_VMACi32Q, [InstrStage<1, [FU_Pipe0, FU_Pipe1]>,
|
||||
InstrStage<1, [FU_NPipe]>,
|
||||
InstrStage<2, [FU_NLSPipe], 0>,
|
||||
InstrStage<3, [FU_NPipe]>], [9, 2, 1, 3]>,
|
||||
//
|
||||
// Double-register VEXT
|
||||
InstrItinData<IIC_VEXTD, [InstrStage<1, [FU_Pipe0, FU_Pipe1]>,
|
||||
InstrStage<1, [FU_NLSPipe]>], [2, 1, 1]>,
|
||||
//
|
||||
// Quad-register VEXT
|
||||
InstrItinData<IIC_VEXTQ, [InstrStage<1, [FU_Pipe0, FU_Pipe1]>,
|
||||
InstrStage<2, [FU_NLSPipe]>], [3, 1, 1]>,
|
||||
//
|
||||
// VTB
|
||||
InstrItinData<IIC_VTB1, [InstrStage<1, [FU_Pipe0, FU_Pipe1]>,
|
||||
InstrStage<2, [FU_NLSPipe]>], [3, 2, 1]>,
|
||||
InstrItinData<IIC_VTB2, [InstrStage<1, [FU_Pipe0, FU_Pipe1]>,
|
||||
InstrStage<2, [FU_NLSPipe]>], [3, 2, 2, 1]>,
|
||||
InstrItinData<IIC_VTB3, [InstrStage<1, [FU_Pipe0, FU_Pipe1]>,
|
||||
InstrStage<1, [FU_NLSPipe]>,
|
||||
InstrStage<1, [FU_NPipe], 0>,
|
||||
InstrStage<2, [FU_NLSPipe]>], [4, 2, 2, 3, 1]>,
|
||||
InstrItinData<IIC_VTB4, [InstrStage<1, [FU_Pipe0, FU_Pipe1]>,
|
||||
InstrStage<1, [FU_NLSPipe]>,
|
||||
InstrStage<1, [FU_NPipe], 0>,
|
||||
InstrStage<2, [FU_NLSPipe]>], [4, 2, 2, 3, 3, 1]>,
|
||||
//
|
||||
// VTBX
|
||||
InstrItinData<IIC_VTBX1, [InstrStage<1, [FU_Pipe0, FU_Pipe1]>,
|
||||
InstrStage<2, [FU_NLSPipe]>], [3, 1, 2, 1]>,
|
||||
InstrItinData<IIC_VTBX2, [InstrStage<1, [FU_Pipe0, FU_Pipe1]>,
|
||||
InstrStage<2, [FU_NLSPipe]>], [3, 1, 2, 2, 1]>,
|
||||
InstrItinData<IIC_VTBX3, [InstrStage<1, [FU_Pipe0, FU_Pipe1]>,
|
||||
InstrStage<1, [FU_NLSPipe]>,
|
||||
InstrStage<1, [FU_NPipe], 0>,
|
||||
InstrStage<2, [FU_NLSPipe]>], [4, 1, 2, 2, 3, 1]>,
|
||||
InstrItinData<IIC_VTBX4, [InstrStage<1, [FU_Pipe0, FU_Pipe1]>,
|
||||
InstrStage<1, [FU_NLSPipe]>,
|
||||
InstrStage<1, [FU_NPipe], 0>,
|
||||
InstrStage<2, [FU_NLSPipe]>], [4, 1, 2, 2, 3, 3, 1]>
|
||||
]>;
|
||||
|
Loading…
Reference in New Issue
Block a user