mirror of
https://github.com/RPCS3/llvm.git
synced 2024-12-14 07:31:53 +00:00
ARM: Parameterize the immediate operand type for NEON VSHLL.
No functional change yet. Will be implementing range-checked immediates for better diagnostics and disambiguation of instructions. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@145994 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
e6d81ad6a5
commit
4e4139588c
@ -2666,9 +2666,9 @@ class N2VQSh<bit op24, bit op23, bits<4> op11_8, bit op7, bit op4,
|
||||
// Long shift by immediate.
|
||||
class N2VLSh<bit op24, bit op23, bits<4> op11_8, bit op7, bit op6, bit op4,
|
||||
string OpcodeStr, string Dt,
|
||||
ValueType ResTy, ValueType OpTy, SDNode OpNode>
|
||||
ValueType ResTy, ValueType OpTy, Operand ImmTy, SDNode OpNode>
|
||||
: N2VImm<op24, op23, op11_8, op7, op6, op4,
|
||||
(outs QPR:$Vd), (ins DPR:$Vm, i32imm:$SIMM), N2RegVShLFrm,
|
||||
(outs QPR:$Vd), (ins DPR:$Vm, ImmTy:$SIMM), N2RegVShLFrm,
|
||||
IIC_VSHLiD, OpcodeStr, Dt, "$Vd, $Vm, $SIMM", "",
|
||||
[(set QPR:$Vd, (ResTy (OpNode (OpTy DPR:$Vm),
|
||||
(i32 imm:$SIMM))))]>;
|
||||
@ -3567,15 +3567,15 @@ multiclass N2VShInsR_QHSD<bit op24, bit op23, bits<4> op11_8, bit op4,
|
||||
multiclass N2VLSh_QHS<bit op24, bit op23, bits<4> op11_8, bit op7, bit op6,
|
||||
bit op4, string OpcodeStr, string Dt, SDNode OpNode> {
|
||||
def v8i16 : N2VLSh<op24, op23, op11_8, op7, op6, op4,
|
||||
OpcodeStr, !strconcat(Dt, "8"), v8i16, v8i8, OpNode> {
|
||||
OpcodeStr, !strconcat(Dt, "8"), v8i16, v8i8, i32imm, OpNode> {
|
||||
let Inst{21-19} = 0b001; // imm6 = 001xxx
|
||||
}
|
||||
def v4i32 : N2VLSh<op24, op23, op11_8, op7, op6, op4,
|
||||
OpcodeStr, !strconcat(Dt, "16"), v4i32, v4i16, OpNode> {
|
||||
OpcodeStr, !strconcat(Dt, "16"), v4i32, v4i16, i32imm, OpNode> {
|
||||
let Inst{21-20} = 0b01; // imm6 = 01xxxx
|
||||
}
|
||||
def v2i64 : N2VLSh<op24, op23, op11_8, op7, op6, op4,
|
||||
OpcodeStr, !strconcat(Dt, "32"), v2i64, v2i32, OpNode> {
|
||||
OpcodeStr, !strconcat(Dt, "32"), v2i64, v2i32, i32imm, OpNode> {
|
||||
let Inst{21} = 0b1; // imm6 = 1xxxxx
|
||||
}
|
||||
}
|
||||
@ -4375,18 +4375,18 @@ defm VSHLLu : N2VLSh_QHS<1, 1, 0b1010, 0, 0, 1, "vshll", "u", NEONvshllu>;
|
||||
// VSHLL : Vector Shift Left Long (with maximum shift count)
|
||||
class N2VLShMax<bit op24, bit op23, bits<6> op21_16, bits<4> op11_8, bit op7,
|
||||
bit op6, bit op4, string OpcodeStr, string Dt, ValueType ResTy,
|
||||
ValueType OpTy, SDNode OpNode>
|
||||
ValueType OpTy, Operand ImmTy, SDNode OpNode>
|
||||
: N2VLSh<op24, op23, op11_8, op7, op6, op4, OpcodeStr, Dt,
|
||||
ResTy, OpTy, OpNode> {
|
||||
ResTy, OpTy, ImmTy, OpNode> {
|
||||
let Inst{21-16} = op21_16;
|
||||
let DecoderMethod = "DecodeVSHLMaxInstruction";
|
||||
}
|
||||
def VSHLLi8 : N2VLShMax<1, 1, 0b110010, 0b0011, 0, 0, 0, "vshll", "i8",
|
||||
v8i16, v8i8, NEONvshlli>;
|
||||
v8i16, v8i8, i32imm, NEONvshlli>;
|
||||
def VSHLLi16 : N2VLShMax<1, 1, 0b110110, 0b0011, 0, 0, 0, "vshll", "i16",
|
||||
v4i32, v4i16, NEONvshlli>;
|
||||
v4i32, v4i16, i32imm, NEONvshlli>;
|
||||
def VSHLLi32 : N2VLShMax<1, 1, 0b111010, 0b0011, 0, 0, 0, "vshll", "i32",
|
||||
v2i64, v2i32, NEONvshlli>;
|
||||
v2i64, v2i32, i32imm, NEONvshlli>;
|
||||
|
||||
// VSHRN : Vector Shift Right and Narrow
|
||||
defm VSHRN : N2VNSh_HSD<0,1,0b1000,0,0,1, IIC_VSHLiD, "vshrn", "i",
|
||||
|
Loading…
Reference in New Issue
Block a user