[llvm-commits] [llvm] r142293 - in /llvm/trunk: lib/Target/ARM/ARMInstrNEON.td lib/Target/ARM/AsmParser/ARMAsmParser.cpp test/MC/ARM/neon-mov-encoding.s test/MC/ARM/neont2-mov-encoding.s utils/TableGen/EDEmitter.cpp

Jim Grosbach grosbach at apple.com
Mon Oct 17 15:26:03 PDT 2011


Author: grosbach
Date: Mon Oct 17 17:26:03 2011
New Revision: 142293

URL: http://llvm.org/viewvc/llvm-project?rev=142293&view=rev
Log:
ARM NEON "vmov.i8" immediate assembly parsing and encoding.

NEON immediates are "interesting". Start of the work to handle parsing them
in an 'as' compatible manner. Getting the matcher to play nicely with
these and the floating point immediates from VFP is an extra fun wrinkle.

Modified:
    llvm/trunk/lib/Target/ARM/ARMInstrNEON.td
    llvm/trunk/lib/Target/ARM/AsmParser/ARMAsmParser.cpp
    llvm/trunk/test/MC/ARM/neon-mov-encoding.s
    llvm/trunk/test/MC/ARM/neont2-mov-encoding.s
    llvm/trunk/utils/TableGen/EDEmitter.cpp

Modified: llvm/trunk/lib/Target/ARM/ARMInstrNEON.td
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/ARM/ARMInstrNEON.td?rev=142293&r1=142292&r2=142293&view=diff
==============================================================================
--- llvm/trunk/lib/Target/ARM/ARMInstrNEON.td (original)
+++ llvm/trunk/lib/Target/ARM/ARMInstrNEON.td Mon Oct 17 17:26:03 2011
@@ -19,6 +19,12 @@
   let PrintMethod = "printNEONModImmOperand";
 }
 
+def nImmSplatI8AsmOperand : AsmOperandClass { let Name = "NEONi8splat"; }
+def nImmSplatI8 : Operand<i32> {
+  let PrintMethod = "printNEONModImmOperand";
+  let ParserMatchClass = nImmSplatI8AsmOperand;
+}
+
 def VectorIndex8Operand  : AsmOperandClass { let Name = "VectorIndex8"; }
 def VectorIndex16Operand : AsmOperandClass { let Name = "VectorIndex16"; }
 def VectorIndex32Operand : AsmOperandClass { let Name = "VectorIndex32"; }
@@ -4314,11 +4320,11 @@
 
 let isReMaterializable = 1 in {
 def VMOVv8i8  : N1ModImm<1, 0b000, 0b1110, 0, 0, 0, 1, (outs DPR:$Vd),
-                         (ins nModImm:$SIMM), IIC_VMOVImm,
+                         (ins nImmSplatI8:$SIMM), IIC_VMOVImm,
                          "vmov", "i8", "$Vd, $SIMM", "",
                          [(set DPR:$Vd, (v8i8 (NEONvmovImm timm:$SIMM)))]>;
 def VMOVv16i8 : N1ModImm<1, 0b000, 0b1110, 0, 1, 0, 1, (outs QPR:$Vd),
-                         (ins nModImm:$SIMM), IIC_VMOVImm,
+                         (ins nImmSplatI8:$SIMM), IIC_VMOVImm,
                          "vmov", "i8", "$Vd, $SIMM", "",
                          [(set QPR:$Vd, (v16i8 (NEONvmovImm timm:$SIMM)))]>;
 

Modified: llvm/trunk/lib/Target/ARM/AsmParser/ARMAsmParser.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/ARM/AsmParser/ARMAsmParser.cpp?rev=142293&r1=142292&r2=142293&view=diff
==============================================================================
--- llvm/trunk/lib/Target/ARM/AsmParser/ARMAsmParser.cpp (original)
+++ llvm/trunk/lib/Target/ARM/AsmParser/ARMAsmParser.cpp Mon Oct 17 17:26:03 2011
@@ -898,6 +898,7 @@
   bool isMSRMask() const { return Kind == k_MSRMask; }
   bool isProcIFlags() const { return Kind == k_ProcIFlags; }
 
+  // NEON operands.
   bool isVectorIndex8() const {
     if (Kind != k_VectorIndex) return false;
     return VectorIndex.Val < 8;
@@ -911,7 +912,18 @@
     return VectorIndex.Val < 2;
   }
 
-
+  bool isNEONi8splat() const {
+    if (Kind != k_Immediate)
+      return false;
+    const MCConstantExpr *CE = dyn_cast<MCConstantExpr>(getImm());
+    // Must be a constant.
+    if (!CE) return false;
+    int64_t Value = CE->getValue();
+    // i8 value splatted across 8 bytes. The immediate is just the 8 byte
+    // value.
+//    return ((Value << 8) | (Value & 0xff)) == Value;
+    return Value >= 0 && Value < 256;
+  }
 
   void addExpr(MCInst &Inst, const MCExpr *Expr) const {
     // Add as immediates when possible.  Null MCExpr = 0.
@@ -1435,6 +1447,14 @@
     Inst.addOperand(MCOperand::CreateImm(getVectorIndex()));
   }
 
+  void addNEONi8splatOperands(MCInst &Inst, unsigned N) const {
+    assert(N == 1 && "Invalid number of operands!");
+    // The immediate encodes the type of constant as well as the value.
+    // Mask in that this is an i8 splat.
+    const MCConstantExpr *CE = dyn_cast<MCConstantExpr>(getImm());
+    Inst.addOperand(MCOperand::CreateImm(CE->getValue() | 0xe00));
+  }
+
   virtual void print(raw_ostream &OS) const;
 
   static ARMOperand *CreateITMask(unsigned Mask, SMLoc S) {
@@ -3330,6 +3350,22 @@
 
   if (Parser.getTok().isNot(AsmToken::Hash))
     return MatchOperand_NoMatch;
+
+  // Disambiguate the VMOV forms that can accept an FP immediate.
+  // vmov.f32 <sreg>, #imm
+  // vmov.f64 <dreg>, #imm
+  // vmov.f32 <dreg>, #imm  @ vector f32x2
+  // vmov.f32 <qreg>, #imm  @ vector f32x4
+  //
+  // There are also the NEON VMOV instructions which expect an
+  // integer constant. Make sure we don't try to parse an FPImm
+  // for these:
+  // vmov.i{8|16|32|64} <dreg|qreg>, #imm
+  ARMOperand *TyOp = static_cast<ARMOperand*>(Operands[2]);
+  if (!TyOp->isToken() || (TyOp->getToken() != ".f32" &&
+                           TyOp->getToken() != ".f64"))
+    return MatchOperand_NoMatch;
+
   Parser.Lex(); // Eat the '#'.
 
   // Handle negation, as that still comes through as a separate token.

Modified: llvm/trunk/test/MC/ARM/neon-mov-encoding.s
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/MC/ARM/neon-mov-encoding.s?rev=142293&r1=142292&r2=142293&view=diff
==============================================================================
--- llvm/trunk/test/MC/ARM/neon-mov-encoding.s (original)
+++ llvm/trunk/test/MC/ARM/neon-mov-encoding.s Mon Oct 17 17:26:03 2011
@@ -1,69 +1,68 @@
 @ RUN: llvm-mc -mcpu=cortex-a8 -triple arm-unknown-unknown -show-encoding < %s | FileCheck %s
-@ XFAIL: *
 
 	vmov.i8		d16, #0x8
-	vmov.i16	d16, #0x10
-	vmov.i16	d16, #0x1000
-	vmov.i32	d16, #0x20
-	vmov.i32	d16, #0x2000
-	vmov.i32	d16, #0x200000
-	vmov.i32	d16, #0x20000000
-	vmov.i32	d16, #0x20FF
-	vmov.i32	d16, #0x20FFFF
-	vmov.i64	d16, #0xFF0000FF0000FFFF
+@	vmov.i16	d16, #0x10
+@	vmov.i16	d16, #0x1000
+@	vmov.i32	d16, #0x20
+@	vmov.i32	d16, #0x2000
+@	vmov.i32	d16, #0x200000
+@	vmov.i32	d16, #0x20000000
+@	vmov.i32	d16, #0x20FF
+@	vmov.i32	d16, #0x20FFFF
+@	vmov.i64	d16, #0xFF0000FF0000FFFF
 
 @ CHECK: vmov.i8	d16, #0x8       @ encoding: [0x18,0x0e,0xc0,0xf2]
-@ CHECK: vmov.i16	d16, #0x10      @ encoding: [0x10,0x08,0xc1,0xf2]
-@ CHECK: vmov.i16	d16, #0x1000    @ encoding: [0x10,0x0a,0xc1,0xf2]
-@ CHECK: vmov.i32	d16, #0x20      @ encoding: [0x10,0x00,0xc2,0xf2]
-@ CHECK: vmov.i32	d16, #0x2000    @ encoding: [0x10,0x02,0xc2,0xf2]
-@ CHECK: vmov.i32	d16, #0x200000  @ encoding: [0x10,0x04,0xc2,0xf2]
-@ CHECK: vmov.i32	d16, #0x20000000 @ encoding: [0x10,0x06,0xc2,0xf2]
-@ CHECK: vmov.i32	d16, #0x20FF    @ encoding: [0x10,0x0c,0xc2,0xf2]
-@ CHECK: vmov.i32	d16, #0x20FFFF  @ encoding: [0x10,0x0d,0xc2,0xf2]
-@ CHECK: vmov.i64 d16, #0xFF0000FF0000FFFF @ encoding: [0x33,0x0e,0xc1,0xf3]
+@ FIXME: vmov.i16	d16, #0x10      @ encoding: [0x10,0x08,0xc1,0xf2]
+@ FIXME: vmov.i16	d16, #0x1000    @ encoding: [0x10,0x0a,0xc1,0xf2]
+@ FIXME: vmov.i32	d16, #0x20      @ encoding: [0x10,0x00,0xc2,0xf2]
+@ FIXME: vmov.i32	d16, #0x2000    @ encoding: [0x10,0x02,0xc2,0xf2]
+@ FIXME: vmov.i32	d16, #0x200000  @ encoding: [0x10,0x04,0xc2,0xf2]
+@ FIXME: vmov.i32	d16, #0x20000000 @ encoding: [0x10,0x06,0xc2,0xf2]
+@ FIXME: vmov.i32	d16, #0x20FF    @ encoding: [0x10,0x0c,0xc2,0xf2]
+@ FIXME: vmov.i32	d16, #0x20FFFF  @ encoding: [0x10,0x0d,0xc2,0xf2]
+@ FIXME: vmov.i64 d16, #0xFF0000FF0000FFFF @ encoding: [0x33,0x0e,0xc1,0xf3]
 
 
 
 	vmov.i8		q8, #0x8
-	vmov.i16	q8, #0x10
-	vmov.i16	q8, #0x1000
-	vmov.i32	q8, #0x20
-	vmov.i32	q8, #0x2000
-	vmov.i32	q8, #0x200000
-	vmov.i32	q8, #0x20000000
-	vmov.i32	q8, #0x20FF
-	vmov.i32	q8, #0x20FFFF
-	vmov.i64	q8, #0xFF0000FF0000FFFF
+@	vmov.i16	q8, #0x10
+@	vmov.i16	q8, #0x1000
+@	vmov.i32	q8, #0x20
+@	vmov.i32	q8, #0x2000
+@	vmov.i32	q8, #0x200000
+@	vmov.i32	q8, #0x20000000
+@	vmov.i32	q8, #0x20FF
+@	vmov.i32	q8, #0x20FFFF
+@	vmov.i64	q8, #0xFF0000FF0000FFFF
 
 @ CHECK: vmov.i8 q8, #0x8               @ encoding: [0x58,0x0e,0xc0,0xf2]
-@ CHECK: vmov.i16	q8, #0x10       @ encoding: [0x50,0x08,0xc1,0xf2]
-@ CHECK: vmov.i16	q8, #0x1000     @ encoding: [0x50,0x0a,0xc1,0xf2]
-@ CHECK: vmov.i32	q8, #0x20       @ encoding: [0x50,0x00,0xc2,0xf2]
-@ CHECK: vmov.i32	q8, #0x2000     @ encoding: [0x50,0x02,0xc2,0xf2]
-@ CHECK: vmov.i32	q8, #0x200000   @ encoding: [0x50,0x04,0xc2,0xf2]
-@ CHECK: vmov.i32	q8, #0x20000000 @ encoding: [0x50,0x06,0xc2,0xf2]
-@ CHECK: vmov.i32	q8, #0x20FF     @ encoding: [0x50,0x0c,0xc2,0xf2]
-@ CHECK: vmov.i32	q8, #0x20FFFF   @ encoding: [0x50,0x0d,0xc2,0xf2]
-@ CHECK: vmov.i64 q8, #0xFF0000FF0000FFFF @ encoding: [0x73,0x0e,0xc1,0xf3]
-
-	vmvn.i16	d16, #0x10
-	vmvn.i16	d16, #0x1000
-	vmvn.i32	d16, #0x20
-	vmvn.i32	d16, #0x2000
-	vmvn.i32	d16, #0x200000
-	vmvn.i32	d16, #0x20000000
-	vmvn.i32	d16, #0x20FF
-	vmvn.i32	d16, #0x20FFFF
-
-@ CHECK: vmvn.i16	d16, #0x10      @ encoding: [0x30,0x08,0xc1,0xf2]
-@ CHECK: vmvn.i16	d16, #0x1000    @ encoding: [0x30,0x0a,0xc1,0xf2]
-@ CHECK: vmvn.i32	d16, #0x20      @ encoding: [0x30,0x00,0xc2,0xf2]
-@ CHECK: vmvn.i32	d16, #0x2000    @ encoding: [0x30,0x02,0xc2,0xf2]
-@ CHECK: vmvn.i32	d16, #0x200000  @ encoding: [0x30,0x04,0xc2,0xf2]
-@ CHECK: vmvn.i32	d16, #0x20000000 @ encoding: [0x30,0x06,0xc2,0xf2]
-@ CHECK: vmvn.i32	d16, #0x20FF    @ encoding: [0x30,0x0c,0xc2,0xf2]
-@ CHECK: vmvn.i32	d16, #0x20FFFF  @ encoding: [0x30,0x0d,0xc2,0xf2]
+@ FIXME: vmov.i16	q8, #0x10       @ encoding: [0x50,0x08,0xc1,0xf2]
+@ FIXME: vmov.i16	q8, #0x1000     @ encoding: [0x50,0x0a,0xc1,0xf2]
+@ FIXME: vmov.i32	q8, #0x20       @ encoding: [0x50,0x00,0xc2,0xf2]
+@ FIXME: vmov.i32	q8, #0x2000     @ encoding: [0x50,0x02,0xc2,0xf2]
+@ FIXME: vmov.i32	q8, #0x200000   @ encoding: [0x50,0x04,0xc2,0xf2]
+@ FIXME: vmov.i32	q8, #0x20000000 @ encoding: [0x50,0x06,0xc2,0xf2]
+@ FIXME: vmov.i32	q8, #0x20FF     @ encoding: [0x50,0x0c,0xc2,0xf2]
+@ FIXME: vmov.i32	q8, #0x20FFFF   @ encoding: [0x50,0x0d,0xc2,0xf2]
+@ FIXME: vmov.i64 q8, #0xFF0000FF0000FFFF @ encoding: [0x73,0x0e,0xc1,0xf3]
+
+@	vmvn.i16	d16, #0x10
+@	vmvn.i16	d16, #0x1000
+@	vmvn.i32	d16, #0x20
+@	vmvn.i32	d16, #0x2000
+@	vmvn.i32	d16, #0x200000
+@	vmvn.i32	d16, #0x20000000
+@	vmvn.i32	d16, #0x20FF
+@	vmvn.i32	d16, #0x20FFFF
+
+@ FIXME: vmvn.i16	d16, #0x10      @ encoding: [0x30,0x08,0xc1,0xf2]
+@ FIXME: vmvn.i16	d16, #0x1000    @ encoding: [0x30,0x0a,0xc1,0xf2]
+@ FIXME: vmvn.i32	d16, #0x20      @ encoding: [0x30,0x00,0xc2,0xf2]
+@ FIXME: vmvn.i32	d16, #0x2000    @ encoding: [0x30,0x02,0xc2,0xf2]
+@ FIXME: vmvn.i32	d16, #0x200000  @ encoding: [0x30,0x04,0xc2,0xf2]
+@ FIXME: vmvn.i32	d16, #0x20000000 @ encoding: [0x30,0x06,0xc2,0xf2]
+@ FIXME: vmvn.i32	d16, #0x20FF    @ encoding: [0x30,0x0c,0xc2,0xf2]
+@ FIXME: vmvn.i32	d16, #0x20FFFF  @ encoding: [0x30,0x0d,0xc2,0xf2]
 
 	vmovl.s8	q8, d16
 	vmovl.s16	q8, d16
@@ -106,26 +105,26 @@
 @ CHECK: vqmovun.s32	d16, q8         @ encoding: [0x60,0x02,0xf6,0xf3]
 @ CHECK: vqmovun.s64	d16, q8         @ encoding: [0x60,0x02,0xfa,0xf3]
 
-	vmov.s8 	r0, d16[1]
-	vmov.s16	r0, d16[1]
-	vmov.u8		r0, d16[1]
-	vmov.u16	r0, d16[1]
-	vmov.32		r0, d16[1]
-	vmov.8	d16[1], r1
-	vmov.16	d16[1], r1
-	vmov.32	d16[1], r1
-	vmov.8	d18[1], r1
-	vmov.16	d18[1], r1
-	vmov.32	d18[1], r1
-
-@ CHECK: vmov.s8	r0, d16[1]      @ encoding: [0xb0,0x0b,0x50,0xee]
-@ CHECK: vmov.s16	r0, d16[1]      @ encoding: [0xf0,0x0b,0x10,0xee]
-@ CHECK: vmov.u8	r0, d16[1]      @ encoding: [0xb0,0x0b,0xd0,0xee]
-@ CHECK: vmov.u16	r0, d16[1]      @ encoding: [0xf0,0x0b,0x90,0xee]
-@ CHECK: vmov.32	r0, d16[1]      @ encoding: [0x90,0x0b,0x30,0xee]
-@ CHECK: vmov.8	d16[1], r1              @ encoding: [0xb0,0x1b,0x40,0xee]
-@ CHECK: vmov.16	d16[1], r1      @ encoding: [0xf0,0x1b,0x00,0xee]
-@ CHECK: vmov.32	d16[1], r1      @ encoding: [0x90,0x1b,0x20,0xee]
-@ CHECK: vmov.8	d18[1], r1              @ encoding: [0xb0,0x1b,0x42,0xee]
-@ CHECK: vmov.16	d18[1], r1      @ encoding: [0xf0,0x1b,0x02,0xee]
-@ CHECK: vmov.32	d18[1], r1      @ encoding: [0x90,0x1b,0x22,0xee]
+@	vmov.s8 	r0, d16[1]
+@	vmov.s16	r0, d16[1]
+@	vmov.u8		r0, d16[1]
+@	vmov.u16	r0, d16[1]
+@	vmov.32		r0, d16[1]
+@	vmov.8	d16[1], r1
+@	vmov.16	d16[1], r1
+@	vmov.32	d16[1], r1
+@	vmov.8	d18[1], r1
+@	vmov.16	d18[1], r1
+@	vmov.32	d18[1], r1
+
+@ FIXME: vmov.s8	r0, d16[1]      @ encoding: [0xb0,0x0b,0x50,0xee]
+@ FIXME: vmov.s16	r0, d16[1]      @ encoding: [0xf0,0x0b,0x10,0xee]
+@ FIXME: vmov.u8	r0, d16[1]      @ encoding: [0xb0,0x0b,0xd0,0xee]
+@ FIXME: vmov.u16	r0, d16[1]      @ encoding: [0xf0,0x0b,0x90,0xee]
+@ FIXME: vmov.32	r0, d16[1]      @ encoding: [0x90,0x0b,0x30,0xee]
+@ FIXME: vmov.8	d16[1], r1              @ encoding: [0xb0,0x1b,0x40,0xee]
+@ FIXME: vmov.16	d16[1], r1      @ encoding: [0xf0,0x1b,0x00,0xee]
+@ FIXME: vmov.32	d16[1], r1      @ encoding: [0x90,0x1b,0x20,0xee]
+@ FIXME: vmov.8	d18[1], r1              @ encoding: [0xb0,0x1b,0x42,0xee]
+@ FIXME: vmov.16	d18[1], r1      @ encoding: [0xf0,0x1b,0x02,0xee]
+@ FIXME: vmov.32	d18[1], r1      @ encoding: [0x90,0x1b,0x22,0xee]

Modified: llvm/trunk/test/MC/ARM/neont2-mov-encoding.s
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/MC/ARM/neont2-mov-encoding.s?rev=142293&r1=142292&r2=142293&view=diff
==============================================================================
--- llvm/trunk/test/MC/ARM/neont2-mov-encoding.s (original)
+++ llvm/trunk/test/MC/ARM/neont2-mov-encoding.s Mon Oct 17 17:26:03 2011
@@ -1,119 +1,131 @@
 @ RUN: llvm-mc -mcpu=cortex-a8 -triple thumb-unknown-unknown -show-encoding < %s | FileCheck %s
-@ XFAIL: *
 
 .code 16
 
-@ CHECK: vmov.i8	d16, #0x8               @ encoding: [0x18,0x0e,0xc0,0xef]
 	vmov.i8	d16, #0x8
-@ CHECK: vmov.i16	d16, #0x10      @ encoding: [0x10,0x08,0xc1,0xef]
-	vmov.i16	d16, #0x10
-@ CHECK: vmov.i16	d16, #0x1000    @ encoding: [0x10,0x0a,0xc1,0xef]
-	vmov.i16	d16, #0x1000
-@ CHECK: vmov.i32	d16, #0x20      @ encoding: [0x10,0x00,0xc2,0xef]
-	vmov.i32	d16, #0x20
-@ CHECK: vmov.i32	d16, #0x2000    @ encoding: [0x10,0x02,0xc2,0xef]
-	vmov.i32	d16, #0x2000
-@ CHECK: vmov.i32	d16, #0x200000  @ encoding: [0x10,0x04,0xc2,0xef]
-	vmov.i32	d16, #0x200000
-@ CHECK: vmov.i32	d16, #0x20000000 @ encoding: [0x10,0x06,0xc2,0xef]
-	vmov.i32	d16, #0x20000000
-@ CHECK: vmov.i32	d16, #0x20FF    @ encoding: [0x10,0x0c,0xc2,0xef]
-	vmov.i32	d16, #0x20FF
-@ CHECK: vmov.i32	d16, #0x20FFFF  @ encoding: [0x10,0x0d,0xc2,0xef]
-	vmov.i32	d16, #0x20FFFF
-@ CHECK: vmov.i64	d16, #0xFF0000FF0000FFFF @ encoding: [0x33,0x0e,0xc1,0xff]
-	vmov.i64	d16, #0xFF0000FF0000FFFF
-@ CHECK: vmov.i8	q8, #0x8                @ encoding: [0x58,0x0e,0xc0,0xef]
+@	vmov.i16	d16, #0x10
+@	vmov.i16	d16, #0x1000
+@	vmov.i32	d16, #0x20
+@	vmov.i32	d16, #0x2000
+@	vmov.i32	d16, #0x200000
+@	vmov.i32	d16, #0x20000000
+@	vmov.i32	d16, #0x20FF
+@	vmov.i32	d16, #0x20FFFF
+@	vmov.i64	d16, #0xFF0000FF0000FFFF
+
+@ CHECK: vmov.i8	d16, #0x8       @ encoding: [0xc0,0xef,0x18,0x0e]
+@ FIXME: vmov.i16	d16, #0x10      @ encoding: [0xc1,0xef,0x10,0x08]
+@ FIXME: vmov.i16	d16, #0x1000    @ encoding: [0xc1,0xef,0x10,0x0a]
+@ FIXME: vmov.i32	d16, #0x20      @ encoding: [0xc2,0xef,0x10,0x00]
+@ FIXME: vmov.i32	d16, #0x2000    @ encoding: [0xc2,0xef,0x10,0x02]
+@ FIXME: vmov.i32	d16, #0x200000  @ encoding: [0xc2,0xef,0x10,0x04]
+@ FIXME: vmov.i32	d16, #0x20000000 @ encoding: [0xc2,0xef,0x10,0x06]
+@ FIXME: vmov.i32	d16, #0x20FF    @ encoding: [0xc2,0xef,0x10,0x0c]
+@ FIXME: vmov.i32	d16, #0x20FFFF  @ encoding: [0xc2,0xef,0x10,0x0d]
+@ FIXME: vmov.i64 d16, #0xFF0000FF0000FFFF @ encoding: [0xc1,0xff,0x33,0x0e]
+
+
 	vmov.i8	q8, #0x8
-@ CHECK: vmov.i16	q8, #0x10       @ encoding: [0x50,0x08,0xc1,0xef]
-	vmov.i16	q8, #0x10
-@ CHECK: vmov.i16	q8, #0x1000     @ encoding: [0x50,0x0a,0xc1,0xef]
-	vmov.i16	q8, #0x1000
-@ CHECK: vmov.i32	q8, #0x20       @ encoding: [0x50,0x00,0xc2,0xef]
-	vmov.i32	q8, #0x20
-@ CHECK: vmov.i32	q8, #0x2000     @ encoding: [0x50,0x02,0xc2,0xef]
-	vmov.i32	q8, #0x2000
-@ CHECK: vmov.i32	q8, #0x200000   @ encoding: [0x50,0x04,0xc2,0xef]
-	vmov.i32	q8, #0x200000
-@ CHECK: vmov.i32	q8, #0x20000000 @ encoding: [0x50,0x06,0xc2,0xef]
-	vmov.i32	q8, #0x20000000
-@ CHECK: vmov.i32	q8, #0x20FF     @ encoding: [0x50,0x0c,0xc2,0xef]
-	vmov.i32	q8, #0x20FF
-@ CHECK: vmov.i32	q8, #0x20FFFF   @ encoding: [0x50,0x0d,0xc2,0xef]
-	vmov.i32	q8, #0x20FFFF
-@ CHECK: vmov.i64	q8, #0xFF0000FF0000FFFF @ encoding: [0x73,0x0e,0xc1,0xff]
-	vmov.i64	q8, #0xFF0000FF0000FFFF
-@ CHECK: vmvn.i16	d16, #0x10      @ encoding: [0x30,0x08,0xc1,0xef]
-	vmvn.i16	d16, #0x10
-@ CHECK: vmvn.i16	d16, #0x1000    @ encoding: [0x30,0x0a,0xc1,0xef]
-	vmvn.i16	d16, #0x1000
-@ CHECK: vmvn.i32	d16, #0x20      @ encoding: [0x30,0x00,0xc2,0xef]
-	vmvn.i32	d16, #0x20
-@ CHECK: vmvn.i32	d16, #0x2000    @ encoding: [0x30,0x02,0xc2,0xef]
-	vmvn.i32	d16, #0x2000
-@ CHECK: vmvn.i32	d16, #0x200000  @ encoding: [0x30,0x04,0xc2,0xef]
-	vmvn.i32	d16, #0x200000
-@ CHECK: vmvn.i32	d16, #0x20000000 @ encoding: [0x30,0x06,0xc2,0xef]
-	vmvn.i32	d16, #0x20000000
-@ CHECK: vmvn.i32	d16, #0x20FF    @ encoding: [0x30,0x0c,0xc2,0xef]
-	vmvn.i32	d16, #0x20FF
-@ CHECK: vmvn.i32	d16, #0x20FFFF  @ encoding: [0x30,0x0d,0xc2,0xef]
-	vmvn.i32	d16, #0x20FFFF
-@ CHECK: vmovl.s8	q8, d16         @ encoding: [0x30,0x0a,0xc8,0xef]
+@	vmov.i16	q8, #0x10
+@	vmov.i16	q8, #0x1000
+@	vmov.i32	q8, #0x20
+@	vmov.i32	q8, #0x2000
+@	vmov.i32	q8, #0x200000
+@	vmov.i32	q8, #0x20000000
+@	vmov.i32	q8, #0x20FF
+@	vmov.i32	q8, #0x20FFFF
+@	vmov.i64	q8, #0xFF0000FF0000FFFF
+
+@ CHECK: vmov.i8	q8, #0x8        @ encoding: [0xc0,0xef,0x58,0x0e]
+@ FIXME: vmov.i16	q8, #0x10       @ encoding: [0xc1,0xef,0x50,0x08]
+@ FIXME: vmov.i16	q8, #0x1000     @ encoding: [0xc1,0xef,0x50,0x0a]
+@ FIXME: vmov.i32	q8, #0x20       @ encoding: [0xc2,0xef,0x50,0x00]
+@ FIXME: vmov.i32	q8, #0x2000     @ encoding: [0xc2,0xef,0x50,0x02]
+@ FIXME: vmov.i32	q8, #0x200000   @ encoding: [0xc2,0xef,0x50,0x04]
+@ FIXME: vmov.i32	q8, #0x20000000 @ encoding: [0xc2,0xef,0x50,0x06]
+@ FIXME: vmov.i32	q8, #0x20FF     @ encoding: [0xc2,0xef,0x50,0x0c]
+@ FIXME: vmov.i32	q8, #0x20FFFF   @ encoding: [0xc2,0xef,0x50,0x0d]
+@ FIXME: vmov.i64 q8, #0xFF0000FF0000FFFF @ encoding: [0xc1,0xff,0x73,0x0e]
+
+
+@	vmvn.i16	d16, #0x10
+@	vmvn.i16	d16, #0x1000
+@	vmvn.i32	d16, #0x20
+@	vmvn.i32	d16, #0x2000
+@	vmvn.i32	d16, #0x200000
+@	vmvn.i32	d16, #0x20000000
+@	vmvn.i32	d16, #0x20FF
+@	vmvn.i32	d16, #0x20FFFF
+
+@ FIXME: vmvn.i16	d16, #0x10      @ encoding: [0xc1,0xef,0x30,0x08]
+@ FIXME: vmvn.i16	d16, #0x1000    @ encoding: [0xc1,0xef,0x30,0x0a]
+@ FIXME: vmvn.i32	d16, #0x20      @ encoding: [0xc2,0xef,0x30,0x00]
+@ FIXME: vmvn.i32	d16, #0x2000    @ encoding: [0xc2,0xef,0x30,0x02]
+@ FIXME: vmvn.i32	d16, #0x200000  @ encoding: [0xc2,0xef,0x30,0x04]
+@ FIXME: vmvn.i32	d16, #0x20000000 @ encoding: [0xc2,0xef,0x30,0x06]
+@ FIXME: vmvn.i32	d16, #0x20FF    @ encoding: [0xc2,0xef,0x30,0x0c]
+@ FIXME: vmvn.i32	d16, #0x20FFFF  @ encoding: [0xc2,0xef,0x30,0x0d]
+
+
 	vmovl.s8	q8, d16
-@ CHECK: vmovl.s16	q8, d16         @ encoding: [0x30,0x0a,0xd0,0xef]
 	vmovl.s16	q8, d16
-@ CHECK: vmovl.s32	q8, d16         @ encoding: [0x30,0x0a,0xe0,0xef]
 	vmovl.s32	q8, d16
-@ CHECK: vmovl.u8	q8, d16         @ encoding: [0x30,0x0a,0xc8,0xff]
 	vmovl.u8	q8, d16
-@ CHECK: vmovl.u16	q8, d16         @ encoding: [0x30,0x0a,0xd0,0xff]
 	vmovl.u16	q8, d16
-@ CHECK: vmovl.u32	q8, d16         @ encoding: [0x30,0x0a,0xe0,0xff]
 	vmovl.u32	q8, d16
-@ CHECK: vmovn.i16	d16, q8         @ encoding: [0x20,0x02,0xf2,0xff]
 	vmovn.i16	d16, q8
-@ CHECK: vmovn.i32	d16, q8         @ encoding: [0x20,0x02,0xf6,0xff]
 	vmovn.i32	d16, q8
-@ CHECK: vmovn.i64	d16, q8         @ encoding: [0x20,0x02,0xfa,0xff]
 	vmovn.i64	d16, q8
-@ CHECK: vqmovn.s16	d16, q8         @ encoding: [0xa0,0x02,0xf2,0xff]
 	vqmovn.s16	d16, q8
-@ CHECK: vqmovn.s32	d16, q8         @ encoding: [0xa0,0x02,0xf6,0xff]
 	vqmovn.s32	d16, q8
-@ CHECK: vqmovn.s64	d16, q8         @ encoding: [0xa0,0x02,0xfa,0xff]
 	vqmovn.s64	d16, q8
-@ CHECK: vqmovn.u16	d16, q8         @ encoding: [0xe0,0x02,0xf2,0xff]
 	vqmovn.u16	d16, q8
-@ CHECK: vqmovn.u32	d16, q8         @ encoding: [0xe0,0x02,0xf6,0xff]
 	vqmovn.u32	d16, q8
-@ CHECK: vqmovn.u64	d16, q8         @ encoding: [0xe0,0x02,0xfa,0xff]
 	vqmovn.u64	d16, q8
-@ CHECK: vqmovun.s16	d16, q8         @ encoding: [0x60,0x02,0xf2,0xff]
 	vqmovun.s16	d16, q8
-@ CHECK: vqmovun.s32	d16, q8         @ encoding: [0x60,0x02,0xf6,0xff]
 	vqmovun.s32	d16, q8
-@ CHECK: vqmovun.s64	d16, q8         @ encoding: [0x60,0x02,0xfa,0xff]
 	vqmovun.s64	d16, q8
-@ CHECK: vmov.s8	r0, d16[1]              @ encoding: [0xb0,0x0b,0x50,0xee]
-	vmov.s8	r0, d16[1]
-@ CHECK: vmov.s16	r0, d16[1]      @ encoding: [0xf0,0x0b,0x10,0xee]
-	vmov.s16	r0, d16[1]
-@ CHECK: vmov.u8	r0, d16[1]              @ encoding: [0xb0,0x0b,0xd0,0xee]
-	vmov.u8	r0, d16[1]
-@ CHECK: vmov.u16	r0, d16[1]      @ encoding: [0xf0,0x0b,0x90,0xee]
-	vmov.u16	r0, d16[1]
-@ CHECK: vmov.32	r0, d16[1]              @ encoding: [0x90,0x0b,0x30,0xee]
-	vmov.32	r0, d16[1]
-@ CHECK: vmov.8	d16[1], r1              @ encoding: [0xb0,0x1b,0x40,0xee]
-	vmov.8	d16[1], r1
-@ CHECK: vmov.16	d16[1], r1              @ encoding: [0xf0,0x1b,0x00,0xee]
-	vmov.16	d16[1], r1
-@ CHECK: vmov.32	d16[1], r1              @ encoding: [0x90,0x1b,0x20,0xee]
-	vmov.32	d16[1], r1
-@ CHECK: vmov.8	d18[1], r1              @ encoding: [0xb0,0x1b,0x42,0xee]
-	vmov.8	d18[1], r1
-@ CHECK: vmov.16	d18[1], r1              @ encoding: [0xf0,0x1b,0x02,0xee]
-	vmov.16	d18[1], r1
-@ CHECK: vmov.32	d18[1], r1              @ encoding: [0x90,0x1b,0x22,0xee]
-	vmov.32	d18[1], r1
+
+@ CHECK: vmovl.s8	q8, d16         @ encoding: [0xc8,0xef,0x30,0x0a]
+@ CHECK: vmovl.s16	q8, d16         @ encoding: [0xd0,0xef,0x30,0x0a]
+@ CHECK: vmovl.s32	q8, d16         @ encoding: [0xe0,0xef,0x30,0x0a]
+@ CHECK: vmovl.u8	q8, d16         @ encoding: [0xc8,0xff,0x30,0x0a]
+@ CHECK: vmovl.u16	q8, d16         @ encoding: [0xd0,0xff,0x30,0x0a]
+@ CHECK: vmovl.u32	q8, d16         @ encoding: [0xe0,0xff,0x30,0x0a]
+@ CHECK: vmovn.i16	d16, q8         @ encoding: [0xf2,0xff,0x20,0x02]
+@ CHECK: vmovn.i32	d16, q8         @ encoding: [0xf6,0xff,0x20,0x02]
+@ CHECK: vmovn.i64	d16, q8         @ encoding: [0xfa,0xff,0x20,0x02]
+@ CHECK: vqmovn.s16	d16, q8         @ encoding: [0xf2,0xff,0xa0,0x02]
+@ CHECK: vqmovn.s32	d16, q8         @ encoding: [0xf6,0xff,0xa0,0x02]
+@ CHECK: vqmovn.s64	d16, q8         @ encoding: [0xfa,0xff,0xa0,0x02]
+@ CHECK: vqmovn.u16	d16, q8         @ encoding: [0xf2,0xff,0xe0,0x02]
+@ CHECK: vqmovn.u32	d16, q8         @ encoding: [0xf6,0xff,0xe0,0x02]
+@ CHECK: vqmovn.u64	d16, q8         @ encoding: [0xfa,0xff,0xe0,0x02]
+@ CHECK: vqmovun.s16	d16, q8         @ encoding: [0xf2,0xff,0x60,0x02]
+@ CHECK: vqmovun.s32	d16, q8         @ encoding: [0xf6,0xff,0x60,0x02]
+@ CHECK: vqmovun.s64	d16, q8         @ encoding: [0xfa,0xff,0x60,0x02]
+
+
+@	vmov.s8	r0, d16[1]
+@	vmov.s16	r0, d16[1]
+@	vmov.u8	r0, d16[1]
+@	vmov.u16	r0, d16[1]
+@	vmov.32	r0, d16[1]
+@	vmov.8	d16[1], r1
+@	vmov.16	d16[1], r1
+@	vmov.32	d16[1], r1
+@	vmov.8	d18[1], r1
+@	vmov.16	d18[1], r1
+@	vmov.32	d18[1], r1
+
+@ FIXME: vmov.s8	r0, d16[1]      @ encoding: [0x50,0xee,0xb0,0x0b]
+@ FIXME: vmov.s16	r0, d16[1]      @ encoding: [0x10,0xee,0xf0,0x0b]
+@ FIXME: vmov.u8	r0, d16[1]      @ encoding: [0xd0,0xee,0xb0,0x0b]
+@ FIXME: vmov.u16	r0, d16[1]      @ encoding: [0x90,0xee,0xf0,0x0b]
+@ FIXME: vmov.32	r0, d16[1]      @ encoding: [0x30,0xee,0x90,0x0b]
+@ FIXME: vmov.8	d16[1], r1              @ encoding: [0x40,0xee,0xb0,0x1b]
+@ FIXME: vmov.16	d16[1], r1      @ encoding: [0x00,0xee,0xf0,0x1b]
+@ FIXME: vmov.32	d16[1], r1      @ encoding: [0x20,0xee,0x90,0x1b]
+@ FIXME: vmov.8	d18[1], r1              @ encoding: [0x42,0xee,0xb0,0x1b]
+@ FIXME: vmov.16	d18[1], r1      @ encoding: [0x02,0xee,0xf0,0x1b]
+@ FIXME: vmov.32	d18[1], r1      @ encoding: [0x22,0xee,0x90,0x1b]

Modified: llvm/trunk/utils/TableGen/EDEmitter.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/utils/TableGen/EDEmitter.cpp?rev=142293&r1=142292&r2=142293&view=diff
==============================================================================
--- llvm/trunk/utils/TableGen/EDEmitter.cpp (original)
+++ llvm/trunk/utils/TableGen/EDEmitter.cpp Mon Oct 17 17:26:03 2011
@@ -597,6 +597,7 @@
   IMM("imm1_16");
   IMM("imm1_32");
   IMM("nModImm");
+  IMM("nImmSplatI8");
   IMM("imm0_7");
   IMM("imm0_15");
   IMM("imm0_255");





More information about the llvm-commits mailing list