From a0879b97593067e436bf5c5a3860c3da697a3148 Mon Sep 17 00:00:00 2001 From: arphaman Date: Sun, 8 Sep 2013 10:35:33 +0100 Subject: complex functions now return the result in a pointer parameter --- include/Numerical/Complex.h | 54 ++++++++++++++++---------- lib/Numerical/Complex.cpp | 94 ++++++++++++++++++++++++++------------------- 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 generic(float Re, float Im) { return complex(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(pow(generic(Re, Im), power))); +LIBFLANG_ABI void libflang_cpowif(float Re, float Im, + int32_t power, + Complex4 *Result) { + *Result = cmplx(complex(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))); } -- cgit v1.2.1