diff options
Diffstat (limited to 'llvm/lib/Target/AArch64/AsmParser/AArch64AsmParser.cpp')
-rw-r--r-- | llvm/lib/Target/AArch64/AsmParser/AArch64AsmParser.cpp | 40 |
1 files changed, 18 insertions, 22 deletions
diff --git a/llvm/lib/Target/AArch64/AsmParser/AArch64AsmParser.cpp b/llvm/lib/Target/AArch64/AsmParser/AArch64AsmParser.cpp index 2401479b38a..17f038e2a65 100644 --- a/llvm/lib/Target/AArch64/AsmParser/AArch64AsmParser.cpp +++ b/llvm/lib/Target/AArch64/AsmParser/AArch64AsmParser.cpp @@ -1136,30 +1136,26 @@ public: Inst.addOperand(MCOperand::createReg(getReg())); } - template <unsigned NumRegs> - void addVectorList64Operands(MCInst &Inst, unsigned N) const { - assert(N == 1 && "Invalid number of operands!"); - static const unsigned FirstRegs[] = { AArch64::D0, - AArch64::D0_D1, - AArch64::D0_D1_D2, - AArch64::D0_D1_D2_D3 }; - unsigned FirstReg = FirstRegs[NumRegs - 1]; - - Inst.addOperand( - MCOperand::createReg(FirstReg + getVectorListStart() - AArch64::Q0)); - } + enum VecListIndexType { + VecListIdx_DReg = 0, + VecListIdx_QReg = 1, + }; - template <unsigned NumRegs> - void addVectorList128Operands(MCInst &Inst, unsigned N) const { + template <VecListIndexType RegTy, unsigned NumRegs> + void addVectorListOperands(MCInst &Inst, unsigned N) const { assert(N == 1 && "Invalid number of operands!"); - static const unsigned FirstRegs[] = { AArch64::Q0, - AArch64::Q0_Q1, - AArch64::Q0_Q1_Q2, - AArch64::Q0_Q1_Q2_Q3 }; - unsigned FirstReg = FirstRegs[NumRegs - 1]; - - Inst.addOperand( - MCOperand::createReg(FirstReg + getVectorListStart() - AArch64::Q0)); + static const unsigned FirstRegs[][5] = { + /* DReg */ { AArch64::Q0, + AArch64::D0, AArch64::D0_D1, + AArch64::D0_D1_D2, AArch64::D0_D1_D2_D3 }, + /* QReg */ { AArch64::Q0, + AArch64::Q0, AArch64::Q0_Q1, + AArch64::Q0_Q1_Q2, AArch64::Q0_Q1_Q2_Q3 } + }; + + unsigned FirstReg = FirstRegs[(unsigned)RegTy][NumRegs]; + Inst.addOperand(MCOperand::createReg(FirstReg + getVectorListStart() - + FirstRegs[(unsigned)RegTy][0])); } void addVectorIndex1Operands(MCInst &Inst, unsigned N) const { |