From: Tanner Gooding Date: Sat, 9 Dec 2017 17:53:51 +0000 (-0800) Subject: Adding support for Acosh, Asinh, Atanh, and Cbrt to Math and MathF X-Git-Tag: accepted/tizen/base/20180629.140029~332^2~3 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=ecf4dc8e206b9e2aa16bed35e63eb6ea3133c19d;p=platform%2Fupstream%2Fcoreclr.git Adding support for Acosh, Asinh, Atanh, and Cbrt to Math and MathF --- diff --git a/src/classlibnative/float/floatdouble.cpp b/src/classlibnative/float/floatdouble.cpp index f554082..5911901 100644 --- a/src/classlibnative/float/floatdouble.cpp +++ b/src/classlibnative/float/floatdouble.cpp @@ -60,6 +60,15 @@ FCIMPL1_V(double, COMDouble::Acos, double x) return (double)acos(x); FCIMPLEND +/*=====================================Acosh==================================== +** +==============================================================================*/ +FCIMPL1_V(double, COMDouble::Acosh, double x) + FCALL_CONTRACT; + + return (double)acosh(x); +FCIMPLEND + /*=====================================Asin===================================== ** ==============================================================================*/ @@ -69,6 +78,15 @@ FCIMPL1_V(double, COMDouble::Asin, double x) return (double)asin(x); FCIMPLEND +/*=====================================Asinh==================================== +** +==============================================================================*/ +FCIMPL1_V(double, COMDouble::Asinh, double x) + FCALL_CONTRACT; + + return (double)asinh(x); +FCIMPLEND + /*=====================================Atan===================================== ** ==============================================================================*/ @@ -78,6 +96,15 @@ FCIMPL1_V(double, COMDouble::Atan, double x) return (double)atan(x); FCIMPLEND +/*=====================================Atanh==================================== +** +==============================================================================*/ +FCIMPL1_V(double, COMDouble::Atanh, double x) + FCALL_CONTRACT; + + return (double)atanh(x); +FCIMPLEND + /*=====================================Atan2==================================== ** ==============================================================================*/ @@ -87,6 +114,15 @@ FCIMPL2_VV(double, COMDouble::Atan2, double y, double x) return (double)atan2(y, x); FCIMPLEND +/*====================================Cbrt====================================== +** +==============================================================================*/ +FCIMPL1_V(double, COMDouble::Cbrt, double x) + FCALL_CONTRACT; + + return (double)cbrt(x); +FCIMPLEND + /*====================================Ceil====================================== ** ==============================================================================*/ diff --git a/src/classlibnative/float/floatsingle.cpp b/src/classlibnative/float/floatsingle.cpp index b561747..0be1ad7 100644 --- a/src/classlibnative/float/floatsingle.cpp +++ b/src/classlibnative/float/floatsingle.cpp @@ -58,6 +58,15 @@ FCIMPL1_V(float, COMSingle::Acos, float x) return (float)acosf(x); FCIMPLEND +/*=====================================Acosh==================================== +** +==============================================================================*/ +FCIMPL1_V(float, COMSingle::Acosh, float x) + FCALL_CONTRACT; + + return (float)acoshf(x); +FCIMPLEND + /*=====================================Asin===================================== ** ==============================================================================*/ @@ -67,6 +76,15 @@ FCIMPL1_V(float, COMSingle::Asin, float x) return (float)asinf(x); FCIMPLEND +/*=====================================Asinh==================================== +** +==============================================================================*/ +FCIMPL1_V(float, COMSingle::Asinh, float x) + FCALL_CONTRACT; + + return (float)asinhf(x); +FCIMPLEND + /*=====================================Atan===================================== ** ==============================================================================*/ @@ -76,6 +94,15 @@ FCIMPL1_V(float, COMSingle::Atan, float x) return (float)atanf(x); FCIMPLEND +/*=====================================Atanh==================================== +** +==============================================================================*/ +FCIMPL1_V(float, COMSingle::Atanh, float x) + FCALL_CONTRACT; + + return (float)atanhf(x); +FCIMPLEND + /*=====================================Atan2==================================== ** ==============================================================================*/ @@ -85,6 +112,15 @@ FCIMPL2_VV(float, COMSingle::Atan2, float y, float x) return (float)atan2f(y, x); FCIMPLEND +/*====================================Cbrt====================================== +** +==============================================================================*/ +FCIMPL1_V(float, COMSingle::Cbrt, float x) + FCALL_CONTRACT; + + return (float)cbrtf(x); +FCIMPLEND + /*====================================Ceil====================================== ** ==============================================================================*/ diff --git a/src/classlibnative/inc/floatdouble.h b/src/classlibnative/inc/floatdouble.h index f7412a2..d2c819f 100644 --- a/src/classlibnative/inc/floatdouble.h +++ b/src/classlibnative/inc/floatdouble.h @@ -12,9 +12,13 @@ class COMDouble { public: FCDECL1_V(static double, Abs, double x); FCDECL1_V(static double, Acos, double x); + FCDECL1_V(static double, Acosh, double x); FCDECL1_V(static double, Asin, double x); + FCDECL1_V(static double, Asinh, double x); FCDECL1_V(static double, Atan, double x); + FCDECL1_V(static double, Atanh, double x); FCDECL2_VV(static double, Atan2, double y, double x); + FCDECL1_V(static double, Cbrt, double x); FCDECL1_V(static double, Ceil, double x); FCDECL1_V(static double, Cos, double x); FCDECL1_V(static double, Cosh, double x); diff --git a/src/classlibnative/inc/floatsingle.h b/src/classlibnative/inc/floatsingle.h index 0124768..a4f9cb7 100644 --- a/src/classlibnative/inc/floatsingle.h +++ b/src/classlibnative/inc/floatsingle.h @@ -12,9 +12,13 @@ class COMSingle { public: FCDECL1_V(static float, Abs, float x); FCDECL1_V(static float, Acos, float x); + FCDECL1_V(static float, Acosh, float x); FCDECL1_V(static float, Asin, float x); + FCDECL1_V(static float, Asinh, float x); FCDECL1_V(static float, Atan, float x); + FCDECL1_V(static float, Atanh, float x); FCDECL2_VV(static float, Atan2, float y, float x); + FCDECL1_V(static float, Cbrt, float x); FCDECL1_V(static float, Ceil, float x); FCDECL1_V(static float, Cos, float x); FCDECL1_V(static float, Cosh, float x); diff --git a/src/mscorlib/src/System/Math.CoreCLR.cs b/src/mscorlib/src/System/Math.CoreCLR.cs index 92eb5cf..e4c85f9 100644 --- a/src/mscorlib/src/System/Math.CoreCLR.cs +++ b/src/mscorlib/src/System/Math.CoreCLR.cs @@ -27,17 +27,29 @@ namespace System [MethodImpl(MethodImplOptions.InternalCall)] public static extern double Acos(double d); - + + [MethodImpl(MethodImplOptions.InternalCall)] + public static extern double Acosh(double d); + [MethodImpl(MethodImplOptions.InternalCall)] public static extern double Asin(double d); - + + [MethodImpl(MethodImplOptions.InternalCall)] + public static extern double Asinh(double d); + [MethodImpl(MethodImplOptions.InternalCall)] public static extern double Atan(double d); - + [MethodImpl(MethodImplOptions.InternalCall)] public static extern double Atan2(double y, double x); [MethodImpl(MethodImplOptions.InternalCall)] + public static extern double Atanh(double d); + + [MethodImpl(MethodImplOptions.InternalCall)] + public static extern double Cbrt(double d); + + [MethodImpl(MethodImplOptions.InternalCall)] public static extern double Ceiling(double a); [MethodImpl(MethodImplOptions.InternalCall)] diff --git a/src/mscorlib/src/System/MathF.CoreCLR.cs b/src/mscorlib/src/System/MathF.CoreCLR.cs index 0e4dcee..1abc040 100644 --- a/src/mscorlib/src/System/MathF.CoreCLR.cs +++ b/src/mscorlib/src/System/MathF.CoreCLR.cs @@ -20,15 +20,27 @@ namespace System public static extern float Acos(float x); [MethodImpl(MethodImplOptions.InternalCall)] + public static extern float Acosh(float x); + + [MethodImpl(MethodImplOptions.InternalCall)] public static extern float Asin(float x); [MethodImpl(MethodImplOptions.InternalCall)] + public static extern float Asinh(float x); + + [MethodImpl(MethodImplOptions.InternalCall)] public static extern float Atan(float x); [MethodImpl(MethodImplOptions.InternalCall)] public static extern float Atan2(float y, float x); [MethodImpl(MethodImplOptions.InternalCall)] + public static extern float Atanh(float x); + + [MethodImpl(MethodImplOptions.InternalCall)] + public static extern float Cbrt(float x); + + [MethodImpl(MethodImplOptions.InternalCall)] public static extern float Ceiling(float x); [MethodImpl(MethodImplOptions.InternalCall)] diff --git a/src/vm/ecalllist.h b/src/vm/ecalllist.h index 441796f..7e850f9 100644 --- a/src/vm/ecalllist.h +++ b/src/vm/ecalllist.h @@ -624,9 +624,13 @@ FCFuncStart(gMathFuncs) FCIntrinsicSig("Abs", &gsig_SM_Dbl_RetDbl, COMDouble::Abs, CORINFO_INTRINSIC_Abs) FCIntrinsicSig("Abs", &gsig_SM_Flt_RetFlt, COMSingle::Abs, CORINFO_INTRINSIC_Abs) FCIntrinsic("Acos", COMDouble::Acos, CORINFO_INTRINSIC_Acos) + FCFuncElement("Acosh", COMDouble::Acosh) FCIntrinsic("Asin", COMDouble::Asin, CORINFO_INTRINSIC_Asin) + FCFuncElement("Asinh", COMDouble::Asinh) FCIntrinsic("Atan", COMDouble::Atan, CORINFO_INTRINSIC_Atan) + FCFuncElement("Atanh", COMDouble::Atanh) FCIntrinsic("Atan2", COMDouble::Atan2, CORINFO_INTRINSIC_Atan2) + FCFuncElement("Cbrt", COMDouble::Cbrt) FCIntrinsic("Ceiling", COMDouble::Ceil, CORINFO_INTRINSIC_Ceiling) FCIntrinsic("Cos", COMDouble::Cos, CORINFO_INTRINSIC_Cos) FCIntrinsic("Cosh", COMDouble::Cosh, CORINFO_INTRINSIC_Cosh) @@ -646,9 +650,13 @@ FCFuncEnd() FCFuncStart(gMathFFuncs) FCIntrinsic("Acos", COMSingle::Acos, CORINFO_INTRINSIC_Acos) + FCFuncElement("Acosh", COMSingle::Acosh) FCIntrinsic("Asin", COMSingle::Asin, CORINFO_INTRINSIC_Asin) + FCFuncElement("Asinh", COMSingle::Asinh) FCIntrinsic("Atan", COMSingle::Atan, CORINFO_INTRINSIC_Atan) + FCFuncElement("Atanh", COMSingle::Atanh) FCIntrinsic("Atan2", COMSingle::Atan2, CORINFO_INTRINSIC_Atan2) + FCFuncElement("Cbrt", COMSingle::Cbrt) FCIntrinsic("Ceiling", COMSingle::Ceil, CORINFO_INTRINSIC_Ceiling) FCIntrinsic("Cos", COMSingle::Cos, CORINFO_INTRINSIC_Cos) FCIntrinsic("Cosh", COMSingle::Cosh, CORINFO_INTRINSIC_Cosh)