<div dir="ltr"><div class="gmail_default" style="font-family:arial,helvetica,sans-serif;font-size:small">LGTM!</div></div><div class="gmail_extra"><br><br><div class="gmail_quote">2013/11/18 Kevin Qin <span dir="ltr"><<a href="mailto:kevinqindev@gmail.com" target="_blank">kevinqindev@gmail.com</a>></span><br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Please review, thanks.<br>
<br>
<a href="http://llvm-reviews.chandlerc.com/D2213" target="_blank">http://llvm-reviews.chandlerc.com/D2213</a><br>
<br>
Files:<br>
  lib/Target/AArch64/AArch64InstrNEON.td<br>
  lib/Target/AArch64/AsmParser/AArch64AsmParser.cpp<br>
  test/MC/AArch64/neon-3vdiff.s<br>
  test/MC/AArch64/neon-diagnostics.s<br>
<br>
Index: lib/Target/AArch64/AArch64InstrNEON.td<br>
===================================================================<br>
--- lib/Target/AArch64/AArch64InstrNEON.td<br>
+++ lib/Target/AArch64/AArch64InstrNEON.td<br>
@@ -3284,6 +3284,11 @@<br>
   let isCommutable = Commutable in {<br>
     def _8h8b : NeonI_3VD_2Op<0b0, u, 0b00, opcode, asmop, "8h", "8b",<br>
                               opnode, VPR128, VPR64, v8i16, v8i8>;<br>
+<br>
+    def _1q1d : NeonI_3VDiff<0b0, u, 0b11, opcode,<br>
+                             (outs VPR128:$Rd), (ins VPR64:$Rn, VPR64:$Rm),<br>
+                             asmop # "\t$Rd.1q, $Rn.1d, $Rm.1d",<br>
+                             [], NoItinerary>;<br>
   }<br>
 }<br>
<br>
@@ -3295,6 +3300,11 @@<br>
     def _8h16b : NeonI_3VDL2_2Op_mull<0b1, u, 0b00, opcode, asmop, "8h", "16b",<br>
                                       !cast<PatFrag>(opnode # "_16B"),<br>
                                       v8i16, v16i8>;<br>
+<br>
+    def _1q2d : NeonI_3VDiff<0b1, u, 0b11, opcode,<br>
+                             (outs VPR128:$Rd), (ins VPR128:$Rn, VPR128:$Rm),<br>
+                             asmop # "\t$Rd.1q, $Rn.2d, $Rm.2d",<br>
+                             [], NoItinerary>;<br>
   }<br>
 }<br>
<br>
Index: lib/Target/AArch64/AsmParser/AArch64AsmParser.cpp<br>
===================================================================<br>
--- lib/Target/AArch64/AsmParser/AArch64AsmParser.cpp<br>
+++ lib/Target/AArch64/AsmParser/AArch64AsmParser.cpp<br>
@@ -1639,6 +1639,7 @@<br>
<br>
     // See if it's a 128-bit layout first.<br>
     Layout = StringSwitch<const char *>(LayoutText)<br>
+      .Case(".q", ".q").Case(".1q", ".1q")<br>
       .Case(".d", ".d").Case(".2d", ".2d")<br>
       .Case(".s", ".s").Case(".4s", ".4s")<br>
       .Case(".h", ".h").Case(".8h", ".8h")<br>
@@ -1737,6 +1738,7 @@<br>
       case 'h': NumLanes = 8; break;<br>
       case 's': NumLanes = 4; break;<br>
       case 'd': NumLanes = 2; break;<br>
+      case 'q': NumLanes = 1; break;<br>
       }<br>
     }<br>
<br>
Index: test/MC/AArch64/neon-3vdiff.s<br>
===================================================================<br>
--- test/MC/AArch64/neon-3vdiff.s<br>
+++ test/MC/AArch64/neon-3vdiff.s<br>
@@ -283,12 +283,16 @@<br>
 //------------------------------------------------------------------------------<br>
<br>
         pmull v0.8h, v1.8b, v2.8b<br>
+        pmull v0.1q, v1.1d, v2.1d<br>
<br>
 // CHECK: pmull        v0.8h, v1.8b, v2.8b     // encoding: [0x20,0xe0,0x22,0x0e]<br>
+// CHECK: pmull        v0.1q, v1.1d, v2.1d     // encoding: [0x20,0xe0,0xe2,0x0e]<br>
<br>
         pmull2 v0.8h, v1.16b, v2.16b<br>
+        pmull2 v0.1q, v1.2d, v2.2d<br>
<br>
 // CHECK: pmull2       v0.8h, v1.16b, v2.16b   // encoding: [0x20,0xe0,0x22,0x4e]<br>
+// CHECK: pmull2       v0.1q, v1.2d, v2.2d     // encoding: [0x20,0xe0,0xe2,0x4e]<br>
<br>
 //------------------------------------------------------------------------------<br>
 // Widen<br>
Index: test/MC/AArch64/neon-diagnostics.s<br>
===================================================================<br>
--- test/MC/AArch64/neon-diagnostics.s<br>
+++ test/MC/AArch64/neon-diagnostics.s<br>
@@ -2582,6 +2582,12 @@<br>
 // CHECK-ERROR:        pmull v0.8h, v1.8h, v2.8b<br>
 // CHECK-ERROR:                        ^<br>
<br>
+        pmull v0.1q, v1.2d, v2.2d<br>
+<br>
+// CHECK-ERROR: error: invalid operand for instruction<br>
+// CHECK-ERROR:        pmull v0.1q, v1.2d, v2.2d<br>
+// CHECK-ERROR:                     ^<br>
+<br>
         // Mismatched vector types<br>
         pmull v0.4s, v1.4h, v2.4h<br>
         pmull v0.2d, v1.2s, v2.2s<br>
@@ -2600,6 +2606,12 @@<br>
 // CHECK-ERROR:        pmull2 v0.8h, v1.16h, v2.16b<br>
 // CHECK-ERROR:                      ^<br>
<br>
+        pmull2 v0.q, v1.2d, v2.2d<br>
+<br>
+// CHECK-ERROR: error: invalid operand for instruction<br>
+// CHECK-ERROR:        pmull2 v0.q, v1.2d, v2.2d<br>
+// CHECK-ERROR:                  ^<br>
+<br>
         // Mismatched vector types<br>
         pmull2 v0.4s, v1.8h v2.8h<br>
         pmull2 v0.2d, v1.4s, v2.4s<br>
<br>_______________________________________________<br>
llvm-commits mailing list<br>
<a href="mailto:llvm-commits@cs.uiuc.edu">llvm-commits@cs.uiuc.edu</a><br>
<a href="http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits" target="_blank">http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits</a><br>
<br></blockquote></div><br><br clear="all"><div><br></div>-- <br><div dir="ltr"><font face="courier new, monospace">Thanks,</font><div><font face="courier new, monospace">-Jiangning</font></div></div>
</div>