summaryrefslogtreecommitdiffstats
path: root/clang
diff options
context:
space:
mode:
authorJoerg Sonnenberger <joerg@bec.de>2014-10-17 11:51:19 +0000
committerJoerg Sonnenberger <joerg@bec.de>2014-10-17 11:51:19 +0000
commitaa3e9f5a0f45dd0736c831dfb2607df05dab627c (patch)
tree25286216adb95fc79841b4f938e50c608178bc0c /clang
parent218dad8568570942246cca62660bb8b2b49a8a7d (diff)
downloadbcm5719-llvm-aa3e9f5a0f45dd0736c831dfb2607df05dab627c.tar.gz
bcm5719-llvm-aa3e9f5a0f45dd0736c831dfb2607df05dab627c.zip
complex long double support for PowerPC
llvm-svn: 220034
Diffstat (limited to 'clang')
-rw-r--r--clang/lib/CodeGen/CGExprComplex.cpp4
-rw-r--r--clang/test/CodeGen/complex-math.c13
2 files changed, 17 insertions, 0 deletions
diff --git a/clang/lib/CodeGen/CGExprComplex.cpp b/clang/lib/CodeGen/CGExprComplex.cpp
index 271c9bc5d44..b1cc1efa58e 100644
--- a/clang/lib/CodeGen/CGExprComplex.cpp
+++ b/clang/lib/CodeGen/CGExprComplex.cpp
@@ -615,6 +615,8 @@ ComplexPairTy ComplexExprEmitter::EmitBinMul(const BinOpInfo &Op) {
return EmitComplexBinOpLibCall("__mulsc3", Op);
case llvm::Type::DoubleTyID:
return EmitComplexBinOpLibCall("__muldc3", Op);
+ case llvm::Type::PPC_FP128TyID:
+ return EmitComplexBinOpLibCall("__multc3", Op);
case llvm::Type::X86_FP80TyID:
return EmitComplexBinOpLibCall("__mulxc3", Op);
}
@@ -674,6 +676,8 @@ ComplexPairTy ComplexExprEmitter::EmitBinDiv(const BinOpInfo &Op) {
return EmitComplexBinOpLibCall("__divsc3", LibCallOp);
case llvm::Type::DoubleTyID:
return EmitComplexBinOpLibCall("__divdc3", LibCallOp);
+ case llvm::Type::PPC_FP128TyID:
+ return EmitComplexBinOpLibCall("__divtc3", LibCallOp);
case llvm::Type::X86_FP80TyID:
return EmitComplexBinOpLibCall("__divxc3", LibCallOp);
}
diff --git a/clang/test/CodeGen/complex-math.c b/clang/test/CodeGen/complex-math.c
index 27540c78f77..2bdf02b7199 100644
--- a/clang/test/CodeGen/complex-math.c
+++ b/clang/test/CodeGen/complex-math.c
@@ -1,6 +1,7 @@
// RUN: %clang_cc1 %s -O1 -emit-llvm -triple x86_64-unknown-unknown -o - | FileCheck %s --check-prefix=X86
// RUN: %clang_cc1 %s -O1 -emit-llvm -triple x86_64-pc-win64 -o - | FileCheck %s --check-prefix=X86
// RUN: %clang_cc1 %s -O1 -emit-llvm -triple i686-unknown-unknown -o - | FileCheck %s --check-prefix=X86
+// RUN: %clang_cc1 %s -O1 -emit-llvm -triple powerpc-unknown-unknown -o - | FileCheck %s --check-prefix=PPC
float _Complex add_float_rr(float a, float b) {
// X86-LABEL: @add_float_rr(
@@ -335,6 +336,10 @@ long double _Complex mul_long_double_cc(long double _Complex a, long double _Com
// X86-NOT: fmul
// X86: call {{.*}} @__mulxc3(
// X86: ret
+ // PPC-LABEL: @mul_long_double_cc(
+ // PPC-NOT: fmul
+ // PPC: call {{.*}} @__multc3(
+ // PPC: ret
return a * b;
}
@@ -358,6 +363,10 @@ long double _Complex div_long_double_rc(long double a, long double _Complex b) {
// X86-NOT: fdiv
// X86: call {{.*}} @__divxc3(
// X86: ret
+ // PPC-LABEL: @div_long_double_rc(
+ // PPC-NOT: fdiv
+ // PPC: call {{.*}} @__divtc3(
+ // PPC: ret
return a / b;
}
long double _Complex div_long_double_cc(long double _Complex a, long double _Complex b) {
@@ -365,6 +374,10 @@ long double _Complex div_long_double_cc(long double _Complex a, long double _Com
// X86-NOT: fdiv
// X86: call {{.*}} @__divxc3(
// X86: ret
+ // PPC-LABEL: @div_long_double_cc(
+ // PPC-NOT: fdiv
+ // PPC: call {{.*}} @__divtc3(
+ // PPC: ret
return a / b;
}
OpenPOWER on IntegriCloud