<div dir="ltr">I think you're missing <span style="font-family:arial,sans-serif;font-size:13px"> let Constraints = "$src1 = $dst", hasSideEffects = 0, Predicates = [HasSHA] on the new instructions aren't you?</span><div>
<span style="font-family:arial,sans-serif;font-size:13px"><br></span></div><div><span style="font-family:arial,sans-serif;font-size:13px">Also please add InstAliases for the </span><span style="font-family:arial,sans-serif;font-size:13px">SHA256RNDS2 instruction so that users can specify the implicit xmm0 operand. See the aliases for </span><font face="arial, sans-serif">blendvpd for an example.</font></div>
<div><br></div></div><div class="gmail_extra"><br><br><div class="gmail_quote">2013/9/12 Ben Langmuir <span dir="ltr"><<a href="mailto:ben.langmuir@intel.com" target="_blank">ben.langmuir@intel.com</a>></span><br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
Hi craig.topper,<br>
<br>
Add the remaining Intel SHA instructions and tests.  All of these instructions<br>
seem to have the same form, except that sha256rnds2 has an implicit read<br>
dependency on xmm0.<br>
<br>
<a href="http://llvm-reviews.chandlerc.com/D1663" target="_blank">http://llvm-reviews.chandlerc.com/D1663</a><br>
<br>
Files:<br>
  lib/Target/X86/X86InstrSSE.td<br>
  test/MC/Disassembler/X86/x86-64.txt<br>
  test/MC/X86/x86_64-encoding.s<br>
<br>
Index: lib/Target/X86/X86InstrSSE.td<br>
===================================================================<br>
--- lib/Target/X86/X86InstrSSE.td<br>
+++ lib/Target/X86/X86InstrSSE.td<br>
@@ -7324,6 +7324,17 @@<br>
 // SHA-NI Instructions<br>
 //===----------------------------------------------------------------------===//<br>
<br>
+multiclass SHAI_binop<bits<8> Opc, string OpcodeStr> {<br>
+  def rr : I<Opc, MRMSrcReg, (outs VR128:$dst),<br>
+             (ins VR128:$src1, VR128:$src2),<br>
+             !strconcat(OpcodeStr, "\t{$src2, $dst|$dst, $src2}"), []>, T8;<br>
+<br>
+  let mayLoad = 1 in<br>
+  def rm : I<Opc, MRMSrcMem, (outs VR128:$dst),<br>
+             (ins VR128:$src1, i128mem:$src2),<br>
+             !strconcat(OpcodeStr, "\t{$src2, $dst|$dst, $src2}"), []>, T8;<br>
+}<br>
+<br>
 let Constraints = "$src1 = $dst", hasSideEffects = 0, Predicates = [HasSHA] in {<br>
   def SHA1RNDS4rri : Ii8<0xCC, MRMSrcReg, (outs VR128:$dst),<br>
                          (ins VR128:$src1, VR128:$src2, i8imm:$src3),<br>
@@ -7334,6 +7345,16 @@<br>
                          (ins VR128:$src1, i128mem:$src2, i8imm:$src3),<br>
                          "sha1rnds4\t{$src3, $src2, $dst|$dst, $src2, $src3}",<br>
                          []>, TA;<br>
+<br>
+  defm SHA1NEXTE : SHAI_binop<0xC8, "sha1nexte">;<br>
+  defm SHA1MSG1  : SHAI_binop<0xC9, "sha1msg1">;<br>
+  defm SHA1MSG2  : SHAI_binop<0xCA, "sha1msg2">;<br>
+<br>
+  let Uses=[XMM0] in<br>
+  defm SHA256RNDS2 : SHAI_binop<0xCB, "sha256rnds2">;<br>
+<br>
+  defm SHA256MSG1 : SHAI_binop<0xCC, "sha256msg1">;<br>
+  defm SHA256MSG2 : SHAI_binop<0xCD, "sha256msg2">;<br>
 }<br>
<br>
 //===----------------------------------------------------------------------===//<br>
Index: test/MC/Disassembler/X86/x86-64.txt<br>
===================================================================<br>
--- test/MC/Disassembler/X86/x86-64.txt<br>
+++ test/MC/Disassembler/X86/x86-64.txt<br>
@@ -162,4 +162,40 @@<br>
 0x0f 0x3a 0xcc 0xd1 0x01<br>
<br>
 # CHECK: sha1rnds4 $1, (%rax), %xmm2<br>
-0x0f 0x3a 0xcc 0x10 0x01<br>
\ No newline at end of file<br>
+0x0f 0x3a 0xcc 0x10 0x01<br>
+<br>
+# CHECK: sha1nexte %xmm1, %xmm2<br>
+0x0f 0x38 0xc8 0xd1<br>
+<br>
+# CHECK: sha1nexte (%rax), %xmm2<br>
+0x0f 0x38 0xc8 0x10<br>
+<br>
+# CHECK: sha1msg1 %xmm1, %xmm2<br>
+0x0f 0x38 0xc9 0xd1<br>
+<br>
+# CHECK: sha1msg1 (%rax), %xmm2<br>
+0x0f 0x38 0xc9 0x10<br>
+<br>
+# CHECK: sha1msg2 %xmm1, %xmm2<br>
+0x0f 0x38 0xca 0xd1<br>
+<br>
+# CHECK: sha1msg2 (%rax), %xmm2<br>
+0x0f 0x38 0xca 0x10<br>
+<br>
+# CHECK: sha256rnds2 (%rax), %xmm2<br>
+0x0f 0x38 0xcb 0x10<br>
+<br>
+# CHECK: sha256rnds2 %xmm1, %xmm2<br>
+0x0f 0x38 0xcb 0xd1<br>
+<br>
+# CHECK: sha256msg1 %xmm1, %xmm2<br>
+0x0f 0x38 0xcc 0xd1<br>
+<br>
+# CHECK: sha256msg1 (%rax), %xmm2<br>
+0x0f 0x38 0xcc 0x10<br>
+<br>
+# CHECK: sha256msg2 %xmm1, %xmm2<br>
+0x0f 0x38 0xcd 0xd1<br>
+<br>
+# CHECK: sha256msg2 (%rax), %xmm2<br>
+0x0f 0x38 0xcd 0x10<br>
\ No newline at end of file<br>
Index: test/MC/X86/x86_64-encoding.s<br>
===================================================================<br>
--- test/MC/X86/x86_64-encoding.s<br>
+++ test/MC/X86/x86_64-encoding.s<br>
@@ -128,6 +128,50 @@<br>
 // CHECK:   encoding: [0x0f,0x3a,0xcc,0x10,0x01]<br>
 sha1rnds4 $1, (%rax), %xmm2<br>
<br>
+// CHECK: sha1nexte %xmm1, %xmm2<br>
+// CHECK:   encoding: [0x0f,0x38,0xc8,0xd1]<br>
+sha1nexte %xmm1, %xmm2<br>
+<br>
+// CHECK: sha1msg1 %xmm1, %xmm2<br>
+// CHECK:   encoding: [0x0f,0x38,0xc9,0xd1]<br>
+sha1msg1 %xmm1, %xmm2<br>
+<br>
+// CHECK: sha1msg1 (%rax), %xmm2<br>
+// CHECK:   encoding: [0x0f,0x38,0xc9,0x10]<br>
+sha1msg1 (%rax), %xmm2<br>
+<br>
+// CHECK: sha1msg2 %xmm1, %xmm2<br>
+// CHECK:   encoding: [0x0f,0x38,0xca,0xd1]<br>
+sha1msg2 %xmm1, %xmm2<br>
+<br>
+// CHECK: sha1msg2 (%rax), %xmm2<br>
+// CHECK:   encoding: [0x0f,0x38,0xca,0x10]<br>
+sha1msg2 (%rax), %xmm2<br>
+<br>
+// CHECK: sha256rnds2 (%rax), %xmm2<br>
+// CHECK:   encoding: [0x0f,0x38,0xcb,0x10]<br>
+sha256rnds2 (%rax), %xmm2<br>
+<br>
+// CHECK: sha256rnds2 %xmm1, %xmm2<br>
+// CHECK:   encoding: [0x0f,0x38,0xcb,0xd1]<br>
+sha256rnds2 %xmm1, %xmm2<br>
+<br>
+// CHECK: sha256msg1 %xmm1, %xmm2<br>
+// CHECK:   encoding: [0x0f,0x38,0xcc,0xd1]<br>
+sha256msg1 %xmm1, %xmm2<br>
+<br>
+// CHECK: sha256msg1 (%rax), %xmm2<br>
+// CHECK:   encoding: [0x0f,0x38,0xcc,0x10]<br>
+sha256msg1 (%rax), %xmm2<br>
+<br>
+// CHECK: sha256msg2 %xmm1, %xmm2<br>
+// CHECK:   encoding: [0x0f,0x38,0xcd,0xd1]<br>
+sha256msg2 %xmm1, %xmm2<br>
+<br>
+// CHECK: sha256msg2 (%rax), %xmm2<br>
+// CHECK:   encoding: [0x0f,0x38,0xcd,0x10]<br>
+sha256msg2 (%rax), %xmm2<br>
+<br>
 // CHECK: movq  57005(,%riz), %rbx<br>
 // CHECK: encoding: [0x48,0x8b,0x1c,0x25,0xad,0xde,0x00,0x00]<br>
           movq  57005(,%riz), %rbx<br>
</blockquote></div><br><br clear="all"><div><br></div>-- <br>~Craig
</div>