/*---------------------------------------------------------*\ Ficheiro: MATCHROM.C Alteração: 03-05-96 ALterado por: A.Esteves \*---------------------------------------------------------*/ #include "datadef.h" /* INSTRUÇÕES DE MATCH */ void match (void) /* MD0 | MD1 | ZERO,CY_IN */ { /* tag = alu_output( match ) */ tag[0] = ms[0] & md0[0] & md1[0]; tag[1] = ms[1] & md0[1] & md1[1]; /* cy = alu_output( or_match ) */ switch (linhas) { case 111 : /* MD0 MD1 CY_IN // usado em or_match() */ cy[0] = cy[0] | tag[0]; cy[1] = cy[1] | tag[1]; break; case 114: /* MD0 MD1 ZERO // usado em match() */ cy[0] = tag[0]; cy[1] = tag[1]; break; default : erro("\nERRO na funcao match() \n"); break; } } /*################################################################*/ void tag_match (void) /* MD0 | MD1,TAG_IN | DCARE */ { /* tag = alu_output( match ) */ switch(linhas) { case 112 : /* MD0 MD1 DCARE // usado em tag_match() */ tag[0] = ms[0] & md0[0] & md1[0]; tag[1] = ms[1] & md0[1] & md1[1]; break; case 142 : /* MD0 TAG_IN DCARE // usado em clear_not_subset() */ tag[0] = ms[0] & md0[0] & tag[0]; tag[1] = ms[1] & md0[1] & tag[1]; break; default : erro("\nERRO na funcao tag_match() \n"); break; } } /*################################################################*/ void cy_match (void) /* MD0 | MD1 | ZERO */ { /* cy = alu_output( or_match ) */ switch(linhas) { case 114 : /* MD0 MD1 ZERO // usado em tag_match() */ cy[0] = ms[0] & md0[0] & md1[0]; cy[1] = ms[1] & md0[1] & md1[1]; break; default : erro("\nERRO na funcao cy_match() \n"); break; } } /*################################################################*/ void and_match (void) /* NOT_MD0 | TAG_IN,NOT_MD1 | CY_IN,ZERO */ { /* cy = alu_output ( cy_out ) */ ms[0]=msbak[0]; /* Hold ms */ ms[1]=msbak[1]; switch(linhas) { case 341 : /* NOT_MD0 TAG_IN CY_IN */ cy[0]=(((~md0[0])^tag[0])&cy[0])|((~md0[0])&tag[0]); cy[1]=(((~md0[1])^tag[1])&cy[1])|((~md0[1])&tag[1]); break; /* case 344 : NOT_MD0 TAG_IN ZERO cy[0]=((~md0[0])&tag[0]); cy[1]=((~md0[1])&tag[1]); break; case 331 : NOT_MD0 NOT_MD1 CY_IN cy[0]=(((~md0[0])^(~md1[0]))&cy[0])|((~md0[0])&(~md1[0])); cy[1]=(((~md0[1])^(~md1[1]))&cy[1])|((~md0[1])&(~md1[1])); break; */ case 334 : /* NOT_MD0 NOT_MD1 ZERO */ cy[0]=((~md0[0])&(~md1[0])); cy[1]=((~md0[1])&~(md1[1])); break; default : erro("\nERRO na funcao and_match() \n"); break; } } /*################################################################*/