summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorarphaman <arphaman@gmail.com>2013-09-08 10:35:33 +0100
committerarphaman <arphaman@gmail.com>2013-09-08 10:35:33 +0100
commita0879b97593067e436bf5c5a3860c3da697a3148 (patch)
tree0ef8aa134cdaca8930ae5a7648df8bd1c50cf61b
parent30ba27aadb6f3dc9f51c3f5fb6dae56b2aabfbf1 (diff)
downloadlibflangrt-a0879b97593067e436bf5c5a3860c3da697a3148.tar.gz
complex functions now return the result in a pointer parameter
-rw-r--r--include/Numerical/Complex.h54
-rw-r--r--lib/Numerical/Complex.cpp94
2 files changed, 89 insertions, 59 deletions
diff --git a/include/Numerical/Complex.h b/include/Numerical/Complex.h
index 2706bd2..7af43a5 100644
--- a/include/Numerical/Complex.h
+++ b/include/Numerical/Complex.h
@@ -20,37 +20,51 @@ struct Complex8 {
double Re, Im;
};
-LIBFLANG_ABI Complex8 libflang_cpow(double LHSRe, double LHSIm,
- double RHSRe, double RHSIm);
-LIBFLANG_ABI Complex4 libflang_cpowf(float LHSRe, float LHSIm,
- float RHSRe, float RHSIm);
+LIBFLANG_ABI void libflang_cpow(double LHSRe, double LHSIm,
+ double RHSRe, double RHSIm,
+ Complex8 *Result);
+LIBFLANG_ABI void libflang_cpowf(float LHSRe, float LHSIm,
+ float RHSRe, float RHSIm,
+ Complex4 *Result);
-LIBFLANG_ABI Complex8 libflang_cpowi(double Re, double Im,
- int32_t power);
-LIBFLANG_ABI Complex4 libflang_cpowif(float Re, float Im,
- int32_t power);
+LIBFLANG_ABI void libflang_cpowi(double Re, double Im,
+ int32_t power, Complex8 *Result);
+LIBFLANG_ABI void libflang_cpowif(float Re, float Im,
+ int32_t power, Complex4 *Result);
// intrinsics
LIBFLANG_ABI double libflang_cabs(double Re, double Im);
LIBFLANG_ABI float libflang_cabsf(float Re, float Im);
-LIBFLANG_ABI Complex8 libflang_csqrt(double Re, double Im);
-LIBFLANG_ABI Complex4 libflang_csqrtf(float Re, float Im);
+LIBFLANG_ABI void libflang_csqrt(double Re, double Im,
+ Complex8 *Result);
+LIBFLANG_ABI void libflang_csqrtf(float Re, float Im,
+ Complex4 *Result);
-LIBFLANG_ABI Complex8 libflang_cexp(double Re, double Im);
-LIBFLANG_ABI Complex4 libflang_cexpf(float Re, float Im);
+LIBFLANG_ABI void libflang_cexp(double Re, double Im,
+ Complex8 *Result);
+LIBFLANG_ABI void libflang_cexpf(float Re, float Im,
+ Complex4 *Result);
-LIBFLANG_ABI Complex8 libflang_clog(double Re, double Im);
-LIBFLANG_ABI Complex4 libflang_clogf(float Re, float Im);
+LIBFLANG_ABI void libflang_clog(double Re, double Im,
+ Complex8 *Result);
+LIBFLANG_ABI void libflang_clogf(float Re, float Im,
+ Complex4 *Result);
-LIBFLANG_ABI Complex8 libflang_csin(double Re, double Im);
-LIBFLANG_ABI Complex4 libflang_csinf(float Re, float Im);
+LIBFLANG_ABI void libflang_csin(double Re, double Im,
+ Complex8 *Result);
+LIBFLANG_ABI void libflang_csinf(float Re, float Im,
+ Complex4 *Result);
-LIBFLANG_ABI Complex8 libflang_ccos(double Re, double Im);
-LIBFLANG_ABI Complex4 libflang_ccosf(float Re, float Im);
+LIBFLANG_ABI void libflang_ccos(double Re, double Im,
+ Complex8 *Result);
+LIBFLANG_ABI void libflang_ccosf(float Re, float Im,
+ Complex4 *Result);
-LIBFLANG_ABI Complex8 libflang_ctan(double Re, double Im);
-LIBFLANG_ABI Complex4 libflang_ctanf(float Re, float Im);
+LIBFLANG_ABI void libflang_ctan(double Re, double Im,
+ Complex8 *Result);
+LIBFLANG_ABI void libflang_ctanf(float Re, float Im,
+ Complex4 *Result);
#endif
diff --git a/lib/Numerical/Complex.cpp b/lib/Numerical/Complex.cpp
index ccc9dc6..af7179f 100644
--- a/lib/Numerical/Complex.cpp
+++ b/lib/Numerical/Complex.cpp
@@ -21,24 +21,28 @@ static inline complex<float> generic(float Re, float Im) {
return complex<float>(Re, Im);
}
-LIBFLANG_ABI Complex8 libflang_cpow(double LHSRe, double LHSIm,
- double RHSRe, double RHSIm) {
- return cmplx(pow(generic(LHSRe, LHSIm),
- generic(RHSRe, RHSIm)));
-}
-LIBFLANG_ABI Complex4 libflang_cpowf(float LHSRe, float LHSIm,
- float RHSRe, float RHSIm) {
- return cmplx(pow(generic(LHSRe, LHSIm),
- generic(RHSRe, RHSIm)));
+LIBFLANG_ABI void libflang_cpow(double LHSRe, double LHSIm,
+ double RHSRe, double RHSIm,
+ Complex8 *Result) {
+ *Result = cmplx(pow(generic(LHSRe, LHSIm),
+ generic(RHSRe, RHSIm)));
+}
+LIBFLANG_ABI void libflang_cpowf(float LHSRe, float LHSIm,
+ float RHSRe, float RHSIm,
+ Complex4 *Result) {
+ *Result = cmplx(pow(generic(LHSRe, LHSIm),
+ generic(RHSRe, RHSIm)));
}
-LIBFLANG_ABI Complex8 libflang_cpowi(double Re, double Im,
- int32_t power) {
- return cmplx(pow(generic(Re, Im), power));
+LIBFLANG_ABI void libflang_cpowi(double Re, double Im,
+ int32_t power,
+ Complex8 *Result) {
+ *Result = cmplx(pow(generic(Re, Im), power));
}
-LIBFLANG_ABI Complex4 libflang_cpowif(float Re, float Im,
- int32_t power) {
- return cmplx(complex<float>(pow(generic(Re, Im), power)));
+LIBFLANG_ABI void libflang_cpowif(float Re, float Im,
+ int32_t power,
+ Complex4 *Result) {
+ *Result = cmplx(complex<float>(pow(generic(Re, Im), power)));
}
// intrinsics
@@ -50,44 +54,56 @@ LIBFLANG_ABI float libflang_cabsf(float Re, float Im) {
return abs(generic(Re, Im));
}
-LIBFLANG_ABI Complex8 libflang_csqrt(double Re, double Im) {
- return cmplx(sqrt(generic(Re, Im)));
+LIBFLANG_ABI void libflang_csqrt(double Re, double Im,
+ Complex8 *Result) {
+ *Result = cmplx(sqrt(generic(Re, Im)));
}
-LIBFLANG_ABI Complex4 libflang_csqrtf(float Re, float Im) {
- return cmplx(sqrt(generic(Re, Im)));
+LIBFLANG_ABI void libflang_csqrtf(float Re, float Im,
+ Complex4 *Result) {
+ *Result = cmplx(sqrt(generic(Re, Im)));
}
-LIBFLANG_ABI Complex8 libflang_cexp(double Re, double Im) {
- return cmplx(exp(generic(Re, Im)));
+LIBFLANG_ABI void libflang_cexp(double Re, double Im,
+ Complex8 *Result) {
+ *Result = cmplx(exp(generic(Re, Im)));
}
-LIBFLANG_ABI Complex4 libflang_cexpf(float Re, float Im) {
- return cmplx(exp(generic(Re, Im)));
+LIBFLANG_ABI void libflang_cexpf(float Re, float Im,
+ Complex4 *Result) {
+ *Result = cmplx(exp(generic(Re, Im)));
}
-LIBFLANG_ABI Complex8 libflang_clog(double Re, double Im) {
- return cmplx(log(generic(Re, Im)));
+LIBFLANG_ABI void libflang_clog(double Re, double Im,
+ Complex8 *Result) {
+ *Result = cmplx(log(generic(Re, Im)));
}
-LIBFLANG_ABI Complex4 libflang_clogf(float Re, float Im) {
- return cmplx(log(generic(Re, Im)));
+LIBFLANG_ABI void libflang_clogf(float Re, float Im,
+ Complex4 *Result) {
+ *Result = cmplx(log(generic(Re, Im)));
}
-LIBFLANG_ABI Complex8 libflang_csin(double Re, double Im) {
- return cmplx(sin(generic(Re, Im)));
+LIBFLANG_ABI void libflang_csin(double Re, double Im,
+ Complex8 *Result) {
+ *Result = cmplx(sin(generic(Re, Im)));
}
-LIBFLANG_ABI Complex4 libflang_csinf(float Re, float Im) {
- return cmplx(sin(generic(Re, Im)));
+LIBFLANG_ABI void libflang_csinf(float Re, float Im,
+ Complex4 *Result) {
+ *Result = cmplx(sin(generic(Re, Im)));
}
-LIBFLANG_ABI Complex8 libflang_ccos(double Re, double Im) {
- return cmplx(cos(generic(Re, Im)));
+LIBFLANG_ABI void libflang_ccos(double Re, double Im,
+ Complex8 *Result) {
+ *Result = cmplx(cos(generic(Re, Im)));
}
-LIBFLANG_ABI Complex4 libflang_ccosf(float Re, float Im) {
- return cmplx(cos(generic(Re, Im)));
+LIBFLANG_ABI void libflang_ccosf(float Re, float Im,
+ Complex4 *Result) {
+ *Result = cmplx(cos(generic(Re, Im)));
}
-LIBFLANG_ABI Complex8 libflang_ctan(double Re, double Im) {
- return cmplx(tan(generic(Re, Im)));
+LIBFLANG_ABI void libflang_ctan(double Re, double Im,
+ Complex8 *Result) {
+ *Result = cmplx(tan(generic(Re, Im)));
}
-LIBFLANG_ABI Complex4 libflang_ctanf(float Re, float Im) {
- return cmplx(tan(generic(Re, Im)));
+LIBFLANG_ABI void libflang_ctanf(float Re, float Im,
+ Complex4 *Result) {
+ *Result = cmplx(tan(generic(Re, Im)));
}