forked from OSchip/llvm-project
[mips][microMIPSr6] Implement CACHE and PREF instructions
Implement CACHE and PREF instructions using mapping. Differential Revision: http://reviews.llvm.org/D8893 llvm-svn: 235379
This commit is contained in:
parent
b69d16ab24
commit
8e086cedfa
|
@ -29,3 +29,16 @@ class POOL32A_BITSWAP_FM_MMR6<bits<6> funct> : MipsR6Inst {
|
|||
let Inst{11-6} = funct;
|
||||
let Inst{5-0} = 0b111100;
|
||||
}
|
||||
|
||||
class CACHE_PREF_FM_MMR6<bits<6> opgroup, bits<4> funct> : MipsR6Inst {
|
||||
bits<21> addr;
|
||||
bits<5> hint;
|
||||
|
||||
bits<32> Inst;
|
||||
|
||||
let Inst{31-26} = opgroup;
|
||||
let Inst{25-21} = hint;
|
||||
let Inst{20-16} = addr{20-16};
|
||||
let Inst{15-12} = funct;
|
||||
let Inst{11-0} = addr{11-0};
|
||||
}
|
||||
|
|
|
@ -20,6 +20,8 @@
|
|||
class BALC_MMR6_ENC : BRANCH_OFF26_FM<0b101101>;
|
||||
class BC_MMR6_ENC : BRANCH_OFF26_FM<0b100101>;
|
||||
class BITSWAP_MMR6_ENC : POOL32A_BITSWAP_FM_MMR6<0b101100>;
|
||||
class CACHE_MMR6_ENC : CACHE_PREF_FM_MMR6<0b001000, 0b0110>;
|
||||
class PREF_MMR6_ENC : CACHE_PREF_FM_MMR6<0b011000, 0b0010>;
|
||||
|
||||
//===----------------------------------------------------------------------===//
|
||||
//
|
||||
|
@ -51,6 +53,18 @@ class BITSWAP_MMR6_DESC_BASE<string instr_asm, RegisterOperand GPROpnd>
|
|||
|
||||
class BITSWAP_MMR6_DESC : BITSWAP_MMR6_DESC_BASE<"bitswap", GPR32Opnd>;
|
||||
|
||||
class CACHE_HINT_MMR6_DESC<string instr_asm, Operand MemOpnd,
|
||||
RegisterOperand GPROpnd> : MMR6Arch<instr_asm> {
|
||||
dag OutOperandList = (outs);
|
||||
dag InOperandList = (ins MemOpnd:$addr, uimm5:$hint);
|
||||
string AsmString = !strconcat(instr_asm, "\t$hint, $addr");
|
||||
list<dag> Pattern = [];
|
||||
string DecoderMethod = "DecodeCacheOpMM";
|
||||
}
|
||||
|
||||
class CACHE_MMR6_DESC : CACHE_HINT_MMR6_DESC<"cache", mem_mm_12, GPR32Opnd>;
|
||||
class PREF_MMR6_DESC : CACHE_HINT_MMR6_DESC<"pref", mem_mm_12, GPR32Opnd>;
|
||||
|
||||
//===----------------------------------------------------------------------===//
|
||||
//
|
||||
// Instruction Definitions
|
||||
|
@ -62,4 +76,6 @@ def BALC_MMR6 : R6MMR6Rel, BALC_MMR6_ENC, BALC_MMR6_DESC, ISA_MICROMIPS32R6;
|
|||
def BC_MMR6 : R6MMR6Rel, BC_MMR6_ENC, BC_MMR6_DESC, ISA_MICROMIPS32R6;
|
||||
def BITSWAP_MMR6 : R6MMR6Rel, BITSWAP_MMR6_ENC, BITSWAP_MMR6_DESC,
|
||||
ISA_MICROMIPS32R6;
|
||||
def CACHE_MMR6 : R6MMR6Rel, CACHE_MMR6_ENC, CACHE_MMR6_DESC, ISA_MICROMIPS32R6;
|
||||
def PREF_MMR6 : R6MMR6Rel, PREF_MMR6_ENC, PREF_MMR6_DESC, ISA_MICROMIPS32R6;
|
||||
}
|
||||
|
|
|
@ -546,7 +546,7 @@ class CLASS_S_DESC : CLASS_RINT_DESC_BASE<"class.s", FGR32Opnd>;
|
|||
class CLASS_D_DESC : CLASS_RINT_DESC_BASE<"class.d", FGR64Opnd>;
|
||||
|
||||
class CACHE_HINT_DESC<string instr_asm, Operand MemOpnd,
|
||||
RegisterOperand GPROpnd> {
|
||||
RegisterOperand GPROpnd> : MipsR6Arch<instr_asm> {
|
||||
dag OutOperandList = (outs);
|
||||
dag InOperandList = (ins MemOpnd:$addr, uimm5:$hint);
|
||||
string AsmString = !strconcat(instr_asm, "\t$hint, $addr");
|
||||
|
@ -677,7 +677,7 @@ def BNEZALC : BNEZALC_ENC, BNEZALC_DESC, ISA_MIPS32R6;
|
|||
def BNEZC : BNEZC_ENC, BNEZC_DESC, ISA_MIPS32R6;
|
||||
def BNVC : BNVC_ENC, BNVC_DESC, ISA_MIPS32R6;
|
||||
def BOVC : BOVC_ENC, BOVC_DESC, ISA_MIPS32R6;
|
||||
def CACHE_R6 : CACHE_ENC, CACHE_DESC, ISA_MIPS32R6;
|
||||
def CACHE_R6 : R6MMR6Rel, CACHE_ENC, CACHE_DESC, ISA_MIPS32R6;
|
||||
def CLASS_D : CLASS_D_ENC, CLASS_D_DESC, ISA_MIPS32R6;
|
||||
def CLASS_S : CLASS_S_ENC, CLASS_S_DESC, ISA_MIPS32R6;
|
||||
def CLO_R6 : CLO_R6_ENC, CLO_R6_DESC, ISA_MIPS32R6;
|
||||
|
@ -714,7 +714,7 @@ def MUHU : MUHU_ENC, MUHU_DESC, ISA_MIPS32R6;
|
|||
def MUL_R6 : MUL_R6_ENC, MUL_R6_DESC, ISA_MIPS32R6;
|
||||
def MULU : MULU_ENC, MULU_DESC, ISA_MIPS32R6;
|
||||
def NAL; // BAL with rd=0
|
||||
def PREF_R6 : PREF_ENC, PREF_DESC, ISA_MIPS32R6;
|
||||
def PREF_R6 : R6MMR6Rel, PREF_ENC, PREF_DESC, ISA_MIPS32R6;
|
||||
def RINT_D : RINT_D_ENC, RINT_D_DESC, ISA_MIPS32R6;
|
||||
def RINT_S : RINT_S_ENC, RINT_S_DESC, ISA_MIPS32R6;
|
||||
def SC_R6 : SC_R6_ENC, SC_R6_DESC, ISA_MIPS32R6;
|
||||
|
|
|
@ -8,3 +8,9 @@
|
|||
|
||||
# CHECK: bitswap $4, $2
|
||||
0x00 0x44 0x0b 0x3c
|
||||
|
||||
# CHECK: cache 1, 8($5)
|
||||
0x20 0x25 0x60 0x08
|
||||
|
||||
# CHECK: pref 1, 8($5)
|
||||
0x60 0x25 0x20 0x08
|
||||
|
|
|
@ -4,3 +4,5 @@
|
|||
balc 14572256 # CHECK: balc 14572256 # encoding: [0xb4,0x37,0x96,0xb8]
|
||||
bc 14572256 # CHECK: bc 14572256 # encoding: [0x94,0x37,0x96,0xb8]
|
||||
bitswap $4, $2 # CHECK: bitswap $4, $2 # encoding: [0x00,0x44,0x0b,0x3c]
|
||||
cache 1, 8($5) # CHECK: cache 1, 8($5) # encoding: [0x20,0x25,0x60,0x08]
|
||||
pref 1, 8($5) # CHECK: pref 1, 8($5) # encoding: [0x60,0x25,0x20,0x08]
|
||||
|
|
Loading…
Reference in New Issue