Do not do src->dest copy if register would not be allocated a normal register
[official-gcc.git] / libf2c / libF77 / pow_zi.c
blob898ea6be917bc9307bf4f19df086f289e3479fcb
1 #include "f2c.h"
3 #ifdef KR_headers
4 VOID pow_zi(resx, a, b) /* p = a**b */
5 doublecomplex *resx, *a; integer *b;
6 #else
7 extern void z_div(doublecomplex*, doublecomplex*, doublecomplex*);
8 void pow_zi(doublecomplex *resx, doublecomplex *a, integer *b) /* p = a**b */
9 #endif
11 integer n;
12 unsigned long u;
13 double t;
14 doublecomplex x;
15 doublecomplex res;
16 static doublecomplex one = {1.0, 0.0};
18 n = *b;
20 if(n == 0)
22 resx->r = 1;
23 resx->i = 0;
24 return;
27 res.r = 1;
28 res.i = 0;
30 if(n < 0)
32 n = -n;
33 z_div(&x, &one, a);
35 else
37 x.r = a->r;
38 x.i = a->i;
41 for(u = n; ; )
43 if(u & 01)
45 t = res.r * x.r - res.i * x.i;
46 res.i = res.r * x.i + res.i * x.r;
47 res.r = t;
49 if(u >>= 1)
51 t = x.r * x.r - x.i * x.i;
52 x.i = 2 * x.r * x.i;
53 x.r = t;
55 else
56 break;
59 resx->r = res.r;
60 resx->i = res.i;