1# SPDX-License-Identifier: MIT 2 3import argparse 4import sys 5 6a = 'a' 7 8has_unpack_sat = 'c && v3d_device_has_unpack_sat(c->devinfo)' 9has_unpack_max0 = 'c && v3d_device_has_unpack_max0(c->devinfo)' 10 11lower_alu = [ 12 (('f2i8', a), ('i2i8', ('f2i32', a))), 13 (('f2i16', a), ('i2i16', ('f2i32', a))), 14 15 (('f2u8', a), ('u2u8', ('f2u32', a))), 16 (('f2u16', a), ('u2u16', ('f2u32', a))), 17 18 (('i2f32', 'a@8'), ('i2f32', ('i2i32', a))), 19 (('i2f32', 'a@16'), ('i2f32', ('i2i32', a))), 20 21 (('u2f32', 'a@8'), ('u2f32', ('u2u32', a))), 22 (('u2f32', 'a@16'), ('u2f32', ('u2u32', a))), 23 24 (('fmin', ('fmax', a, -1.0), 1.0), ('fsat_signed', a), has_unpack_sat), 25 (('fmax', ('fmin', a, 1.0), -1.0), ('fsat_signed', a), has_unpack_sat), 26 (('fmax', a, 0.0), ('fclamp_pos', a), has_unpack_max0), 27] 28 29def main(): 30 parser = argparse.ArgumentParser() 31 parser.add_argument('-p', '--import-path', required=True) 32 args = parser.parse_args() 33 sys.path.insert(0, args.import_path) 34 run() 35 36def run(): 37 import nir_algebraic # pylint: disable=import-error 38 39 print('#include "v3d_compiler.h"') 40 41 print(nir_algebraic.AlgebraicPass("v3d_nir_lower_algebraic", 42 lower_alu, 43 [ 44 ("const struct v3d_compile *", "c") 45 ]).render()) 46 47if __name__ == '__main__': 48 main() 49