aboutsummaryrefslogtreecommitdiffstats
path: root/lib/Target/ARM/AsmPrinter/ARMAsmPrinter.cpp
diff options
context:
space:
mode:
authorBob Wilson <bob.wilson@apple.com>2010-07-13 04:44:34 +0000
committerBob Wilson <bob.wilson@apple.com>2010-07-13 04:44:34 +0000
commit766d996c6f80d6e05032fc4eaa73201825fde6f4 (patch)
tree067f25adc1fb00dea381645f9039a74225579eef /lib/Target/ARM/AsmPrinter/ARMAsmPrinter.cpp
parent1e370ad1629f8e67b5238453cbbb07830464c323 (diff)
downloadexternal_llvm-766d996c6f80d6e05032fc4eaa73201825fde6f4.tar.gz
external_llvm-766d996c6f80d6e05032fc4eaa73201825fde6f4.tar.bz2
external_llvm-766d996c6f80d6e05032fc4eaa73201825fde6f4.zip
Move NEON "modified immediate" encode/decode into ARMAddressingModes.h to
avoid replicated code. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@108227 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/Target/ARM/AsmPrinter/ARMAsmPrinter.cpp')
-rw-r--r--lib/Target/ARM/AsmPrinter/ARMAsmPrinter.cpp32
1 files changed, 3 insertions, 29 deletions
diff --git a/lib/Target/ARM/AsmPrinter/ARMAsmPrinter.cpp b/lib/Target/ARM/AsmPrinter/ARMAsmPrinter.cpp
index b4809b5e4d..6a40cf3602 100644
--- a/lib/Target/ARM/AsmPrinter/ARMAsmPrinter.cpp
+++ b/lib/Target/ARM/AsmPrinter/ARMAsmPrinter.cpp
@@ -1030,35 +1030,9 @@ void ARMAsmPrinter::printVFPf64ImmOperand(const MachineInstr *MI, int OpNum,
void ARMAsmPrinter::printNEONModImmOperand(const MachineInstr *MI, int 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);
}