• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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