1+ #include " kernel_float.h"
2+ namespace kf = kernel_float;
3+
4+ extern " C" {
5+
6+ // CHECK-NOT: approx.f32
7+ // CHECK-COUNT-4: (fma|mul|add)(.rn|.ftz|.sat)*.f16x2
8+ __global__ void approx_half_sin1 (kf::half2 *x, kf::half2* y) {
9+ *y = kf::approx_sin<1 >(*x);
10+ }
11+
12+ // CHECK-NOT: approx.f32
13+ // CHECK-COUNT-6: (fma|mul|add)(.rn|.ftz|.sat)*.f16x2
14+ __global__ void approx_half_sin2 (kf::half2 *x, kf::half2* y) {
15+ *y = kf::approx_sin<2 >(*x);
16+ }
17+
18+ // CHECK-NOT: approx.f32
19+ // CHECK-COUNT-7: (fma|mul|add)(.rn|.ftz|.sat)*.f16x2
20+ __global__ void approx_half_sin3 (kf::half2 *x, kf::half2* y) {
21+ *y = kf::approx_sin<3 >(*x);
22+ }
23+
24+ // CHECK-NOT: approx.f32
25+ // CHECK-COUNT-8: (fma|mul|add)(.rn|.ftz|.sat)*.f16x2
26+ __global__ void approx_half_sin4 (kf::half2 *x, kf::half2* y) {
27+ *y = kf::approx_sin<4 >(*x);
28+ }
29+
30+ // CHECK-NOT: approx.f32
31+ // CHECK-NOT: (fma|mul|add)(.rn|.ftz|.sat)*.f16x2
32+ __global__ void approx_half_rcp0 (kf::half2 *x, kf::half2* y) {
33+ *y = kf::approx_rcp<0 >(*x);
34+ }
35+
36+ // CHECK-NOT: approx.f32
37+ // CHECK-COUNT-2: (fma|mul|add)(.rn|.ftz|.sat)*.f16x2
38+ __global__ void approx_half_rcp1 (kf::half2 *x, kf::half2* y) {
39+ *y = kf::approx_rcp<1 >(*x);
40+ }
41+
42+ // CHECK-NOT: approx.f32
43+ // CHECK-COUNT-4: (fma|mul|add)(.rn|.ftz|.sat)*.f16x2
44+ __global__ void approx_half_rcp2 (kf::half2 *x, kf::half2* y) {
45+ *y = kf::approx_rcp<2 >(*x);
46+ }
47+
48+ // CHECK-NOT: approx.f32
49+ // CHECK-COUNT-6: (fma|mul|add)(.rn|.ftz|.sat)*.f16x2
50+ __global__ void approx_half_rcp3 (kf::half2 *x, kf::half2* y) {
51+ *y = kf::approx_rcp<3 >(*x);
52+ }
53+
54+ // CHECK-NOT: approx.f32
55+ // CHECK-COUNT-8: (fma|mul|add)(.rn|.ftz|.sat)*.f16x2
56+ __global__ void approx_half_rcp4 (kf::half2 *x, kf::half2* y) {
57+ *y = kf::approx_rcp<4 >(*x);
58+ }
59+
60+ // CHECK-NOT: approx.f32
61+ // CHECK-COUNT-1: (fma|mul|add)(.rn|.ftz|.sat)*.f16x2
62+ __global__ void approx_half_sqrt0 (kf::half2 *x, kf::half2* y) {
63+ *y = kf::approx_sqrt<0 >(*x);
64+ }
65+
66+ // CHECK-NOT: approx.f32
67+ // CHECK-COUNT-4: (fma|mul|add)(.rn|.ftz|.sat)*.f16x2
68+ __global__ void approx_half_sqrt1 (kf::half2 *x, kf::half2* y) {
69+ *y = kf::approx_sqrt<1 >(*x);
70+ }
71+
72+ // CHECK-NOT: approx.f32
73+ // CHECK-COUNT-9: (fma|mul|add)(.rn|.ftz|.sat)*.f16x2
74+ __global__ void approx_half_sqrt2 (kf::half2 *x, kf::half2* y) {
75+ *y = kf::approx_sqrt<2 >(*x);
76+ }
77+
78+ // CHECK-NOT: approx.f32
79+ // CHECK-COUNT-13: (fma|mul|add)(.rn|.ftz|.sat)*.f16x2
80+ __global__ void approx_half_sqrt3 (kf::half2 *x, kf::half2* y) {
81+ *y = kf::approx_sqrt<3 >(*x);
82+ }
83+
84+ // CHECK-NOT: approx.f32
85+ // CHECK-COUNT-17: (fma|mul|add)(.rn|.ftz|.sat)*.f16x2
86+ __global__ void approx_half_sqrt4 (kf::half2 *x, kf::half2* y) {
87+ *y = kf::approx_sqrt<4 >(*x);
88+ }
89+
90+ // CHECK-NOT: approx.f32
91+ // CHECK-NOT: (fma|mul|add)(.rn|.ftz|.sat)*.f16x2
92+ __global__ void approx_half_rsqrt0 (kf::half2 *x, kf::half2* y) {
93+ *y = kf::approx_rsqrt<0 >(*x);
94+ }
95+
96+ // CHECK-NOT: approx.f32
97+ // CHECK-COUNT-4: (fma|mul|add)(.rn|.ftz|.sat)*.f16x2
98+ __global__ void approx_half_rsqrt1 (kf::half2 *x, kf::half2* y) {
99+ *y = kf::approx_rsqrt<1 >(*x);
100+ }
101+
102+ // CHECK-NOT: approx.f32
103+ // CHECK-COUNT-8: (fma|mul|add)(.rn|.ftz|.sat)*.f16x2
104+ __global__ void approx_half_rsqrt2 (kf::half2 *x, kf::half2* y) {
105+ *y = kf::approx_rsqrt<2 >(*x);
106+ }
107+
108+ // CHECK-NOT: approx.f32
109+ // CHECK-COUNT-12: (fma|mul|add)(.rn|.ftz|.sat)*.f16x2
110+ __global__ void approx_half_rsqrt3 (kf::half2 *x, kf::half2* y) {
111+ *y = kf::approx_rsqrt<3 >(*x);
112+ }
113+
114+ // CHECK-NOT: approx.f32
115+ // CHECK-COUNT-16: (fma|mul|add)(.rn|.ftz|.sat)*.f16x2
116+ __global__ void approx_half_rsqrt4 (kf::half2 *x, kf::half2* y) {
117+ *y = kf::approx_rsqrt<4 >(*x);
118+ }
119+
120+
121+ // CHECK-NOT: approx.f32
122+ // CHECK-COUNT-1: (fma|mul|add)(.rn|.ftz|.sat)*.f16x2
123+ __global__ void approx_half_exp (kf::half2 *x, kf::half2* y) {
124+ *y = kf::approx_exp (*x);
125+ }
126+
127+ // CHECK-NOT: approx.f32
128+ // CHECK-COUNT-1: (fma|mul|add)(.rn|.ftz|.sat)*.f16x2
129+ __global__ void approx_half_log (kf::half2 *x, kf::half2* y) {
130+ *y = kf::approx_log (*x);
131+ }
132+
133+ }
0 commit comments