コード例 #1
0
ファイル: SIM_power_ALU.c プロジェクト: rlavaee/sesc-src
int SIM_power_ALU_record(SIM_power_ALU_t *alu, LIB_Type_max_uint d1, LIB_Type_max_uint d2, u_int type)
{
    u_int d_H4, d_H8, d_H16;
    LIB_Type_max_uint d1_old, d2_old;

    switch (alu->model) {
    case PLX_ALU:
        /* control logic */
        alu->n_chg_blk[PLX_CTR] += type != alu->type;

        /* global data path */
        if (is_logic(alu->type)) {
            d1_old = alu->l_d1;
            d2_old = alu->l_d2;
        }
        else {	/* arithmetic */
            d1_old = alu->a_d1;
            d2_old = alu->a_d2;
        }
        d_H8 = SIM_power_Hamming_group(d1, d1_old, d2, d2_old, 8, alu->data_width / 8);
        alu->n_chg_blk[PLX_IMM] += d_H8;
        alu->n_chg_blk[PLX_OUT] += d_H8;

        /* logic/arithmetic data path */
        if (is_logic(type)) {
            d_H8 = SIM_power_Hamming_group(d1, alu->l_d1, d2, alu->l_d2, 8, alu->data_width / 8);
            alu->n_chg_blk[PLX_LOGIC] += d_H8;

            alu->l_d1 = d1;
            alu->l_d2 = d2;
        }
        else {	/* arithmetic */
            /* WHS: hack to support 8-bit ALU */
            d_H16 = SIM_power_Hamming_group(d1, alu->a_d1, d2, alu->a_d2, 16, MAX(1, alu->data_width / 16));
            d_H8 = SIM_power_Hamming_group(d1, alu->a_d1, d2, alu->a_d2, 8, alu->data_width / 8);
            d_H4 = SIM_power_Hamming_group(d1, alu->a_d1, d2, alu->a_d2, 4, alu->data_width / 4);

            alu->n_chg_blk[PLX_SIGN] += d_H8;
            alu->n_chg_blk[PLX_SHIFT] += d_H16;
            alu->n_chg_blk[PLX_2COM] += d_H8;
            alu->n_chg_blk[PLX_ADD] += d_H4;
            alu->n_chg_blk[PLX_SUBW] += d_H8;
            alu->n_chg_blk[PLX_SAT] += d_H8;
            alu->n_chg_blk[PLX_AVG] += d_H8;

            alu->a_d1 = d1;
            alu->a_d2 = d2;
        }

        alu->type = type;
        break;

    default:
        return -1;
    }

    return 0;
}
コード例 #2
0
ファイル: ft_parser.c プロジェクト: Thomas2511/42sh
static char			parse_logic(t_token **list, t_node **tree)
{
	t_node			*node;
	t_token			*save;

	if ((node = ft_nodenew(LOGIC)) != NULL && parse_pipe(list, &node->left))
	{
		save = *list;
		if (ft_tokenstep(list) && is_logic((*list)->data, node)
			&& (*list)->type == SPECIAL)
		{
			if (!ft_tokenstep(list) || !parse_logic(list, &node->right))
				return (!ft_clear_tree(&node));
		}
		else
			*list = save;
		if (node->right)
			*tree = node;
		else
		{
			*tree = node->left;
			free(node->data);
			free(node);
		}
		return (1);
	}
	return (!ft_clear_tree(&node));
}