diff options
| author | Chad Rosier <mcrosier@codeaurora.org> | 2013-10-31 19:28:44 +0000 | 
|---|---|---|
| committer | Chad Rosier <mcrosier@codeaurora.org> | 2013-10-31 19:28:44 +0000 | 
| commit | 1d28917dc39f38847f5c69c0a60cd1491430bdad (patch) | |
| tree | 691afc4dbf1350521d322b4882b1bc71f4632fef /lib/Target/AArch64/Disassembler | |
| parent | 1d6d49fbb104781cc3e9da9dcc3e36b6cbcd38b6 (diff) | |
| download | external_llvm-1d28917dc39f38847f5c69c0a60cd1491430bdad.zip external_llvm-1d28917dc39f38847f5c69c0a60cd1491430bdad.tar.gz external_llvm-1d28917dc39f38847f5c69c0a60cd1491430bdad.tar.bz2 | |
[AArch64] Add support for NEON scalar shift immediate instructions.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@193790 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/Target/AArch64/Disassembler')
| -rw-r--r-- | lib/Target/AArch64/Disassembler/AArch64Disassembler.cpp | 52 | 
1 files changed, 52 insertions, 0 deletions
| diff --git a/lib/Target/AArch64/Disassembler/AArch64Disassembler.cpp b/lib/Target/AArch64/Disassembler/AArch64Disassembler.cpp index 9a97fbe..db1da49 100644 --- a/lib/Target/AArch64/Disassembler/AArch64Disassembler.cpp +++ b/lib/Target/AArch64/Disassembler/AArch64Disassembler.cpp @@ -141,6 +141,18 @@ static DecodeStatus DecodeShiftRightImm64(MCInst &Inst, unsigned Val,                                            uint64_t Address,                                            const void *Decoder); +static DecodeStatus DecodeShiftLeftImm8(MCInst &Inst, unsigned Val, +                                        uint64_t Address, const void *Decoder); +static DecodeStatus DecodeShiftLeftImm16(MCInst &Inst, unsigned Val, +                                         uint64_t Address, +                                         const void *Decoder); +static DecodeStatus DecodeShiftLeftImm32(MCInst &Inst, unsigned Val, +                                         uint64_t Address, +                                         const void *Decoder); +static DecodeStatus DecodeShiftLeftImm64(MCInst &Inst, unsigned Val, +                                         uint64_t Address, +                                         const void *Decoder); +  template<int RegWidth>  static DecodeStatus DecodeMoveWideImmOperand(llvm::MCInst &Inst,                                               unsigned FullImm, @@ -509,6 +521,46 @@ static DecodeStatus DecodeShiftRightImm64(MCInst &Inst, unsigned Val,    return MCDisassembler::Success;  } +static DecodeStatus DecodeShiftLeftImm8(MCInst &Inst, unsigned Val, +                                        uint64_t Address, +                                        const void *Decoder) { +  if (Val > 7) +    return MCDisassembler::Fail; + +  Inst.addOperand(MCOperand::CreateImm(Val)); +  return MCDisassembler::Success; +} + +static DecodeStatus DecodeShiftLeftImm16(MCInst &Inst, unsigned Val, +                                         uint64_t Address, +                                         const void *Decoder) { +  if (Val > 15) +    return MCDisassembler::Fail; + +  Inst.addOperand(MCOperand::CreateImm(Val)); +  return MCDisassembler::Success; +} + +static DecodeStatus DecodeShiftLeftImm32(MCInst &Inst, unsigned Val, +                                         uint64_t Address, +                                         const void *Decoder) { +  if (Val > 31) +    return MCDisassembler::Fail; + +  Inst.addOperand(MCOperand::CreateImm(Val)); +  return MCDisassembler::Success; +} + +static DecodeStatus DecodeShiftLeftImm64(MCInst &Inst, unsigned Val, +                                         uint64_t Address, +                                         const void *Decoder) { +  if (Val > 63) +    return MCDisassembler::Fail; + +  Inst.addOperand(MCOperand::CreateImm(Val)); +  return MCDisassembler::Success; +} +  template<int RegWidth>  static DecodeStatus DecodeMoveWideImmOperand(llvm::MCInst &Inst,                                               unsigned FullImm, | 
