Generate code for some more intrinsics.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@44839 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/CodeGen/CGBuiltin.cpp b/CodeGen/CGBuiltin.cpp
index 875e56e..8cbdce5 100644
--- a/CodeGen/CGBuiltin.cpp
+++ b/CodeGen/CGBuiltin.cpp
@@ -204,6 +204,44 @@
     return Builder.CreateMul(EmitScalarExpr(E->getArg(0)),
                              EmitScalarExpr(E->getArg(1)),
                              "mulps");
+  case X86::BI__builtin_ia32_pand:
+    return Builder.CreateAnd(EmitScalarExpr(E->getArg(0)),
+                             EmitScalarExpr(E->getArg(1)),
+                             "pand");
+  case X86::BI__builtin_ia32_por:
+    return Builder.CreateAnd(EmitScalarExpr(E->getArg(0)),
+                             EmitScalarExpr(E->getArg(1)),
+                             "por");
+  case X86::BI__builtin_ia32_pxor:
+    return Builder.CreateAnd(EmitScalarExpr(E->getArg(0)),
+                             EmitScalarExpr(E->getArg(1)),
+                             "pxor");
+  case X86::BI__builtin_ia32_pandn:
+    llvm::Value *V1 = Builder.CreateNot(EmitScalarExpr(E->getArg(0)), "tmp");
+    return Builder.CreateAnd(V1, EmitScalarExpr(E->getArg(1)), "pandn");
+  case X86::BI__builtin_ia32_paddb:
+  case X86::BI__builtin_ia32_paddd:
+  case X86::BI__builtin_ia32_paddq:
+  case X86::BI__builtin_ia32_paddw:
+    return Builder.CreateAdd(EmitScalarExpr(E->getArg(0)),
+                             EmitScalarExpr(E->getArg(1)), "padd");
+  case X86::BI__builtin_ia32_psubb:
+  case X86::BI__builtin_ia32_psubd:
+  case X86::BI__builtin_ia32_psubq:
+  case X86::BI__builtin_ia32_psubw:
+    return Builder.CreateSub(EmitScalarExpr(E->getArg(0)),
+                             EmitScalarExpr(E->getArg(1)), "psub");
+  case X86::BI__builtin_ia32_pshufd: {
+    llvm::Value *V = EmitScalarExpr(E->getArg(0));
+    llvm::ConstantInt *I = 
+      cast<llvm::ConstantInt>(EmitScalarExpr(E->getArg(1)));
+    int i = I->getZExtValue();
+    
+    return EmitShuffleVector(V, V, 
+                             i & 0x3, (i & 0xc) >> 2,
+                             (i & 0x30) >> 4, (i & 0xc0) >> 6,
+                             "pshufd");
+  }
   }
 }