diff options
author | Daniel Sanders <daniel.sanders@imgtec.com> | 2014-05-12 15:39:10 +0000 |
---|---|---|
committer | Daniel Sanders <daniel.sanders@imgtec.com> | 2014-05-12 15:39:10 +0000 |
commit | 87010f33a8600d18cd6db9517f33104ca4fca770 (patch) | |
tree | 53f2229efd2769cd6cfa9f52f3745014c880c77d /lib/Target/Mips/Mips32r6InstrFormats.td | |
parent | 05052f660b373c2ee46db4ab12669cf38229165a (diff) |
[mips][mips64r6] Add sel.s and sel.d
Summary:
Also use named constants for common opcode fields.
Depends on D3669
Reviewers: jkolek, vmedic, zoran.jovanovic
Differential Revision: http://reviews.llvm.org/D3670
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@208582 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/Target/Mips/Mips32r6InstrFormats.td')
-rw-r--r-- | lib/Target/Mips/Mips32r6InstrFormats.td | 39 |
1 files changed, 37 insertions, 2 deletions
diff --git a/lib/Target/Mips/Mips32r6InstrFormats.td b/lib/Target/Mips/Mips32r6InstrFormats.td index 241cde2a825..4471870fa31 100644 --- a/lib/Target/Mips/Mips32r6InstrFormats.td +++ b/lib/Target/Mips/Mips32r6InstrFormats.td @@ -17,6 +17,42 @@ class MipsR6Inst : MipsInst<(outs), (ins), "", [], NoItinerary, FrmOther>, let EncodingPredicates = [HasStdEnc]; } +//===----------------------------------------------------------------------===// +// +// Field Values +// +//===----------------------------------------------------------------------===// + +def OPGROUP_COP1 { bits<6> Value = 0b010001; } +def OPGROUP_SPECIAL { bits<6> Value = 0b000000; } + +class FIELD_FMT<bits<5> Val> { + bits<5> Value = Val; +} +def FIELD_FMT_S : FIELD_FMT<0b10000>; +def FIELD_FMT_D : FIELD_FMT<0b10001>; + +//===----------------------------------------------------------------------===// +// +// Encoding Formats +// +//===----------------------------------------------------------------------===// + +class COP1_SEL_FM<FIELD_FMT Format> : MipsR6Inst { + bits<5> ft; + bits<5> fs; + bits<5> fd; + + bits<32> Inst; + + let Inst{31-26} = OPGROUP_COP1.Value; + let Inst{25-21} = Format.Value; + let Inst{20-16} = ft; + let Inst{15-11} = fs; + let Inst{10-6} = fd; + let Inst{5-0} = 0b010000; +} + class SPECIAL_3R_FM<bits<5> mulop, bits<6> funct> : MipsR6Inst { bits<5> rd; bits<5> rs; @@ -24,11 +60,10 @@ class SPECIAL_3R_FM<bits<5> mulop, bits<6> funct> : MipsR6Inst { bits<32> Inst; - let Inst{31-26} = 0b00000; + let Inst{31-26} = OPGROUP_SPECIAL.Value; let Inst{25-21} = rs; let Inst{20-16} = rt; let Inst{15-11} = rd; let Inst{10-6} = mulop; let Inst{5-0} = funct; } - |