]> granicus.if.org Git - clang/commitdiff
complex long double support for PowerPC
authorJoerg Sonnenberger <joerg@bec.de>
Fri, 17 Oct 2014 11:51:19 +0000 (11:51 +0000)
committerJoerg Sonnenberger <joerg@bec.de>
Fri, 17 Oct 2014 11:51:19 +0000 (11:51 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@220034 91177308-0d34-0410-b5e6-96231b3b80d8

lib/CodeGen/CGExprComplex.cpp
test/CodeGen/complex-math.c

index 271c9bc5d44e1e9888a13b44a9e5dfebe32e28af..b1cc1efa58e5904add3ea947c8882a2e6b56f802 100644 (file)
@@ -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);
       }
index 27540c78f77e4d8c491b6d8a10c3af71fdbd2d81..2bdf02b7199802679ce177af0c85d444a1556e2d 100644 (file)
@@ -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;
 }