diff options
| author | Simon Dardis <simon.dardis@imgtec.com> | 2017-07-12 14:48:27 +0000 |
|---|---|---|
| committer | Simon Dardis <simon.dardis@imgtec.com> | 2017-07-12 14:48:27 +0000 |
| commit | 2de1ddbd9c592c5297c6f02e52a472af2ed2ea3c (patch) | |
| tree | 95cb2499fbf81700546af3a2b06a5ff7c9d141d2 /llvm/lib | |
| parent | 3e8a461bdfb725f0d07b55b4a0fad4511063a91a (diff) | |
| download | bcm5719-llvm-2de1ddbd9c592c5297c6f02e52a472af2ed2ea3c.tar.gz bcm5719-llvm-2de1ddbd9c592c5297c6f02e52a472af2ed2ea3c.zip | |
[mips][mt][4/7] Add IAS support for dvpe, evpe instructions.
Reviewers: slthakur, atanasyan
Differential Revision: https://reviews.llvm.org/D35251
llvm-svn: 307793
Diffstat (limited to 'llvm/lib')
| -rw-r--r-- | llvm/lib/Target/Mips/MipsMTInstrFormats.td | 5 | ||||
| -rw-r--r-- | llvm/lib/Target/Mips/MipsMTInstrInfo.td | 22 | ||||
| -rw-r--r-- | llvm/lib/Target/Mips/MipsSchedule.td | 4 | ||||
| -rw-r--r-- | llvm/lib/Target/Mips/MipsScheduleGeneric.td | 2 |
4 files changed, 28 insertions, 5 deletions
diff --git a/llvm/lib/Target/Mips/MipsMTInstrFormats.td b/llvm/lib/Target/Mips/MipsMTInstrFormats.td index 588b8cccb52..81809cdf760 100644 --- a/llvm/lib/Target/Mips/MipsMTInstrFormats.td +++ b/llvm/lib/Target/Mips/MipsMTInstrFormats.td @@ -25,8 +25,8 @@ class OPCODE1<bits<1> Val> { bits<1> Value = Val; } -def OPCODE_SC_DMT : OPCODE1<0b0>; -def OPCODE_SC_EMT : OPCODE1<0b1>; +def OPCODE_SC_D : OPCODE1<0b0>; +def OPCODE_SC_E : OPCODE1<0b1>; class FIELD5<bits<5> Val> { bits<5> Value = Val; @@ -34,6 +34,7 @@ class FIELD5<bits<5> Val> { def FIELD5_1_DMT_EMT : FIELD5<0b00001>; def FIELD5_2_DMT_EMT : FIELD5<0b01111>; +def FIELD5_1_2_DVPE_EVPE : FIELD5<0b00000>; class COP0_MFMC0_MT<FIELD5 Op1, FIELD5 Op2, OPCODE1 sc> : MipsMTInst { bits<32> Inst; diff --git a/llvm/lib/Target/Mips/MipsMTInstrInfo.td b/llvm/lib/Target/Mips/MipsMTInstrInfo.td index 54e1b25d4b8..722024b8c0b 100644 --- a/llvm/lib/Target/Mips/MipsMTInstrInfo.td +++ b/llvm/lib/Target/Mips/MipsMTInstrInfo.td @@ -12,10 +12,16 @@ //===----------------------------------------------------------------------===// class DMT_ENC : COP0_MFMC0_MT<FIELD5_1_DMT_EMT, FIELD5_2_DMT_EMT, - OPCODE_SC_DMT>; + OPCODE_SC_D>; class EMT_ENC : COP0_MFMC0_MT<FIELD5_1_DMT_EMT, FIELD5_2_DMT_EMT, - OPCODE_SC_EMT>; + OPCODE_SC_E>; + +class DVPE_ENC : COP0_MFMC0_MT<FIELD5_1_2_DVPE_EVPE, FIELD5_1_2_DVPE_EVPE, + OPCODE_SC_D>; + +class EVPE_ENC : COP0_MFMC0_MT<FIELD5_1_2_DVPE_EVPE, FIELD5_1_2_DVPE_EVPE, + OPCODE_SC_E>; //===----------------------------------------------------------------------===// // MIPS MT Instruction Descriptions @@ -33,6 +39,10 @@ class DMT_DESC : MT_1R_DESC_BASE<"dmt", II_DMT>; class EMT_DESC : MT_1R_DESC_BASE<"emt", II_EMT>; +class DVPE_DESC : MT_1R_DESC_BASE<"dvpe", II_DVPE>; + +class EVPE_DESC : MT_1R_DESC_BASE<"evpe", II_EVPE>; + //===----------------------------------------------------------------------===// // MIPS MT Instruction Definitions //===----------------------------------------------------------------------===// @@ -41,6 +51,10 @@ let hasSideEffects = 1, isNotDuplicable = 1, def DMT : DMT_ENC, DMT_DESC, ASE_MT; def EMT : EMT_ENC, EMT_DESC, ASE_MT; + + def DVPE : DVPE_ENC, DVPE_DESC, ASE_MT; + + def EVPE : EVPE_ENC, EVPE_DESC, ASE_MT; } //===----------------------------------------------------------------------===// @@ -51,4 +65,8 @@ let AdditionalPredicates = [NotInMicroMips] in { def : MipsInstAlias<"dmt", (DMT ZERO), 1>, ASE_MT; def : MipsInstAlias<"emt", (EMT ZERO), 1>, ASE_MT; + + def : MipsInstAlias<"dvpe", (DVPE ZERO), 1>, ASE_MT; + + def : MipsInstAlias<"evpe", (EVPE ZERO), 1>, ASE_MT; } diff --git a/llvm/lib/Target/Mips/MipsSchedule.td b/llvm/lib/Target/Mips/MipsSchedule.td index 99fde2c159c..cc64f3cc9e4 100644 --- a/llvm/lib/Target/Mips/MipsSchedule.td +++ b/llvm/lib/Target/Mips/MipsSchedule.td @@ -114,7 +114,9 @@ def II_DSBH : InstrItinClass; def II_DSHD : InstrItinClass; def II_DSUBU : InstrItinClass; def II_DSUB : InstrItinClass; +def II_DVPE : InstrItinClass; def II_EMT : InstrItinClass; +def II_EVPE : InstrItinClass; def II_EXT : InstrItinClass; // Any EXT instruction def II_FLOOR : InstrItinClass; def II_INS : InstrItinClass; // Any INS instruction @@ -407,7 +409,9 @@ def MipsGenericItineraries : ProcessorItineraries<[ALU, IMULDIV], [], [ InstrItinData<II_DSHD , [InstrStage<1, [ALU]>]>, InstrItinData<II_DCLO , [InstrStage<1, [ALU]>]>, InstrItinData<II_DCLZ , [InstrStage<1, [ALU]>]>, + InstrItinData<II_DVPE , [InstrStage<2, [ALU]>]>, InstrItinData<II_EMT , [InstrStage<2, [ALU]>]>, + InstrItinData<II_EVPE , [InstrStage<2, [ALU]>]>, InstrItinData<II_EXT , [InstrStage<1, [ALU]>]>, InstrItinData<II_INS , [InstrStage<1, [ALU]>]>, InstrItinData<II_LUI , [InstrStage<1, [ALU]>]>, diff --git a/llvm/lib/Target/Mips/MipsScheduleGeneric.td b/llvm/lib/Target/Mips/MipsScheduleGeneric.td index c35d98f208e..12e42514658 100644 --- a/llvm/lib/Target/Mips/MipsScheduleGeneric.td +++ b/llvm/lib/Target/Mips/MipsScheduleGeneric.td @@ -264,7 +264,7 @@ def : ItinRW<[GenericWriteLoad], [II_LWLE, II_LWRE]>; // MIPS MT instructions // ==================== -def : ItinRW<[GenericWriteMove], [II_DMT, II_EMT]>; +def : ItinRW<[GenericWriteMove], [II_DMT, II_DVPE, II_EMT, II_EVPE]>; // MIPS32R6 and MIPS16e |

