diff options
| author | Matheus Almeida <matheus.almeida@imgtec.com> | 2013-10-21 12:56:20 +0000 |
|---|---|---|
| committer | Matheus Almeida <matheus.almeida@imgtec.com> | 2013-10-21 12:56:20 +0000 |
| commit | 8ddad151770aa759dc9a27386c561c90dac872ab (patch) | |
| tree | 97373c6b60b49997307f22ca320cc8eaa45951af /llvm/lib/Target/Mips | |
| parent | 83d797de4a58661d18ce7f53953767cf00be0fdd (diff) | |
| download | bcm5719-llvm-8ddad151770aa759dc9a27386c561c90dac872ab.tar.gz bcm5719-llvm-8ddad151770aa759dc9a27386c561c90dac872ab.zip | |
[mips][msa] Direct Object Emission support for LDI instructions.
llvm-svn: 193081
Diffstat (limited to 'llvm/lib/Target/Mips')
| -rw-r--r-- | llvm/lib/Target/Mips/MipsMSAInstrFormats.td | 5 | ||||
| -rw-r--r-- | llvm/lib/Target/Mips/MipsMSAInstrInfo.td | 16 |
2 files changed, 13 insertions, 8 deletions
diff --git a/llvm/lib/Target/Mips/MipsMSAInstrFormats.td b/llvm/lib/Target/Mips/MipsMSAInstrFormats.td index 6e5a5eaf313..bbb407a6a67 100644 --- a/llvm/lib/Target/Mips/MipsMSAInstrFormats.td +++ b/llvm/lib/Target/Mips/MipsMSAInstrFormats.td @@ -331,8 +331,13 @@ class MSA_I8_FMT<bits<2> major, bits<6> minor>: MSAInst { } class MSA_I10_FMT<bits<3> major, bits<2> df, bits<6> minor>: MSAInst { + bits<10> s10; + bits<5> wd; + let Inst{25-23} = major; let Inst{22-21} = df; + let Inst{20-11} = s10; + let Inst{10-6} = wd; let Inst{5-0} = minor; } diff --git a/llvm/lib/Target/Mips/MipsMSAInstrInfo.td b/llvm/lib/Target/Mips/MipsMSAInstrInfo.td index b4d05f7438e..0199b8c0764 100644 --- a/llvm/lib/Target/Mips/MipsMSAInstrInfo.td +++ b/llvm/lib/Target/Mips/MipsMSAInstrInfo.td @@ -1149,11 +1149,11 @@ class MSA_I8_SHF_DESC_BASE<string instr_asm, RegisterOperand ROWD, InstrItinClass Itinerary = itin; } -class MSA_I10_LDI_DESC_BASE<string instr_asm, RegisterClass RCWD, +class MSA_I10_LDI_DESC_BASE<string instr_asm, RegisterOperand ROWD, InstrItinClass itin = NoItinerary> { - dag OutOperandList = (outs RCWD:$wd); - dag InOperandList = (ins vsplat_simm10:$i10); - string AsmString = !strconcat(instr_asm, "\t$wd, $i10"); + dag OutOperandList = (outs ROWD:$wd); + dag InOperandList = (ins vsplat_simm10:$s10); + string AsmString = !strconcat(instr_asm, "\t$wd, $s10"); // LDI is matched using custom matching code in MipsSEISelDAGToDAG.cpp list<dag> Pattern = []; bit hasSideEffects = 0; @@ -2052,10 +2052,10 @@ class LD_H_DESC : LD_DESC_BASE<"ld.h", load, v8i16, MSA128H>; class LD_W_DESC : LD_DESC_BASE<"ld.w", load, v4i32, MSA128W>; class LD_D_DESC : LD_DESC_BASE<"ld.d", load, v2i64, MSA128D>; -class LDI_B_DESC : MSA_I10_LDI_DESC_BASE<"ldi.b", MSA128B>; -class LDI_H_DESC : MSA_I10_LDI_DESC_BASE<"ldi.h", MSA128H>; -class LDI_W_DESC : MSA_I10_LDI_DESC_BASE<"ldi.w", MSA128W>; -class LDI_D_DESC : MSA_I10_LDI_DESC_BASE<"ldi.d", MSA128D>; +class LDI_B_DESC : MSA_I10_LDI_DESC_BASE<"ldi.b", MSA128BOpnd>; +class LDI_H_DESC : MSA_I10_LDI_DESC_BASE<"ldi.h", MSA128HOpnd>; +class LDI_W_DESC : MSA_I10_LDI_DESC_BASE<"ldi.w", MSA128WOpnd>; +class LDI_D_DESC : MSA_I10_LDI_DESC_BASE<"ldi.d", MSA128DOpnd>; class LSA_DESC { dag OutOperandList = (outs GPR32:$rd); |

