]> granicus.if.org Git - clang/commitdiff
Generate more builtins.
authorAnders Carlsson <andersca@mac.com>
Tue, 11 Dec 2007 03:09:22 +0000 (03:09 +0000)
committerAnders Carlsson <andersca@mac.com>
Tue, 11 Dec 2007 03:09:22 +0000 (03:09 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@44841 91177308-0d34-0410-b5e6-96231b3b80d8

CodeGen/CGBuiltin.cpp

index 8cbdce531882880ced147e086c3cd6c93daa1f37..8f079102dbd306d6514ec5b55216a51e1939ce39 100644 (file)
@@ -231,6 +231,39 @@ llvm::Value *CodeGenFunction::EmitX86BuiltinExpr(unsigned BuiltinID,
   case X86::BI__builtin_ia32_psubw:
     return Builder.CreateSub(EmitScalarExpr(E->getArg(0)),
                              EmitScalarExpr(E->getArg(1)), "psub");
+  case X86::BI__builtin_ia32_pmullw:
+    return Builder.CreateMul(EmitScalarExpr(E->getArg(0)),
+                             EmitScalarExpr(E->getArg(1)), "pmul");
+  case X86::BI__builtin_ia32_punpckhbw:
+    return EmitShuffleVector(EmitScalarExpr(E->getArg(0)),
+                             EmitScalarExpr(E->getArg(1)),
+                             4, 12, 5, 13, 6, 14, 7, 15,
+                             "punpckhbw");
+  case X86::BI__builtin_ia32_punpckhwd:
+    return EmitShuffleVector(EmitScalarExpr(E->getArg(0)),
+                             EmitScalarExpr(E->getArg(1)),
+                             2, 6, 3, 7,
+                             "punpckhwd");
+  case X86::BI__builtin_ia32_punpckhdq:
+    return EmitShuffleVector(EmitScalarExpr(E->getArg(0)),
+                             EmitScalarExpr(E->getArg(1)),
+                             1, 3,
+                             "punpckhdq");
+  case X86::BI__builtin_ia32_punpcklbw:
+    return EmitShuffleVector(EmitScalarExpr(E->getArg(0)),
+                             EmitScalarExpr(E->getArg(1)),
+                             0, 8, 1, 9, 2, 10, 3, 11,
+                             "punpcklbw");
+  case X86::BI__builtin_ia32_punpcklwd:
+    return EmitShuffleVector(EmitScalarExpr(E->getArg(0)),
+                             EmitScalarExpr(E->getArg(1)),
+                             0, 4, 1, 5,
+                             "punpcklwd");
+  case X86::BI__builtin_ia32_punpckldq:
+    return EmitShuffleVector(EmitScalarExpr(E->getArg(0)),
+                             EmitScalarExpr(E->getArg(1)),
+                             0, 2,
+                             "punpckldq");
   case X86::BI__builtin_ia32_pshufd: {
     llvm::Value *V = EmitScalarExpr(E->getArg(0));
     llvm::ConstantInt *I =