diff options
author | CNugteren <web@cedricnugteren.nl> | 2015-09-17 10:14:33 +0200 |
---|---|---|
committer | CNugteren <web@cedricnugteren.nl> | 2015-09-17 10:14:33 +0200 |
commit | 6307d2e5db1347112d992b2ef7a6cde9b3441389 (patch) | |
tree | 9c77189cf09b09a7bd59af2299047b890f737386 /scripts/generator/datatype.py | |
parent | 1c242100266e46cf97227c5506a1c32e51afbd00 (diff) |
Added script to generate API interface and implementation automatically
Diffstat (limited to 'scripts/generator/datatype.py')
-rw-r--r-- | scripts/generator/datatype.py | 54 |
1 files changed, 54 insertions, 0 deletions
diff --git a/scripts/generator/datatype.py b/scripts/generator/datatype.py new file mode 100644 index 00000000..cca3534d --- /dev/null +++ b/scripts/generator/datatype.py @@ -0,0 +1,54 @@ +#!/usr/bin/env python + +# ================================================================================================== +# This file is part of the CLBlast project. The project is licensed under Apache Version 2.0. This +# project loosely follows the Google C++ styleguide and uses a max-width of 100 characters per line. +# +# Author(s): +# Cedric Nugteren <www.cedricnugteren.nl> +# +# This file contains the 'DataType' class, used in the generator script to generate the CLBlast API +# interface and implementation. +# +# ================================================================================================== + +# Short-hands for data-types +FLT = "float" +DBL = "double" +FLT2 = "float2" +DBL2 = "double2" +F2CL = "cl_float2" +D2CL = "cl_double2" + +# Structure holding data-type and precision information +class DataType(): + def __init__(self, name, template, scalars, buffertype): + self.name = name + self.template = template + self.alpha_cpp = scalars[0] + self.beta_cpp = scalars[1] + self.alpha_cl = scalars[2] + self.beta_cl = scalars[3] + self.buffertype = buffertype # Only used for template types + + # Outputs the name of the data-type (alpha/beta), possibly transforming into the right type + def UseAlpha(self): + if self.alpha_cpp in [FLT2, DBL2]: + return self.alpha_cpp+"{alpha.s[0], alpha.s[1]}" + return "alpha" + def UseBeta(self): + if self.beta_cpp in [FLT2, DBL2]: + return self.beta_cpp+"{beta.s[0], beta.s[1]}" + return "beta" + + # As above, but the transformation is in the opposite direction + def UseAlphaCL(self): + if self.alpha_cpp in [FLT2, DBL2]: + return self.alpha_cl+"{{alpha.real(), alpha.imag()}}" + return "alpha" + def UseBetaCL(self): + if self.beta_cpp in [FLT2, DBL2]: + return self.beta_cl+"{{beta.real(), beta.imag()}}" + return "beta" + +# ================================================================================================== |