aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAnders Carlsson <andersca@mac.com>2007-12-11 03:09:22 +0000
committerAnders Carlsson <andersca@mac.com>2007-12-11 03:09:22 +0000
commitdb832305d35a7c9ef08bbafcf79d8da162af3374 (patch)
treef041746e9c983adc4c86776a98134d450ac21c18
parentafedd225ffcbe39aee080ef7b7245d26dbb0ce58 (diff)
Generate more builtins.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@44841 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r--CodeGen/CGBuiltin.cpp33
1 files changed, 33 insertions, 0 deletions
diff --git a/CodeGen/CGBuiltin.cpp b/CodeGen/CGBuiltin.cpp
index 8cbdce5318..8f079102db 100644
--- a/CodeGen/CGBuiltin.cpp
+++ b/CodeGen/CGBuiltin.cpp
@@ -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 =