Please use GitHub pull requests for new patches. Avoid migrating existing patches. Phabricator shutdown timeline
Changeset View
Changeset View
Standalone View
Standalone View
llvm/lib/Target/SystemZ/SystemZInstrVector.td
Show First 20 Lines • Show All 1,169 Lines • ▼ Show 20 Lines | let Predicates = [FeatureVectorEnhancements1] in { | ||||
def : FPConversion<WFLRX, any_fpround, v64db, v128xb, 0, 0>; | def : FPConversion<WFLRX, any_fpround, v64db, v128xb, 0, 0>; | ||||
def : Pat<(f32 (any_fpround (f128 VR128:$src))), | def : Pat<(f32 (any_fpround (f128 VR128:$src))), | ||||
(WLEDB (WFLRX VR128:$src, 0, 3), 0, 0)>; | (WLEDB (WFLRX VR128:$src, 0, 3), 0, 0)>; | ||||
} | } | ||||
// Maximum. | // Maximum. | ||||
multiclass VectorMax<Instruction insn, TypedReg tr> { | multiclass VectorMax<Instruction insn, TypedReg tr> { | ||||
def : FPMinMax<insn, any_fmaxnum, tr, 4>; | def : FPMinMax<insn, any_fmaxnum, tr, 4>; | ||||
def : FPMinMax<insn, fmaximum, tr, 1>; | def : FPMinMax<insn, any_fmaximum, tr, 1>; | ||||
} | } | ||||
let Predicates = [FeatureVectorEnhancements1] in { | let Predicates = [FeatureVectorEnhancements1] in { | ||||
let Uses = [FPC], mayRaiseFPException = 1 in { | let Uses = [FPC], mayRaiseFPException = 1 in { | ||||
def VFMAX : TernaryVRRcFloatGeneric<"vfmax", 0xE7EF>; | def VFMAX : TernaryVRRcFloatGeneric<"vfmax", 0xE7EF>; | ||||
def VFMAXDB : TernaryVRRcFloat<"vfmaxdb", 0xE7EF, int_s390_vfmaxdb, | def VFMAXDB : TernaryVRRcFloat<"vfmaxdb", 0xE7EF, int_s390_vfmaxdb, | ||||
v128db, v128db, 3, 0>; | v128db, v128db, 3, 0>; | ||||
def WFMAXDB : TernaryVRRcFloat<"wfmaxdb", 0xE7EF, null_frag, | def WFMAXDB : TernaryVRRcFloat<"wfmaxdb", 0xE7EF, null_frag, | ||||
v64db, v64db, 3, 8>; | v64db, v64db, 3, 8>; | ||||
Show All 9 Lines | let Predicates = [FeatureVectorEnhancements1] in { | ||||
defm : VectorMax<VFMAXSB, v128sb>; | defm : VectorMax<VFMAXSB, v128sb>; | ||||
defm : VectorMax<WFMAXSB, v32sb>; | defm : VectorMax<WFMAXSB, v32sb>; | ||||
defm : VectorMax<WFMAXXB, v128xb>; | defm : VectorMax<WFMAXXB, v128xb>; | ||||
} | } | ||||
// Minimum. | // Minimum. | ||||
multiclass VectorMin<Instruction insn, TypedReg tr> { | multiclass VectorMin<Instruction insn, TypedReg tr> { | ||||
def : FPMinMax<insn, any_fminnum, tr, 4>; | def : FPMinMax<insn, any_fminnum, tr, 4>; | ||||
def : FPMinMax<insn, fminimum, tr, 1>; | def : FPMinMax<insn, any_fminimum, tr, 1>; | ||||
} | } | ||||
let Predicates = [FeatureVectorEnhancements1] in { | let Predicates = [FeatureVectorEnhancements1] in { | ||||
let Uses = [FPC], mayRaiseFPException = 1 in { | let Uses = [FPC], mayRaiseFPException = 1 in { | ||||
def VFMIN : TernaryVRRcFloatGeneric<"vfmin", 0xE7EE>; | def VFMIN : TernaryVRRcFloatGeneric<"vfmin", 0xE7EE>; | ||||
def VFMINDB : TernaryVRRcFloat<"vfmindb", 0xE7EE, int_s390_vfmindb, | def VFMINDB : TernaryVRRcFloat<"vfmindb", 0xE7EE, int_s390_vfmindb, | ||||
v128db, v128db, 3, 0>; | v128db, v128db, 3, 0>; | ||||
def WFMINDB : TernaryVRRcFloat<"wfmindb", 0xE7EE, null_frag, | def WFMINDB : TernaryVRRcFloat<"wfmindb", 0xE7EE, null_frag, | ||||
v64db, v64db, 3, 8>; | v64db, v64db, 3, 8>; | ||||
▲ Show 20 Lines • Show All 534 Lines • Show Last 20 Lines |