Beispiel #1
0
 def prod_func(self):
     group_decl = c.POD(self.expr_type, self.group_id)
     init_prod = c.Assign(group_decl, 0)
     self.loop_body = c.Assign(
         self.group_id, '{} * {}'.format(self.group_id, self.expr_arg))
     self.function_code.append(init_prod)
     assert len(self.bounds) > 0
     func_loop = Index([self.loop_body], self.bounds_dict, self.bounds)
     self.function_code.append(func_loop.loop)
Beispiel #2
0
 def max_func(self):
     group_decl = c.POD(self.expr_type, 'max')
     init_sum = c.Assign('max', self.limit_map[self.expr_type] + '_MIN')
     self.loop_body = c.If('max < {}'.format(self.expr_arg),
                           c.Assign('max', self.expr_arg))
     self.function_code.append(group_decl)
     self.function_code.append(init_sum)
     assert len(self.bounds) > 0
     func_loop = Index([self.loop_body], self.bounds_dict, self.bounds)
     self.function_code.append(func_loop.loop)
Beispiel #3
0
    def argmin_func(self):
        self.function_code.append(c.POD(self.expr_type, 'min'))
        self.function_code.append(
            c.Assign('min', self.limit_map[self.expr_type] + '_MAX'))
        self.function_code.append(
            c.ArrayInitializer(
                c.POD('int32', 'amin[{len}]'.format(len=len(self.bounds))),
                [0 for i in self.bounds]))
        assert len(self.bounds) > 0
        block_code = []
        block_code.append(c.Assign('min', self.expr_arg))
        for b in range(len(self.bounds)):
            block_code.append(
                c.Assign('amin[{idx}]'.format(idx=b),
                         '{idx}'.format(idx=self.bounds[b])))

        self.loop_body = c.If('min > {}'.format(self.expr_arg),
                              c.Block(block_code))
        func_loop = Index([self.loop_body], self.bounds_dict, self.bounds)
        self.function_code.append(func_loop.loop)