1*c9945492SAndroid Build Coastguard Worker #include <math.h>
2*c9945492SAndroid Build Coastguard Worker
3*c9945492SAndroid Build Coastguard Worker #if __FMA__
4*c9945492SAndroid Build Coastguard Worker
fma(double x,double y,double z)5*c9945492SAndroid Build Coastguard Worker double fma(double x, double y, double z)
6*c9945492SAndroid Build Coastguard Worker {
7*c9945492SAndroid Build Coastguard Worker __asm__ ("vfmadd132sd %1, %2, %0" : "+x" (x) : "x" (y), "x" (z));
8*c9945492SAndroid Build Coastguard Worker return x;
9*c9945492SAndroid Build Coastguard Worker }
10*c9945492SAndroid Build Coastguard Worker
11*c9945492SAndroid Build Coastguard Worker #elif __FMA4__
12*c9945492SAndroid Build Coastguard Worker
fma(double x,double y,double z)13*c9945492SAndroid Build Coastguard Worker double fma(double x, double y, double z)
14*c9945492SAndroid Build Coastguard Worker {
15*c9945492SAndroid Build Coastguard Worker __asm__ ("vfmaddsd %3, %2, %1, %0" : "=x" (x) : "x" (x), "x" (y), "x" (z));
16*c9945492SAndroid Build Coastguard Worker return x;
17*c9945492SAndroid Build Coastguard Worker }
18*c9945492SAndroid Build Coastguard Worker
19*c9945492SAndroid Build Coastguard Worker #else
20*c9945492SAndroid Build Coastguard Worker
21*c9945492SAndroid Build Coastguard Worker #include "../fma.c"
22*c9945492SAndroid Build Coastguard Worker
23*c9945492SAndroid Build Coastguard Worker #endif
24