2014-03-20 18:18:24 +08:00
|
|
|
//===----------------------------------------------------------------------===//
|
|
|
|
// MicroMIPS Base Classes
|
|
|
|
//===----------------------------------------------------------------------===//
|
|
|
|
|
|
|
|
//
|
|
|
|
// Base class for MicroMips instructions.
|
|
|
|
// This class does not depend on the instruction size.
|
|
|
|
//
|
|
|
|
class MicroMipsInstBase<dag outs, dag ins, string asmstr, list<dag> pattern,
|
|
|
|
InstrItinClass itin, Format f> : Instruction
|
|
|
|
{
|
|
|
|
let Namespace = "Mips";
|
|
|
|
let DecoderNamespace = "MicroMips";
|
|
|
|
|
|
|
|
let OutOperandList = outs;
|
|
|
|
let InOperandList = ins;
|
|
|
|
|
|
|
|
let AsmString = asmstr;
|
|
|
|
let Pattern = pattern;
|
|
|
|
let Itinerary = itin;
|
|
|
|
|
|
|
|
let Predicates = [InMicroMips];
|
|
|
|
|
|
|
|
Format Form = f;
|
|
|
|
}
|
|
|
|
|
|
|
|
//
|
|
|
|
// Base class for MicroMIPS 16-bit instructions.
|
|
|
|
//
|
|
|
|
class MicroMipsInst16<dag outs, dag ins, string asmstr, list<dag> pattern,
|
|
|
|
InstrItinClass itin, Format f> :
|
|
|
|
MicroMipsInstBase<outs, ins, asmstr, pattern, itin, f>
|
|
|
|
{
|
|
|
|
let Size = 2;
|
|
|
|
field bits<16> Inst;
|
|
|
|
field bits<16> SoftFail = 0;
|
|
|
|
bits<6> Opcode = 0x0;
|
|
|
|
}
|
|
|
|
|
|
|
|
//===----------------------------------------------------------------------===//
|
|
|
|
// MicroMIPS 16-bit Instruction Formats
|
|
|
|
//===----------------------------------------------------------------------===//
|
|
|
|
|
2014-10-21 16:44:58 +08:00
|
|
|
class ARITH_FM_MM16<bit funct> {
|
|
|
|
bits<3> rd;
|
|
|
|
bits<3> rt;
|
|
|
|
bits<3> rs;
|
|
|
|
|
|
|
|
bits<16> Inst;
|
|
|
|
|
|
|
|
let Inst{15-10} = 0x01;
|
|
|
|
let Inst{9-7} = rd;
|
|
|
|
let Inst{6-4} = rt;
|
|
|
|
let Inst{3-1} = rs;
|
|
|
|
let Inst{0} = funct;
|
|
|
|
}
|
|
|
|
|
2014-11-06 01:31:00 +08:00
|
|
|
class ANDI_FM_MM16<bits<6> funct> {
|
|
|
|
bits<3> rd;
|
|
|
|
bits<3> rs;
|
|
|
|
bits<4> imm;
|
|
|
|
|
|
|
|
bits<16> Inst;
|
|
|
|
|
|
|
|
let Inst{15-10} = funct;
|
|
|
|
let Inst{9-7} = rd;
|
|
|
|
let Inst{6-4} = rs;
|
|
|
|
let Inst{3-0} = imm;
|
|
|
|
}
|
|
|
|
|
2014-10-21 16:32:40 +08:00
|
|
|
class LOGIC_FM_MM16<bits<4> funct> {
|
|
|
|
bits<3> rt;
|
|
|
|
bits<3> rs;
|
|
|
|
|
|
|
|
bits<16> Inst;
|
|
|
|
|
|
|
|
let Inst{15-10} = 0x11;
|
|
|
|
let Inst{9-6} = funct;
|
|
|
|
let Inst{5-3} = rt;
|
|
|
|
let Inst{2-0} = rs;
|
|
|
|
}
|
|
|
|
|
2014-10-23 18:42:01 +08:00
|
|
|
class SHIFT_FM_MM16<bits<1> funct> {
|
|
|
|
bits<3> rd;
|
|
|
|
bits<3> rt;
|
|
|
|
bits<3> shamt;
|
|
|
|
|
|
|
|
bits<16> Inst;
|
|
|
|
|
|
|
|
let Inst{15-10} = 0x09;
|
|
|
|
let Inst{9-7} = rd;
|
|
|
|
let Inst{6-4} = rt;
|
|
|
|
let Inst{3-1} = shamt;
|
|
|
|
let Inst{0} = funct;
|
|
|
|
}
|
|
|
|
|
2014-10-23 19:06:34 +08:00
|
|
|
class ADDIUR2_FM_MM16 {
|
|
|
|
bits<3> rd;
|
|
|
|
bits<3> rs;
|
|
|
|
bits<3> imm;
|
|
|
|
|
|
|
|
bits<16> Inst;
|
|
|
|
|
|
|
|
let Inst{15-10} = 0x1b;
|
|
|
|
let Inst{9-7} = rd;
|
|
|
|
let Inst{6-4} = rs;
|
|
|
|
let Inst{3-1} = imm;
|
|
|
|
let Inst{0} = 0;
|
|
|
|
}
|
|
|
|
|
2014-11-24 22:39:13 +08:00
|
|
|
class LOAD_STORE_FM_MM16<bits<6> op> {
|
|
|
|
bits<3> rt;
|
|
|
|
bits<7> addr;
|
|
|
|
|
|
|
|
bits<16> Inst;
|
|
|
|
|
|
|
|
let Inst{15-10} = op;
|
|
|
|
let Inst{9-7} = rt;
|
|
|
|
let Inst{6-4} = addr{6-4};
|
|
|
|
let Inst{3-0} = addr{3-0};
|
|
|
|
}
|
|
|
|
|
2014-12-24 00:16:33 +08:00
|
|
|
class LOAD_STORE_SP_FM_MM16<bits<6> op> {
|
|
|
|
bits<5> rt;
|
|
|
|
bits<5> offset;
|
|
|
|
|
|
|
|
bits<16> Inst;
|
|
|
|
|
|
|
|
let Inst{15-10} = op;
|
|
|
|
let Inst{9-5} = rt;
|
|
|
|
let Inst{4-0} = offset;
|
|
|
|
}
|
|
|
|
|
2015-01-29 01:27:26 +08:00
|
|
|
class LOAD_GP_FM_MM16<bits<6> op> {
|
|
|
|
bits<3> rt;
|
|
|
|
bits<7> offset;
|
|
|
|
|
|
|
|
bits<16> Inst;
|
|
|
|
|
|
|
|
let Inst{15-10} = op;
|
|
|
|
let Inst{9-7} = rt;
|
|
|
|
let Inst{6-0} = offset;
|
|
|
|
}
|
|
|
|
|
2014-10-10 21:45:34 +08:00
|
|
|
class ADDIUS5_FM_MM16 {
|
|
|
|
bits<5> rd;
|
|
|
|
bits<4> imm;
|
|
|
|
|
|
|
|
bits<16> Inst;
|
|
|
|
|
|
|
|
let Inst{15-10} = 0x13;
|
|
|
|
let Inst{9-5} = rd;
|
|
|
|
let Inst{4-1} = imm;
|
|
|
|
let Inst{0} = 0;
|
|
|
|
}
|
|
|
|
|
2014-10-10 22:37:30 +08:00
|
|
|
class ADDIUSP_FM_MM16 {
|
|
|
|
bits<9> imm;
|
|
|
|
|
|
|
|
bits<16> Inst;
|
|
|
|
|
|
|
|
let Inst{15-10} = 0x13;
|
|
|
|
let Inst{9-1} = imm;
|
|
|
|
let Inst{0} = 1;
|
|
|
|
}
|
|
|
|
|
2014-03-20 18:18:24 +08:00
|
|
|
class MOVE_FM_MM16<bits<6> funct> {
|
|
|
|
bits<5> rs;
|
|
|
|
bits<5> rd;
|
|
|
|
|
|
|
|
bits<16> Inst;
|
|
|
|
|
|
|
|
let Inst{15-10} = funct;
|
|
|
|
let Inst{9-5} = rd;
|
|
|
|
let Inst{4-0} = rs;
|
|
|
|
}
|
|
|
|
|
2014-10-23 18:59:24 +08:00
|
|
|
class LI_FM_MM16 {
|
|
|
|
bits<3> rd;
|
|
|
|
bits<7> imm;
|
|
|
|
|
|
|
|
bits<16> Inst;
|
|
|
|
|
|
|
|
let Inst{15-10} = 0x3b;
|
|
|
|
let Inst{9-7} = rd;
|
|
|
|
let Inst{6-0} = imm;
|
|
|
|
}
|
|
|
|
|
2014-03-20 18:18:24 +08:00
|
|
|
class JALR_FM_MM16<bits<5> op> {
|
|
|
|
bits<5> rs;
|
|
|
|
|
|
|
|
bits<16> Inst;
|
|
|
|
|
|
|
|
let Inst{15-10} = 0x11;
|
|
|
|
let Inst{9-5} = op;
|
|
|
|
let Inst{4-0} = rs;
|
|
|
|
}
|
|
|
|
|
2014-04-03 20:47:34 +08:00
|
|
|
class MFHILO_FM_MM16<bits<5> funct> {
|
|
|
|
bits<5> rd;
|
|
|
|
|
|
|
|
bits<16> Inst;
|
|
|
|
|
|
|
|
let Inst{15-10} = 0x11;
|
|
|
|
let Inst{9-5} = funct;
|
|
|
|
let Inst{4-0} = rd;
|
|
|
|
}
|
|
|
|
|
2014-09-12 22:29:54 +08:00
|
|
|
class JRADDIUSP_FM_MM16<bits<5> op> {
|
|
|
|
bits<5> rs;
|
|
|
|
bits<5> imm;
|
|
|
|
|
|
|
|
bits<16> Inst;
|
|
|
|
|
|
|
|
let Inst{15-10} = 0x11;
|
|
|
|
let Inst{9-5} = op;
|
|
|
|
let Inst{4-0} = imm;
|
|
|
|
}
|
|
|
|
|
2014-10-23 19:13:59 +08:00
|
|
|
class ADDIUR1SP_FM_MM16 {
|
|
|
|
bits<3> rd;
|
|
|
|
bits<6> imm;
|
|
|
|
|
|
|
|
bits<16> Inst;
|
|
|
|
|
|
|
|
let Inst{15-10} = 0x1b;
|
|
|
|
let Inst{9-7} = rd;
|
|
|
|
let Inst{6-1} = imm;
|
|
|
|
let Inst{0} = 1;
|
|
|
|
}
|
|
|
|
|
2014-11-28 02:18:42 +08:00
|
|
|
class BRKSDBBP16_FM_MM<bits<6> op> {
|
|
|
|
bits<4> code_;
|
|
|
|
bits<16> Inst;
|
|
|
|
|
|
|
|
let Inst{15-10} = 0x11;
|
|
|
|
let Inst{9-4} = op;
|
|
|
|
let Inst{3-0} = code_;
|
|
|
|
}
|
|
|
|
|
2015-01-12 20:03:34 +08:00
|
|
|
class BEQNEZ_FM_MM16<bits<6> op> {
|
|
|
|
bits<3> rs;
|
|
|
|
bits<7> offset;
|
|
|
|
|
|
|
|
bits<16> Inst;
|
|
|
|
|
|
|
|
let Inst{15-10} = op;
|
|
|
|
let Inst{9-7} = rs;
|
|
|
|
let Inst{6-0} = offset;
|
|
|
|
}
|
|
|
|
|
2015-01-21 20:39:30 +08:00
|
|
|
class B16_FM {
|
|
|
|
bits<10> offset;
|
|
|
|
|
|
|
|
bits<16> Inst;
|
|
|
|
|
|
|
|
let Inst{15-10} = 0x33;
|
|
|
|
let Inst{9-0} = offset;
|
|
|
|
}
|
|
|
|
|
2015-02-11 00:36:20 +08:00
|
|
|
class MOVEP_FM_MM16 {
|
|
|
|
bits<3> dst_regs;
|
|
|
|
bits<3> rt;
|
|
|
|
bits<3> rs;
|
|
|
|
|
|
|
|
bits<16> Inst;
|
|
|
|
|
|
|
|
let Inst{15-10} = 0x21;
|
|
|
|
let Inst{9-7} = dst_regs;
|
|
|
|
let Inst{6-4} = rt;
|
|
|
|
let Inst{3-1} = rs;
|
|
|
|
let Inst{0} = 0;
|
|
|
|
}
|
|
|
|
|
2014-03-20 18:18:24 +08:00
|
|
|
//===----------------------------------------------------------------------===//
|
|
|
|
// MicroMIPS 32-bit Instruction Formats
|
|
|
|
//===----------------------------------------------------------------------===//
|
|
|
|
|
2013-04-20 03:03:11 +08:00
|
|
|
class MMArch {
|
|
|
|
string Arch = "micromips";
|
|
|
|
list<dag> Pattern = [];
|
|
|
|
}
|
|
|
|
|
|
|
|
class ADD_FM_MM<bits<6> op, bits<10> funct> : MMArch {
|
|
|
|
bits<5> rt;
|
|
|
|
bits<5> rs;
|
|
|
|
bits<5> rd;
|
|
|
|
|
|
|
|
bits<32> Inst;
|
|
|
|
|
|
|
|
let Inst{31-26} = op;
|
|
|
|
let Inst{25-21} = rt;
|
|
|
|
let Inst{20-16} = rs;
|
|
|
|
let Inst{15-11} = rd;
|
|
|
|
let Inst{10} = 0;
|
|
|
|
let Inst{9-0} = funct;
|
|
|
|
}
|
|
|
|
|
|
|
|
class ADDI_FM_MM<bits<6> op> : MMArch {
|
|
|
|
bits<5> rs;
|
|
|
|
bits<5> rt;
|
|
|
|
bits<16> imm16;
|
|
|
|
|
|
|
|
bits<32> Inst;
|
|
|
|
|
|
|
|
let Inst{31-26} = op;
|
|
|
|
let Inst{25-21} = rt;
|
|
|
|
let Inst{20-16} = rs;
|
|
|
|
let Inst{15-0} = imm16;
|
|
|
|
}
|
|
|
|
|
|
|
|
class SLTI_FM_MM<bits<6> op> : MMArch {
|
|
|
|
bits<5> rt;
|
|
|
|
bits<5> rs;
|
|
|
|
bits<16> imm16;
|
|
|
|
|
|
|
|
bits<32> Inst;
|
|
|
|
|
|
|
|
let Inst{31-26} = op;
|
2013-11-15 16:07:34 +08:00
|
|
|
let Inst{25-21} = rt;
|
|
|
|
let Inst{20-16} = rs;
|
2013-04-20 03:03:11 +08:00
|
|
|
let Inst{15-0} = imm16;
|
|
|
|
}
|
|
|
|
|
|
|
|
class LUI_FM_MM : MMArch {
|
|
|
|
bits<5> rt;
|
|
|
|
bits<16> imm16;
|
|
|
|
|
|
|
|
bits<32> Inst;
|
|
|
|
|
|
|
|
let Inst{31-26} = 0x10;
|
|
|
|
let Inst{25-21} = 0xd;
|
|
|
|
let Inst{20-16} = rt;
|
|
|
|
let Inst{15-0} = imm16;
|
|
|
|
}
|
|
|
|
|
|
|
|
class MULT_FM_MM<bits<10> funct> : MMArch {
|
|
|
|
bits<5> rs;
|
|
|
|
bits<5> rt;
|
|
|
|
|
|
|
|
bits<32> Inst;
|
|
|
|
|
|
|
|
let Inst{31-26} = 0x00;
|
|
|
|
let Inst{25-21} = rt;
|
|
|
|
let Inst{20-16} = rs;
|
|
|
|
let Inst{15-6} = funct;
|
|
|
|
let Inst{5-0} = 0x3c;
|
|
|
|
}
|
2013-04-25 09:11:15 +08:00
|
|
|
|
|
|
|
class SRA_FM_MM<bits<10> funct, bit rotate> : MMArch {
|
|
|
|
bits<5> rd;
|
|
|
|
bits<5> rt;
|
|
|
|
bits<5> shamt;
|
|
|
|
|
|
|
|
bits<32> Inst;
|
|
|
|
|
|
|
|
let Inst{31-26} = 0;
|
|
|
|
let Inst{25-21} = rd;
|
|
|
|
let Inst{20-16} = rt;
|
|
|
|
let Inst{15-11} = shamt;
|
|
|
|
let Inst{10} = rotate;
|
|
|
|
let Inst{9-0} = funct;
|
|
|
|
}
|
|
|
|
|
|
|
|
class SRLV_FM_MM<bits<10> funct, bit rotate> : MMArch {
|
|
|
|
bits<5> rd;
|
|
|
|
bits<5> rt;
|
|
|
|
bits<5> rs;
|
|
|
|
|
|
|
|
bits<32> Inst;
|
|
|
|
|
|
|
|
let Inst{31-26} = 0;
|
|
|
|
let Inst{25-21} = rt;
|
|
|
|
let Inst{20-16} = rs;
|
|
|
|
let Inst{15-11} = rd;
|
|
|
|
let Inst{10} = rotate;
|
|
|
|
let Inst{9-0} = funct;
|
|
|
|
}
|
2013-04-25 09:21:25 +08:00
|
|
|
|
|
|
|
class LW_FM_MM<bits<6> op> : MMArch {
|
|
|
|
bits<5> rt;
|
|
|
|
bits<21> addr;
|
|
|
|
|
|
|
|
bits<32> Inst;
|
|
|
|
|
|
|
|
let Inst{31-26} = op;
|
|
|
|
let Inst{25-21} = rt;
|
|
|
|
let Inst{20-16} = addr{20-16};
|
|
|
|
let Inst{15-0} = addr{15-0};
|
|
|
|
}
|
2013-08-14 04:19:16 +08:00
|
|
|
|
2015-09-16 17:14:35 +08:00
|
|
|
class POOL32C_LHUE_FM_MM<bits<6> op, bits<4> fmt, bits<3> funct> : MMArch {
|
|
|
|
bits<5> rt;
|
|
|
|
bits<21> addr;
|
|
|
|
bits<5> base = addr{20-16};
|
|
|
|
bits<9> offset = addr{8-0};
|
|
|
|
|
|
|
|
bits<32> Inst;
|
|
|
|
|
|
|
|
let Inst{31-26} = op;
|
|
|
|
let Inst{25-21} = rt;
|
|
|
|
let Inst{20-16} = base;
|
|
|
|
let Inst{15-12} = fmt;
|
|
|
|
let Inst{11-9} = funct;
|
|
|
|
let Inst{8-0} = offset;
|
|
|
|
}
|
|
|
|
|
2013-08-14 04:19:16 +08:00
|
|
|
class LWL_FM_MM<bits<4> funct> {
|
|
|
|
bits<5> rt;
|
|
|
|
bits<21> addr;
|
|
|
|
|
|
|
|
bits<32> Inst;
|
|
|
|
|
|
|
|
let Inst{31-26} = 0x18;
|
|
|
|
let Inst{25-21} = rt;
|
|
|
|
let Inst{20-16} = addr{20-16};
|
|
|
|
let Inst{15-12} = funct;
|
|
|
|
let Inst{11-0} = addr{11-0};
|
|
|
|
}
|
2013-09-06 20:41:17 +08:00
|
|
|
|
2015-10-15 15:23:06 +08:00
|
|
|
class POOL32C_STEVA_LDEVA_FM_MM<bits<4> type, bits<3> funct> {
|
|
|
|
bits<5> rt;
|
|
|
|
bits<21> addr;
|
|
|
|
bits<5> base = addr{20-16};
|
|
|
|
bits<9> offset = addr{8-0};
|
|
|
|
|
|
|
|
bits<32> Inst;
|
|
|
|
|
|
|
|
let Inst{31-26} = 0x18;
|
|
|
|
let Inst{25-21} = rt;
|
|
|
|
let Inst{20-16} = base;
|
|
|
|
let Inst{15-12} = type;
|
|
|
|
let Inst{11-9} = funct;
|
|
|
|
let Inst{8-0} = offset;
|
|
|
|
}
|
|
|
|
|
2013-09-06 20:41:17 +08:00
|
|
|
class CMov_F_I_FM_MM<bits<7> func> : MMArch {
|
|
|
|
bits<5> rd;
|
|
|
|
bits<5> rs;
|
|
|
|
bits<3> fcc;
|
|
|
|
|
|
|
|
bits<32> Inst;
|
|
|
|
|
|
|
|
let Inst{31-26} = 0x15;
|
|
|
|
let Inst{25-21} = rd;
|
|
|
|
let Inst{20-16} = rs;
|
|
|
|
let Inst{15-13} = fcc;
|
|
|
|
let Inst{12-6} = func;
|
|
|
|
let Inst{5-0} = 0x3b;
|
|
|
|
}
|
2013-09-06 20:53:21 +08:00
|
|
|
|
|
|
|
class MTLO_FM_MM<bits<10> funct> : MMArch {
|
|
|
|
bits<5> rs;
|
|
|
|
|
|
|
|
bits<32> Inst;
|
|
|
|
|
|
|
|
let Inst{31-26} = 0x00;
|
|
|
|
let Inst{25-21} = 0x00;
|
|
|
|
let Inst{20-16} = rs;
|
|
|
|
let Inst{15-6} = funct;
|
|
|
|
let Inst{5-0} = 0x3c;
|
|
|
|
}
|
|
|
|
|
|
|
|
class MFLO_FM_MM<bits<10> funct> : MMArch {
|
|
|
|
bits<5> rd;
|
|
|
|
|
|
|
|
bits<32> Inst;
|
|
|
|
|
|
|
|
let Inst{31-26} = 0x00;
|
|
|
|
let Inst{25-21} = 0x00;
|
|
|
|
let Inst{20-16} = rd;
|
|
|
|
let Inst{15-6} = funct;
|
|
|
|
let Inst{5-0} = 0x3c;
|
|
|
|
}
|
2013-09-14 14:49:25 +08:00
|
|
|
|
|
|
|
class CLO_FM_MM<bits<10> funct> : MMArch {
|
|
|
|
bits<5> rd;
|
|
|
|
bits<5> rs;
|
|
|
|
|
|
|
|
bits<32> Inst;
|
|
|
|
|
|
|
|
let Inst{31-26} = 0x00;
|
|
|
|
let Inst{25-21} = rd;
|
|
|
|
let Inst{20-16} = rs;
|
|
|
|
let Inst{15-6} = funct;
|
|
|
|
let Inst{5-0} = 0x3c;
|
|
|
|
}
|
|
|
|
|
|
|
|
class SEB_FM_MM<bits<10> funct> : MMArch {
|
|
|
|
bits<5> rd;
|
|
|
|
bits<5> rt;
|
|
|
|
|
|
|
|
bits<32> Inst;
|
|
|
|
|
|
|
|
let Inst{31-26} = 0x00;
|
|
|
|
let Inst{25-21} = rd;
|
|
|
|
let Inst{20-16} = rt;
|
|
|
|
let Inst{15-6} = funct;
|
|
|
|
let Inst{5-0} = 0x3c;
|
|
|
|
}
|
|
|
|
|
|
|
|
class EXT_FM_MM<bits<6> funct> : MMArch {
|
|
|
|
bits<5> rt;
|
|
|
|
bits<5> rs;
|
|
|
|
bits<5> pos;
|
|
|
|
bits<5> size;
|
|
|
|
|
|
|
|
bits<32> Inst;
|
|
|
|
|
|
|
|
let Inst{31-26} = 0x00;
|
|
|
|
let Inst{25-21} = rt;
|
|
|
|
let Inst{20-16} = rs;
|
|
|
|
let Inst{15-11} = size;
|
|
|
|
let Inst{10-6} = pos;
|
|
|
|
let Inst{5-0} = funct;
|
|
|
|
}
|
2013-10-30 00:38:59 +08:00
|
|
|
|
|
|
|
class J_FM_MM<bits<6> op> : MMArch {
|
|
|
|
bits<26> target;
|
|
|
|
|
|
|
|
bits<32> Inst;
|
|
|
|
|
|
|
|
let Inst{31-26} = op;
|
|
|
|
let Inst{25-0} = target;
|
|
|
|
}
|
|
|
|
|
|
|
|
class JR_FM_MM<bits<8> funct> : MMArch {
|
|
|
|
bits<5> rs;
|
|
|
|
|
|
|
|
bits<32> Inst;
|
|
|
|
|
|
|
|
let Inst{31-21} = 0x00;
|
|
|
|
let Inst{20-16} = rs;
|
|
|
|
let Inst{15-14} = 0x0;
|
|
|
|
let Inst{13-6} = funct;
|
|
|
|
let Inst{5-0} = 0x3c;
|
|
|
|
}
|
|
|
|
|
2014-03-20 18:18:24 +08:00
|
|
|
class JALR_FM_MM<bits<10> funct> {
|
2013-10-30 00:38:59 +08:00
|
|
|
bits<5> rs;
|
|
|
|
bits<5> rd;
|
|
|
|
|
|
|
|
bits<32> Inst;
|
|
|
|
|
|
|
|
let Inst{31-26} = 0x00;
|
|
|
|
let Inst{25-21} = rd;
|
|
|
|
let Inst{20-16} = rs;
|
|
|
|
let Inst{15-6} = funct;
|
|
|
|
let Inst{5-0} = 0x3c;
|
|
|
|
}
|
2013-11-04 22:53:22 +08:00
|
|
|
|
|
|
|
class BEQ_FM_MM<bits<6> op> : MMArch {
|
|
|
|
bits<5> rs;
|
|
|
|
bits<5> rt;
|
|
|
|
bits<16> offset;
|
|
|
|
|
|
|
|
bits<32> Inst;
|
|
|
|
|
|
|
|
let Inst{31-26} = op;
|
|
|
|
let Inst{25-21} = rt;
|
|
|
|
let Inst{20-16} = rs;
|
|
|
|
let Inst{15-0} = offset;
|
|
|
|
}
|
|
|
|
|
|
|
|
class BGEZ_FM_MM<bits<5> funct> : MMArch {
|
|
|
|
bits<5> rs;
|
|
|
|
bits<16> offset;
|
|
|
|
|
|
|
|
bits<32> Inst;
|
|
|
|
|
|
|
|
let Inst{31-26} = 0x10;
|
|
|
|
let Inst{25-21} = funct;
|
|
|
|
let Inst{20-16} = rs;
|
|
|
|
let Inst{15-0} = offset;
|
|
|
|
}
|
|
|
|
|
|
|
|
class BGEZAL_FM_MM<bits<5> funct> : MMArch {
|
|
|
|
bits<5> rs;
|
|
|
|
bits<16> offset;
|
|
|
|
|
|
|
|
bits<32> Inst;
|
|
|
|
|
|
|
|
let Inst{31-26} = 0x10;
|
|
|
|
let Inst{25-21} = funct;
|
|
|
|
let Inst{20-16} = rs;
|
|
|
|
let Inst{15-0} = offset;
|
|
|
|
}
|
2013-11-07 22:35:24 +08:00
|
|
|
|
2013-12-20 00:25:00 +08:00
|
|
|
class SYNC_FM_MM : MMArch {
|
|
|
|
bits<5> stype;
|
|
|
|
|
|
|
|
bits<32> Inst;
|
|
|
|
|
|
|
|
let Inst{31-26} = 0x00;
|
|
|
|
let Inst{25-21} = 0x0;
|
|
|
|
let Inst{20-16} = stype;
|
|
|
|
let Inst{15-6} = 0x1ad;
|
|
|
|
let Inst{5-0} = 0x3c;
|
|
|
|
}
|
|
|
|
|
|
|
|
class BRK_FM_MM : MMArch {
|
|
|
|
bits<10> code_1;
|
|
|
|
bits<10> code_2;
|
|
|
|
bits<32> Inst;
|
|
|
|
let Inst{31-26} = 0x0;
|
|
|
|
let Inst{25-16} = code_1;
|
|
|
|
let Inst{15-6} = code_2;
|
|
|
|
let Inst{5-0} = 0x07;
|
|
|
|
}
|
|
|
|
|
|
|
|
class SYS_FM_MM : MMArch {
|
|
|
|
bits<10> code_;
|
|
|
|
bits<32> Inst;
|
|
|
|
let Inst{31-26} = 0x0;
|
|
|
|
let Inst{25-16} = code_;
|
2014-03-01 02:17:08 +08:00
|
|
|
let Inst{15-6} = 0x22d;
|
2013-12-20 00:25:00 +08:00
|
|
|
let Inst{5-0} = 0x3c;
|
|
|
|
}
|
|
|
|
|
2014-03-20 18:41:37 +08:00
|
|
|
class WAIT_FM_MM {
|
|
|
|
bits<10> code_;
|
2013-12-20 00:25:00 +08:00
|
|
|
bits<32> Inst;
|
|
|
|
|
|
|
|
let Inst{31-26} = 0x00;
|
2014-03-20 18:41:37 +08:00
|
|
|
let Inst{25-16} = code_;
|
2013-12-20 00:25:00 +08:00
|
|
|
let Inst{15-6} = 0x24d;
|
|
|
|
let Inst{5-0} = 0x3c;
|
|
|
|
}
|
|
|
|
|
|
|
|
class ER_FM_MM<bits<10> funct> : MMArch {
|
|
|
|
bits<32> Inst;
|
|
|
|
|
|
|
|
let Inst{31-26} = 0x00;
|
|
|
|
let Inst{25-16} = 0x00;
|
|
|
|
let Inst{15-6} = funct;
|
|
|
|
let Inst{5-0} = 0x3c;
|
|
|
|
}
|
|
|
|
|
|
|
|
class EI_FM_MM<bits<10> funct> : MMArch {
|
|
|
|
bits<32> Inst;
|
|
|
|
bits<5> rt;
|
|
|
|
|
|
|
|
let Inst{31-26} = 0x00;
|
|
|
|
let Inst{25-21} = 0x00;
|
|
|
|
let Inst{20-16} = rt;
|
|
|
|
let Inst{15-6} = funct;
|
|
|
|
let Inst{5-0} = 0x3c;
|
|
|
|
}
|
|
|
|
|
2013-11-07 22:35:24 +08:00
|
|
|
class TEQ_FM_MM<bits<6> funct> : MMArch {
|
|
|
|
bits<5> rs;
|
|
|
|
bits<5> rt;
|
|
|
|
bits<4> code_;
|
|
|
|
|
|
|
|
bits<32> Inst;
|
|
|
|
|
|
|
|
let Inst{31-26} = 0x00;
|
|
|
|
let Inst{25-21} = rt;
|
|
|
|
let Inst{20-16} = rs;
|
|
|
|
let Inst{15-12} = code_;
|
|
|
|
let Inst{11-6} = funct;
|
|
|
|
let Inst{5-0} = 0x3c;
|
|
|
|
}
|
2013-11-13 21:15:03 +08:00
|
|
|
|
|
|
|
class TEQI_FM_MM<bits<5> funct> : MMArch {
|
|
|
|
bits<5> rs;
|
|
|
|
bits<16> imm16;
|
|
|
|
|
|
|
|
bits<32> Inst;
|
|
|
|
|
|
|
|
let Inst{31-26} = 0x10;
|
|
|
|
let Inst{25-21} = funct;
|
|
|
|
let Inst{20-16} = rs;
|
|
|
|
let Inst{15-0} = imm16;
|
|
|
|
}
|
2013-12-20 00:12:56 +08:00
|
|
|
|
|
|
|
class LL_FM_MM<bits<4> funct> {
|
|
|
|
bits<5> rt;
|
|
|
|
bits<21> addr;
|
|
|
|
|
|
|
|
bits<32> Inst;
|
|
|
|
|
|
|
|
let Inst{31-26} = 0x18;
|
|
|
|
let Inst{25-21} = rt;
|
|
|
|
let Inst{20-16} = addr{20-16};
|
|
|
|
let Inst{15-12} = funct;
|
|
|
|
let Inst{11-0} = addr{11-0};
|
|
|
|
}
|
2013-12-20 23:44:08 +08:00
|
|
|
|
2015-10-15 16:11:50 +08:00
|
|
|
class LLE_FM_MM<bits<4> funct> {
|
|
|
|
bits<5> rt;
|
|
|
|
bits<21> addr;
|
|
|
|
bits<5> base = addr{20-16};
|
|
|
|
bits<9> offset = addr{8-0};
|
|
|
|
|
|
|
|
bits<32> Inst;
|
|
|
|
|
|
|
|
let Inst{31-26} = 0x18;
|
|
|
|
let Inst{25-21} = rt;
|
|
|
|
let Inst{20-16} = base;
|
|
|
|
let Inst{15-12} = funct;
|
|
|
|
let Inst{11-9} = 0x6;
|
|
|
|
let Inst{8-0} = offset;
|
|
|
|
}
|
|
|
|
|
2013-12-20 23:44:08 +08:00
|
|
|
class ADDS_FM_MM<bits<2> fmt, bits<8> funct> : MMArch {
|
|
|
|
bits<5> ft;
|
|
|
|
bits<5> fs;
|
|
|
|
bits<5> fd;
|
|
|
|
|
|
|
|
bits<32> Inst;
|
|
|
|
|
|
|
|
let Inst{31-26} = 0x15;
|
|
|
|
let Inst{25-21} = ft;
|
|
|
|
let Inst{20-16} = fs;
|
|
|
|
let Inst{15-11} = fd;
|
|
|
|
let Inst{10} = 0;
|
|
|
|
let Inst{9-8} = fmt;
|
|
|
|
let Inst{7-0} = funct;
|
|
|
|
|
|
|
|
list<dag> Pattern = [];
|
|
|
|
}
|
|
|
|
|
|
|
|
class LWXC1_FM_MM<bits<9> funct> : MMArch {
|
|
|
|
bits<5> fd;
|
|
|
|
bits<5> base;
|
|
|
|
bits<5> index;
|
|
|
|
|
|
|
|
bits<32> Inst;
|
|
|
|
|
|
|
|
let Inst{31-26} = 0x15;
|
|
|
|
let Inst{25-21} = index;
|
|
|
|
let Inst{20-16} = base;
|
|
|
|
let Inst{15-11} = fd;
|
|
|
|
let Inst{10-9} = 0x0;
|
|
|
|
let Inst{8-0} = funct;
|
|
|
|
}
|
|
|
|
|
|
|
|
class SWXC1_FM_MM<bits<9> funct> : MMArch {
|
|
|
|
bits<5> fs;
|
|
|
|
bits<5> base;
|
|
|
|
bits<5> index;
|
|
|
|
|
|
|
|
bits<32> Inst;
|
|
|
|
|
|
|
|
let Inst{31-26} = 0x15;
|
|
|
|
let Inst{25-21} = index;
|
|
|
|
let Inst{20-16} = base;
|
|
|
|
let Inst{15-11} = fs;
|
|
|
|
let Inst{10-9} = 0x0;
|
|
|
|
let Inst{8-0} = funct;
|
|
|
|
}
|
|
|
|
|
|
|
|
class CEQS_FM_MM<bits<2> fmt> : MMArch {
|
|
|
|
bits<5> fs;
|
|
|
|
bits<5> ft;
|
|
|
|
bits<4> cond;
|
|
|
|
|
|
|
|
bits<32> Inst;
|
|
|
|
|
|
|
|
let Inst{31-26} = 0x15;
|
|
|
|
let Inst{25-21} = ft;
|
|
|
|
let Inst{20-16} = fs;
|
|
|
|
let Inst{15-13} = 0x0; // cc
|
|
|
|
let Inst{12} = 0;
|
|
|
|
let Inst{11-10} = fmt;
|
|
|
|
let Inst{9-6} = cond;
|
|
|
|
let Inst{5-0} = 0x3c;
|
|
|
|
}
|
|
|
|
|
|
|
|
class BC1F_FM_MM<bits<5> tf> : MMArch {
|
|
|
|
bits<16> offset;
|
|
|
|
|
|
|
|
bits<32> Inst;
|
|
|
|
|
|
|
|
let Inst{31-26} = 0x10;
|
|
|
|
let Inst{25-21} = tf;
|
|
|
|
let Inst{20-18} = 0x0; // cc
|
|
|
|
let Inst{17-16} = 0x0;
|
|
|
|
let Inst{15-0} = offset;
|
|
|
|
}
|
|
|
|
|
|
|
|
class ROUND_W_FM_MM<bits<1> fmt, bits<8> funct> : MMArch {
|
|
|
|
bits<5> fd;
|
|
|
|
bits<5> fs;
|
|
|
|
|
|
|
|
bits<32> Inst;
|
|
|
|
|
|
|
|
let Inst{31-26} = 0x15;
|
|
|
|
let Inst{25-21} = fd;
|
|
|
|
let Inst{20-16} = fs;
|
|
|
|
let Inst{15} = 0;
|
|
|
|
let Inst{14} = fmt;
|
|
|
|
let Inst{13-6} = funct;
|
|
|
|
let Inst{5-0} = 0x3b;
|
|
|
|
}
|
|
|
|
|
|
|
|
class ABS_FM_MM<bits<2> fmt, bits<7> funct> : MMArch {
|
|
|
|
bits<5> fd;
|
|
|
|
bits<5> fs;
|
|
|
|
|
|
|
|
bits<32> Inst;
|
|
|
|
|
|
|
|
let Inst{31-26} = 0x15;
|
|
|
|
let Inst{25-21} = fd;
|
|
|
|
let Inst{20-16} = fs;
|
|
|
|
let Inst{15} = 0;
|
|
|
|
let Inst{14-13} = fmt;
|
|
|
|
let Inst{12-6} = funct;
|
|
|
|
let Inst{5-0} = 0x3b;
|
|
|
|
}
|
2013-12-25 18:09:27 +08:00
|
|
|
|
|
|
|
class CMov_F_F_FM_MM<bits<9> func, bits<2> fmt> : MMArch {
|
|
|
|
bits<5> fd;
|
|
|
|
bits<5> fs;
|
|
|
|
|
|
|
|
bits<32> Inst;
|
|
|
|
|
|
|
|
let Inst{31-26} = 0x15;
|
|
|
|
let Inst{25-21} = fd;
|
|
|
|
let Inst{20-16} = fs;
|
|
|
|
let Inst{15-13} = 0x0; //cc
|
|
|
|
let Inst{12-11} = 0x0;
|
|
|
|
let Inst{10-9} = fmt;
|
|
|
|
let Inst{8-0} = func;
|
|
|
|
}
|
|
|
|
|
|
|
|
class CMov_I_F_FM_MM<bits<8> funct, bits<2> fmt> : MMArch {
|
|
|
|
bits<5> fd;
|
|
|
|
bits<5> fs;
|
|
|
|
bits<5> rt;
|
|
|
|
|
|
|
|
bits<32> Inst;
|
|
|
|
|
|
|
|
let Inst{31-26} = 0x15;
|
|
|
|
let Inst{25-21} = rt;
|
|
|
|
let Inst{20-16} = fs;
|
|
|
|
let Inst{15-11} = fd;
|
|
|
|
let Inst{9-8} = fmt;
|
|
|
|
let Inst{7-0} = funct;
|
|
|
|
}
|
|
|
|
|
|
|
|
class MFC1_FM_MM<bits<8> funct> : MMArch {
|
|
|
|
bits<5> rt;
|
|
|
|
bits<5> fs;
|
|
|
|
|
|
|
|
bits<32> Inst;
|
|
|
|
|
|
|
|
let Inst{31-26} = 0x15;
|
|
|
|
let Inst{25-21} = rt;
|
|
|
|
let Inst{20-16} = fs;
|
|
|
|
let Inst{15-14} = 0x0;
|
|
|
|
let Inst{13-6} = funct;
|
|
|
|
let Inst{5-0} = 0x3b;
|
|
|
|
}
|
|
|
|
|
|
|
|
class MADDS_FM_MM<bits<6> funct>: MMArch {
|
|
|
|
bits<5> ft;
|
|
|
|
bits<5> fs;
|
|
|
|
bits<5> fd;
|
|
|
|
bits<5> fr;
|
|
|
|
|
|
|
|
bits<32> Inst;
|
|
|
|
|
|
|
|
let Inst{31-26} = 0x15;
|
|
|
|
let Inst{25-21} = ft;
|
|
|
|
let Inst{20-16} = fs;
|
|
|
|
let Inst{15-11} = fd;
|
|
|
|
let Inst{10-6} = fr;
|
|
|
|
let Inst{5-0} = funct;
|
|
|
|
}
|
2014-08-14 20:09:10 +08:00
|
|
|
|
|
|
|
class COMPACT_BRANCH_FM_MM<bits<5> funct> {
|
|
|
|
bits<5> rs;
|
|
|
|
bits<16> offset;
|
|
|
|
|
|
|
|
bits<32> Inst;
|
|
|
|
|
|
|
|
let Inst{31-26} = 0x10;
|
|
|
|
let Inst{25-21} = funct;
|
|
|
|
let Inst{20-16} = rs;
|
|
|
|
let Inst{15-0} = offset;
|
|
|
|
}
|
2014-09-12 21:33:33 +08:00
|
|
|
|
|
|
|
class COP0_TLB_FM_MM<bits<10> op> : MMArch {
|
|
|
|
bits<32> Inst;
|
|
|
|
|
|
|
|
let Inst{31-26} = 0x0;
|
|
|
|
let Inst{25-16} = 0x0;
|
|
|
|
let Inst{15-6} = op;
|
|
|
|
let Inst{5-0} = 0x3c;
|
|
|
|
}
|
2014-11-19 19:25:50 +08:00
|
|
|
|
|
|
|
class SDBBP_FM_MM : MMArch {
|
|
|
|
bits<10> code_;
|
|
|
|
|
|
|
|
bits<32> Inst;
|
|
|
|
|
|
|
|
let Inst{31-26} = 0x0;
|
|
|
|
let Inst{25-16} = code_;
|
|
|
|
let Inst{15-6} = 0x36d;
|
|
|
|
let Inst{5-0} = 0x3c;
|
|
|
|
}
|
|
|
|
|
|
|
|
class RDHWR_FM_MM : MMArch {
|
|
|
|
bits<5> rt;
|
|
|
|
bits<5> rd;
|
|
|
|
|
|
|
|
bits<32> Inst;
|
|
|
|
|
|
|
|
let Inst{31-26} = 0x0;
|
|
|
|
let Inst{25-21} = rt;
|
|
|
|
let Inst{20-16} = rd;
|
|
|
|
let Inst{15-6} = 0x1ac;
|
|
|
|
let Inst{5-0} = 0x3c;
|
|
|
|
}
|
2014-11-19 19:39:12 +08:00
|
|
|
|
|
|
|
class LWXS_FM_MM<bits<10> funct> {
|
|
|
|
bits<5> rd;
|
|
|
|
bits<5> base;
|
|
|
|
bits<5> index;
|
|
|
|
|
|
|
|
bits<32> Inst;
|
|
|
|
|
|
|
|
let Inst{31-26} = 0x0;
|
|
|
|
let Inst{25-21} = index;
|
|
|
|
let Inst{20-16} = base;
|
|
|
|
let Inst{15-11} = rd;
|
|
|
|
let Inst{10} = 0;
|
|
|
|
let Inst{9-0} = funct;
|
|
|
|
}
|
2014-11-20 00:44:02 +08:00
|
|
|
|
|
|
|
class LWM_FM_MM<bits<4> funct> : MMArch {
|
|
|
|
bits<5> rt;
|
|
|
|
bits<21> addr;
|
|
|
|
|
|
|
|
bits<32> Inst;
|
|
|
|
|
|
|
|
let Inst{31-26} = 0x8;
|
|
|
|
let Inst{25-21} = rt;
|
|
|
|
let Inst{20-16} = addr{20-16};
|
|
|
|
let Inst{15-12} = funct;
|
|
|
|
let Inst{11-0} = addr{11-0};
|
|
|
|
}
|
2014-11-28 02:28:59 +08:00
|
|
|
|
2015-11-12 21:21:33 +08:00
|
|
|
class LWM_FM_MM16<bits<4> funct> : MMArch, PredicateControl {
|
2014-11-28 02:28:59 +08:00
|
|
|
bits<2> rt;
|
|
|
|
bits<4> addr;
|
|
|
|
|
|
|
|
bits<16> Inst;
|
|
|
|
|
|
|
|
let Inst{15-10} = 0x11;
|
|
|
|
let Inst{9-6} = funct;
|
|
|
|
let Inst{5-4} = rt;
|
|
|
|
let Inst{3-0} = addr;
|
|
|
|
}
|
2014-12-24 03:55:34 +08:00
|
|
|
|
|
|
|
class CACHE_PREF_FM_MM<bits<6> op, bits<4> funct> : MMArch {
|
|
|
|
bits<21> addr;
|
|
|
|
bits<5> hint;
|
|
|
|
bits<5> base = addr{20-16};
|
|
|
|
bits<12> offset = addr{11-0};
|
|
|
|
|
|
|
|
bits<32> Inst;
|
|
|
|
|
|
|
|
let Inst{31-26} = op;
|
|
|
|
let Inst{25-21} = hint;
|
|
|
|
let Inst{20-16} = base;
|
|
|
|
let Inst{15-12} = funct;
|
|
|
|
let Inst{11-0} = offset;
|
|
|
|
}
|
|
|
|
|
2015-09-09 17:10:46 +08:00
|
|
|
class CACHE_PREFE_FM_MM<bits<6> op, bits<3> funct> : MMArch {
|
|
|
|
bits<21> addr;
|
|
|
|
bits<5> hint;
|
|
|
|
bits<5> base = addr{20-16};
|
|
|
|
bits<9> offset = addr{8-0};
|
|
|
|
|
|
|
|
bits<32> Inst;
|
|
|
|
|
|
|
|
let Inst{31-26} = op;
|
|
|
|
let Inst{25-21} = hint;
|
|
|
|
let Inst{20-16} = base;
|
|
|
|
let Inst{15-12} = 0xA;
|
|
|
|
let Inst{11-9} = funct;
|
|
|
|
let Inst{8-0} = offset;
|
|
|
|
}
|
|
|
|
|
2015-09-16 17:14:35 +08:00
|
|
|
class POOL32F_PREFX_FM_MM<bits<6> op, bits<9> funct> : MMArch {
|
|
|
|
bits<5> index;
|
|
|
|
bits<5> base;
|
|
|
|
bits<5> hint;
|
|
|
|
|
|
|
|
bits<32> Inst;
|
|
|
|
|
|
|
|
let Inst{31-26} = op;
|
|
|
|
let Inst{25-21} = index;
|
|
|
|
let Inst{20-16} = base;
|
|
|
|
let Inst{15-11} = hint;
|
|
|
|
let Inst{10-9} = 0x0;
|
|
|
|
let Inst{8-0} = funct;
|
|
|
|
}
|
|
|
|
|
2014-12-24 03:55:34 +08:00
|
|
|
class BARRIER_FM_MM<bits<5> op> : MMArch {
|
|
|
|
bits<32> Inst;
|
|
|
|
|
|
|
|
let Inst{31-26} = 0x0;
|
|
|
|
let Inst{25-21} = 0x0;
|
|
|
|
let Inst{20-16} = 0x0;
|
|
|
|
let Inst{15-11} = op;
|
|
|
|
let Inst{10-6} = 0x0;
|
|
|
|
let Inst{5-0} = 0x0;
|
|
|
|
}
|
2015-01-21 20:10:11 +08:00
|
|
|
|
|
|
|
class ADDIUPC_FM_MM {
|
|
|
|
bits<3> rs;
|
|
|
|
bits<23> imm;
|
|
|
|
|
|
|
|
bits<32> Inst;
|
|
|
|
|
|
|
|
let Inst{31-26} = 0x1e;
|
|
|
|
let Inst{25-23} = rs;
|
|
|
|
let Inst{22-0} = imm;
|
|
|
|
}
|