Changeset View
Changeset View
Standalone View
Standalone View
lib/Target/Mips/MipsCondMov.td
Show First 20 Lines • Show All 133 Lines • ▼ Show 20 Lines | |||||
def MOVZ_I64_S : CMov_I_F_FT<"movz.s", GPR64Opnd, FGR32Opnd, IIFmove>, | def MOVZ_I64_S : CMov_I_F_FT<"movz.s", GPR64Opnd, FGR32Opnd, IIFmove>, | ||||
CMov_I_F_FM<18, 16>, Requires<[HasMips64, HasStdEnc]>; | CMov_I_F_FM<18, 16>, Requires<[HasMips64, HasStdEnc]>; | ||||
def MOVN_I_S : MMRel, CMov_I_F_FT<"movn.s", GPR32Opnd, FGR32Opnd, IIFmove>, | def MOVN_I_S : MMRel, CMov_I_F_FT<"movn.s", GPR32Opnd, FGR32Opnd, IIFmove>, | ||||
CMov_I_F_FM<19, 16>; | CMov_I_F_FM<19, 16>; | ||||
let isCodeGenOnly = 1 in | let isCodeGenOnly = 1 in | ||||
def MOVN_I64_S : CMov_I_F_FT<"movn.s", GPR64Opnd, FGR32Opnd, IIFmove>, | def MOVN_I64_S : CMov_I_F_FT<"movn.s", GPR64Opnd, FGR32Opnd, IIFmove>, | ||||
CMov_I_F_FM<19, 16>, Requires<[HasMips64, HasStdEnc]>; | CMov_I_F_FM<19, 16>, Requires<[IsGP64bit, HasStdEnc]>; | ||||
let Predicates = [NotFP64bit, HasStdEnc] in { | let Predicates = [NotFP64bit, HasStdEnc] in { | ||||
def MOVZ_I_D32 : MMRel, CMov_I_F_FT<"movz.d", GPR32Opnd, AFGR64Opnd, | def MOVZ_I_D32 : MMRel, CMov_I_F_FT<"movz.d", GPR32Opnd, AFGR64Opnd, | ||||
IIFmove>, CMov_I_F_FM<18, 17>; | IIFmove>, CMov_I_F_FM<18, 17>; | ||||
def MOVN_I_D32 : MMRel, CMov_I_F_FT<"movn.d", GPR32Opnd, AFGR64Opnd, | def MOVN_I_D32 : MMRel, CMov_I_F_FT<"movn.d", GPR32Opnd, AFGR64Opnd, | ||||
IIFmove>, CMov_I_F_FM<19, 17>; | IIFmove>, CMov_I_F_FM<19, 17>; | ||||
} | } | ||||
Show All 10 Lines | let Predicates = [IsFP64bit, HasStdEnc], DecoderNamespace = "Mips64" in { | ||||
} | } | ||||
} | } | ||||
def MOVT_I : MMRel, CMov_F_I_FT<"movt", GPR32Opnd, IIArith, MipsCMovFP_T>, | def MOVT_I : MMRel, CMov_F_I_FT<"movt", GPR32Opnd, IIArith, MipsCMovFP_T>, | ||||
CMov_F_I_FM<1>; | CMov_F_I_FM<1>; | ||||
let isCodeGenOnly = 1 in | let isCodeGenOnly = 1 in | ||||
def MOVT_I64 : CMov_F_I_FT<"movt", GPR64Opnd, IIArith, MipsCMovFP_T>, | def MOVT_I64 : CMov_F_I_FT<"movt", GPR64Opnd, IIArith, MipsCMovFP_T>, | ||||
CMov_F_I_FM<1>, Requires<[HasMips64, HasStdEnc]>; | CMov_F_I_FM<1>, Requires<[IsGP64bit, HasStdEnc]>; | ||||
def MOVF_I : MMRel, CMov_F_I_FT<"movf", GPR32Opnd, IIArith, MipsCMovFP_F>, | def MOVF_I : MMRel, CMov_F_I_FT<"movf", GPR32Opnd, IIArith, MipsCMovFP_F>, | ||||
CMov_F_I_FM<0>; | CMov_F_I_FM<0>; | ||||
let isCodeGenOnly = 1 in | let isCodeGenOnly = 1 in | ||||
def MOVF_I64 : CMov_F_I_FT<"movf", GPR64Opnd, IIArith, MipsCMovFP_F>, | def MOVF_I64 : CMov_F_I_FT<"movf", GPR64Opnd, IIArith, MipsCMovFP_F>, | ||||
CMov_F_I_FM<0>, Requires<[HasMips64, HasStdEnc]>; | CMov_F_I_FM<0>, Requires<[IsGP64bit, HasStdEnc]>; | ||||
def MOVT_S : MMRel, CMov_F_F_FT<"movt.s", FGR32Opnd, IIFmove, MipsCMovFP_T>, | def MOVT_S : MMRel, CMov_F_F_FT<"movt.s", FGR32Opnd, IIFmove, MipsCMovFP_T>, | ||||
CMov_F_F_FM<16, 1>; | CMov_F_F_FM<16, 1>; | ||||
def MOVF_S : MMRel, CMov_F_F_FT<"movf.s", FGR32Opnd, IIFmove, MipsCMovFP_F>, | def MOVF_S : MMRel, CMov_F_F_FT<"movf.s", FGR32Opnd, IIFmove, MipsCMovFP_F>, | ||||
CMov_F_F_FM<16, 0>; | CMov_F_F_FM<16, 0>; | ||||
let Predicates = [NotFP64bit, HasStdEnc] in { | let Predicates = [NotFP64bit, HasStdEnc] in { | ||||
def MOVT_D32 : MMRel, CMov_F_F_FT<"movt.d", AFGR64Opnd, IIFmove, | def MOVT_D32 : MMRel, CMov_F_F_FT<"movt.d", AFGR64Opnd, IIFmove, | ||||
MipsCMovFP_T>, CMov_F_F_FM<17, 1>; | MipsCMovFP_T>, CMov_F_F_FM<17, 1>; | ||||
def MOVF_D32 : MMRel, CMov_F_F_FT<"movf.d", AFGR64Opnd, IIFmove, | def MOVF_D32 : MMRel, CMov_F_F_FT<"movf.d", AFGR64Opnd, IIFmove, | ||||
MipsCMovFP_F>, CMov_F_F_FM<17, 0>; | MipsCMovFP_F>, CMov_F_F_FM<17, 0>; | ||||
} | } | ||||
let Predicates = [IsFP64bit, HasStdEnc], DecoderNamespace = "Mips64" in { | let Predicates = [IsFP64bit, HasStdEnc], DecoderNamespace = "Mips64" in { | ||||
def MOVT_D64 : CMov_F_F_FT<"movt.d", FGR64Opnd, IIFmove, MipsCMovFP_T>, | def MOVT_D64 : CMov_F_F_FT<"movt.d", FGR64Opnd, IIFmove, MipsCMovFP_T>, | ||||
CMov_F_F_FM<17, 1>; | CMov_F_F_FM<17, 1>; | ||||
def MOVF_D64 : CMov_F_F_FT<"movf.d", FGR64Opnd, IIFmove, MipsCMovFP_F>, | def MOVF_D64 : CMov_F_F_FT<"movf.d", FGR64Opnd, IIFmove, MipsCMovFP_F>, | ||||
CMov_F_F_FM<17, 0>; | CMov_F_F_FM<17, 0>; | ||||
} | } | ||||
// Instantiation of conditional move patterns. | // Instantiation of conditional move patterns. | ||||
defm : MovzPats0<GPR32, GPR32, MOVZ_I_I, SLT, SLTu, SLTi, SLTiu>; | defm : MovzPats0<GPR32, GPR32, MOVZ_I_I, SLT, SLTu, SLTi, SLTiu>; | ||||
defm : MovzPats1<GPR32, GPR32, MOVZ_I_I, XOR>; | defm : MovzPats1<GPR32, GPR32, MOVZ_I_I, XOR>; | ||||
defm : MovzPats2<GPR32, GPR32, MOVZ_I_I, XORi>; | defm : MovzPats2<GPR32, GPR32, MOVZ_I_I, XORi>; | ||||
let Predicates = [HasMips64, HasStdEnc] in { | let Predicates = [IsGP64bit, HasStdEnc] in { | ||||
defm : MovzPats0<GPR32, GPR64, MOVZ_I_I64, SLT, SLTu, SLTi, SLTiu>; | defm : MovzPats0<GPR32, GPR64, MOVZ_I_I64, SLT, SLTu, SLTi, SLTiu>; | ||||
defm : MovzPats0<GPR64, GPR32, MOVZ_I_I, SLT64, SLTu64, SLTi64, | defm : MovzPats0<GPR64, GPR32, MOVZ_I_I, SLT64, SLTu64, SLTi64, | ||||
SLTiu64>; | SLTiu64>; | ||||
defm : MovzPats0<GPR64, GPR64, MOVZ_I_I64, SLT64, SLTu64, SLTi64, | defm : MovzPats0<GPR64, GPR64, MOVZ_I_I64, SLT64, SLTu64, SLTi64, | ||||
SLTiu64>; | SLTiu64>; | ||||
defm : MovzPats1<GPR32, GPR64, MOVZ_I_I64, XOR>; | defm : MovzPats1<GPR32, GPR64, MOVZ_I_I64, XOR>; | ||||
defm : MovzPats1<GPR64, GPR32, MOVZ_I64_I, XOR64>; | defm : MovzPats1<GPR64, GPR32, MOVZ_I64_I, XOR64>; | ||||
defm : MovzPats1<GPR64, GPR64, MOVZ_I64_I64, XOR64>; | defm : MovzPats1<GPR64, GPR64, MOVZ_I64_I64, XOR64>; | ||||
defm : MovzPats2<GPR32, GPR64, MOVZ_I_I64, XORi>; | defm : MovzPats2<GPR32, GPR64, MOVZ_I_I64, XORi>; | ||||
defm : MovzPats2<GPR64, GPR32, MOVZ_I64_I, XORi64>; | defm : MovzPats2<GPR64, GPR32, MOVZ_I64_I, XORi64>; | ||||
defm : MovzPats2<GPR64, GPR64, MOVZ_I64_I64, XORi64>; | defm : MovzPats2<GPR64, GPR64, MOVZ_I64_I64, XORi64>; | ||||
} | } | ||||
defm : MovnPats<GPR32, GPR32, MOVN_I_I, XOR>; | defm : MovnPats<GPR32, GPR32, MOVN_I_I, XOR>; | ||||
let Predicates = [HasMips64, HasStdEnc] in { | let Predicates = [IsGP64bit, HasStdEnc] in { | ||||
defm : MovnPats<GPR32, GPR64, MOVN_I_I64, XOR>; | defm : MovnPats<GPR32, GPR64, MOVN_I_I64, XOR>; | ||||
defm : MovnPats<GPR64, GPR32, MOVN_I64_I, XOR64>; | defm : MovnPats<GPR64, GPR32, MOVN_I64_I, XOR64>; | ||||
defm : MovnPats<GPR64, GPR64, MOVN_I64_I64, XOR64>; | defm : MovnPats<GPR64, GPR64, MOVN_I64_I64, XOR64>; | ||||
} | } | ||||
defm : MovzPats0<GPR32, FGR32, MOVZ_I_S, SLT, SLTu, SLTi, SLTiu>; | defm : MovzPats0<GPR32, FGR32, MOVZ_I_S, SLT, SLTu, SLTi, SLTiu>; | ||||
defm : MovzPats1<GPR32, FGR32, MOVZ_I_S, XOR>; | defm : MovzPats1<GPR32, FGR32, MOVZ_I_S, XOR>; | ||||
defm : MovnPats<GPR32, FGR32, MOVN_I_S, XOR>; | defm : MovnPats<GPR32, FGR32, MOVN_I_S, XOR>; | ||||
let Predicates = [HasMips64, HasStdEnc] in { | let Predicates = [IsGP64bit, HasStdEnc] in { | ||||
defm : MovzPats0<GPR64, FGR32, MOVZ_I_S, SLT64, SLTu64, SLTi64, | defm : MovzPats0<GPR64, FGR32, MOVZ_I_S, SLT64, SLTu64, SLTi64, | ||||
SLTiu64>; | SLTiu64>; | ||||
defm : MovzPats1<GPR64, FGR32, MOVZ_I64_S, XOR64>; | defm : MovzPats1<GPR64, FGR32, MOVZ_I64_S, XOR64>; | ||||
defm : MovnPats<GPR64, FGR32, MOVN_I64_S, XOR64>; | defm : MovnPats<GPR64, FGR32, MOVN_I64_S, XOR64>; | ||||
} | } | ||||
let Predicates = [NotFP64bit, HasStdEnc] in { | let Predicates = [NotFP64bit, HasStdEnc] in { | ||||
defm : MovzPats0<GPR32, AFGR64, MOVZ_I_D32, SLT, SLTu, SLTi, SLTiu>; | defm : MovzPats0<GPR32, AFGR64, MOVZ_I_D32, SLT, SLTu, SLTi, SLTiu>; | ||||
Show All 12 Lines |