diff options
| author | Daniel Sanders <daniel.sanders@imgtec.com> | 2014-04-03 13:21:51 +0000 |
|---|---|---|
| committer | Daniel Sanders <daniel.sanders@imgtec.com> | 2014-04-03 13:21:51 +0000 |
| commit | 442f1a12f186408bd8dfb15621c7cf1a94b71b69 (patch) | |
| tree | 0e540d29eb56f0dbe889fd900758f618d7e6aacc /llvm/lib | |
| parent | 749763eaf79d08d930e31c5b677ed7937193f18a (diff) | |
| download | bcm5719-llvm-442f1a12f186408bd8dfb15621c7cf1a94b71b69.tar.gz bcm5719-llvm-442f1a12f186408bd8dfb15621c7cf1a94b71b69.zip | |
[mips] Implement ehb, ssnop, and pause in assembler
Summary: Add negative tests for pause
Reviewers: matheusalmeida
Reviewed By: matheusalmeida
Differential Revision: http://llvm-reviews.chandlerc.com/D3246
llvm-svn: 205537
Diffstat (limited to 'llvm/lib')
| -rw-r--r-- | llvm/lib/Target/Mips/MipsInstrFormats.td | 11 | ||||
| -rw-r--r-- | llvm/lib/Target/Mips/MipsInstrInfo.td | 6 |
2 files changed, 17 insertions, 0 deletions
diff --git a/llvm/lib/Target/Mips/MipsInstrFormats.td b/llvm/lib/Target/Mips/MipsInstrFormats.td index 38fac886048..e4405abe908 100644 --- a/llvm/lib/Target/Mips/MipsInstrFormats.td +++ b/llvm/lib/Target/Mips/MipsInstrFormats.td @@ -818,3 +818,14 @@ class CMov_F_F_FM<bits<5> fmt, bit tf> : StdArch { let Inst{10-6} = fd; let Inst{5-0} = 0x11; } + +class BARRIER_FM<bits<5> op> : StdArch { + bits<32> Inst; + + let Inst{31-26} = 0; // SPECIAL + let Inst{25-21} = 0; + let Inst{20-16} = 0; // rt = 0 + let Inst{15-11} = 0; // rd = 0 + let Inst{10-6} = op; // Operation + let Inst{5-0} = 0; // SLL +} diff --git a/llvm/lib/Target/Mips/MipsInstrInfo.td b/llvm/lib/Target/Mips/MipsInstrInfo.td index 9b2e0808938..07c37d87a26 100644 --- a/llvm/lib/Target/Mips/MipsInstrInfo.td +++ b/llvm/lib/Target/Mips/MipsInstrInfo.td @@ -1161,6 +1161,12 @@ def MTC0 : MFC3OP<"mtc0", GPR32Opnd>, MFC3OP_FM<0x10, 4>; def MFC2 : MFC3OP<"mfc2", GPR32Opnd>, MFC3OP_FM<0x12, 0>; def MTC2 : MFC3OP<"mtc2", GPR32Opnd>, MFC3OP_FM<0x12, 4>; +class Barrier<string asmstr> : InstSE<(outs), (ins), asmstr, [], NoItinerary, + FrmOther>; +def SSNOP : Barrier<"ssnop">, BARRIER_FM<1>; +def EHB : Barrier<"ehb">, BARRIER_FM<3>; +def PAUSE : Barrier<"pause">, BARRIER_FM<5>, Requires<[HasMips32r2]>; + //===----------------------------------------------------------------------===// // Instruction aliases //===----------------------------------------------------------------------===// |

