@@ -11,76 +11,97 @@ module mir.math.common;
1111
1212public import mir.internal.utility: fastmath;
1313
14- version (D_Ddoc )
14+ version (LDC )
1515{
16+ nothrow @nogc pure @safe :
17+
18+ pragma (LDC_intrinsic, " llvm.sqrt.f#" )
1619 // /
17- T sqrt (T)(in T x);
20+ T sqrt (T)(in T val);
21+
22+ pragma (LDC_intrinsic, " llvm.sin.f#" )
1823 // /
19- T sin (T)(in T x);
24+ T sin (T)(in T val);
25+
26+ pragma (LDC_intrinsic, " llvm.cos.f#" )
2027 // /
21- T cos (T)(in T x);
28+ T cos (T)(in T val);
29+
30+ pragma (LDC_intrinsic, " llvm.powi.f#" )
31+ // /
32+ T powi (T)(in T val, int power);
33+
34+ pragma (LDC_intrinsic, " llvm.pow.f#" )
2235 // /
23- T pow (T)(in T x, in T power);
36+ T pow (T)(in T val, in T power);
37+
38+ pragma (LDC_intrinsic, " llvm.exp.f#" )
2439 // /
25- T powi (T)(in T x, int power);
40+ T exp (T)(in T val);
41+
42+ pragma (LDC_intrinsic, " llvm.log.f#" )
2643 // /
27- T exp (T)(in T x);
44+ T log (T)(in T val);
45+
46+ pragma (LDC_intrinsic, " llvm.fma.f#" )
2847 // /
29- T log (T)(in T x);
48+ T fma (T)(T vala, T valb, T valc);
49+
50+ pragma (LDC_intrinsic, " llvm.fabs.f#" )
3051 // /
31- T fabs (T)(in T x);
52+ T fabs (T)(in T val);
53+
54+ pragma (LDC_intrinsic, " llvm.floor.f#" )
3255 // /
33- T floor (T)(in T x);
56+ T floor (T)(in T val);
57+
58+ pragma (LDC_intrinsic, " llvm.exp2.f#" )
3459 // /
35- T exp2 (T)(in T x);
60+ T exp2 (T)(in T val);
61+
62+ pragma (LDC_intrinsic, " llvm.log10.f#" )
3663 // /
37- T log10 (T)(in T x);
64+ T log10 (T)(in T val);
65+
66+ pragma (LDC_intrinsic, " llvm.log2.f#" )
3867 // /
39- T log2 (T)(in T x);
68+ T log2 (T)(in T val);
69+
70+ pragma (LDC_intrinsic, " llvm.ceil.f#" )
4071 // /
41- T ceil (T)(in T x);
72+ T ceil (T)(in T val);
73+
74+ pragma (LDC_intrinsic, " llvm.trunc.f#" )
4275 // /
43- T trunc (T)(in T x);
76+ T trunc (T)(in T val);
77+
78+ pragma (LDC_intrinsic, " llvm.rint.f#" )
4479 // /
45- T rint (T)(in T x);
80+ T rint (T)(in T val);
81+
82+ pragma (LDC_intrinsic, " llvm.nearbyint.f#" )
4683 // /
47- T nearbyint (T)(in T x);
84+ T nearbyint (T)(in T val);
85+
86+ pragma (LDC_intrinsic, " llvm.copysign.f#" )
4887 // /
4988 T copysign (T)(in T mag, in T sgn);
89+
90+ pragma (LDC_intrinsic, " llvm.round.f#" )
5091 // /
51- T round (T)(in T x);
92+ T round (T)(in T val);
93+
94+ pragma (LDC_intrinsic, " llvm.fmuladd.f#" )
5295 // /
53- T fmuladd (T)(in T a, in T b, in T c);
96+ T fmuladd (T)(in T vala, in T valb, in T valc);
97+
98+ pragma (LDC_intrinsic, " llvm.minnum.f#" )
5499 // /
55- T fmin (T)(in T x, in T y);
100+ T fmin (T)(in T vala, in T valb);
101+
102+ pragma (LDC_intrinsic, " llvm.maxnum.f#" )
56103 // /
57- T fmax (T)(in T x, in T y);
58- }
59- else
60- version (LDC )
61- {
62- import ldc.intrinsics;
63- alias sqrt = llvm_sqrt;
64- alias sin = llvm_sin;
65- alias cos = llvm_cos;
66- alias pow = llvm_pow;
67- alias powi = llvm_powi;
68- alias exp = llvm_exp;
69- alias log = llvm_log;
70- alias fabs = llvm_fabs;
71- alias floor = llvm_floor;
72- alias exp2 = llvm_exp2;
73- alias log10 = llvm_log10;
74- alias log2 = llvm_log2;
75- alias ceil = llvm_ceil;
76- alias trunc = llvm_trunc;
77- alias rint = llvm_rint;
78- alias nearbyint = llvm_nearbyint;
79- alias copysign = llvm_copysign;
80- alias round = llvm_round;
81- alias fmuladd = llvm_fmuladd;
82- alias fmin = llvm_minnum;
83- alias fmax = llvm_maxnum;
104+ T fmax (T)(in T vala, in T valb);
84105}
85106else
86107{
0 commit comments