mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-09-30 22:18:46 +00:00
[PowerPC] Add a TableGen relation for A-type and M-type VSX FMA instructions
TableGen will create a lookup table for the A-type FMA instructions providing their corresponding M-form opcodes. This will be used by upcoming commits. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@204746 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
@@ -113,6 +113,12 @@ def DeprecatedDST : SubtargetFeature<"", "DeprecatedDST", "true",
|
|||||||
// their record-form variants.
|
// their record-form variants.
|
||||||
class RecFormRel;
|
class RecFormRel;
|
||||||
|
|
||||||
|
// AltVSXFMARel - Filter class used to relate the primary addend-killing VSX
|
||||||
|
// FMA instruction forms with their corresponding factor-killing forms.
|
||||||
|
class AltVSXFMARel {
|
||||||
|
bit IsVSXFMAAlt = 0;
|
||||||
|
}
|
||||||
|
|
||||||
//===----------------------------------------------------------------------===//
|
//===----------------------------------------------------------------------===//
|
||||||
// Relation Map Definitions.
|
// Relation Map Definitions.
|
||||||
//===----------------------------------------------------------------------===//
|
//===----------------------------------------------------------------------===//
|
||||||
@@ -143,6 +149,19 @@ def getNonRecordFormOpcode : InstrMapping {
|
|||||||
let ValueCols = [["0"]];
|
let ValueCols = [["0"]];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
def getAltVSXFMAOpcode : InstrMapping {
|
||||||
|
let FilterClass = "AltVSXFMARel";
|
||||||
|
// Instructions with the same BaseName and Interpretation64Bit values
|
||||||
|
// form a row.
|
||||||
|
let RowFields = ["BaseName"];
|
||||||
|
// Instructions with the same RC value form a column.
|
||||||
|
let ColFields = ["IsVSXFMAAlt"];
|
||||||
|
// The key column are the (default) addend-killing instructions.
|
||||||
|
let KeyCol = ["0"];
|
||||||
|
// Value columns IsVSXFMAAlt=1
|
||||||
|
let ValueCols = [["1"]];
|
||||||
|
}
|
||||||
|
|
||||||
//===----------------------------------------------------------------------===//
|
//===----------------------------------------------------------------------===//
|
||||||
// Register File Description
|
// Register File Description
|
||||||
//===----------------------------------------------------------------------===//
|
//===----------------------------------------------------------------------===//
|
||||||
|
@@ -127,140 +127,197 @@ let Uses = [RM] in {
|
|||||||
[(set v4f32:$XT, (fsub v4f32:$XA, v4f32:$XB))]>;
|
[(set v4f32:$XT, (fsub v4f32:$XA, v4f32:$XB))]>;
|
||||||
|
|
||||||
// FMA Instructions
|
// FMA Instructions
|
||||||
|
let BaseName = "XSMADDADP" in {
|
||||||
let isCommutable = 1 in
|
let isCommutable = 1 in
|
||||||
def XSMADDADP : XX3Form<60, 33,
|
def XSMADDADP : XX3Form<60, 33,
|
||||||
(outs vsrc:$XT), (ins vsrc:$XTi, vsrc:$XA, vsrc:$XB),
|
(outs vsrc:$XT), (ins vsrc:$XTi, vsrc:$XA, vsrc:$XB),
|
||||||
"xsmaddadp $XT, $XA, $XB", IIC_VecFP,
|
"xsmaddadp $XT, $XA, $XB", IIC_VecFP,
|
||||||
[(set f64:$XT, (fma f64:$XA, f64:$XB, f64:$XTi))]>,
|
[(set f64:$XT, (fma f64:$XA, f64:$XB, f64:$XTi))]>,
|
||||||
RegConstraint<"$XTi = $XT">, NoEncode<"$XTi">;
|
RegConstraint<"$XTi = $XT">, NoEncode<"$XTi">,
|
||||||
|
AltVSXFMARel;
|
||||||
|
let IsVSXFMAAlt = 1 in
|
||||||
def XSMADDMDP : XX3Form<60, 41,
|
def XSMADDMDP : XX3Form<60, 41,
|
||||||
(outs vsrc:$XT), (ins vsrc:$XTi, vsrc:$XA, vsrc:$XB),
|
(outs vsrc:$XT), (ins vsrc:$XTi, vsrc:$XA, vsrc:$XB),
|
||||||
"xsmaddmdp $XT, $XA, $XB", IIC_VecFP, []>,
|
"xsmaddmdp $XT, $XA, $XB", IIC_VecFP, []>,
|
||||||
RegConstraint<"$XTi = $XT">, NoEncode<"$XTi">;
|
RegConstraint<"$XTi = $XT">, NoEncode<"$XTi">,
|
||||||
// TODO: Select between these based first on whether one of the operands has
|
AltVSXFMARel;
|
||||||
// no further uses. We probably want to do this after scheduling but before
|
}
|
||||||
// register allocation.
|
|
||||||
|
|
||||||
|
let BaseName = "XSMSUBADP" in {
|
||||||
let isCommutable = 1 in
|
let isCommutable = 1 in
|
||||||
def XSMSUBADP : XX3Form<60, 49,
|
def XSMSUBADP : XX3Form<60, 49,
|
||||||
(outs vsrc:$XT), (ins vsrc:$XTi, vsrc:$XA, vsrc:$XB),
|
(outs vsrc:$XT), (ins vsrc:$XTi, vsrc:$XA, vsrc:$XB),
|
||||||
"xsmsubadp $XT, $XA, $XB", IIC_VecFP,
|
"xsmsubadp $XT, $XA, $XB", IIC_VecFP,
|
||||||
[(set f64:$XT, (fma f64:$XA, f64:$XB, (fneg f64:$XTi)))]>,
|
[(set f64:$XT, (fma f64:$XA, f64:$XB, (fneg f64:$XTi)))]>,
|
||||||
RegConstraint<"$XTi = $XT">, NoEncode<"$XTi">;
|
RegConstraint<"$XTi = $XT">, NoEncode<"$XTi">,
|
||||||
|
AltVSXFMARel;
|
||||||
|
let IsVSXFMAAlt = 1 in
|
||||||
def XSMSUBMDP : XX3Form<60, 57,
|
def XSMSUBMDP : XX3Form<60, 57,
|
||||||
(outs vsrc:$XT), (ins vsrc:$XTi, vsrc:$XA, vsrc:$XB),
|
(outs vsrc:$XT), (ins vsrc:$XTi, vsrc:$XA, vsrc:$XB),
|
||||||
"xsmsubmdp $XT, $XA, $XB", IIC_VecFP, []>,
|
"xsmsubmdp $XT, $XA, $XB", IIC_VecFP, []>,
|
||||||
RegConstraint<"$XTi = $XT">, NoEncode<"$XTi">;
|
RegConstraint<"$XTi = $XT">, NoEncode<"$XTi">,
|
||||||
|
AltVSXFMARel;
|
||||||
|
}
|
||||||
|
|
||||||
|
let BaseName = "XSNMADDADP" in {
|
||||||
let isCommutable = 1 in
|
let isCommutable = 1 in
|
||||||
def XSNMADDADP : XX3Form<60, 161,
|
def XSNMADDADP : XX3Form<60, 161,
|
||||||
(outs vsrc:$XT), (ins vsrc:$XTi, vsrc:$XA, vsrc:$XB),
|
(outs vsrc:$XT), (ins vsrc:$XTi, vsrc:$XA, vsrc:$XB),
|
||||||
"xsnmaddadp $XT, $XA, $XB", IIC_VecFP,
|
"xsnmaddadp $XT, $XA, $XB", IIC_VecFP,
|
||||||
[(set f64:$XT, (fneg (fma f64:$XA, f64:$XB, f64:$XTi)))]>,
|
[(set f64:$XT, (fneg (fma f64:$XA, f64:$XB, f64:$XTi)))]>,
|
||||||
RegConstraint<"$XTi = $XT">, NoEncode<"$XTi">;
|
RegConstraint<"$XTi = $XT">, NoEncode<"$XTi">,
|
||||||
|
AltVSXFMARel;
|
||||||
|
let IsVSXFMAAlt = 1 in
|
||||||
def XSNMADDMDP : XX3Form<60, 169,
|
def XSNMADDMDP : XX3Form<60, 169,
|
||||||
(outs vsrc:$XT), (ins vsrc:$XTi, vsrc:$XA, vsrc:$XB),
|
(outs vsrc:$XT), (ins vsrc:$XTi, vsrc:$XA, vsrc:$XB),
|
||||||
"xsnmaddmdp $XT, $XA, $XB", IIC_VecFP, []>,
|
"xsnmaddmdp $XT, $XA, $XB", IIC_VecFP, []>,
|
||||||
RegConstraint<"$XTi = $XT">, NoEncode<"$XTi">;
|
RegConstraint<"$XTi = $XT">, NoEncode<"$XTi">,
|
||||||
|
AltVSXFMARel;
|
||||||
|
}
|
||||||
|
|
||||||
|
let BaseName = "XSNMSUBADP" in {
|
||||||
let isCommutable = 1 in
|
let isCommutable = 1 in
|
||||||
def XSNMSUBADP : XX3Form<60, 177,
|
def XSNMSUBADP : XX3Form<60, 177,
|
||||||
(outs vsrc:$XT), (ins vsrc:$XTi, vsrc:$XA, vsrc:$XB),
|
(outs vsrc:$XT), (ins vsrc:$XTi, vsrc:$XA, vsrc:$XB),
|
||||||
"xsnmsubadp $XT, $XA, $XB", IIC_VecFP,
|
"xsnmsubadp $XT, $XA, $XB", IIC_VecFP,
|
||||||
[(set f64:$XT, (fneg (fma f64:$XA, f64:$XB, (fneg f64:$XTi))))]>,
|
[(set f64:$XT, (fneg (fma f64:$XA, f64:$XB, (fneg f64:$XTi))))]>,
|
||||||
RegConstraint<"$XTi = $XT">, NoEncode<"$XTi">;
|
RegConstraint<"$XTi = $XT">, NoEncode<"$XTi">,
|
||||||
|
AltVSXFMARel;
|
||||||
|
let IsVSXFMAAlt = 1 in
|
||||||
def XSNMSUBMDP : XX3Form<60, 185,
|
def XSNMSUBMDP : XX3Form<60, 185,
|
||||||
(outs vsrc:$XT), (ins vsrc:$XTi, vsrc:$XA, vsrc:$XB),
|
(outs vsrc:$XT), (ins vsrc:$XTi, vsrc:$XA, vsrc:$XB),
|
||||||
"xsnmsubmdp $XT, $XA, $XB", IIC_VecFP, []>,
|
"xsnmsubmdp $XT, $XA, $XB", IIC_VecFP, []>,
|
||||||
RegConstraint<"$XTi = $XT">, NoEncode<"$XTi">;
|
RegConstraint<"$XTi = $XT">, NoEncode<"$XTi">,
|
||||||
|
AltVSXFMARel;
|
||||||
|
}
|
||||||
|
|
||||||
|
let BaseName = "XVMADDADP" in {
|
||||||
let isCommutable = 1 in
|
let isCommutable = 1 in
|
||||||
def XVMADDADP : XX3Form<60, 97,
|
def XVMADDADP : XX3Form<60, 97,
|
||||||
(outs vsrc:$XT), (ins vsrc:$XTi, vsrc:$XA, vsrc:$XB),
|
(outs vsrc:$XT), (ins vsrc:$XTi, vsrc:$XA, vsrc:$XB),
|
||||||
"xvmaddadp $XT, $XA, $XB", IIC_VecFP,
|
"xvmaddadp $XT, $XA, $XB", IIC_VecFP,
|
||||||
[(set v2f64:$XT, (fma v2f64:$XA, v2f64:$XB, v2f64:$XTi))]>,
|
[(set v2f64:$XT, (fma v2f64:$XA, v2f64:$XB, v2f64:$XTi))]>,
|
||||||
RegConstraint<"$XTi = $XT">, NoEncode<"$XTi">;
|
RegConstraint<"$XTi = $XT">, NoEncode<"$XTi">,
|
||||||
|
AltVSXFMARel;
|
||||||
|
let IsVSXFMAAlt = 1 in
|
||||||
def XVMADDMDP : XX3Form<60, 105,
|
def XVMADDMDP : XX3Form<60, 105,
|
||||||
(outs vsrc:$XT), (ins vsrc:$XTi, vsrc:$XA, vsrc:$XB),
|
(outs vsrc:$XT), (ins vsrc:$XTi, vsrc:$XA, vsrc:$XB),
|
||||||
"xvmaddmdp $XT, $XA, $XB", IIC_VecFP, []>,
|
"xvmaddmdp $XT, $XA, $XB", IIC_VecFP, []>,
|
||||||
RegConstraint<"$XTi = $XT">, NoEncode<"$XTi">;
|
RegConstraint<"$XTi = $XT">, NoEncode<"$XTi">,
|
||||||
|
AltVSXFMARel;
|
||||||
|
}
|
||||||
|
|
||||||
|
let BaseName = "XVMADDASP" in {
|
||||||
let isCommutable = 1 in
|
let isCommutable = 1 in
|
||||||
def XVMADDASP : XX3Form<60, 65,
|
def XVMADDASP : XX3Form<60, 65,
|
||||||
(outs vsrc:$XT), (ins vsrc:$XTi, vsrc:$XA, vsrc:$XB),
|
(outs vsrc:$XT), (ins vsrc:$XTi, vsrc:$XA, vsrc:$XB),
|
||||||
"xvmaddasp $XT, $XA, $XB", IIC_VecFP,
|
"xvmaddasp $XT, $XA, $XB", IIC_VecFP,
|
||||||
[(set v4f32:$XT, (fma v4f32:$XA, v4f32:$XB, v4f32:$XTi))]>,
|
[(set v4f32:$XT, (fma v4f32:$XA, v4f32:$XB, v4f32:$XTi))]>,
|
||||||
RegConstraint<"$XTi = $XT">, NoEncode<"$XTi">;
|
RegConstraint<"$XTi = $XT">, NoEncode<"$XTi">,
|
||||||
|
AltVSXFMARel;
|
||||||
|
let IsVSXFMAAlt = 1 in
|
||||||
def XVMADDMSP : XX3Form<60, 73,
|
def XVMADDMSP : XX3Form<60, 73,
|
||||||
(outs vsrc:$XT), (ins vsrc:$XTi, vsrc:$XA, vsrc:$XB),
|
(outs vsrc:$XT), (ins vsrc:$XTi, vsrc:$XA, vsrc:$XB),
|
||||||
"xvmaddmsp $XT, $XA, $XB", IIC_VecFP, []>,
|
"xvmaddmsp $XT, $XA, $XB", IIC_VecFP, []>,
|
||||||
RegConstraint<"$XTi = $XT">, NoEncode<"$XTi">;
|
RegConstraint<"$XTi = $XT">, NoEncode<"$XTi">,
|
||||||
|
AltVSXFMARel;
|
||||||
|
}
|
||||||
|
|
||||||
|
let BaseName = "XVMSUBADP" in {
|
||||||
let isCommutable = 1 in
|
let isCommutable = 1 in
|
||||||
def XVMSUBADP : XX3Form<60, 113,
|
def XVMSUBADP : XX3Form<60, 113,
|
||||||
(outs vsrc:$XT), (ins vsrc:$XTi, vsrc:$XA, vsrc:$XB),
|
(outs vsrc:$XT), (ins vsrc:$XTi, vsrc:$XA, vsrc:$XB),
|
||||||
"xvmsubadp $XT, $XA, $XB", IIC_VecFP,
|
"xvmsubadp $XT, $XA, $XB", IIC_VecFP,
|
||||||
[(set v2f64:$XT, (fma v2f64:$XA, v2f64:$XB, (fneg v2f64:$XTi)))]>,
|
[(set v2f64:$XT, (fma v2f64:$XA, v2f64:$XB, (fneg v2f64:$XTi)))]>,
|
||||||
RegConstraint<"$XTi = $XT">, NoEncode<"$XTi">;
|
RegConstraint<"$XTi = $XT">, NoEncode<"$XTi">,
|
||||||
|
AltVSXFMARel;
|
||||||
|
let IsVSXFMAAlt = 1 in
|
||||||
def XVMSUBMDP : XX3Form<60, 121,
|
def XVMSUBMDP : XX3Form<60, 121,
|
||||||
(outs vsrc:$XT), (ins vsrc:$XTi, vsrc:$XA, vsrc:$XB),
|
(outs vsrc:$XT), (ins vsrc:$XTi, vsrc:$XA, vsrc:$XB),
|
||||||
"xvmsubmdp $XT, $XA, $XB", IIC_VecFP, []>,
|
"xvmsubmdp $XT, $XA, $XB", IIC_VecFP, []>,
|
||||||
RegConstraint<"$XTi = $XT">, NoEncode<"$XTi">;
|
RegConstraint<"$XTi = $XT">, NoEncode<"$XTi">,
|
||||||
|
AltVSXFMARel;
|
||||||
|
}
|
||||||
|
|
||||||
|
let BaseName = "XVMSUBASP" in {
|
||||||
let isCommutable = 1 in
|
let isCommutable = 1 in
|
||||||
def XVMSUBASP : XX3Form<60, 81,
|
def XVMSUBASP : XX3Form<60, 81,
|
||||||
(outs vsrc:$XT), (ins vsrc:$XTi, vsrc:$XA, vsrc:$XB),
|
(outs vsrc:$XT), (ins vsrc:$XTi, vsrc:$XA, vsrc:$XB),
|
||||||
"xvmsubasp $XT, $XA, $XB", IIC_VecFP,
|
"xvmsubasp $XT, $XA, $XB", IIC_VecFP,
|
||||||
[(set v4f32:$XT, (fma v4f32:$XA, v4f32:$XB, (fneg v4f32:$XTi)))]>,
|
[(set v4f32:$XT, (fma v4f32:$XA, v4f32:$XB, (fneg v4f32:$XTi)))]>,
|
||||||
RegConstraint<"$XTi = $XT">, NoEncode<"$XTi">;
|
RegConstraint<"$XTi = $XT">, NoEncode<"$XTi">,
|
||||||
|
AltVSXFMARel;
|
||||||
|
let IsVSXFMAAlt = 1 in
|
||||||
def XVMSUBMSP : XX3Form<60, 89,
|
def XVMSUBMSP : XX3Form<60, 89,
|
||||||
(outs vsrc:$XT), (ins vsrc:$XTi, vsrc:$XA, vsrc:$XB),
|
(outs vsrc:$XT), (ins vsrc:$XTi, vsrc:$XA, vsrc:$XB),
|
||||||
"xvmsubmsp $XT, $XA, $XB", IIC_VecFP, []>,
|
"xvmsubmsp $XT, $XA, $XB", IIC_VecFP, []>,
|
||||||
RegConstraint<"$XTi = $XT">, NoEncode<"$XTi">;
|
RegConstraint<"$XTi = $XT">, NoEncode<"$XTi">,
|
||||||
|
AltVSXFMARel;
|
||||||
|
}
|
||||||
|
|
||||||
|
let BaseName = "XVNMADDADP" in {
|
||||||
let isCommutable = 1 in
|
let isCommutable = 1 in
|
||||||
def XVNMADDADP : XX3Form<60, 225,
|
def XVNMADDADP : XX3Form<60, 225,
|
||||||
(outs vsrc:$XT), (ins vsrc:$XTi, vsrc:$XA, vsrc:$XB),
|
(outs vsrc:$XT), (ins vsrc:$XTi, vsrc:$XA, vsrc:$XB),
|
||||||
"xvnmaddadp $XT, $XA, $XB", IIC_VecFP,
|
"xvnmaddadp $XT, $XA, $XB", IIC_VecFP,
|
||||||
[(set v2f64:$XT, (fneg (fma v2f64:$XA, v2f64:$XB, v2f64:$XTi)))]>,
|
[(set v2f64:$XT, (fneg (fma v2f64:$XA, v2f64:$XB, v2f64:$XTi)))]>,
|
||||||
RegConstraint<"$XTi = $XT">, NoEncode<"$XTi">;
|
RegConstraint<"$XTi = $XT">, NoEncode<"$XTi">,
|
||||||
|
AltVSXFMARel;
|
||||||
|
let IsVSXFMAAlt = 1 in
|
||||||
def XVNMADDMDP : XX3Form<60, 233,
|
def XVNMADDMDP : XX3Form<60, 233,
|
||||||
(outs vsrc:$XT), (ins vsrc:$XTi, vsrc:$XA, vsrc:$XB),
|
(outs vsrc:$XT), (ins vsrc:$XTi, vsrc:$XA, vsrc:$XB),
|
||||||
"xvnmaddmdp $XT, $XA, $XB", IIC_VecFP, []>,
|
"xvnmaddmdp $XT, $XA, $XB", IIC_VecFP, []>,
|
||||||
RegConstraint<"$XTi = $XT">, NoEncode<"$XTi">;
|
RegConstraint<"$XTi = $XT">, NoEncode<"$XTi">,
|
||||||
|
AltVSXFMARel;
|
||||||
|
}
|
||||||
|
|
||||||
|
let BaseName = "XVNMADDASP" in {
|
||||||
let isCommutable = 1 in
|
let isCommutable = 1 in
|
||||||
def XVNMADDASP : XX3Form<60, 193,
|
def XVNMADDASP : XX3Form<60, 193,
|
||||||
(outs vsrc:$XT), (ins vsrc:$XTi, vsrc:$XA, vsrc:$XB),
|
(outs vsrc:$XT), (ins vsrc:$XTi, vsrc:$XA, vsrc:$XB),
|
||||||
"xvnmaddasp $XT, $XA, $XB", IIC_VecFP,
|
"xvnmaddasp $XT, $XA, $XB", IIC_VecFP,
|
||||||
[(set v4f32:$XT, (fneg (fma v4f32:$XA, v4f32:$XB, v4f32:$XTi)))]>,
|
[(set v4f32:$XT, (fneg (fma v4f32:$XA, v4f32:$XB, v4f32:$XTi)))]>,
|
||||||
RegConstraint<"$XTi = $XT">, NoEncode<"$XTi">;
|
RegConstraint<"$XTi = $XT">, NoEncode<"$XTi">,
|
||||||
|
AltVSXFMARel;
|
||||||
|
let IsVSXFMAAlt = 1 in
|
||||||
def XVNMADDMSP : XX3Form<60, 201,
|
def XVNMADDMSP : XX3Form<60, 201,
|
||||||
(outs vsrc:$XT), (ins vsrc:$XTi, vsrc:$XA, vsrc:$XB),
|
(outs vsrc:$XT), (ins vsrc:$XTi, vsrc:$XA, vsrc:$XB),
|
||||||
"xvnmaddmsp $XT, $XA, $XB", IIC_VecFP, []>,
|
"xvnmaddmsp $XT, $XA, $XB", IIC_VecFP, []>,
|
||||||
RegConstraint<"$XTi = $XT">, NoEncode<"$XTi">;
|
RegConstraint<"$XTi = $XT">, NoEncode<"$XTi">,
|
||||||
|
AltVSXFMARel;
|
||||||
|
}
|
||||||
|
|
||||||
|
let BaseName = "XVNMSUBADP" in {
|
||||||
let isCommutable = 1 in
|
let isCommutable = 1 in
|
||||||
def XVNMSUBADP : XX3Form<60, 241,
|
def XVNMSUBADP : XX3Form<60, 241,
|
||||||
(outs vsrc:$XT), (ins vsrc:$XTi, vsrc:$XA, vsrc:$XB),
|
(outs vsrc:$XT), (ins vsrc:$XTi, vsrc:$XA, vsrc:$XB),
|
||||||
"xvnmsubadp $XT, $XA, $XB", IIC_VecFP,
|
"xvnmsubadp $XT, $XA, $XB", IIC_VecFP,
|
||||||
[(set v2f64:$XT, (fneg (fma v2f64:$XA, v2f64:$XB, (fneg v2f64:$XTi))))]>,
|
[(set v2f64:$XT, (fneg (fma v2f64:$XA, v2f64:$XB, (fneg v2f64:$XTi))))]>,
|
||||||
RegConstraint<"$XTi = $XT">, NoEncode<"$XTi">;
|
RegConstraint<"$XTi = $XT">, NoEncode<"$XTi">,
|
||||||
|
AltVSXFMARel;
|
||||||
|
let IsVSXFMAAlt = 1 in
|
||||||
def XVNMSUBMDP : XX3Form<60, 249,
|
def XVNMSUBMDP : XX3Form<60, 249,
|
||||||
(outs vsrc:$XT), (ins vsrc:$XTi, vsrc:$XA, vsrc:$XB),
|
(outs vsrc:$XT), (ins vsrc:$XTi, vsrc:$XA, vsrc:$XB),
|
||||||
"xvnmsubmdp $XT, $XA, $XB", IIC_VecFP, []>,
|
"xvnmsubmdp $XT, $XA, $XB", IIC_VecFP, []>,
|
||||||
RegConstraint<"$XTi = $XT">, NoEncode<"$XTi">;
|
RegConstraint<"$XTi = $XT">, NoEncode<"$XTi">,
|
||||||
|
AltVSXFMARel;
|
||||||
|
}
|
||||||
|
|
||||||
|
let BaseName = "XVNMSUBASP" in {
|
||||||
let isCommutable = 1 in
|
let isCommutable = 1 in
|
||||||
def XVNMSUBASP : XX3Form<60, 209,
|
def XVNMSUBASP : XX3Form<60, 209,
|
||||||
(outs vsrc:$XT), (ins vsrc:$XTi, vsrc:$XA, vsrc:$XB),
|
(outs vsrc:$XT), (ins vsrc:$XTi, vsrc:$XA, vsrc:$XB),
|
||||||
"xvnmsubasp $XT, $XA, $XB", IIC_VecFP,
|
"xvnmsubasp $XT, $XA, $XB", IIC_VecFP,
|
||||||
[(set v4f32:$XT, (fneg (fma v4f32:$XA, v4f32:$XB, (fneg v4f32:$XTi))))]>,
|
[(set v4f32:$XT, (fneg (fma v4f32:$XA, v4f32:$XB, (fneg v4f32:$XTi))))]>,
|
||||||
RegConstraint<"$XTi = $XT">, NoEncode<"$XTi">;
|
RegConstraint<"$XTi = $XT">, NoEncode<"$XTi">,
|
||||||
|
AltVSXFMARel;
|
||||||
|
let IsVSXFMAAlt = 1 in
|
||||||
def XVNMSUBMSP : XX3Form<60, 217,
|
def XVNMSUBMSP : XX3Form<60, 217,
|
||||||
(outs vsrc:$XT), (ins vsrc:$XTi, vsrc:$XA, vsrc:$XB),
|
(outs vsrc:$XT), (ins vsrc:$XTi, vsrc:$XA, vsrc:$XB),
|
||||||
"xvnmsubmsp $XT, $XA, $XB", IIC_VecFP, []>,
|
"xvnmsubmsp $XT, $XA, $XB", IIC_VecFP, []>,
|
||||||
RegConstraint<"$XTi = $XT">, NoEncode<"$XTi">;
|
RegConstraint<"$XTi = $XT">, NoEncode<"$XTi">,
|
||||||
|
AltVSXFMARel;
|
||||||
|
}
|
||||||
|
|
||||||
// Division Instructions
|
// Division Instructions
|
||||||
def XSDIVDP : XX3Form<60, 56,
|
def XSDIVDP : XX3Form<60, 56,
|
||||||
|
Reference in New Issue
Block a user