diff options
author | Zoran Jovanovic <zoran.jovanovic@imgtec.com> | 2014-05-16 10:27:10 +0000 |
---|---|---|
committer | Zoran Jovanovic <zoran.jovanovic@imgtec.com> | 2014-05-16 10:27:10 +0000 |
commit | e4dfc196e4add93dabd006dd110d88fe3069dd85 (patch) | |
tree | a8705718c7e4afc2de410f63411f0afacab8dab6 /lib/Target/Mips | |
parent | 5f32c76db1c9d2f89a55cb4e452e8523dc43b79b (diff) | |
download | llvm-e4dfc196e4add93dabd006dd110d88fe3069dd85.tar.gz llvm-e4dfc196e4add93dabd006dd110d88fe3069dd85.tar.bz2 llvm-e4dfc196e4add93dabd006dd110d88fe3069dd85.tar.xz |
[mips][mips64r6] Add LWPC and LWUPC instructions
Differential Revision: http://reviews.llvm.org/D3788
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@208971 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/Target/Mips')
-rw-r--r-- | lib/Target/Mips/Mips32r6InstrFormats.td | 2 | ||||
-rw-r--r-- | lib/Target/Mips/Mips32r6InstrInfo.td | 13 |
2 files changed, 11 insertions, 4 deletions
diff --git a/lib/Target/Mips/Mips32r6InstrFormats.td b/lib/Target/Mips/Mips32r6InstrFormats.td index 3fe8f918c5..4d49ca1812 100644 --- a/lib/Target/Mips/Mips32r6InstrFormats.td +++ b/lib/Target/Mips/Mips32r6InstrFormats.td @@ -35,6 +35,8 @@ class OPCODE2<bits<2> Val> { bits<2> Value = Val; } def OPCODE2_ADDIUPC : OPCODE2<0b00>; +def OPCODE2_LWPC : OPCODE2<0b01>; +def OPCODE2_LWUPC : OPCODE2<0b10>; class OPCODE5<bits<5> Val> { bits<5> Value = Val; diff --git a/lib/Target/Mips/Mips32r6InstrInfo.td b/lib/Target/Mips/Mips32r6InstrInfo.td index 6f2548c608..9c57ed6c7a 100644 --- a/lib/Target/Mips/Mips32r6InstrInfo.td +++ b/lib/Target/Mips/Mips32r6InstrInfo.td @@ -81,6 +81,9 @@ class MSUBF_D_ENC : COP1_3R_FM<0b011001, FIELD_FMT_D>; class SEL_D_ENC : COP1_3R_FM<0b010000, FIELD_FMT_D>; class SEL_S_ENC : COP1_3R_FM<0b010000, FIELD_FMT_S>; +class LWPC_ENC : PCREL19_FM<OPCODE2_LWPC>; +class LWUPC_ENC : PCREL19_FM<OPCODE2_LWUPC>; + class MAX_S_ENC : COP1_3R_FM<0b011101, FIELD_FMT_S>; class MAX_D_ENC : COP1_3R_FM<0b011101, FIELD_FMT_D>; class MIN_S_ENC : COP1_3R_FM<0b011100, FIELD_FMT_S>; @@ -172,14 +175,16 @@ multiclass CMP_CC_M <FIELD_CMP_FORMAT Format, string Typestr, // //===----------------------------------------------------------------------===// -class ADDIUPC_DESC_BASE<string instr_asm, RegisterOperand GPROpnd> { +class PCREL19_DESC_BASE<string instr_asm, RegisterOperand GPROpnd> { dag OutOperandList = (outs GPROpnd:$rs); dag InOperandList = (ins simm19_lsl2:$imm); string AsmString = !strconcat(instr_asm, "\t$rs, $imm"); list<dag> Pattern = []; } -class ADDIUPC_DESC : ADDIUPC_DESC_BASE<"addiupc", GPR32Opnd>; +class ADDIUPC_DESC : PCREL19_DESC_BASE<"addiupc", GPR32Opnd>; +class LWPC_DESC: PCREL19_DESC_BASE<"lwpc", GPR32Opnd>; +class LWUPC_DESC: PCREL19_DESC_BASE<"lwupc", GPR32Opnd>; class ALIGN_DESC_BASE<string instr_asm, RegisterOperand GPROpnd, Operand ImmOpnd> { @@ -347,8 +352,8 @@ def DIVU : DIVU_ENC, DIVU_DESC, ISA_MIPS32R6; def JIALC; def JIC; // def LSA; // See MSA -def LWPC; -def LWUPC; +def LWPC : LWPC_ENC, LWPC_DESC, ISA_MIPS32R6; +def LWUPC : LWUPC_ENC, LWUPC_DESC, ISA_MIPS32R6; def MADDF_S : MADDF_S_ENC, MADDF_S_DESC, ISA_MIPS32R6; def MADDF_D : MADDF_D_ENC, MADDF_D_DESC, ISA_MIPS32R6; def MAXA_D : MAXA_D_ENC, MAXA_D_DESC, ISA_MIPS32R6; |