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