1
2typedef float F32;
3typedef double F64;
4typedef float *__restrict__ pRF32;
5typedef double *__restrict__ pRF64;
6
7extern float fabsf (float);
8extern double fabs (double);
9
10#define DEF3a(fname, type, op) \
11			 void  fname##_##type (pR##type a,   \
12					       pR##type b,   \
13					       pR##type c)   \
14			 {				     \
15			   int i;			     \
16			   for (i = 0; i < 16; i++)	     \
17			     a[i] = op (b[i] - c[i]);	     \
18			 }
19
20#define DEF3(fname, type, op) \
21			void  fname##_##type (pR##type a,   \
22					      pR##type b,   \
23					      pR##type c)   \
24			{				    \
25			  int i; 			    \
26			  for (i = 0; i < 16; i++)	    \
27			    a[i] = b[i] op c[i];	    \
28			}
29
30#define DEF2(fname, type, op) \
31			void fname##_##type (pR##type a, \
32					     pR##type b) \
33			{				  \
34			  int i; 			  \
35			  for (i = 0; i < 16; i++)	  \
36			    a[i] = op(b[i]);		  \
37			}
38
39
40#define DEFN3a(fname, op) \
41		 DEF3a (fname, F32, op) \
42		 DEF3a (fname, F64, op)
43
44#define DEFN3(fname, op) \
45		DEF3 (fname, F32, op) \
46		DEF3 (fname, F64, op)
47
48#define DEFN2(fname, op) \
49		DEF2 (fname, F32, op) \
50		DEF2 (fname, F64, op)
51
52DEFN3 (add, +)
53DEFN3 (sub, -)
54DEFN3 (mul, *)
55DEFN3 (div, /)
56DEFN2 (neg, -)
57DEF2 (abs, F32, fabsf)
58DEF2 (abs, F64, fabs)
59DEF3a (fabd, F32, fabsf)
60DEF3a (fabd, F64, fabs)
61