3 #ifdef FUNCTION_PROFILE
7 void NAME(FLOAT *DA, FLOAT *DB, FLOAT *C, FLOAT *S){
9 #if defined(__i386__) || defined(__x86_64__) || defined(__ia64__) || defined(_M_X64) || defined(_M_IX86)
11 long double da_r = *(DA + 0);
12 long double da_i = *(DA + 1);
13 long double db_r = *(DB + 0);
14 long double db_i = *(DB + 1);
17 long double ada = fabsl(da_r) + fabsl(da_i);
23 FUNCTION_PROFILE_START();
32 long double alpha_r, alpha_i;
34 ada = sqrt(da_r * da_r + da_i * da_i);
36 r = sqrt(da_r * da_r + da_i * da_i + db_r * db_r + db_i * db_i);
42 *(S + 0) = (alpha_r * db_r + alpha_i *db_i) / r;
43 *(S + 1) = (alpha_i * db_r - alpha_r *db_i) / r;
44 *(DA + 0) = alpha_r * r;
45 *(DA + 1) = alpha_i * r;
48 FLOAT da_r = *(DA + 0);
49 FLOAT da_i = *(DA + 1);
50 FLOAT db_r = *(DB + 0);
51 FLOAT db_i = *(DB + 1);
54 FLOAT ada = fabs(da_r) + fabs(da_i);
61 FUNCTION_PROFILE_START();
71 FLOAT aa_r, aa_i, bb_r, bb_i;
72 FLOAT alpha_r, alpha_i;
82 scale = (aa_i / aa_r);
83 ada = aa_r * sqrt(ONE + scale * scale);
93 scale = (bb_i / bb_r);
94 adb = bb_r * sqrt(ONE + scale * scale);
103 r = scale * sqrt(aa_r * aa_r + aa_i * aa_i + bb_r * bb_r + bb_i * bb_i);
105 alpha_r = da_r / ada;
106 alpha_i = da_i / ada;
109 *(S + 0) = (alpha_r * db_r + alpha_i *db_i) / r;
110 *(S + 1) = (alpha_i * db_r - alpha_r *db_i) / r;
111 *(DA + 0) = alpha_r * r;
112 *(DA + 1) = alpha_i * r;
116 FUNCTION_PROFILE_END(4, 4, 4);