alpha.c

来自「基于4个mips核的noc设计」· C语言 代码 · 共 2,365 行 · 第 1/5 页

C
2,365
字号
	case _rc6_NT:	return _decode_rc6[((struct _state *)state)->rule._rc6];	case _ar_NT:	return _decode_ar[((struct _state *)state)->rule._ar];	default:		fatal("_rule", "Bad goal nonterminal %d\n", goalnt);		return 0;	}}static void _closure_reg(NODEPTR_TYPE, int);static void _closure_con(NODEPTR_TYPE, int);static void _closure_acon(NODEPTR_TYPE, int);static void _closure_addr(NODEPTR_TYPE, int);static void _closure_reg(NODEPTR_TYPE a, int c) {	struct _state *p = STATE_LABEL(a);	if (c + 0 < p->cost[_ar_NT]) {		p->cost[_ar_NT] = c + 0;		p->rule._ar = 2;	}	if (c + 0 < p->cost[_rc6_NT]) {		p->cost[_rc6_NT] = c + 0;		p->rule._rc6 = 3;	}	if (c + 0 < p->cost[_rc_NT]) {		p->cost[_rc_NT] = c + 0;		p->rule._rc = 2;	}	if (c + 0 < p->cost[_addr_NT]) {		p->cost[_addr_NT] = c + 0;		p->rule._addr = 6;		_closure_addr(a, c + 0);	}	if (c + 0 < p->cost[_stmt_NT]) {		p->cost[_stmt_NT] = c + 0;		p->rule._stmt = 13;	}}static void _closure_con(NODEPTR_TYPE a, int c) {	struct _state *p = STATE_LABEL(a);	if (c + 0 < p->cost[_rc_NT]) {		p->cost[_rc_NT] = c + 0;		p->rule._rc = 1;	}	if (c + 0 < p->cost[_acon_NT]) {		p->cost[_acon_NT] = c + 0;		p->rule._acon = 1;		_closure_acon(a, c + 0);	}}static void _closure_acon(NODEPTR_TYPE a, int c) {	struct _state *p = STATE_LABEL(a);	if (c + 0 < p->cost[_addr_NT]) {		p->cost[_addr_NT] = c + 0;		p->rule._addr = 5;		_closure_addr(a, c + 0);	}}static void _closure_addr(NODEPTR_TYPE a, int c) {	struct _state *p = STATE_LABEL(a);	if (c + 1 < p->cost[_reg_NT]) {		p->cost[_reg_NT] = c + 1;		p->rule._reg = 13;		_closure_reg(a, c + 1);	}}static void _label(NODEPTR_TYPE a) {	int c;	struct _state *p;	if (!a)		fatal("_label", "Null tree\n", 0);	STATE_LABEL(a) = p = allocate(sizeof *p, FUNC);	p->rule._stmt = 0;	p->cost[1] =	p->cost[2] =	p->cost[3] =	p->cost[4] =	p->cost[5] =	p->cost[6] =	p->cost[7] =	p->cost[8] =		0x7fff;	switch (OP_LABEL(a)) {	case 41: /* ARGB */		_label(LEFT_CHILD(a));		if (	/* stmt: ARGB(INDIRB(reg)) */			LEFT_CHILD(a)->op == 73 /* INDIRB */		) {			c = ((struct _state *)(LEFT_CHILD(LEFT_CHILD(a))->x.state))->cost[_reg_NT] + 1;			if (c + 0 < p->cost[_stmt_NT]) {				p->cost[_stmt_NT] = c + 0;				p->rule._stmt = 80;			}		}		break;	case 57: /* ASGNB */		_label(LEFT_CHILD(a));		_label(RIGHT_CHILD(a));		if (	/* stmt: ASGNB(reg,INDIRB(reg)) */			RIGHT_CHILD(a)->op == 73 /* INDIRB */		) {			c = ((struct _state *)(LEFT_CHILD(a)->x.state))->cost[_reg_NT] + ((struct _state *)(LEFT_CHILD(RIGHT_CHILD(a))->x.state))->cost[_reg_NT] + 1;			if (c + 0 < p->cost[_stmt_NT]) {				p->cost[_stmt_NT] = c + 0;				p->rule._stmt = 81;			}		}		break;	case 73: /* INDIRB */		_label(LEFT_CHILD(a));		break;	case 216: /* CALLV */		_label(LEFT_CHILD(a));		/* stmt: CALLV(ar) */		c = ((struct _state *)(LEFT_CHILD(a)->x.state))->cost[_ar_NT] + 2;		if (c + 0 < p->cost[_stmt_NT]) {			p->cost[_stmt_NT] = c + 0;			p->rule._stmt = 64;		}		break;	case 217: /* CALLB */		break;	case 233: /* LOADB */		break;	case 248: /* RETV */		_label(LEFT_CHILD(a));		/* stmt: RETV(reg) */		c = ((struct _state *)(LEFT_CHILD(a)->x.state))->cost[_reg_NT] + 1;		if (c + 0 < p->cost[_stmt_NT]) {			p->cost[_stmt_NT] = c + 0;			p->rule._stmt = 72;		}		break;	case 584: /* JUMPV */		_label(LEFT_CHILD(a));		/* stmt: JUMPV(acon) */		c = ((struct _state *)(LEFT_CHILD(a)->x.state))->cost[_acon_NT] + 1;		if (c + 0 < p->cost[_stmt_NT]) {			p->cost[_stmt_NT] = c + 0;			p->rule._stmt = 26;		}		/* stmt: JUMPV(reg) */		c = ((struct _state *)(LEFT_CHILD(a)->x.state))->cost[_reg_NT] + 1;		if (c + 0 < p->cost[_stmt_NT]) {			p->cost[_stmt_NT] = c + 0;			p->rule._stmt = 27;		}		break;	case 600: /* LABELV */		/* stmt: LABELV */		if (0 + 0 < p->cost[_stmt_NT]) {			p->cost[_stmt_NT] = 0 + 0;			p->rule._stmt = 25;		}		break;	case 711: /* VREGP */		break;	case 1045: /* CNSTI1 */		/* con: CNSTI1 */		if (0 + 0 < p->cost[_con_NT]) {			p->cost[_con_NT] = 0 + 0;			p->rule._con = 1;			_closure_con(a, 0 + 0);		}		/* reg: CNSTI1 */		c = (range(a, 0, 0));		if (c + 0 < p->cost[_reg_NT]) {			p->cost[_reg_NT] = c + 0;			p->rule._reg = 14;			_closure_reg(a, c + 0);		}		break;	case 1046: /* CNSTU1 */		/* con: CNSTU1 */		if (0 + 0 < p->cost[_con_NT]) {			p->cost[_con_NT] = 0 + 0;			p->rule._con = 2;			_closure_con(a, 0 + 0);		}		/* reg: CNSTU1 */		c = (range(a, 0, 0));		if (c + 0 < p->cost[_reg_NT]) {			p->cost[_reg_NT] = c + 0;			p->rule._reg = 18;			_closure_reg(a, c + 0);		}		break;	case 1077: /* ASGNI1 */		_label(LEFT_CHILD(a));		_label(RIGHT_CHILD(a));		if (	/* stmt: ASGNI1(VREGP,reg) */			LEFT_CHILD(a)->op == 711 /* VREGP */		) {			c = ((struct _state *)(RIGHT_CHILD(a)->x.state))->cost[_reg_NT] + 0;			if (c + 0 < p->cost[_stmt_NT]) {				p->cost[_stmt_NT] = c + 0;				p->rule._stmt = 1;			}		}		/* stmt: ASGNI1(addr,reg) */		c = ((struct _state *)(LEFT_CHILD(a)->x.state))->cost[_addr_NT] + ((struct _state *)(RIGHT_CHILD(a)->x.state))->cost[_reg_NT] + 1;		if (c + 0 < p->cost[_stmt_NT]) {			p->cost[_stmt_NT] = c + 0;			p->rule._stmt = 14;		}		break;	case 1078: /* ASGNU1 */		_label(LEFT_CHILD(a));		_label(RIGHT_CHILD(a));		if (	/* stmt: ASGNU1(VREGP,reg) */			LEFT_CHILD(a)->op == 711 /* VREGP */		) {			c = ((struct _state *)(RIGHT_CHILD(a)->x.state))->cost[_reg_NT] + 0;			if (c + 0 < p->cost[_stmt_NT]) {				p->cost[_stmt_NT] = c + 0;				p->rule._stmt = 2;			}		}		/* stmt: ASGNU1(addr,reg) */		c = ((struct _state *)(LEFT_CHILD(a)->x.state))->cost[_addr_NT] + ((struct _state *)(RIGHT_CHILD(a)->x.state))->cost[_reg_NT] + 1;		if (c + 0 < p->cost[_stmt_NT]) {			p->cost[_stmt_NT] = c + 0;			p->rule._stmt = 15;		}		break;	case 1093: /* INDIRI1 */		_label(LEFT_CHILD(a));		if (	/* reg: INDIRI1(VREGP) */			LEFT_CHILD(a)->op == 711 /* VREGP */		) {			if (mayrecalc(a)) {				struct _state *q = a->syms[RX]->u.t.cse->x.state;				if (q->cost[_stmt_NT] == 0) {					p->cost[_stmt_NT] = 0;					p->rule._stmt = q->rule._stmt;				}				if (q->cost[_reg_NT] == 0) {					p->cost[_reg_NT] = 0;					p->rule._reg = q->rule._reg;				}				if (q->cost[_con_NT] == 0) {					p->cost[_con_NT] = 0;					p->rule._con = q->rule._con;				}				if (q->cost[_acon_NT] == 0) {					p->cost[_acon_NT] = 0;					p->rule._acon = q->rule._acon;				}				if (q->cost[_addr_NT] == 0) {					p->cost[_addr_NT] = 0;					p->rule._addr = q->rule._addr;				}				if (q->cost[_rc_NT] == 0) {					p->cost[_rc_NT] = 0;					p->rule._rc = q->rule._rc;				}				if (q->cost[_rc6_NT] == 0) {					p->cost[_rc6_NT] = 0;					p->rule._rc6 = q->rule._rc6;				}				if (q->cost[_ar_NT] == 0) {					p->cost[_ar_NT] = 0;					p->rule._ar = q->rule._ar;				}			}			c = 0;			if (c + 0 < p->cost[_reg_NT]) {				p->cost[_reg_NT] = c + 0;				p->rule._reg = 1;				_closure_reg(a, c + 0);			}		}		/* reg: INDIRI1(reg) */		c = ((struct _state *)(LEFT_CHILD(a)->x.state))->cost[_reg_NT] + 1;		if (c + 0 < p->cost[_reg_NT]) {			p->cost[_reg_NT] = c + 0;			p->rule._reg = 23;			_closure_reg(a, c + 0);		}		break;	case 1094: /* INDIRU1 */		_label(LEFT_CHILD(a));		if (	/* reg: INDIRU1(VREGP) */			LEFT_CHILD(a)->op == 711 /* VREGP */		) {			if (mayrecalc(a)) {				struct _state *q = a->syms[RX]->u.t.cse->x.state;				if (q->cost[_stmt_NT] == 0) {					p->cost[_stmt_NT] = 0;					p->rule._stmt = q->rule._stmt;				}				if (q->cost[_reg_NT] == 0) {					p->cost[_reg_NT] = 0;					p->rule._reg = q->rule._reg;				}				if (q->cost[_con_NT] == 0) {					p->cost[_con_NT] = 0;					p->rule._con = q->rule._con;				}				if (q->cost[_acon_NT] == 0) {					p->cost[_acon_NT] = 0;					p->rule._acon = q->rule._acon;				}				if (q->cost[_addr_NT] == 0) {					p->cost[_addr_NT] = 0;					p->rule._addr = q->rule._addr;				}				if (q->cost[_rc_NT] == 0) {					p->cost[_rc_NT] = 0;					p->rule._rc = q->rule._rc;				}				if (q->cost[_rc6_NT] == 0) {					p->cost[_rc6_NT] = 0;					p->rule._rc6 = q->rule._rc6;				}				if (q->cost[_ar_NT] == 0) {					p->cost[_ar_NT] = 0;					p->rule._ar = q->rule._ar;				}			}			c = 0;			if (c + 0 < p->cost[_reg_NT]) {				p->cost[_reg_NT] = c + 0;				p->rule._reg = 2;				_closure_reg(a, c + 0);			}		}		/* reg: INDIRU1(reg) */		c = ((struct _state *)(LEFT_CHILD(a)->x.state))->cost[_reg_NT] + 1;		if (c + 0 < p->cost[_reg_NT]) {			p->cost[_reg_NT] = c + 0;			p->rule._reg = 28;			_closure_reg(a, c + 0);		}		break;	case 1157: /* CVII1 */		break;	case 1158: /* CVIU1 */		break;	case 1205: /* CVUI1 */		break;	case 1206: /* CVUU1 */		break;	case 1253: /* LOADI1 */		_label(LEFT_CHILD(a));		/* reg: LOADI1(reg) */		c = ((struct _state *)(LEFT_CHILD(a)->x.state))->cost[_reg_NT] + (move(a));		if (c + 0 < p->cost[_reg_NT]) {			p->cost[_reg_NT] = c + 0;			p->rule._reg = 98;			_closure_reg(a, c + 0);		}		break;	case 1254: /* LOADU1 */		_label(LEFT_CHILD(a));		/* reg: LOADU1(reg) */		c = ((struct _state *)(LEFT_CHILD(a)->x.state))->cost[_reg_NT] + (move(a));		if (c + 0 < p->cost[_reg_NT]) {			p->cost[_reg_NT] = c + 0;			p->rule._reg = 103;			_closure_reg(a, c + 0);		}		break;	case 2069: /* CNSTI2 */		/* con: CNSTI2 */		if (0 + 0 < p->cost[_con_NT]) {			p->cost[_con_NT] = 0 + 0;			p->rule._con = 3;			_closure_con(a, 0 + 0);		}		/* reg: CNSTI2 */		c = (range(a, 0, 0));		if (c + 0 < p->cost[_reg_NT]) {			p->cost[_reg_NT] = c + 0;			p->rule._reg = 15;			_closure_reg(a, c + 0);		}		break;	case 2070: /* CNSTU2 */		/* con: CNSTU2 */		if (0 + 0 < p->cost[_con_NT]) {			p->cost[_con_NT] = 0 + 0;			p->rule._con = 4;			_closure_con(a, 0 + 0);		}		/* reg: CNSTU2 */		c = (range(a, 0, 0));		if (c + 0 < p->cost[_reg_NT]) {			p->cost[_reg_NT] = c + 0;			p->rule._reg = 19;			_closure_reg(a, c + 0);		}		break;	case 2101: /* ASGNI2 */		_label(LEFT_CHILD(a));		_label(RIGHT_CHILD(a));		if (	/* stmt: ASGNI2(VREGP,reg) */			LEFT_CHILD(a)->op == 711 /* VREGP */		) {			c = ((struct _state *)(RIGHT_CHILD(a)->x.state))->cost[_reg_NT] + 0;			if (c + 0 < p->cost[_stmt_NT]) {				p->cost[_stmt_NT] = c + 0;				p->rule._stmt = 3;			}		}		/* stmt: ASGNI2(addr,reg) */		c = ((struct _state *)(LEFT_CHILD(a)->x.state))->cost[_addr_NT] + ((struct _state *)(RIGHT_CHILD(a)->x.state))->cost[_reg_NT] + 1;		if (c + 0 < p->cost[_stmt_NT]) {			p->cost[_stmt_NT] = c + 0;			p->rule._stmt = 16;		}		break;	case 2102: /* ASGNU2 */		_label(LEFT_CHILD(a));		_label(RIGHT_CHILD(a));		if (	/* stmt: ASGNU2(VREGP,reg) */			LEFT_CHILD(a)->op == 711 /* VREGP */		) {			c = ((struct _state *)(RIGHT_CHILD(a)->x.state))->cost[_reg_NT] + 0;			if (c + 0 < p->cost[_stmt_NT]) {				p->cost[_stmt_NT] = c + 0;				p->rule._stmt = 4;			}		}		/* stmt: ASGNU2(addr,reg) */		c = ((struct _state *)(LEFT_CHILD(a)->x.state))->cost[_addr_NT] + ((struct _state *)(RIGHT_CHILD(a)->x.state))->cost[_reg_NT] + 1;		if (c + 0 < p->cost[_stmt_NT]) {			p->cost[_stmt_NT] = c + 0;			p->rule._stmt = 17;		}		break;	case 2117: /* INDIRI2 */		_label(LEFT_CHILD(a));		if (	/* reg: INDIRI2(VREGP) */			LEFT_CHILD(a)->op == 711 /* VREGP */		) {			if (mayrecalc(a)) {				struct _state *q = a->syms[RX]->u.t.cse->x.state;				if (q->cost[_stmt_NT] == 0) {					p->cost[_stmt_NT] = 0;					p->rule._stmt = q->rule._stmt;				}				if (q->cost[_reg_NT] == 0) {					p->cost[_reg_NT] = 0;					p->rule._reg = q->rule._reg;				}				if (q->cost[_con_NT] == 0) {					p->cost[_con_NT] = 0;					p->rule._con = q->rule._con;				}				if (q->cost[_acon_NT] == 0) {					p->cost[_acon_NT] = 0;					p->rule._acon = q->rule._acon;				}				if (q->cost[_addr_NT] == 0) {					p->cost[_addr_NT] = 0;					p->rule._addr = q->rule._addr;				}				if (q->cost[_rc_NT] == 0) {					p->cost[_rc_NT] = 0;					p->rule._rc = q->rule._rc;				}				if (q->cost[_rc6_NT] == 0) {					p->cost[_rc6_NT] = 0;					p->rule._rc6 = q->rule._rc6;				}				if (q->cost[_ar_NT] == 0) {					p->cost[_ar_NT] = 0;					p->rule._ar = q->rule._ar;

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?