z8kgen.c
来自「基于4个mips核的noc设计」· C语言 代码 · 共 1,314 行 · 第 1/4 页
C
1,314 行
"11I0", "CLASS_BIT_1OR2+0xe", 1, "11I0", "CLASS_BIT_1OR2+0xf", 1, "ssss", "CLASS_REG+(ARG_RS)", 1, "dddd", "CLASS_REG+(ARG_RD)", 1, "aaaa", "CLASS_REG+(ARG_RA)", 1, "bbbb", "CLASS_REG+(ARG_RB)", 1, "rrrr", "CLASS_REG+(ARG_RR)", 1, "ssN0", "CLASS_REGN0+(ARG_RS)", 1, "ddN0", "CLASS_REGN0+(ARG_RD)", 1, "aaN0", "CLASS_REGN0+(ARG_RA)", 1, "bbN0", "CLASS_REGN0+(ARG_RB)", 1, "rrN0", "CLASS_REGN0+(ARG_RR)", 1, "cccc", "CLASS_CC", 1, "nnnn", "CLASS_IMM+(ARG_IMMN)", 1, "xxxx", "CLASS_REG+(ARG_RX)", 1, "xxN0", "CLASS_REGN0+(ARG_RX)", 1, "nminus1", "CLASS_IMM+(ARG_IMMNMINUS1)", 1, "disp16", "CLASS_DISP+(ARG_DISP16)", 4, "disp12", "CLASS_DISP+(ARG_DISP12)", 3, "flags", "CLASS_FLAGS", 1, "address_dst", "CLASS_ADDRESS+(ARG_DST)", 4, "address_src", "CLASS_ADDRESS+(ARG_SRC)", 4, "imm4m1", "CLASS_IMM+(ARG_IMM4M1)", 1, "imm4", "CLASS_IMM+(ARG_IMM4)", 1, "imm8", "CLASS_IMM+(ARG_IMM8)", 2, "imm16", "CLASS_IMM+(ARG_IMM16)", 4, "imm32", "CLASS_IMM+(ARG_IMM32)", 8, "nim8", "CLASS_IMM+(ARG_NIM8)", 2, "0ccc", "CLASS_0CCC", 1, "1ccc", "CLASS_1CCC", 1, "disp8", "CLASS_DISP8", 2, "0disp7", "CLASS_0DISP7", 2, "1disp7", "CLASS_1DISP7", 2, "01ii", "CLASS_01II", 1, "00ii", "CLASS_00II", 1, 0, 0};char *translate (table, x, length) struct tok_struct *table; char *x; int *length;{ int found; found = 0; while (table->match) { int l = strlen (table->match); if (strncmp (table->match, x, l) == 0) { /* Got a hit */ printf ("%s", table->token); *length += table->length; return x + l; } table++; } fprintf (stderr, "Can't find %s\n", x); printf ("**** Can't find %s\n", x); while (*x) x++; return x;}voidchewbits (bits, length) char *bits; int *length;{ int n = 0; *length = 0; printf ("{"); while (*bits) { while (*bits == ' ') { bits++; } bits = translate (toks, bits, length); n++; printf (","); } while (n < BYTE_INFO_LEN - 1) { printf ("0,"); n++; } printf ("}");}staticintchewname (name) char *name;{ char *n; int nargs = 0; n = name; printf ("\""); while (*n && !iswhite (*n)) { printf ("%c", *n); n++; } printf ("\","); /* Scan the operands and make entires for them -remember indirect things */ n = name; printf ("OPC_"); while (*n && !iswhite (*n)) { printf ("%c", *n); n++; } printf (",0,{"); while (*n) { int d; while (*n == ',' || iswhite (*n)) n++; nargs++; n = translate (args, n, &d); printf (","); } if (nargs == 0) { printf ("0"); } printf ("},"); return nargs;}static voidsub (x, c) char *x; char c;{ while (*x) { if (x[0] == c && x[1] == c && x[2] == c && x[3] == c) { x[2] = 'N'; x[3] = '0'; } x++; }}#if 0#define D(x) ((x) == '1' || (x) =='0')#define M(y) (strncmp(y,x,4)==0)printmangled (x) char *x;{ return; while (*x) { if (D (x[0]) && D (x[1]) && D (x[2]) && D (x[3])) { printf ("XXXX"); } else if (M ("ssss")) { printf ("ssss"); } else if (M ("dddd")) { printf ("dddd"); } else printf ("____"); x += 4; if (x[0] == ' ') { printf ("_"); x++; } }}#endif/*#define WORK_TYPE*/voidprint_type (n) struct op *n;{#ifdef WORK_TYPE while (*s && !iswhite (*s)) { l = *s; s++; } switch (l) { case 'l': printf ("32,"); break; case 'b': printf ("8,"); break; default: printf ("16,"); break; }#else printf ("%2d,", n->type);#endif}voidinternal (){ int c = count (); struct op *new = xmalloc (sizeof (struct op) * c); struct op *p = opt; memcpy (new, p, c * sizeof (struct op)); /* sort all names in table alphabetically */ qsort (new, c, sizeof (struct op), func); p = new; while (p->flags[0] != '*') { /* If there are any @rs, sub the ssss into a ssn0, (rs), (ssn0) */ int loop = 1; printf ("\"%s\",%2d, ", p->flags, p->cycles); while (loop) { char *s = p->name; loop = 0; while (*s) { if (s[0] == '@') { char c; /* skip the r and sub the string */ s++; c = s[1]; sub (p->bits, c); } if (s[0] == '(' && s[3] == ')') { sub (p->bits, s[2]); } if (s[0] == '(') { sub (p->bits, s[-1]); } s++; } } print_type (p); printf ("\"%s\",\"%s\",0,\n", p->bits, p->name); p++; }}static voidgas (){ int c = count (); struct op *p = opt; int idx = 0; char *oldname = ""; struct op *new = xmalloc (sizeof (struct op) * c); memcpy (new, p, c * sizeof (struct op)); /* sort all names in table alphabetically */ qsort (new, c, sizeof (struct op), func); printf (" /* THIS FILE IS AUTOMAGICALLY GENERATED, DON'T EDIT IT */\n"); printf ("#define ARG_MASK 0x0f\n"); printf ("#define ARG_SRC 0x01\n"); printf ("#define ARG_DST 0x02\n"); printf ("#define ARG_RS 0x01\n"); printf ("#define ARG_RD 0x02\n"); printf ("#define ARG_RA 0x03\n"); printf ("#define ARG_RB 0x04\n"); printf ("#define ARG_RR 0x05\n"); printf ("#define ARG_RX 0x06\n"); printf ("#define ARG_IMM4 0x01\n"); printf ("#define ARG_IMM8 0x02\n"); printf ("#define ARG_IMM16 0x03\n"); printf ("#define ARG_IMM32 0x04\n"); printf ("#define ARG_IMMN 0x05\n"); printf ("#define ARG_IMMNMINUS1 0x05\n"); printf ("#define ARG_IMM_1 0x06\n"); printf ("#define ARG_IMM_2 0x07\n"); printf ("#define ARG_DISP16 0x08\n"); printf ("#define ARG_NIM8 0x09\n"); printf ("#define ARG_IMM2 0x0a\n"); printf ("#define ARG_IMM1OR2 0x0b\n");
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?