diff options
| author | Bob Wilson <bob.wilson@apple.com> | 2010-07-13 04:44:34 +0000 |
|---|---|---|
| committer | Bob Wilson <bob.wilson@apple.com> | 2010-07-13 04:44:34 +0000 |
| commit | c1c6f4796e409f8339eb85fc288fd5657eb9a3f6 (patch) | |
| tree | ff7963bf5012dabfd5e85c80a286c4094ea19070 /llvm/lib/Target/ARM/AsmPrinter/ARMInstPrinter.cpp | |
| parent | 55595fb2912a308e818d71c1625ac1d86ceff44a (diff) | |
| download | bcm5719-llvm-c1c6f4796e409f8339eb85fc288fd5657eb9a3f6.tar.gz bcm5719-llvm-c1c6f4796e409f8339eb85fc288fd5657eb9a3f6.zip | |
Move NEON "modified immediate" encode/decode into ARMAddressingModes.h to
avoid replicated code.
llvm-svn: 108227
Diffstat (limited to 'llvm/lib/Target/ARM/AsmPrinter/ARMInstPrinter.cpp')
| -rw-r--r-- | llvm/lib/Target/ARM/AsmPrinter/ARMInstPrinter.cpp | 32 |
1 files changed, 3 insertions, 29 deletions
diff --git a/llvm/lib/Target/ARM/AsmPrinter/ARMInstPrinter.cpp b/llvm/lib/Target/ARM/AsmPrinter/ARMInstPrinter.cpp index b4abb658112..170819ad4f0 100644 --- a/llvm/lib/Target/ARM/AsmPrinter/ARMInstPrinter.cpp +++ b/llvm/lib/Target/ARM/AsmPrinter/ARMInstPrinter.cpp @@ -781,34 +781,8 @@ void ARMInstPrinter::printVFPf64ImmOperand(const MCInst *MI, unsigned OpNum, void ARMInstPrinter::printNEONModImmOperand(const MCInst *MI, unsigned OpNum, raw_ostream &O) { - unsigned Imm = MI->getOperand(OpNum).getImm(); - unsigned OpCmode = (Imm >> 8) & 0x1f; - unsigned Imm8 = Imm & 0xff; - uint64_t Val = 0; - - if (OpCmode == 0xe) { - // 8-bit vector elements - Val = Imm8; - } else if ((OpCmode & 0xc) == 0x8) { - // 16-bit vector elements - unsigned ByteNum = (OpCmode & 0x6) >> 1; - Val = Imm8 << (8 * ByteNum); - } else if ((OpCmode & 0x8) == 0) { - // 32-bit vector elements, zero with one byte set - unsigned ByteNum = (OpCmode & 0x6) >> 1; - Val = Imm8 << (8 * ByteNum); - } else if ((OpCmode & 0xe) == 0xc) { - // 32-bit vector elements, one byte with low bits set - unsigned ByteNum = 1 + (OpCmode & 0x1); - Val = (Imm8 << (8 * ByteNum)) | (0xffff >> (8 * (2 - ByteNum))); - } else if (OpCmode == 0x1e) { - // 64-bit vector elements - for (unsigned ByteNum = 0; ByteNum < 8; ++ByteNum) { - if ((Imm >> ByteNum) & 1) - Val |= (uint64_t)0xff << (8 * ByteNum); - } - } else { - assert(false && "Unsupported NEON immediate"); - } + unsigned EncodedImm = MI->getOperand(OpNum).getImm(); + unsigned EltBits; + uint64_t Val = ARM_AM::decodeNEONModImm(EncodedImm, EltBits); O << "#0x" << utohexstr(Val); } |

