def _add_op_assign_stmt(fo, opname, opval, inst='d', op=None, indent=0): if op: fo.add_code('/* op.type=%s */' % op.type) setter_fn = operand_storage.get_op_setter_fn(opname) set_stmt = '%s(%s, %s)' % (setter_fn, inst, opval) indentstr = ' ' * indent fo.add_code_eol(indentstr + set_stmt)
def gen_scalable_l2_function(agi, nt_name, target_opname, ild_t_member, arg_arr, arg_nt_names): return_type = 'void' l3_fn = ild_nt.get_lufn([nt_name], target_opname, flevel='l3') arg_name = arg_arr.get_target_opname() l2_fn = get_l2_fn([nt_name], target_opname, arg_nt_names, arg_name, None, False) fo = codegen.function_object_t(l2_fn, return_type, static=True, inline=True) data_name = 'x' fo.add_arg(ildutil.ild_c_type + ' %s' % data_name) arg_type = agi.operand_storage.get_ctype(arg_name) arg_var = '_%s' % arg_name.lower() fo.add_code_eol('%s %s' % (arg_type, arg_var)) temp_var = '_%s' % ild_t_member ctype = ildutil.ild_c_op_type fo.add_code_eol('%s %s' % (ctype, temp_var)) for range_tuple in arg_arr.ranges: range_type, range_min, range_max, paramname = range_tuple param_name = '_%s' % paramname.lower() fo.add_code_eol(ildutil.ild_c_op_type + ' %s' % param_name) params = [] for range_tuple in arg_arr.ranges: range_type, range_min, range_max, paramname = range_tuple param_name = '_%s' % paramname.lower() access_call = emit_ild_access_call(paramname, data_name) fo.add_code_eol('%s = (%s)%s' %(param_name, ildutil.ild_c_op_type, access_call)) params.append(param_name) arg_fn = arg_arr.lookup_fn.function_name arg_call = arg_fn + '(%s)' arg_call = arg_call % (', '.join(params)) fo.add_code_eol('%s = %s' % (arg_var, arg_call)) fcall = '%s(%s)' % (l3_fn, arg_var) fo.add_code_eol('%s = (%s)%s' % (temp_var, ctype, fcall)) setter_fn = operand_storage.get_op_setter_fn(ild_t_member) fo.add_code_eol('%s(%s, %s)' % (setter_fn, data_name,temp_var)) return fo
def _gen_imm0_function(agi): """ for patterns that don't set IMM_WIDTH token these patterns have has_im==0 and we define a L2 lookup function that returns 0 """ #return_type = operand_storage.get_ctype(_imm_token) return_type = 'void' fo = codegen.function_object_t(_imm0_fn, return_type, static=True, inline=True) data_name = 'x' fo.add_arg(ildutil.ild_c_type + ' %s' % data_name) setter_fn = operand_storage.get_op_setter_fn(_ild_t_imm_member) fo.add_code_eol('%s(%s, %s)' % (setter_fn, data_name,'0')) return fo
def gen_const_l2_function(agi, nt_name, target_opname, ild_t_member): return_type = 'void' l3_fn = ild_nt.get_lufn([nt_name], target_opname, flevel='l3') l2_fn = get_l2_fn([nt_name], target_opname, [], None, None, True) fo = codegen.function_object_t(l2_fn, return_type, static=True, inline=True) data_name = 'x' fo.add_arg(ildutil.ild_c_type + ' %s' % data_name) temp_var = '_%s' % ild_t_member ctype = ildutil.ild_c_op_type fo.add_code_eol('%s %s' % (ctype, temp_var)) fcall = l3_fn + '()' fo.add_code_eol('%s = (%s)%s' % (temp_var, ctype, fcall)) setter_fn = operand_storage.get_op_setter_fn(ild_t_member) fo.add_code_eol('%s(%s, %s)' % (setter_fn, data_name,temp_var)) return fo