Daniel Sanders | e4e83a7 | 2015-09-15 10:02:16 +0000 | [diff] [blame] | 1 | //===- MipsEVAInstrFormats.td - Mips Instruction Formats ---*- tablegen -*-===// |
| 2 | // |
| 3 | // The LLVM Compiler Infrastructure |
| 4 | // |
| 5 | // This file is distributed under the University of Illinois Open Source |
| 6 | // License. See LICENSE.TXT for details. |
| 7 | // |
| 8 | //===----------------------------------------------------------------------===// |
| 9 | // |
| 10 | // This file describes Mips32r6 instruction formats. |
| 11 | // |
| 12 | //===----------------------------------------------------------------------===// |
| 13 | |
| 14 | class MipsEVAInst : MipsInst<(outs), (ins), "", [], NoItinerary, FrmOther>, |
| 15 | PredicateControl, StdArch { |
| 16 | let DecoderNamespace = "Mips"; |
| 17 | let EncodingPredicates = [HasStdEnc]; |
| 18 | } |
| 19 | |
| 20 | //===----------------------------------------------------------------------===// |
| 21 | // |
| 22 | // Field Values |
| 23 | // |
| 24 | //===----------------------------------------------------------------------===// |
| 25 | |
| 26 | // Memory Load/Store EVA |
| 27 | def OPCODE6_LBE : OPCODE6<0b101100>; |
| 28 | def OPCODE6_LBuE : OPCODE6<0b101000>; |
| 29 | def OPCODE6_LHE : OPCODE6<0b101101>; |
| 30 | def OPCODE6_LHuE : OPCODE6<0b101001>; |
| 31 | def OPCODE6_LWE : OPCODE6<0b101111>; |
| 32 | |
| 33 | def OPCODE6_SBE : OPCODE6<0b011100>; |
| 34 | def OPCODE6_SHE : OPCODE6<0b011101>; |
| 35 | def OPCODE6_SWE : OPCODE6<0b011111>; |
| 36 | |
| 37 | // load/store left/right EVA |
| 38 | def OPCODE6_LWLE : OPCODE6<0b011001>; |
| 39 | def OPCODE6_LWRE : OPCODE6<0b011010>; |
| 40 | def OPCODE6_SWLE : OPCODE6<0b100001>; |
| 41 | def OPCODE6_SWRE : OPCODE6<0b100010>; |
| 42 | |
| 43 | // Load-linked EVA, Store-conditional EVA |
| 44 | def OPCODE6_LLE : OPCODE6<0b101110>; |
| 45 | def OPCODE6_SCE : OPCODE6<0b011110>; |
| 46 | |
| 47 | def OPCODE6_TLBINV : OPCODE6<0b000011>; |
| 48 | def OPCODE6_TLBINVF : OPCODE6<0b000100>; |
| 49 | |
| 50 | def OPCODE6_CACHEE : OPCODE6<0b011011>; |
| 51 | def OPCODE6_PREFE : OPCODE6<0b100011>; |
| 52 | |
Simon Dardis | 515e869 | 2016-10-13 12:12:56 +0000 | [diff] [blame] | 53 | def OPGROUP_COP0_TLB : OPGROUP<0b010000>; |
Daniel Sanders | e4e83a7 | 2015-09-15 10:02:16 +0000 | [diff] [blame] | 54 | |
| 55 | //===----------------------------------------------------------------------===// |
| 56 | // |
| 57 | // Encoding Formats |
| 58 | // |
| 59 | //===----------------------------------------------------------------------===// |
| 60 | |
| 61 | class SPECIAL3_EVA_LOAD_STORE_FM<OPCODE6 Operation> : MipsEVAInst { |
| 62 | bits<21> addr; |
| 63 | bits<5> hint; |
| 64 | bits<5> base = addr{20-16}; |
| 65 | bits<9> offset = addr{8-0}; |
| 66 | |
| 67 | bits<32> Inst; |
| 68 | |
| 69 | let Inst{31-26} = OPGROUP_SPECIAL3.Value; |
| 70 | let Inst{25-21} = base; |
| 71 | let Inst{20-16} = hint; |
| 72 | let Inst{15-7} = offset; |
| 73 | let Inst{6} = 0; |
| 74 | let Inst{5-0} = Operation.Value; |
| 75 | } |
| 76 | |
| 77 | class TLB_FM<OPCODE6 Operation> : MipsEVAInst { |
| 78 | bits<32> Inst; |
| 79 | |
Simon Dardis | 515e869 | 2016-10-13 12:12:56 +0000 | [diff] [blame] | 80 | let Inst{31-26} = OPGROUP_COP0_TLB.Value; |
Daniel Sanders | e4e83a7 | 2015-09-15 10:02:16 +0000 | [diff] [blame] | 81 | let Inst{25} = 1; // CO |
| 82 | let Inst{24-6} = 0; |
| 83 | let Inst{5-0} = Operation.Value; |
| 84 | } |