1function codegen_unop
2%CODEGEN_UNOP create functions for all unary operators
3%
4% This function creates all files of the form GB_unop__*.[ch],
5% and the include file GB_unop__include.h.
6
7% SuiteSparse:GraphBLAS, Timothy A. Davis, (c) 2017-2021, All Rights Reserved.
8% SPDX-License-Identifier: Apache-2.0
9
10fprintf ('\nunary operators:\n') ;
11
12f = fopen ('Generated/GB_unop__include.h', 'w') ;
13fprintf (f, '//------------------------------------------------------------------------------\n') ;
14fprintf (f, '// GB_unop__include.h: definitions for GB_unop__*.c\n') ;
15fprintf (f, '//------------------------------------------------------------------------------\n') ;
16fprintf (f, '\n') ;
17fprintf (f, '// SuiteSparse:GraphBLAS, Timothy A. Davis, (c) 2017-2021, All Rights Reserved.\n') ;
18fprintf (f, '// SPDX-License-Identifier: Apache-2.0\n\n') ;
19fprintf (f, '// This file has been automatically generated from Generator/GB_unop.h') ;
20fprintf (f, '\n\n') ;
21fclose (f) ;
22
23codegen_unop_template ('one', ...
24    'true',                     ... % bool
25    '1',                        ... % int
26    '1',                        ... % uint
27    '1',                        ... % float
28    '1',                        ... % double
29    'GxB_CMPLXF(1,0)',          ... % GxB_FC32_t
30    'GxB_CMPLX(1,0)') ;         ... % GxB_FC64_t
31
32codegen_unop_template ('identity', ...
33    'xarg',                     ... % bool
34    'xarg',                     ... % int
35    'xarg',                     ... % uint
36    'xarg',                     ... % float
37    'xarg',                     ... % double
38    'xarg',                     ... % GxB_FC32_t
39    'xarg') ;                   ... % GxB_FC64_t
40
41codegen_unop_template ('ainv', ...
42    'xarg',                     ... % bool
43    '-xarg',                    ... % int
44    '-xarg',                    ... % uint
45    '-xarg',                    ... % float
46    '-xarg',                    ... % double
47    'GB_FC32_ainv (xarg)',      ... % GxB_FC32_t
48    'GB_FC64_ainv (xarg)') ;    ... % GxB_FC64_t
49
50codegen_unop_template ('abs', ...
51    'xarg',                     ... % bool
52    'GB_IABS (xarg)',           ... % int
53    'xarg',                     ... % uint
54    'fabsf (xarg)',             ... % float
55    'fabs (xarg)',              ... % double
56    [ ],                        ... % GxB_FC32_t (see below)
57    [ ]) ;                      ... % GxB_FC64_t (see below)
58
59codegen_unop_template ('minv', ...
60    'true',                     ... % bool
61    'GB_IMINV (xarg)',          ... % int
62    'GB_IMINV (xarg)',          ... % uint
63    '(1.0F)/xarg',              ... % float
64    '1./xarg',                  ... % double
65    'GB_FC32_minv (xarg)',      ... % GxB_FC32_t
66    'GB_FC64_minv (xarg)') ;    ... % GxB_FC64_t
67
68codegen_unop_template ('lnot',  ...
69    '!xarg',                    ... % bool
70    '!(xarg != 0)',             ... % int
71    '!(xarg != 0)',             ... % uint
72    '!(xarg != 0)',             ... % float
73    '!(xarg != 0)',             ... % double
74    [ ],                        ... % GxB_FC32_t
75    [ ]) ;                      ... % GxB_FC64_t
76
77codegen_unop_template ('bnot',  ...
78    [ ],                        ... % bool
79    '~(xarg)',                  ... % int
80    '~(xarg)',                  ... % uint
81    [ ],                        ... % float
82    [ ],                        ... % double
83    [ ],                        ... % GxB_FC32_t
84    [ ]) ;                      ... % GxB_FC64_t
85
86codegen_unop_template ('sqrt', ...
87    [ ],                        ... % bool
88    [ ],                        ... % int
89    [ ],                        ... % uint
90    'sqrtf (xarg)',             ... % float
91    'sqrt (xarg)',              ... % double
92    'csqrtf (xarg)',            ... % GxB_FC32_t
93    'csqrt (xarg)') ;           ... % GxB_FC64_t
94
95codegen_unop_template ('log', ...
96    [ ],                        ... % bool
97    [ ],                        ... % int
98    [ ],                        ... % uint
99    'logf (xarg)',              ... % float
100    'log (xarg)',               ... % double
101    'clogf (xarg)',             ... % GxB_FC32_t
102    'clog (xarg)') ;            ... % GxB_FC64_t
103
104codegen_unop_template ('exp', ...
105    [ ],                        ... % bool
106    [ ],                        ... % int
107    [ ],                        ... % uint
108    'expf (xarg)',              ... % float
109    'exp (xarg)',               ... % double
110    'cexpf (xarg)',             ... % GxB_FC32_t
111    'cexp (xarg)') ;            ... % GxB_FC64_t
112
113codegen_unop_template ('sin', ...
114    [ ],                        ... % bool
115    [ ],                        ... % int
116    [ ],                        ... % uint
117    'sinf (xarg)',              ... % float
118    'sin (xarg)',               ... % double
119    'csinf (xarg)',             ... % GxB_FC32_t
120    'csin (xarg)') ;            ... % GxB_FC64_t
121
122codegen_unop_template ('cos', ...
123    [ ],                        ... % bool
124    [ ],                        ... % int
125    [ ],                        ... % uint
126    'cosf (xarg)',              ... % float
127    'cos (xarg)',               ... % double
128    'ccosf (xarg)',             ... % GxB_FC32_t
129    'ccos (xarg)') ;            ... % GxB_FC64_t
130
131codegen_unop_template ('tan', ...
132    [ ],                        ... % bool
133    [ ],                        ... % int
134    [ ],                        ... % uint
135    'tanf (xarg)',              ... % float
136    'tan (xarg)',               ... % double
137    'ctanf (xarg)',             ... % GxB_FC32_t
138    'ctan (xarg)') ;            ... % GxB_FC64_t
139
140codegen_unop_template ('asin', ...
141    [ ],                        ... % bool
142    [ ],                        ... % int
143    [ ],                        ... % uint
144    'asinf (xarg)',             ... % float
145    'asin (xarg)',              ... % double
146    'casinf (xarg)',            ... % GxB_FC32_t
147    'casin (xarg)') ;           ... % GxB_FC64_t
148
149codegen_unop_template ('acos', ...
150    [ ],                        ... % bool
151    [ ],                        ... % int
152    [ ],                        ... % uint
153    'acosf (xarg)',             ... % float
154    'acos (xarg)',              ... % double
155    'cacosf (xarg)',            ... % GxB_FC32_t
156    'cacos (xarg)') ;           ... % GxB_FC64_t
157
158codegen_unop_template ('atan', ...
159    [ ],                        ... % bool
160    [ ],                        ... % int
161    [ ],                        ... % uint
162    'atanf (xarg)',             ... % float
163    'atan (xarg)',              ... % double
164    'catanf (xarg)',            ... % GxB_FC32_t
165    'catan (xarg)') ;           ... % GxB_FC64_t
166
167
168codegen_unop_template ('sinh', ...
169    [ ],                        ... % bool
170    [ ],                        ... % int
171    [ ],                        ... % uint
172    'sinhf (xarg)',             ... % float
173    'sinh (xarg)',              ... % double
174    'csinhf (xarg)',            ... % GxB_FC32_t
175    'csinh (xarg)') ;           ... % GxB_FC64_t
176
177codegen_unop_template ('cosh', ...
178    [ ],                        ... % bool
179    [ ],                        ... % int
180    [ ],                        ... % uint
181    'coshf (xarg)',             ... % float
182    'cosh (xarg)',              ... % double
183    'ccoshf (xarg)',            ... % GxB_FC32_t
184    'ccosh (xarg)') ;           ... % GxB_FC64_t
185
186codegen_unop_template ('tanh', ...
187    [ ],                        ... % bool
188    [ ],                        ... % int
189    [ ],                        ... % uint
190    'tanhf (xarg)',             ... % float
191    'tanh (xarg)',              ... % double
192    'ctanhf (xarg)',            ... % GxB_FC32_t
193    'ctanh (xarg)') ;           ... % GxB_FC64_t
194
195codegen_unop_template ('asinh', ...
196    [ ],                        ... % bool
197    [ ],                        ... % int
198    [ ],                        ... % uint
199    'asinhf (xarg)',            ... % float
200    'asinh (xarg)',             ... % double
201    'casinhf (xarg)',           ... % GxB_FC32_t
202    'casinh (xarg)') ;          ... % GxB_FC64_t
203
204codegen_unop_template ('acosh', ...
205    [ ],                        ... % bool
206    [ ],                        ... % int
207    [ ],                        ... % uint
208    'acoshf (xarg)',            ... % float
209    'acosh (xarg)',             ... % double
210    'cacoshf (xarg)',           ... % GxB_FC32_t
211    'cacosh (xarg)') ;          ... % GxB_FC64_t
212
213codegen_unop_template ('atanh', ...
214    [ ],                        ... % bool
215    [ ],                        ... % int
216    [ ],                        ... % uint
217    'atanhf (xarg)',            ... % float
218    'atanh (xarg)',             ... % double
219    'catanhf (xarg)',           ... % GxB_FC32_t
220    'catanh (xarg)') ;          ... % GxB_FC64_t
221
222codegen_unop_template ('signum', ...
223    [ ],                        ... % bool
224    [ ],                        ... % int
225    [ ],                        ... % uint
226    'GB_signumf (xarg)',        ... % float
227    'GB_signum (xarg)',         ... % double
228    'GB_csignumf (xarg)',       ... % GxB_FC32_t
229    'GB_csignum (xarg)') ;      ... % GxB_FC64_t
230
231codegen_unop_template ('ceil', ...
232    [ ],                        ... % bool
233    [ ],                        ... % int
234    [ ],                        ... % uint
235    'ceilf (xarg)',             ... % float
236    'ceil (xarg)',              ... % double
237    'GB_cceilf (xarg)',         ... % GxB_FC32_t
238    'GB_cceil (xarg)') ;        ... % GxB_FC64_t
239
240codegen_unop_template ('floor', ...
241    [ ],                        ... % bool
242    [ ],                        ... % int
243    [ ],                        ... % uint
244    'floorf (xarg)',            ... % float
245    'floor (xarg)',             ... % double
246    'GB_cfloorf (xarg)',        ... % GxB_FC32_t
247    'GB_cfloor (xarg)') ;       ... % GxB_FC64_t
248
249codegen_unop_template ('round', ...
250    [ ],                        ... % bool
251    [ ],                        ... % int
252    [ ],                        ... % uint
253    'roundf (xarg)',            ... % float
254    'round (xarg)',             ... % double
255    'GB_croundf (xarg)',        ... % GxB_FC32_t
256    'GB_cround (xarg)') ;       ... % GxB_FC64_t
257
258codegen_unop_template ('trunc', ...
259    [ ],                        ... % bool
260    [ ],                        ... % int
261    [ ],                        ... % uint
262    'truncf (xarg)',            ... % float
263    'trunc (xarg)',             ... % double
264    'GB_ctruncf (xarg)',        ... % GxB_FC32_t
265    'GB_ctrunc (xarg)') ;       ... % GxB_FC64_t
266
267codegen_unop_template ('exp2', ...
268    [ ],                        ... % bool
269    [ ],                        ... % int
270    [ ],                        ... % uint
271    'exp2f (xarg)',             ... % float
272    'exp2 (xarg)',              ... % double
273    'GB_cexp2f (xarg)',         ... % GxB_FC32_t
274    'GB_cexp2 (xarg)') ;        ... % GxB_FC64_t
275
276codegen_unop_template ('expm1', ...
277    [ ],                        ... % bool
278    [ ],                        ... % int
279    [ ],                        ... % uint
280    'expm1f (xarg)',            ... % float
281    'expm1 (xarg)',             ... % double
282    'GB_cexpm1f (xarg)',        ... % GxB_FC32_t
283    'GB_cexpm1 (xarg)') ;       ... % GxB_FC64_t
284
285codegen_unop_template ('log10', ...
286    [ ],                        ... % bool
287    [ ],                        ... % int
288    [ ],                        ... % uint
289    'log10f (xarg)',            ... % float
290    'log10 (xarg)',             ... % double
291    'GB_clog10f (xarg)',        ... % GxB_FC32_t
292    'GB_clog10 (xarg)') ;       ... % GxB_FC64_t
293
294codegen_unop_template ('log1p', ...
295    [ ],                        ... % bool
296    [ ],                        ... % int
297    [ ],                        ... % uint
298    'log1pf (xarg)',            ... % float
299    'log1p (xarg)',             ... % double
300    'GB_clog1pf (xarg)',        ... % GxB_FC32_t
301    'GB_clog1p (xarg)') ;       ... % GxB_FC64_t
302
303codegen_unop_template ('log2', ...
304    [ ],                        ... % bool
305    [ ],                        ... % int
306    [ ],                        ... % uint
307    'log2f (xarg)',             ... % float
308    'log2 (xarg)',              ... % double
309    'GB_clog2f (xarg)',         ... % GxB_FC32_t
310    'GB_clog2 (xarg)') ;        ... % GxB_FC64_t
311
312codegen_unop_template ('frexpx', ...
313    [ ],                        ... % bool
314    [ ],                        ... % int
315    [ ],                        ... % uint
316    'GB_frexpxf (xarg)',        ... % float
317    'GB_frexpx (xarg)',         ... % double
318    [ ],                        ... % GxB_FC32_t
319    [ ]) ;                      ... % GxB_FC64_t
320
321codegen_unop_template ('frexpe', ...
322    [ ],                        ... % bool
323    [ ],                        ... % int
324    [ ],                        ... % uint
325    'GB_frexpef (xarg)',        ... % float
326    'GB_frexpe (xarg)',         ... % double
327    [ ],                        ... % GxB_FC32_t
328    [ ]) ;                      ... % GxB_FC64_t
329
330codegen_unop_template ('lgamma', ...
331    [ ],                        ... % bool
332    [ ],                        ... % int
333    [ ],                        ... % uint
334    'lgammaf (xarg)',           ... % float
335    'lgamma (xarg)',            ... % double
336    [ ],                        ... % GxB_FC32_t
337    [ ]) ;                      ... % GxB_FC64_t
338
339codegen_unop_template ('tgamma', ...
340    [ ],                        ... % bool
341    [ ],                        ... % int
342    [ ],                        ... % uint
343    'tgammaf (xarg)',           ... % float
344    'tgamma (xarg)',            ... % double
345    [ ],                        ... % GxB_FC32_t
346    [ ]) ;                      ... % GxB_FC64_t
347
348codegen_unop_template ('erf', ...
349    [ ],                        ... % bool
350    [ ],                        ... % int
351    [ ],                        ... % uint
352    'erff (xarg)',              ... % float
353    'erf (xarg)',               ... % double
354    [ ],                        ... % GxB_FC32_t
355    [ ]) ;                      ... % GxB_FC64_t
356
357codegen_unop_template ('erfc', ...
358    [ ],                        ... % bool
359    [ ],                        ... % int
360    [ ],                        ... % uint
361    'erfcf (xarg)',             ... % float
362    'erfc (xarg)',              ... % double
363    [ ],                        ... % GxB_FC32_t
364    [ ]) ;                      ... % GxB_FC64_t
365
366codegen_unop_template ('conj', ...
367    [ ],                        ... % bool
368    [ ],                        ... % int
369    [ ],                        ... % uint
370    [ ],                        ... % float
371    [ ],                        ... % double
372    'conjf (xarg)',             ... % GxB_FC32_t
373    'conj (xarg)') ;            ... % GxB_FC64_t
374
375%-------------------------------------------------------------------------------
376% z = f(x) where the type of z and x differ
377%-------------------------------------------------------------------------------
378
379% z = abs (x): x is complex, z is real
380fprintf ('\nabs      ') ;
381codegen_unop_method ('abs', 'cabsf (xarg)', 'GxB_FC32_t zarg = (xarg)', 'float' , 'GxB_FC32_t') ;
382codegen_unop_method ('abs', 'cabs (xarg)' , 'GxB_FC64_t zarg = (xarg)', 'double', 'GxB_FC64_t') ;
383
384% z = creal (x): x is complex, z is real
385fprintf ('\ncreal    ') ;
386codegen_unop_method ('creal', 'crealf (xarg)', 'GxB_FC32_t zarg = (xarg)', 'float' , 'GxB_FC32_t') ;
387codegen_unop_method ('creal', 'creal (xarg)' , 'GxB_FC64_t zarg = (xarg)', 'double', 'GxB_FC64_t') ;
388
389% z = cimag (x): x is complex, z is real
390fprintf ('\ncimag    ') ;
391codegen_unop_method ('cimag', 'cimagf (xarg)', 'GxB_FC32_t zarg = (xarg)', 'float' , 'GxB_FC32_t') ;
392codegen_unop_method ('cimag', 'cimag (xarg)' , 'GxB_FC64_t zarg = (xarg)', 'double', 'GxB_FC64_t') ;
393
394% z = carg (x): x is complex, z is real
395fprintf ('\ncarg     ') ;
396codegen_unop_method ('carg', 'cargf (xarg)', 'GxB_FC32_t zarg = (xarg)', 'float' , 'GxB_FC32_t') ;
397codegen_unop_method ('carg', 'carg (xarg)' , 'GxB_FC64_t zarg = (xarg)', 'double', 'GxB_FC64_t') ;
398
399% z = isinf (x): x is floating-point, z is bool
400fprintf ('\nisinf    ') ;
401codegen_unop_method ('isinf', 'isinf (xarg)'     , 'float zarg = (xarg)'     , 'bool', 'float') ;
402codegen_unop_method ('isinf', 'isinf (xarg)'     , 'double zarg = (xarg)'    , 'bool', 'double') ;
403codegen_unop_method ('isinf', 'GB_cisinff (xarg)', 'GxB_FC32_t zarg = (xarg)', 'bool', 'GxB_FC32_t') ;
404codegen_unop_method ('isinf', 'GB_cisinf (xarg)' , 'GxB_FC64_t zarg = (xarg)', 'bool', 'GxB_FC64_t') ;
405
406% z = isnan (x): x is floating-point, z is bool
407fprintf ('\nisnan    ') ;
408codegen_unop_method ('isnan', 'isnan (xarg)'     , 'float zarg = (xarg)'     , 'bool', 'float') ;
409codegen_unop_method ('isnan', 'isnan (xarg)'     , 'double zarg = (xarg)'    , 'bool', 'double') ;
410codegen_unop_method ('isnan', 'GB_cisnanf (xarg)', 'GxB_FC32_t zarg = (xarg)', 'bool', 'GxB_FC32_t') ;
411codegen_unop_method ('isnan', 'GB_cisnan (xarg)' , 'GxB_FC64_t zarg = (xarg)', 'bool', 'GxB_FC64_t') ;
412
413% z = isfinite (x): x is floating-point, z is bool
414fprintf ('\nisfinite ') ;
415codegen_unop_method ('isfinite', 'isfinite (xarg)'     , 'float zarg = (xarg)'     , 'bool', 'float') ;
416codegen_unop_method ('isfinite', 'isfinite (xarg)'     , 'double zarg = (xarg)'    , 'bool', 'double') ;
417codegen_unop_method ('isfinite', 'GB_cisfinitef (xarg)', 'GxB_FC32_t zarg = (xarg)', 'bool', 'GxB_FC32_t') ;
418codegen_unop_method ('isfinite', 'GB_cisfinite (xarg)' , 'GxB_FC64_t zarg = (xarg)', 'bool', 'GxB_FC64_t') ;
419fprintf ('\n') ;
420
421