File: xrt_complex_float.cl

package info (click to toggle)
python-xrt 1.6.0%2Bds1-1
  • links: PTS, VCS
  • area: main
  • in suites: sid, trixie
  • size: 17,572 kB
  • sloc: python: 59,424; xml: 4,786; lisp: 4,082; sh: 22; javascript: 18; makefile: 17
file content (97 lines) | stat: -rw-r--r-- 1,948 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
//__author__ = "Konstantin Klementiev", "Roman Chernikov"
//__date__ = "16 Sep 2014"

#ifdef cl_khr_fp64
#if __OPENCL_VERSION__<120
#pragma OPENCL EXTENSION cl_khr_fp64: enable
#endif
#endif

__constant float2 cmp1 = (float2)(1,0);
__constant float2 cmpi1 = (float2)(0,1);
__constant float2 cmp0 = (float2)(0,0);
__constant float HALF = (float)0.5;


float2 r2cmp(float a)
  {
    return (float2)(a, 0);  
  } 

float2 conj_c(float2 a)
  {
    return (float2)(a.x, -a.y);
  }

float2 prod_c(float2 a, float2 b)
  {
    return (float2)(a.x * b.x - a.y * b.y, a.y * b.x + a.x * b.y);
  }

float2 rec_c(float2 a)
  {
    return (float2)(a.x, -a.y) / (a.x * a.x + a.y * a.y);
  }

float abs_c(float2 a)
  {
    return sqrt(a.x * a.x + a.y * a.y);
  }

float abs_c2(float2 a)
  {
    return (a.x * a.x + a.y * a.y);
  }

float2 div_c(float2 a, float2 b)
  {
    return prod_c(a, conj_c(b)) / (b.x * b.x + b.y * b.y);       
  }

float2 sqrt_c(float2 a)
  {
    float phi = atan2(a.y, a.x);
    return (float2)(cos(HALF * phi), sin(HALF * phi)) * sqrt(length(a));
  }

float2 sqr_c(float2 a)
  {
      return prod_c(a,a);
  }

float2 exp_c(float2 a)
  {
    return (float2)(cos(a.y), sin(a.y)) * exp(a.x);
  }

float2 sin_c(float2 a)
  {
    return (float2)(sin(a.x) * cosh(a.y), cos(a.x) * sinh(a.y));
  }  

float2 cos_c(float2 a)
  {
    return (float2)(cos(a.x) * cosh(a.y), -sin(a.x) * sinh(a.y));
  }    

float2 fasttan_c(float2 a)
  {
    float2 a2 = 2*a;
    return (float2)(sin(a2.x), sinh(a2.y)) / (cos(a2.x) + cosh(a2.y));
  }

float2 tan_c(float2 a)
  {
    return div_c(sin_c(a), cos_c(a));
  }

float2 dot_c4(float8 a, float8 b)
  {
    float2 p1, p2, p3, p4;
    p1 = prod_c((float2)(a.s0, a.s1), (float2)(b.s0, b.s1));
    p2 = prod_c((float2)(a.s2, a.s3), (float2)(b.s2, b.s3));
    p3 = prod_c((float2)(a.s4, a.s5), (float2)(b.s4, b.s5));
    p4 = prod_c((float2)(a.s6, a.s7), (float2)(b.s6, b.s7));
    return p1 + p2 + p3 + p4;
  }