mirror of
https://github.com/RPCSX/llvm.git
synced 2024-12-03 09:21:13 +00:00
ARM: Allow more flexible patterns in NEON formats.
Some NEON instructions want to match against normal SDNodes for some operand types and Intrinsics for others. For example, CTLZ. To enable this, switch from explicitly requiring Intrinsic on the class templates to using SDPatternOperator instead. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@159974 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
63078f2d8c
commit
a4fba5eaf8
@ -2300,14 +2300,14 @@ class N2VQ<bits<2> op24_23, bits<2> op21_20, bits<2> op19_18,
|
||||
class N2VDInt<bits<2> op24_23, bits<2> op21_20, bits<2> op19_18,
|
||||
bits<2> op17_16, bits<5> op11_7, bit op4,
|
||||
InstrItinClass itin, string OpcodeStr, string Dt,
|
||||
ValueType ResTy, ValueType OpTy, Intrinsic IntOp>
|
||||
ValueType ResTy, ValueType OpTy, SDPatternOperator IntOp>
|
||||
: N2V<op24_23, op21_20, op19_18, op17_16, op11_7, 0, op4, (outs DPR:$Vd),
|
||||
(ins DPR:$Vm), itin, OpcodeStr, Dt, "$Vd, $Vm", "",
|
||||
[(set DPR:$Vd, (ResTy (IntOp (OpTy DPR:$Vm))))]>;
|
||||
class N2VQInt<bits<2> op24_23, bits<2> op21_20, bits<2> op19_18,
|
||||
bits<2> op17_16, bits<5> op11_7, bit op4,
|
||||
InstrItinClass itin, string OpcodeStr, string Dt,
|
||||
ValueType ResTy, ValueType OpTy, Intrinsic IntOp>
|
||||
ValueType ResTy, ValueType OpTy, SDPatternOperator IntOp>
|
||||
: N2V<op24_23, op21_20, op19_18, op17_16, op11_7, 1, op4, (outs QPR:$Vd),
|
||||
(ins QPR:$Vm), itin, OpcodeStr, Dt, "$Vd, $Vm", "",
|
||||
[(set QPR:$Vd, (ResTy (IntOp (OpTy QPR:$Vm))))]>;
|
||||
@ -2325,7 +2325,7 @@ class N2VN<bits<2> op24_23, bits<2> op21_20, bits<2> op19_18,
|
||||
class N2VNInt<bits<2> op24_23, bits<2> op21_20, bits<2> op19_18,
|
||||
bits<2> op17_16, bits<5> op11_7, bit op6, bit op4,
|
||||
InstrItinClass itin, string OpcodeStr, string Dt,
|
||||
ValueType TyD, ValueType TyQ, Intrinsic IntOp>
|
||||
ValueType TyD, ValueType TyQ, SDPatternOperator IntOp>
|
||||
: N2V<op24_23, op21_20, op19_18, op17_16, op11_7, op6, op4, (outs DPR:$Vd),
|
||||
(ins QPR:$Vm), itin, OpcodeStr, Dt, "$Vd, $Vm", "",
|
||||
[(set DPR:$Vd, (TyD (IntOp (TyQ QPR:$Vm))))]>;
|
||||
@ -2343,7 +2343,7 @@ class N2VL<bits<2> op24_23, bits<2> op21_20, bits<2> op19_18,
|
||||
class N2VLInt<bits<2> op24_23, bits<2> op21_20, bits<2> op19_18,
|
||||
bits<2> op17_16, bits<5> op11_7, bit op6, bit op4,
|
||||
InstrItinClass itin, string OpcodeStr, string Dt,
|
||||
ValueType TyQ, ValueType TyD, Intrinsic IntOp>
|
||||
ValueType TyQ, ValueType TyD, SDPatternOperator IntOp>
|
||||
: N2V<op24_23, op21_20, op19_18, op17_16, op11_7, op6, op4, (outs QPR:$Vd),
|
||||
(ins DPR:$Vm), itin, OpcodeStr, Dt, "$Vd, $Vm", "",
|
||||
[(set QPR:$Vd, (TyQ (IntOp (TyD DPR:$Vm))))]>;
|
||||
@ -2465,7 +2465,7 @@ class N3VQSL16<bits<2> op21_20, bits<4> op11_8, string OpcodeStr, string Dt,
|
||||
// Basic 3-register intrinsics, both double- and quad-register.
|
||||
class N3VDInt<bit op24, bit op23, bits<2> op21_20, bits<4> op11_8, bit op4,
|
||||
Format f, InstrItinClass itin, string OpcodeStr, string Dt,
|
||||
ValueType ResTy, ValueType OpTy, Intrinsic IntOp, bit Commutable>
|
||||
ValueType ResTy, ValueType OpTy, SDPatternOperator IntOp, bit Commutable>
|
||||
: N3V<op24, op23, op21_20, op11_8, 0, op4,
|
||||
(outs DPR:$Vd), (ins DPR:$Vn, DPR:$Vm), f, itin,
|
||||
OpcodeStr, Dt, "$Vd, $Vn, $Vm", "",
|
||||
@ -2475,7 +2475,7 @@ class N3VDInt<bit op24, bit op23, bits<2> op21_20, bits<4> op11_8, bit op4,
|
||||
let isCommutable = Commutable;
|
||||
}
|
||||
class N3VDIntSL<bits<2> op21_20, bits<4> op11_8, InstrItinClass itin,
|
||||
string OpcodeStr, string Dt, ValueType Ty, Intrinsic IntOp>
|
||||
string OpcodeStr, string Dt, ValueType Ty, SDPatternOperator IntOp>
|
||||
: N3VLane32<0, 1, op21_20, op11_8, 1, 0,
|
||||
(outs DPR:$Vd), (ins DPR:$Vn, DPR_VFP2:$Vm, VectorIndex32:$lane),
|
||||
NVMulSLFrm, itin, OpcodeStr, Dt, "$Vd, $Vn, $Vm$lane", "",
|
||||
@ -2486,7 +2486,7 @@ class N3VDIntSL<bits<2> op21_20, bits<4> op11_8, InstrItinClass itin,
|
||||
let isCommutable = 0;
|
||||
}
|
||||
class N3VDIntSL16<bits<2> op21_20, bits<4> op11_8, InstrItinClass itin,
|
||||
string OpcodeStr, string Dt, ValueType Ty, Intrinsic IntOp>
|
||||
string OpcodeStr, string Dt, ValueType Ty, SDPatternOperator IntOp>
|
||||
: N3VLane16<0, 1, op21_20, op11_8, 1, 0,
|
||||
(outs DPR:$Vd), (ins DPR:$Vn, DPR_8:$Vm, VectorIndex16:$lane),
|
||||
NVMulSLFrm, itin, OpcodeStr, Dt, "$Vd, $Vn, $Vm$lane", "",
|
||||
@ -2497,7 +2497,7 @@ class N3VDIntSL16<bits<2> op21_20, bits<4> op11_8, InstrItinClass itin,
|
||||
}
|
||||
class N3VDIntSh<bit op24, bit op23, bits<2> op21_20, bits<4> op11_8, bit op4,
|
||||
Format f, InstrItinClass itin, string OpcodeStr, string Dt,
|
||||
ValueType ResTy, ValueType OpTy, Intrinsic IntOp>
|
||||
ValueType ResTy, ValueType OpTy, SDPatternOperator IntOp>
|
||||
: N3V<op24, op23, op21_20, op11_8, 0, op4,
|
||||
(outs DPR:$Vd), (ins DPR:$Vm, DPR:$Vn), f, itin,
|
||||
OpcodeStr, Dt, "$Vd, $Vm, $Vn", "",
|
||||
@ -2508,7 +2508,7 @@ class N3VDIntSh<bit op24, bit op23, bits<2> op21_20, bits<4> op11_8, bit op4,
|
||||
|
||||
class N3VQInt<bit op24, bit op23, bits<2> op21_20, bits<4> op11_8, bit op4,
|
||||
Format f, InstrItinClass itin, string OpcodeStr, string Dt,
|
||||
ValueType ResTy, ValueType OpTy, Intrinsic IntOp, bit Commutable>
|
||||
ValueType ResTy, ValueType OpTy, SDPatternOperator IntOp, bit Commutable>
|
||||
: N3V<op24, op23, op21_20, op11_8, 1, op4,
|
||||
(outs QPR:$Vd), (ins QPR:$Vn, QPR:$Vm), f, itin,
|
||||
OpcodeStr, Dt, "$Vd, $Vn, $Vm", "",
|
||||
@ -2519,7 +2519,7 @@ class N3VQInt<bit op24, bit op23, bits<2> op21_20, bits<4> op11_8, bit op4,
|
||||
}
|
||||
class N3VQIntSL<bits<2> op21_20, bits<4> op11_8, InstrItinClass itin,
|
||||
string OpcodeStr, string Dt,
|
||||
ValueType ResTy, ValueType OpTy, Intrinsic IntOp>
|
||||
ValueType ResTy, ValueType OpTy, SDPatternOperator IntOp>
|
||||
: N3VLane32<1, 1, op21_20, op11_8, 1, 0,
|
||||
(outs QPR:$Vd), (ins QPR:$Vn, DPR_VFP2:$Vm, VectorIndex32:$lane),
|
||||
NVMulSLFrm, itin, OpcodeStr, Dt, "$Vd, $Vn, $Vm$lane", "",
|
||||
@ -2531,7 +2531,7 @@ class N3VQIntSL<bits<2> op21_20, bits<4> op11_8, InstrItinClass itin,
|
||||
}
|
||||
class N3VQIntSL16<bits<2> op21_20, bits<4> op11_8, InstrItinClass itin,
|
||||
string OpcodeStr, string Dt,
|
||||
ValueType ResTy, ValueType OpTy, Intrinsic IntOp>
|
||||
ValueType ResTy, ValueType OpTy, SDPatternOperator IntOp>
|
||||
: N3VLane16<1, 1, op21_20, op11_8, 1, 0,
|
||||
(outs QPR:$Vd), (ins QPR:$Vn, DPR_8:$Vm, VectorIndex16:$lane),
|
||||
NVMulSLFrm, itin, OpcodeStr, Dt, "$Vd, $Vn, $Vm$lane", "",
|
||||
@ -2543,7 +2543,7 @@ class N3VQIntSL16<bits<2> op21_20, bits<4> op11_8, InstrItinClass itin,
|
||||
}
|
||||
class N3VQIntSh<bit op24, bit op23, bits<2> op21_20, bits<4> op11_8, bit op4,
|
||||
Format f, InstrItinClass itin, string OpcodeStr, string Dt,
|
||||
ValueType ResTy, ValueType OpTy, Intrinsic IntOp>
|
||||
ValueType ResTy, ValueType OpTy, SDPatternOperator IntOp>
|
||||
: N3V<op24, op23, op21_20, op11_8, 1, op4,
|
||||
(outs QPR:$Vd), (ins QPR:$Vm, QPR:$Vn), f, itin,
|
||||
OpcodeStr, Dt, "$Vd, $Vm, $Vn", "",
|
||||
@ -2628,7 +2628,7 @@ class N3VQMulOpSL16<bits<2> op21_20, bits<4> op11_8, InstrItinClass itin,
|
||||
// Neon Intrinsic-Op instructions (VABA): double- and quad-register.
|
||||
class N3VDIntOp<bit op24, bit op23, bits<2> op21_20, bits<4> op11_8, bit op4,
|
||||
InstrItinClass itin, string OpcodeStr, string Dt,
|
||||
ValueType Ty, Intrinsic IntOp, SDNode OpNode>
|
||||
ValueType Ty, SDPatternOperator IntOp, SDNode OpNode>
|
||||
: N3V<op24, op23, op21_20, op11_8, 0, op4,
|
||||
(outs DPR:$Vd), (ins DPR:$src1, DPR:$Vn, DPR:$Vm), N3RegFrm, itin,
|
||||
OpcodeStr, Dt, "$Vd, $Vn, $Vm", "$src1 = $Vd",
|
||||
@ -2636,7 +2636,7 @@ class N3VDIntOp<bit op24, bit op23, bits<2> op21_20, bits<4> op11_8, bit op4,
|
||||
(Ty (IntOp (Ty DPR:$Vn), (Ty DPR:$Vm))))))]>;
|
||||
class N3VQIntOp<bit op24, bit op23, bits<2> op21_20, bits<4> op11_8, bit op4,
|
||||
InstrItinClass itin, string OpcodeStr, string Dt,
|
||||
ValueType Ty, Intrinsic IntOp, SDNode OpNode>
|
||||
ValueType Ty, SDPatternOperator IntOp, SDNode OpNode>
|
||||
: N3V<op24, op23, op21_20, op11_8, 1, op4,
|
||||
(outs QPR:$Vd), (ins QPR:$src1, QPR:$Vn, QPR:$Vm), N3RegFrm, itin,
|
||||
OpcodeStr, Dt, "$Vd, $Vn, $Vm", "$src1 = $Vd",
|
||||
@ -2647,7 +2647,7 @@ class N3VQIntOp<bit op24, bit op23, bits<2> op21_20, bits<4> op11_8, bit op4,
|
||||
// The destination register is also used as the first source operand register.
|
||||
class N3VDInt3<bit op24, bit op23, bits<2> op21_20, bits<4> op11_8, bit op4,
|
||||
InstrItinClass itin, string OpcodeStr, string Dt,
|
||||
ValueType ResTy, ValueType OpTy, Intrinsic IntOp>
|
||||
ValueType ResTy, ValueType OpTy, SDPatternOperator IntOp>
|
||||
: N3V<op24, op23, op21_20, op11_8, 0, op4,
|
||||
(outs DPR:$Vd), (ins DPR:$src1, DPR:$Vn, DPR:$Vm), N3RegFrm, itin,
|
||||
OpcodeStr, Dt, "$Vd, $Vn, $Vm", "$src1 = $Vd",
|
||||
@ -2655,7 +2655,7 @@ class N3VDInt3<bit op24, bit op23, bits<2> op21_20, bits<4> op11_8, bit op4,
|
||||
(OpTy DPR:$Vn), (OpTy DPR:$Vm))))]>;
|
||||
class N3VQInt3<bit op24, bit op23, bits<2> op21_20, bits<4> op11_8, bit op4,
|
||||
InstrItinClass itin, string OpcodeStr, string Dt,
|
||||
ValueType ResTy, ValueType OpTy, Intrinsic IntOp>
|
||||
ValueType ResTy, ValueType OpTy, SDPatternOperator IntOp>
|
||||
: N3V<op24, op23, op21_20, op11_8, 1, op4,
|
||||
(outs QPR:$Vd), (ins QPR:$src1, QPR:$Vn, QPR:$Vm), N3RegFrm, itin,
|
||||
OpcodeStr, Dt, "$Vd, $Vn, $Vm", "$src1 = $Vd",
|
||||
@ -2700,7 +2700,7 @@ class N3VLMulOpSL16<bit op24, bits<2> op21_20, bits<4> op11_8,
|
||||
// Long Intrinsic-Op vector operations with explicit extend (VABAL).
|
||||
class N3VLIntExtOp<bit op24, bit op23, bits<2> op21_20, bits<4> op11_8, bit op4,
|
||||
InstrItinClass itin, string OpcodeStr, string Dt,
|
||||
ValueType TyQ, ValueType TyD, Intrinsic IntOp, SDNode ExtOp,
|
||||
ValueType TyQ, ValueType TyD, SDPatternOperator IntOp, SDNode ExtOp,
|
||||
SDNode OpNode>
|
||||
: N3V<op24, op23, op21_20, op11_8, 0, op4,
|
||||
(outs QPR:$Vd), (ins QPR:$src1, DPR:$Vn, DPR:$Vm), N3RegFrm, itin,
|
||||
@ -2713,7 +2713,7 @@ class N3VLIntExtOp<bit op24, bit op23, bits<2> op21_20, bits<4> op11_8, bit op4,
|
||||
// a quad-register and is also used as the first source operand register.
|
||||
class N3VLInt3<bit op24, bit op23, bits<2> op21_20, bits<4> op11_8, bit op4,
|
||||
InstrItinClass itin, string OpcodeStr, string Dt,
|
||||
ValueType TyQ, ValueType TyD, Intrinsic IntOp>
|
||||
ValueType TyQ, ValueType TyD, SDPatternOperator IntOp>
|
||||
: N3V<op24, op23, op21_20, op11_8, 0, op4,
|
||||
(outs QPR:$Vd), (ins QPR:$src1, DPR:$Vn, DPR:$Vm), N3RegFrm, itin,
|
||||
OpcodeStr, Dt, "$Vd, $Vn, $Vm", "$src1 = $Vd",
|
||||
@ -2721,7 +2721,7 @@ class N3VLInt3<bit op24, bit op23, bits<2> op21_20, bits<4> op11_8, bit op4,
|
||||
(TyQ (IntOp (TyQ QPR:$src1), (TyD DPR:$Vn), (TyD DPR:$Vm))))]>;
|
||||
class N3VLInt3SL<bit op24, bits<2> op21_20, bits<4> op11_8, InstrItinClass itin,
|
||||
string OpcodeStr, string Dt,
|
||||
ValueType ResTy, ValueType OpTy, Intrinsic IntOp>
|
||||
ValueType ResTy, ValueType OpTy, SDPatternOperator IntOp>
|
||||
: N3VLane32<op24, 1, op21_20, op11_8, 1, 0,
|
||||
(outs QPR:$Vd),
|
||||
(ins QPR:$src1, DPR:$Vn, DPR_VFP2:$Vm, VectorIndex32:$lane),
|
||||
@ -2734,7 +2734,7 @@ class N3VLInt3SL<bit op24, bits<2> op21_20, bits<4> op11_8, InstrItinClass itin,
|
||||
imm:$lane)))))]>;
|
||||
class N3VLInt3SL16<bit op24, bits<2> op21_20, bits<4> op11_8,
|
||||
InstrItinClass itin, string OpcodeStr, string Dt,
|
||||
ValueType ResTy, ValueType OpTy, Intrinsic IntOp>
|
||||
ValueType ResTy, ValueType OpTy, SDPatternOperator IntOp>
|
||||
: N3VLane16<op24, 1, op21_20, op11_8, 1, 0,
|
||||
(outs QPR:$Vd),
|
||||
(ins QPR:$src1, DPR:$Vn, DPR_8:$Vm, VectorIndex16:$lane),
|
||||
@ -2749,7 +2749,7 @@ class N3VLInt3SL16<bit op24, bits<2> op21_20, bits<4> op11_8,
|
||||
// Narrowing 3-register intrinsics.
|
||||
class N3VNInt<bit op24, bit op23, bits<2> op21_20, bits<4> op11_8, bit op4,
|
||||
string OpcodeStr, string Dt, ValueType TyD, ValueType TyQ,
|
||||
Intrinsic IntOp, bit Commutable>
|
||||
SDPatternOperator IntOp, bit Commutable>
|
||||
: N3V<op24, op23, op21_20, op11_8, 0, op4,
|
||||
(outs DPR:$Vd), (ins QPR:$Vn, QPR:$Vm), N3RegFrm, IIC_VBINi4D,
|
||||
OpcodeStr, Dt, "$Vd, $Vn, $Vm", "",
|
||||
@ -2802,7 +2802,7 @@ class N3VLExt<bit op24, bit op23, bits<2> op21_20, bits<4> op11_8, bit op4,
|
||||
// Long 3-register intrinsics with explicit extend (VABDL).
|
||||
class N3VLIntExt<bit op24, bit op23, bits<2> op21_20, bits<4> op11_8, bit op4,
|
||||
InstrItinClass itin, string OpcodeStr, string Dt,
|
||||
ValueType TyQ, ValueType TyD, Intrinsic IntOp, SDNode ExtOp,
|
||||
ValueType TyQ, ValueType TyD, SDPatternOperator IntOp, SDNode ExtOp,
|
||||
bit Commutable>
|
||||
: N3V<op24, op23, op21_20, op11_8, 0, op4,
|
||||
(outs QPR:$Vd), (ins DPR:$Vn, DPR:$Vm), N3RegFrm, itin,
|
||||
@ -2815,7 +2815,7 @@ class N3VLIntExt<bit op24, bit op23, bits<2> op21_20, bits<4> op11_8, bit op4,
|
||||
// Long 3-register intrinsics.
|
||||
class N3VLInt<bit op24, bit op23, bits<2> op21_20, bits<4> op11_8, bit op4,
|
||||
InstrItinClass itin, string OpcodeStr, string Dt,
|
||||
ValueType TyQ, ValueType TyD, Intrinsic IntOp, bit Commutable>
|
||||
ValueType TyQ, ValueType TyD, SDPatternOperator IntOp, bit Commutable>
|
||||
: N3V<op24, op23, op21_20, op11_8, 0, op4,
|
||||
(outs QPR:$Vd), (ins DPR:$Vn, DPR:$Vm), N3RegFrm, itin,
|
||||
OpcodeStr, Dt, "$Vd, $Vn, $Vm", "",
|
||||
@ -2824,7 +2824,7 @@ class N3VLInt<bit op24, bit op23, bits<2> op21_20, bits<4> op11_8, bit op4,
|
||||
}
|
||||
class N3VLIntSL<bit op24, bits<2> op21_20, bits<4> op11_8, InstrItinClass itin,
|
||||
string OpcodeStr, string Dt,
|
||||
ValueType ResTy, ValueType OpTy, Intrinsic IntOp>
|
||||
ValueType ResTy, ValueType OpTy, SDPatternOperator IntOp>
|
||||
: N3VLane32<op24, 1, op21_20, op11_8, 1, 0,
|
||||
(outs QPR:$Vd), (ins DPR:$Vn, DPR_VFP2:$Vm, VectorIndex32:$lane),
|
||||
NVMulSLFrm, itin, OpcodeStr, Dt, "$Vd, $Vn, $Vm$lane", "",
|
||||
@ -2834,7 +2834,7 @@ class N3VLIntSL<bit op24, bits<2> op21_20, bits<4> op11_8, InstrItinClass itin,
|
||||
imm:$lane)))))]>;
|
||||
class N3VLIntSL16<bit op24, bits<2> op21_20, bits<4> op11_8,
|
||||
InstrItinClass itin, string OpcodeStr, string Dt,
|
||||
ValueType ResTy, ValueType OpTy, Intrinsic IntOp>
|
||||
ValueType ResTy, ValueType OpTy, SDPatternOperator IntOp>
|
||||
: N3VLane16<op24, 1, op21_20, op11_8, 1, 0,
|
||||
(outs QPR:$Vd), (ins DPR:$Vn, DPR_8:$Vm, VectorIndex16:$lane),
|
||||
NVMulSLFrm, itin, OpcodeStr, Dt, "$Vd, $Vn, $Vm$lane", "",
|
||||
@ -2861,14 +2861,14 @@ class N3VW<bit op24, bit op23, bits<2> op21_20, bits<4> op11_8, bit op4,
|
||||
class N2VDPLInt<bits<2> op24_23, bits<2> op21_20, bits<2> op19_18,
|
||||
bits<2> op17_16, bits<5> op11_7, bit op4,
|
||||
string OpcodeStr, string Dt,
|
||||
ValueType ResTy, ValueType OpTy, Intrinsic IntOp>
|
||||
ValueType ResTy, ValueType OpTy, SDPatternOperator IntOp>
|
||||
: N2V<op24_23, op21_20, op19_18, op17_16, op11_7, 0, op4, (outs DPR:$Vd),
|
||||
(ins DPR:$Vm), IIC_VSHLiD, OpcodeStr, Dt, "$Vd, $Vm", "",
|
||||
[(set DPR:$Vd, (ResTy (IntOp (OpTy DPR:$Vm))))]>;
|
||||
class N2VQPLInt<bits<2> op24_23, bits<2> op21_20, bits<2> op19_18,
|
||||
bits<2> op17_16, bits<5> op11_7, bit op4,
|
||||
string OpcodeStr, string Dt,
|
||||
ValueType ResTy, ValueType OpTy, Intrinsic IntOp>
|
||||
ValueType ResTy, ValueType OpTy, SDPatternOperator IntOp>
|
||||
: N2V<op24_23, op21_20, op19_18, op17_16, op11_7, 1, op4, (outs QPR:$Vd),
|
||||
(ins QPR:$Vm), IIC_VSHLiD, OpcodeStr, Dt, "$Vd, $Vm", "",
|
||||
[(set QPR:$Vd, (ResTy (IntOp (OpTy QPR:$Vm))))]>;
|
||||
@ -2879,7 +2879,7 @@ class N2VQPLInt<bits<2> op24_23, bits<2> op21_20, bits<2> op19_18,
|
||||
class N2VDPLInt2<bits<2> op24_23, bits<2> op21_20, bits<2> op19_18,
|
||||
bits<2> op17_16, bits<5> op11_7, bit op4,
|
||||
string OpcodeStr, string Dt,
|
||||
ValueType ResTy, ValueType OpTy, Intrinsic IntOp>
|
||||
ValueType ResTy, ValueType OpTy, SDPatternOperator IntOp>
|
||||
: N2V<op24_23, op21_20, op19_18, op17_16, op11_7, 0, op4,
|
||||
(outs DPR:$Vd), (ins DPR:$src1, DPR:$Vm), IIC_VPALiD,
|
||||
OpcodeStr, Dt, "$Vd, $Vm", "$src1 = $Vd",
|
||||
@ -2887,7 +2887,7 @@ class N2VDPLInt2<bits<2> op24_23, bits<2> op21_20, bits<2> op19_18,
|
||||
class N2VQPLInt2<bits<2> op24_23, bits<2> op21_20, bits<2> op19_18,
|
||||
bits<2> op17_16, bits<5> op11_7, bit op4,
|
||||
string OpcodeStr, string Dt,
|
||||
ValueType ResTy, ValueType OpTy, Intrinsic IntOp>
|
||||
ValueType ResTy, ValueType OpTy, SDPatternOperator IntOp>
|
||||
: N2V<op24_23, op21_20, op19_18, op17_16, op11_7, 1, op4,
|
||||
(outs QPR:$Vd), (ins QPR:$src1, QPR:$Vm), IIC_VPALiQ,
|
||||
OpcodeStr, Dt, "$Vd, $Vm", "$src1 = $Vd",
|
||||
@ -2976,14 +2976,14 @@ class N2VQShIns<bit op24, bit op23, bits<4> op11_8, bit op7, bit op4,
|
||||
// both double- and quad-register.
|
||||
class N2VCvtD<bit op24, bit op23, bits<4> op11_8, bit op7, bit op4,
|
||||
string OpcodeStr, string Dt, ValueType ResTy, ValueType OpTy,
|
||||
Intrinsic IntOp>
|
||||
SDPatternOperator IntOp>
|
||||
: N2VImm<op24, op23, op11_8, op7, 0, op4,
|
||||
(outs DPR:$Vd), (ins DPR:$Vm, neon_vcvt_imm32:$SIMM), NVCVTFrm,
|
||||
IIC_VUNAD, OpcodeStr, Dt, "$Vd, $Vm, $SIMM", "",
|
||||
[(set DPR:$Vd, (ResTy (IntOp (OpTy DPR:$Vm), (i32 imm:$SIMM))))]>;
|
||||
class N2VCvtQ<bit op24, bit op23, bits<4> op11_8, bit op7, bit op4,
|
||||
string OpcodeStr, string Dt, ValueType ResTy, ValueType OpTy,
|
||||
Intrinsic IntOp>
|
||||
SDPatternOperator IntOp>
|
||||
: N2VImm<op24, op23, op11_8, op7, 1, op4,
|
||||
(outs QPR:$Vd), (ins QPR:$Vm, neon_vcvt_imm32:$SIMM), NVCVTFrm,
|
||||
IIC_VUNAQ, OpcodeStr, Dt, "$Vd, $Vm, $SIMM", "",
|
||||
@ -3053,7 +3053,7 @@ multiclass N2V_QHS_cmp<bits<2> op24_23, bits<2> op21_20, bits<2> op17_16,
|
||||
multiclass N2VInt_QHS<bits<2> op24_23, bits<2> op21_20, bits<2> op17_16,
|
||||
bits<5> op11_7, bit op4,
|
||||
InstrItinClass itinD, InstrItinClass itinQ,
|
||||
string OpcodeStr, string Dt, Intrinsic IntOp> {
|
||||
string OpcodeStr, string Dt, SDPatternOperator IntOp> {
|
||||
// 64-bit vector types.
|
||||
def v8i8 : N2VDInt<op24_23, op21_20, 0b00, op17_16, op11_7, op4,
|
||||
itinD, OpcodeStr, !strconcat(Dt, "8"), v8i8, v8i8, IntOp>;
|
||||
@ -3094,7 +3094,7 @@ multiclass N2VN_HSD<bits<2> op24_23, bits<2> op21_20, bits<2> op17_16,
|
||||
multiclass N2VNInt_HSD<bits<2> op24_23, bits<2> op21_20, bits<2> op17_16,
|
||||
bits<5> op11_7, bit op6, bit op4,
|
||||
InstrItinClass itin, string OpcodeStr, string Dt,
|
||||
Intrinsic IntOp> {
|
||||
SDPatternOperator IntOp> {
|
||||
def v8i8 : N2VNInt<op24_23, op21_20, 0b00, op17_16, op11_7, op6, op4,
|
||||
itin, OpcodeStr, !strconcat(Dt, "16"),
|
||||
v8i8, v8i16, IntOp>;
|
||||
@ -3182,7 +3182,7 @@ multiclass N3VInt_HS<bit op24, bit op23, bits<4> op11_8, bit op4, Format f,
|
||||
InstrItinClass itinD16, InstrItinClass itinD32,
|
||||
InstrItinClass itinQ16, InstrItinClass itinQ32,
|
||||
string OpcodeStr, string Dt,
|
||||
Intrinsic IntOp, bit Commutable = 0> {
|
||||
SDPatternOperator IntOp, bit Commutable = 0> {
|
||||
// 64-bit vector types.
|
||||
def v4i16 : N3VDInt<op24, op23, 0b01, op11_8, op4, f, itinD16,
|
||||
OpcodeStr, !strconcat(Dt, "16"),
|
||||
@ -3203,7 +3203,7 @@ multiclass N3VInt_HSSh<bit op24, bit op23, bits<4> op11_8, bit op4, Format f,
|
||||
InstrItinClass itinD16, InstrItinClass itinD32,
|
||||
InstrItinClass itinQ16, InstrItinClass itinQ32,
|
||||
string OpcodeStr, string Dt,
|
||||
Intrinsic IntOp> {
|
||||
SDPatternOperator IntOp> {
|
||||
// 64-bit vector types.
|
||||
def v4i16 : N3VDIntSh<op24, op23, 0b01, op11_8, op4, f, itinD16,
|
||||
OpcodeStr, !strconcat(Dt, "16"),
|
||||
@ -3224,7 +3224,7 @@ multiclass N3VInt_HSSh<bit op24, bit op23, bits<4> op11_8, bit op4, Format f,
|
||||
multiclass N3VIntSL_HS<bits<4> op11_8,
|
||||
InstrItinClass itinD16, InstrItinClass itinD32,
|
||||
InstrItinClass itinQ16, InstrItinClass itinQ32,
|
||||
string OpcodeStr, string Dt, Intrinsic IntOp> {
|
||||
string OpcodeStr, string Dt, SDPatternOperator IntOp> {
|
||||
def v4i16 : N3VDIntSL16<0b01, op11_8, itinD16,
|
||||
OpcodeStr, !strconcat(Dt, "16"), v4i16, IntOp>;
|
||||
def v2i32 : N3VDIntSL<0b10, op11_8, itinD32,
|
||||
@ -3240,7 +3240,7 @@ multiclass N3VInt_QHS<bit op24, bit op23, bits<4> op11_8, bit op4, Format f,
|
||||
InstrItinClass itinD16, InstrItinClass itinD32,
|
||||
InstrItinClass itinQ16, InstrItinClass itinQ32,
|
||||
string OpcodeStr, string Dt,
|
||||
Intrinsic IntOp, bit Commutable = 0>
|
||||
SDPatternOperator IntOp, bit Commutable = 0>
|
||||
: N3VInt_HS<op24, op23, op11_8, op4, f, itinD16, itinD32, itinQ16, itinQ32,
|
||||
OpcodeStr, Dt, IntOp, Commutable> {
|
||||
def v8i8 : N3VDInt<op24, op23, 0b00, op11_8, op4, f, itinD16,
|
||||
@ -3254,7 +3254,7 @@ multiclass N3VInt_QHSSh<bit op24, bit op23, bits<4> op11_8, bit op4, Format f,
|
||||
InstrItinClass itinD16, InstrItinClass itinD32,
|
||||
InstrItinClass itinQ16, InstrItinClass itinQ32,
|
||||
string OpcodeStr, string Dt,
|
||||
Intrinsic IntOp>
|
||||
SDPatternOperator IntOp>
|
||||
: N3VInt_HSSh<op24, op23, op11_8, op4, f, itinD16, itinD32, itinQ16, itinQ32,
|
||||
OpcodeStr, Dt, IntOp> {
|
||||
def v8i8 : N3VDIntSh<op24, op23, 0b00, op11_8, op4, f, itinD16,
|
||||
@ -3271,7 +3271,7 @@ multiclass N3VInt_QHSD<bit op24, bit op23, bits<4> op11_8, bit op4, Format f,
|
||||
InstrItinClass itinD16, InstrItinClass itinD32,
|
||||
InstrItinClass itinQ16, InstrItinClass itinQ32,
|
||||
string OpcodeStr, string Dt,
|
||||
Intrinsic IntOp, bit Commutable = 0>
|
||||
SDPatternOperator IntOp, bit Commutable = 0>
|
||||
: N3VInt_QHS<op24, op23, op11_8, op4, f, itinD16, itinD32, itinQ16, itinQ32,
|
||||
OpcodeStr, Dt, IntOp, Commutable> {
|
||||
def v1i64 : N3VDInt<op24, op23, 0b11, op11_8, op4, f, itinD32,
|
||||
@ -3285,7 +3285,7 @@ multiclass N3VInt_QHSDSh<bit op24, bit op23, bits<4> op11_8, bit op4, Format f,
|
||||
InstrItinClass itinD16, InstrItinClass itinD32,
|
||||
InstrItinClass itinQ16, InstrItinClass itinQ32,
|
||||
string OpcodeStr, string Dt,
|
||||
Intrinsic IntOp>
|
||||
SDPatternOperator IntOp>
|
||||
: N3VInt_QHSSh<op24, op23, op11_8, op4, f, itinD16, itinD32, itinQ16, itinQ32,
|
||||
OpcodeStr, Dt, IntOp> {
|
||||
def v1i64 : N3VDIntSh<op24, op23, 0b11, op11_8, op4, f, itinD32,
|
||||
@ -3300,7 +3300,7 @@ multiclass N3VInt_QHSDSh<bit op24, bit op23, bits<4> op11_8, bit op4, Format f,
|
||||
// source operand element sizes of 16, 32 and 64 bits:
|
||||
multiclass N3VNInt_HSD<bit op24, bit op23, bits<4> op11_8, bit op4,
|
||||
string OpcodeStr, string Dt,
|
||||
Intrinsic IntOp, bit Commutable = 0> {
|
||||
SDPatternOperator IntOp, bit Commutable = 0> {
|
||||
def v8i8 : N3VNInt<op24, op23, 0b00, op11_8, op4,
|
||||
OpcodeStr, !strconcat(Dt, "16"),
|
||||
v8i8, v8i16, IntOp, Commutable>;
|
||||
@ -3360,7 +3360,7 @@ multiclass N3VLExt_QHS<bit op24, bit op23, bits<4> op11_8, bit op4,
|
||||
multiclass N3VLInt_HS<bit op24, bit op23, bits<4> op11_8, bit op4,
|
||||
InstrItinClass itin16, InstrItinClass itin32,
|
||||
string OpcodeStr, string Dt,
|
||||
Intrinsic IntOp, bit Commutable = 0> {
|
||||
SDPatternOperator IntOp, bit Commutable = 0> {
|
||||
def v4i32 : N3VLInt<op24, op23, 0b01, op11_8, op4, itin16,
|
||||
OpcodeStr, !strconcat(Dt, "16"),
|
||||
v4i32, v4i16, IntOp, Commutable>;
|
||||
@ -3371,7 +3371,7 @@ multiclass N3VLInt_HS<bit op24, bit op23, bits<4> op11_8, bit op4,
|
||||
|
||||
multiclass N3VLIntSL_HS<bit op24, bits<4> op11_8,
|
||||
InstrItinClass itin, string OpcodeStr, string Dt,
|
||||
Intrinsic IntOp> {
|
||||
SDPatternOperator IntOp> {
|
||||
def v4i16 : N3VLIntSL16<op24, 0b01, op11_8, itin,
|
||||
OpcodeStr, !strconcat(Dt, "16"), v4i32, v4i16, IntOp>;
|
||||
def v2i32 : N3VLIntSL<op24, 0b10, op11_8, itin,
|
||||
@ -3382,7 +3382,7 @@ multiclass N3VLIntSL_HS<bit op24, bits<4> op11_8,
|
||||
multiclass N3VLInt_QHS<bit op24, bit op23, bits<4> op11_8, bit op4,
|
||||
InstrItinClass itin16, InstrItinClass itin32,
|
||||
string OpcodeStr, string Dt,
|
||||
Intrinsic IntOp, bit Commutable = 0>
|
||||
SDPatternOperator IntOp, bit Commutable = 0>
|
||||
: N3VLInt_HS<op24, op23, op11_8, op4, itin16, itin32, OpcodeStr, Dt,
|
||||
IntOp, Commutable> {
|
||||
def v8i16 : N3VLInt<op24, op23, 0b00, op11_8, op4, itin16,
|
||||
@ -3393,7 +3393,7 @@ multiclass N3VLInt_QHS<bit op24, bit op23, bits<4> op11_8, bit op4,
|
||||
// ....with explicit extend (VABDL).
|
||||
multiclass N3VLIntExt_QHS<bit op24, bit op23, bits<4> op11_8, bit op4,
|
||||
InstrItinClass itin, string OpcodeStr, string Dt,
|
||||
Intrinsic IntOp, SDNode ExtOp, bit Commutable = 0> {
|
||||
SDPatternOperator IntOp, SDNode ExtOp, bit Commutable = 0> {
|
||||
def v8i16 : N3VLIntExt<op24, op23, 0b00, op11_8, op4, itin,
|
||||
OpcodeStr, !strconcat(Dt, "8"),
|
||||
v8i16, v8i8, IntOp, ExtOp, Commutable>;
|
||||
@ -3466,7 +3466,7 @@ multiclass N3VMulOpSL_HS<bits<4> op11_8,
|
||||
// element sizes of 8, 16 and 32 bits:
|
||||
multiclass N3VIntOp_QHS<bit op24, bit op23, bits<4> op11_8, bit op4,
|
||||
InstrItinClass itinD, InstrItinClass itinQ,
|
||||
string OpcodeStr, string Dt, Intrinsic IntOp,
|
||||
string OpcodeStr, string Dt, SDPatternOperator IntOp,
|
||||
SDNode OpNode> {
|
||||
// 64-bit vector types.
|
||||
def v8i8 : N3VDIntOp<op24, op23, 0b00, op11_8, op4, itinD,
|
||||
@ -3489,7 +3489,7 @@ multiclass N3VIntOp_QHS<bit op24, bit op23, bits<4> op11_8, bit op4,
|
||||
// element sizes of 8, 16 and 32 bits:
|
||||
multiclass N3VInt3_QHS<bit op24, bit op23, bits<4> op11_8, bit op4,
|
||||
InstrItinClass itinD, InstrItinClass itinQ,
|
||||
string OpcodeStr, string Dt, Intrinsic IntOp> {
|
||||
string OpcodeStr, string Dt, SDPatternOperator IntOp> {
|
||||
// 64-bit vector types.
|
||||
def v8i8 : N3VDInt3<op24, op23, 0b00, op11_8, op4, itinD,
|
||||
OpcodeStr, !strconcat(Dt, "8"), v8i8, v8i8, IntOp>;
|
||||
@ -3536,7 +3536,7 @@ multiclass N3VLMulOpSL_HS<bit op24, bits<4> op11_8, string OpcodeStr,
|
||||
// First with only element sizes of 16 and 32 bits:
|
||||
multiclass N3VLInt3_HS<bit op24, bit op23, bits<4> op11_8, bit op4,
|
||||
InstrItinClass itin16, InstrItinClass itin32,
|
||||
string OpcodeStr, string Dt, Intrinsic IntOp> {
|
||||
string OpcodeStr, string Dt, SDPatternOperator IntOp> {
|
||||
def v4i32 : N3VLInt3<op24, op23, 0b01, op11_8, op4, itin16,
|
||||
OpcodeStr, !strconcat(Dt, "16"), v4i32, v4i16, IntOp>;
|
||||
def v2i64 : N3VLInt3<op24, op23, 0b10, op11_8, op4, itin32,
|
||||
@ -3544,7 +3544,7 @@ multiclass N3VLInt3_HS<bit op24, bit op23, bits<4> op11_8, bit op4,
|
||||
}
|
||||
|
||||
multiclass N3VLInt3SL_HS<bit op24, bits<4> op11_8,
|
||||
string OpcodeStr, string Dt, Intrinsic IntOp> {
|
||||
string OpcodeStr, string Dt, SDPatternOperator IntOp> {
|
||||
def v4i16 : N3VLInt3SL16<op24, 0b01, op11_8, IIC_VMACi16D,
|
||||
OpcodeStr, !strconcat(Dt,"16"), v4i32, v4i16, IntOp>;
|
||||
def v2i32 : N3VLInt3SL<op24, 0b10, op11_8, IIC_VMACi32D,
|
||||
@ -3554,7 +3554,7 @@ multiclass N3VLInt3SL_HS<bit op24, bits<4> op11_8,
|
||||
// ....then also with element size of 8 bits:
|
||||
multiclass N3VLInt3_QHS<bit op24, bit op23, bits<4> op11_8, bit op4,
|
||||
InstrItinClass itin16, InstrItinClass itin32,
|
||||
string OpcodeStr, string Dt, Intrinsic IntOp>
|
||||
string OpcodeStr, string Dt, SDPatternOperator IntOp>
|
||||
: N3VLInt3_HS<op24, op23, op11_8, op4, itin16, itin32, OpcodeStr, Dt, IntOp> {
|
||||
def v8i16 : N3VLInt3<op24, op23, 0b00, op11_8, op4, itin16,
|
||||
OpcodeStr, !strconcat(Dt, "8"), v8i16, v8i8, IntOp>;
|
||||
@ -3563,7 +3563,7 @@ multiclass N3VLInt3_QHS<bit op24, bit op23, bits<4> op11_8, bit op4,
|
||||
// ....with explicit extend (VABAL).
|
||||
multiclass N3VLIntExtOp_QHS<bit op24, bit op23, bits<4> op11_8, bit op4,
|
||||
InstrItinClass itin, string OpcodeStr, string Dt,
|
||||
Intrinsic IntOp, SDNode ExtOp, SDNode OpNode> {
|
||||
SDPatternOperator IntOp, SDNode ExtOp, SDNode OpNode> {
|
||||
def v8i16 : N3VLIntExtOp<op24, op23, 0b00, op11_8, op4, itin,
|
||||
OpcodeStr, !strconcat(Dt, "8"), v8i16, v8i8,
|
||||
IntOp, ExtOp, OpNode>;
|
||||
@ -3580,7 +3580,7 @@ multiclass N3VLIntExtOp_QHS<bit op24, bit op23, bits<4> op11_8, bit op4,
|
||||
// element sizes of 8, 16 and 32 bits:
|
||||
multiclass N2VPLInt_QHS<bits<2> op24_23, bits<2> op21_20, bits<2> op17_16,
|
||||
bits<5> op11_7, bit op4,
|
||||
string OpcodeStr, string Dt, Intrinsic IntOp> {
|
||||
string OpcodeStr, string Dt, SDPatternOperator IntOp> {
|
||||
// 64-bit vector types.
|
||||
def v8i8 : N2VDPLInt<op24_23, op21_20, 0b00, op17_16, op11_7, op4,
|
||||
OpcodeStr, !strconcat(Dt, "8"), v4i16, v8i8, IntOp>;
|
||||
@ -3603,7 +3603,7 @@ multiclass N2VPLInt_QHS<bits<2> op24_23, bits<2> op21_20, bits<2> op17_16,
|
||||
// element sizes of 8, 16 and 32 bits:
|
||||
multiclass N2VPLInt2_QHS<bits<2> op24_23, bits<2> op21_20, bits<2> op17_16,
|
||||
bits<5> op11_7, bit op4,
|
||||
string OpcodeStr, string Dt, Intrinsic IntOp> {
|
||||
string OpcodeStr, string Dt, SDPatternOperator IntOp> {
|
||||
// 64-bit vector types.
|
||||
def v8i8 : N2VDPLInt2<op24_23, op21_20, 0b00, op17_16, op11_7, op4,
|
||||
OpcodeStr, !strconcat(Dt, "8"), v4i16, v8i8, IntOp>;
|
||||
|
Loading…
Reference in New Issue
Block a user