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 + -
显示快捷键?