class MMArch { string Arch = "micromips"; list Pattern = []; } class ADD_FM_MM 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 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 op> : MMArch { bits<5> rt; bits<5> rs; bits<16> imm16; bits<32> Inst; let Inst{31-26} = op; let Inst{25-21} = rs; let Inst{20-16} = rt; 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 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; } class SRA_FM_MM 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 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; } class LW_FM_MM 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}; }