summaryrefslogtreecommitdiffstats
path: root/clang/lib/CodeGen/CGBuiltin.cpp
diff options
context:
space:
mode:
authorNemanja Ivanovic <nemanja.i.ibm@gmail.com>2015-03-04 21:48:22 +0000
committerNemanja Ivanovic <nemanja.i.ibm@gmail.com>2015-03-04 21:48:22 +0000
commit55e757db4a53ff13195e97b271fff691a43b1ddc (patch)
treec64b4d56e226c7db220ac4da81c12caff6767609 /clang/lib/CodeGen/CGBuiltin.cpp
parent77a4da19914c84e07a82dc22bbbf28540f90ca31 (diff)
downloadbcm5719-llvm-55e757db4a53ff13195e97b271fff691a43b1ddc.tar.gz
bcm5719-llvm-55e757db4a53ff13195e97b271fff691a43b1ddc.zip
Add Clang support for PPC cryptography builtins
Review: http://reviews.llvm.org/D7951 llvm-svn: 231291
Diffstat (limited to 'clang/lib/CodeGen/CGBuiltin.cpp')
-rw-r--r--clang/lib/CodeGen/CGBuiltin.cpp29
1 files changed, 29 insertions, 0 deletions
diff --git a/clang/lib/CodeGen/CGBuiltin.cpp b/clang/lib/CodeGen/CGBuiltin.cpp
index 014ea9d9392..eae5f02edbd 100644
--- a/clang/lib/CodeGen/CGBuiltin.cpp
+++ b/clang/lib/CodeGen/CGBuiltin.cpp
@@ -6349,6 +6349,35 @@ Value *CodeGenFunction::EmitPPCBuiltinExpr(unsigned BuiltinID,
llvm::Function *F = CGM.getIntrinsic(ID);
return Builder.CreateCall(F, Ops, "");
}
+ // P8 Crypto builtins
+ case PPC::BI__builtin_altivec_crypto_vshasigmaw:
+ case PPC::BI__builtin_altivec_crypto_vshasigmad:
+ {
+ ConstantInt *CI1 = dyn_cast<ConstantInt>(Ops[1]);
+ ConstantInt *CI2 = dyn_cast<ConstantInt>(Ops[2]);
+ assert(CI1 && CI2);
+ if (CI1->getZExtValue() > 1) {
+ CGM.Error(E->getArg(1)->getExprLoc(),
+ "argument out of range (should be 0-1).");
+ return llvm::UndefValue::get(Ops[0]->getType());
+ }
+ if (CI2->getZExtValue() > 15) {
+ CGM.Error(E->getArg(2)->getExprLoc(),
+ "argument out of range (should be 0-15).");
+ return llvm::UndefValue::get(Ops[0]->getType());
+ }
+ switch (BuiltinID) {
+ default: llvm_unreachable("Unsupported sigma intrinsic!");
+ case PPC::BI__builtin_altivec_crypto_vshasigmaw:
+ ID = Intrinsic::ppc_altivec_crypto_vshasigmaw;
+ break;
+ case PPC::BI__builtin_altivec_crypto_vshasigmad:
+ ID = Intrinsic::ppc_altivec_crypto_vshasigmad;
+ break;
+ }
+ llvm::Function *F = CGM.getIntrinsic(ID);
+ return Builder.CreateCall(F, Ops, "");
+ }
}
}
OpenPOWER on IntegriCloud