z8kgen.c
来自「基于4个mips核的noc设计」· C语言 代码 · 共 1,314 行 · 第 1/4 页
C
1,314 行
"CZS---", 7, 16, "0000 0101 ssN0 dddd", "or rd,@rs", 0, "CZS---", 9, 16, "0100 0101 0000 dddd address_src", "or rd,address_src", 0, "CZS---", 10, 16, "0100 0101 ssN0 dddd address_src", "or rd,address_src(rs)", 0, "CZS---", 7, 16, "0000 0101 0000 dddd imm16", "or rd,imm16", 0, "CZS---", 4, 16, "1000 0101 ssss dddd", "or rd,rs", 0, "CZSP--", 7, 8, "0000 0100 ssN0 dddd", "orb rbd,@rs", 0,"CZSP--", 9, 8, "0100 0100 0000 dddd address_src", "orb rbd,address_src", 0, "CZSP--", 10, 8, "0100 0100 ssN0 dddd address_src", "orb rbd,address_src(rs)", 0, "CZSP--", 7, 8, "0000 0100 0000 dddd imm8 imm8", "orb rbd,imm8", 0, "CZSP--", 4, 8, "1000 0100 ssss dddd", "orb rbd,rbs", 0, "---V--", 0, 16, "0011 1111 ddN0 ssss", "out @rd,rs", 0, "---V--", 0, 16, "0011 1011 ssss 0110 imm16", "out imm16,rs", 0, "---V--", 0, 8, "0011 1110 ddN0 ssss", "outb @rd,rbs", 0, "---V--", 0, 8, "0011 1010 ssss 0110 imm16", "outb imm16,rbs", 0, "---V--", 0, 16, "0011 1011 ssN0 1010 0000 aaaa ddN0 1000", "outd @rd,@rs,ra", 0, "---V--", 0, 8, "0011 1010 ssN0 1010 0000 aaaa ddN0 1000", "outdb @rd,@rs,rba", 0, "---V--", 0, 8, "0011 1100 ssN0 0010 0000 aaaa ddN0 1000", "outib @rd,@rs,ra", 0, "---V--", 0, 16, "0011 1100 ssN0 0010 0000 aaaa ddN0 0000", "outibr @rd,@rs,ra", 0, "------", 12, 16, "0001 0111 ssN0 ddN0", "pop @rd,@rs", 0, "------", 16, 16, "0101 0111 ssN0 ddN0 address_dst", "pop address_dst(rd),@rs", 0, "------", 16, 16, "0101 0111 ssN0 0000 address_dst", "pop address_dst,@rs", 0, "------", 8, 16, "1001 0111 ssN0 dddd", "pop rd,@rs", 0, "------", 19, 32, "0001 0101 ssN0 ddN0", "popl @rd,@rs", 0, "------", 23, 32, "0101 0101 ssN0 ddN0 address_dst", "popl address_dst(rd),@rs", 0, "------", 23, 32, "0101 0101 ssN0 0000 address_dst", "popl address_dst,@rs", 0, "------", 12, 32, "1001 0101 ssN0 dddd", "popl rrd,@rs", 0, "------", 13, 16, "0001 0011 ddN0 ssN0", "push @rd,@rs", 0, "------", 14, 16, "0101 0011 ddN0 0000 address_src", "push @rd,address_src", 0, "------", 14, 16, "0101 0011 ddN0 ssN0 address_src", "push @rd,address_src(rs)", 0, "------", 12, 16, "0000 1101 ddN0 1001 imm16", "push @rd,imm16", 0, "------", 9, 16, "1001 0011 ddN0 ssss", "push @rd,rs", 0, "------", 20, 32, "0001 0001 ddN0 ssN0", "pushl @rd,@rs", 0, "------", 21, 32, "0101 0001 ddN0 ssN0 address_src", "pushl @rd,address_src(rs)", 0, "------", 21, 32, "0101 0001 ddN0 0000 address_src", "pushl @rd,address_src", 0, "------", 12, 32, "1001 0001 ddN0 ssss", "pushl @rd,rrs", 0, "------", 11, 16, "0010 0011 ddN0 imm4", "res @rd,imm4", 0, "------", 14, 16, "0110 0011 ddN0 imm4 address_dst", "res address_dst(rd),imm4", 0, "------", 13, 16, "0110 0011 0000 imm4 address_dst", "res address_dst,imm4", 0, "------", 4, 16, "1010 0011 dddd imm4", "res rd,imm4", 0,"------", 10, 16, "0010 0011 0000 ssss 0000 dddd 0000 0000", "res rd,rs", 0, "------", 11, 8, "0010 0010 ddN0 imm4", "resb @rd,imm4", 0, "------", 14, 8, "0110 0010 ddN0 imm4 address_dst", "resb address_dst(rd),imm4", 0, "------", 13, 8, "0110 0010 0000 imm4 address_dst", "resb address_dst,imm4", 0, "------", 4, 8, "1010 0010 dddd imm4", "resb rbd,imm4", 0,"------", 10, 8, "0010 0010 0000 ssss 0000 dddd 0000 0000", "resb rbd,rs", 0, "CZSV--", 7, 16, "1000 1101 imm4 0011", "resflg imm4", 0, "------", 10, 16, "1001 1110 0000 cccc", "ret cc", 0, "CZSV--", 6, 16, "1011 0011 dddd 00I0", "rl rd,imm1or2", 0, "CZSV--", 6, 8, "1011 0010 dddd 00I0", "rlb rbd,imm1or2", 0, "CZSV--", 6, 16, "1011 0011 dddd 10I0", "rlc rd,imm1or2", 0, "-Z----", 9, 8, "1011 0010 dddd 10I0", "rlcb rbd,imm1or2", 0, "-Z----", 9, 8, "1011 1110 aaaa bbbb", "rldb rbb,rba", 0, "CZSV--", 6, 16, "1011 0011 dddd 01I0", "rr rd,imm1or2", 0, "CZSV--", 6, 8, "1011 0010 dddd 01I0", "rrb rbd,imm1or2", 0, "CZSV--", 6, 16, "1011 0011 dddd 11I0", "rrc rd,imm1or2", 0, "-Z----", 9, 8, "1011 0010 dddd 11I0", "rrcb rbd,imm1or2", 0, "-Z----", 9, 8, "1011 1100 aaaa bbbb", "rrdb rbb,rba", 0, "CZSV--", 5, 16, "1011 0111 ssss dddd", "sbc rd,rs", 0, "CZSVDH", 5, 8, "1011 0110 ssss dddd", "sbcb rbd,rbs", 0, "CZSVDH", 33, 8, "0111 1111 imm8", "sc imm8", 0,"CZSV--", 15, 16, "1011 0011 dddd 1011 0000 ssss 0000 0000", "sda rd,rs", 0,"CZSV--", 15, 8, "1011 0010 dddd 1011 0000 ssss 0000 0000", "sdab rbd,rs", 0, "CZSV--", 15, 32, "1011 0011 dddd 1111 0000 ssss 0000 0000", "sdal rrd,rs", 0,"CZS---", 15, 16, "1011 0011 dddd 0011 0000 ssss 0000 0000", "sdl rd,rs", 0,"CZS---", 15, 8, "1011 0010 dddd 0011 0000 ssss 0000 0000", "sdlb rbd,rs", 0, "CZS---", 15, 32, "1011 0011 dddd 0111 0000 ssss 0000 0000", "sdll rrd,rs", 0, "------", 11, 16, "0010 0101 ddN0 imm4", "set @rd,imm4", 0, "------", 14, 16, "0110 0101 ddN0 imm4 address_dst", "set address_dst(rd),imm4", 0, "------", 13, 16, "0110 0101 0000 imm4 address_dst", "set address_dst,imm4", 0, "------", 4, 16, "1010 0101 dddd imm4", "set rd,imm4", 0,"------", 10, 16, "0010 0101 0000 ssss 0000 dddd 0000 0000", "set rd,rs", 0, "------", 11, 8, "0010 0100 ddN0 imm4", "setb @rd,imm4", 0, "------", 14, 8, "0110 0100 ddN0 imm4 address_dst", "setb address_dst(rd),imm4", 0, "------", 13, 8, "0110 0100 0000 imm4 address_dst", "setb address_dst,imm4", 0, "------", 4, 8, "1010 0100 dddd imm4", "setb rbd,imm4", 0,"------", 10, 8, "0010 0100 0000 ssss 0000 dddd 0000 0000", "setb rbd,rs", 0, "CZSV--", 7, 16, "1000 1101 imm4 0001", "setflg imm4", 0, "------", 0, 8, "0011 1100 dddd 0101 imm16", "sinb rbd,imm16", 0, "------", 0, 8, "0011 1101 dddd 0101 imm16", "sinb rd,imm16", 0, "------", 0, 16, "0011 1011 ssN0 1000 0001 aaaa ddN0 1000", "sind @rd,@rs,ra", 0, "------", 0, 8, "0011 1010 ssN0 1000 0001 aaaa ddN0 1000", "sindb @rd,@rs,rba", 0, "------", 0, 8, "0011 1100 ssN0 0001 0000 aaaa ddN0 1000", "sinib @rd,@rs,ra", 0, "------", 0, 16, "0011 1100 ssN0 0001 0000 aaaa ddN0 0000", "sinibr @rd,@rs,ra", 0, "CZSV--", 13, 16, "1011 0011 dddd 1001 0000 0000 imm8", "sla rd,imm8", 0, "CZSV--", 13, 8, "1011 0010 dddd 1001 0000 0000 imm8", "slab rbd,imm8", 0, "CZSV--", 13, 32, "1011 0011 dddd 1101 0000 0000 imm8", "slal rrd,imm8", 0, "CZS---", 13, 16, "1011 0011 dddd 0001 0000 0000 imm8", "sll rd,imm8", 0, "CZS---", 13, 8, "1011 0010 dddd 0001 0000 0000 imm8", "sllb rbd,imm8", 0, "CZS---", 13, 32, "1011 0011 dddd 0101 0000 0000 imm8", "slll rrd,imm8", 0, "------", 0, 16, "0011 1011 ssss 0111 imm16", "sout imm16,rs", 0, "------", 0, 8, "0011 1010 ssss 0111 imm16", "soutb imm16,rbs", 0, "------", 0, 16, "0011 1011 ssN0 1011 0000 aaaa ddN0 1000", "soutd @rd,@rs,ra", 0, "------", 0, 8, "0011 1010 ssN0 1011 0000 aaaa ddN0 1000", "soutdb @rd,@rs,rba", 0, "------", 0, 8, "0011 1100 ssN0 0011 0000 aaaa ddN0 1000", "soutib @rd,@rs,ra", 0, "------", 0, 16, "0011 1100 ssN0 0011 0000 aaaa ddN0 0000", "soutibr @rd,@rs,ra", 0, "CZSV--", 13, 16, "1011 0011 dddd 1001 1111 1111 nim8", "sra rd,imm8", 0, "CZSV--", 13, 8, "1011 0010 dddd 1001 1111 1111 nim8", "srab rbd,imm8", 0, "CZSV--", 13, 32, "1011 0011 dddd 1101 1111 1111 nim8", "sral rrd,imm8", 0, "CZSV--", 13, 16, "1011 0011 dddd 0001 1111 1111 nim8", "srl rd,imm8", 0, "CZSV--", 13, 8, "1011 0010 dddd 0001 1111 1111 nim8", "srlb rbd,imm8", 0, "CZSV--", 13, 32, "1011 0011 dddd 0101 1111 1111 nim8", "srll rrd,imm8", 0, "CZSV--", 7, 16, "0000 0011 ssN0 dddd", "sub rd,@rs", 0,"CZSV--", 9, 16, "0100 0011 0000 dddd address_src", "sub rd,address_src", 0, "CZSV--", 10, 16, "0100 0011 ssN0 dddd address_src", "sub rd,address_src(rs)", 0, "CZSV--", 7, 16, "0000 0010 0000 dddd imm16", "sub rd,imm16", 0, "CZSV--", 4, 16, "1000 0011 ssss dddd", "sub rd,rs", 0, "CZSVDH", 7, 8, "0000 0010 ssN0 dddd", "subb rbd,@rs", 0,"CZSVDH", 9, 8, "0100 0010 0000 dddd address_src", "subb rbd,address_src", 0, "CZSVDH", 10, 8, "0100 0010 ssN0 dddd address_src", "subb rbd,address_src(rs)", 0, "CZSVDH", 7, 8, "0000 0010 0000 dddd imm8 imm8", "subb rbd,imm8", 0, "CZSVDH", 4, 8, "1000 0010 ssss dddd", "subb rbd,rbs", 0, "CZSV--", 14, 32, "0001 0010 ssN0 dddd", "subl rrd,@rs", 0, "CZSV--", 15, 32, "0101 0010 0000 dddd address_src", "subl rrd,address_src", 0, "CZSV--", 16, 32, "0101 0010 ssN0 dddd address_src", "subl rrd,address_src(rs)", 0, "CZSV--", 14, 32, "0001 0010 0000 dddd imm32", "subl rrd,imm32", 0, "CZSV--", 8, 32, "1001 0010 ssss dddd", "subl rrd,rrs", 0, "------", 5, 16, "1010 1111 dddd cccc", "tcc cc,rd", 0, "------", 5, 8, "1010 1110 dddd cccc", "tccb cc,rbd", 0, "-ZS---", 8, 16, "0000 1101 ddN0 0100", "test @rd", 0, "------", 11, 16, "0100 1101 0000 0100 address_dst", "test address_dst", 0, "------", 12, 16, "0100 1101 ddN0 0100 address_dst", "test address_dst(rd)", 0, "------", 7, 16, "1000 1101 dddd 0100", "test rd", 0, "-ZSP--", 8, 8, "0000 1100 ddN0 0100", "testb @rd", 0, "-ZSP--", 11, 8, "0100 1100 0000 0100 address_dst", "testb address_dst", 0, "-ZSP--", 12, 8, "0100 1100 ddN0 0100 address_dst", "testb address_dst(rd)", 0, "-ZSP--", 7, 8, "1000 1100 dddd 0100", "testb rbd", 0, "-ZS---", 13, 32, "0001 1100 ddN0 1000", "testl @rd", 0,"-ZS---", 16, 32, "0101 1100 0000 1000 address_dst", "testl address_dst", 0, "-ZS---", 17, 32, "0101 1100 ddN0 1000 address_dst", "testl address_dst(rd)", 0, "-ZS---", 13, 32, "1001 1100 dddd 1000", "testl rrd", 0, "-ZSV--", 25, 8, "1011 1000 ddN0 1000 0000 aaaa ssN0 0000", "trdb @rd,@rs,rba", 0, "-ZSV--", 25, 8, "1011 1000 ddN0 1100 0000 aaaa ssN0 0000", "trdrb @rd,@rs,rba", 0, "-ZSV--", 25, 8, "1011 1000 ddN0 0000 0000 rrrr ssN0 0000", "trib @rd,@rs,rbr", 0, "-ZSV--", 25, 8, "1011 1000 ddN0 0100 0000 rrrr ssN0 0000", "trirb @rd,@rs,rbr", 0, "-ZSV--", 25, 8, "1011 1000 aaN0 1110 0000 rrrr bbN0 1110", "trtdrb @ra,@rb,rbr", 0, "-ZSV--", 25, 8, "1011 1000 aaN0 0010 0000 rrrr bbN0 0000", "trtib @ra,@rb,rr", 0, "-ZSV--", 25, 8, "1011 1000 aaN0 0110 0000 rrrr bbN0 1110", "trtirb @ra,@rb,rbr", 0, "-ZSV--", 25, 8, "1011 1000 aaN0 1010 0000 rrrr bbN0 0000", "trtrb @ra,@rb,rbr", 0, "--S---", 11, 16, "0000 1101 ddN0 0110", "tset @rd", 0, "--S---", 14, 16, "0100 1101 0000 0110 address_dst", "tset address_dst", 0, "--S---", 15, 16, "0100 1101 ddN0 0110 address_dst", "tset address_dst(rd)", 0, "--S---", 7, 16, "1000 1101 dddd 0110", "tset rd", 0, "--S---", 11, 8, "0000 1100 ddN0 0110", "tsetb @rd", 0, "--S---", 14, 8, "0100 1100 0000 0110 address_dst", "tsetb address_dst", 0, "--S---", 15, 8, "0100 1100 ddN0 0110 address_dst", "tsetb address_dst(rd)", 0, "--S---", 7, 8, "1000 1100 dddd 0110", "tsetb rbd", 0, "-ZS---", 7, 16, "0000 1001 ssN0 dddd", "xor rd,@rs", 0,"-ZS---", 9, 16, "0100 1001 0000 dddd address_src", "xor rd,address_src", 0, "-ZS---", 10, 16, "0100 1001 ssN0 dddd address_src", "xor rd,address_src(rs)", 0, "-ZS---", 7, 16, "0000 1001 0000 dddd imm16", "xor rd,imm16", 0, "-ZS---", 4, 16, "1000 1001 ssss dddd", "xor rd,rs", 0, "-ZSP--", 7, 8, "0000 1000 ssN0 dddd", "xorb rbd,@rs", 0,"-ZSP--", 9, 8, "0100 1000 0000 dddd address_src", "xorb rbd,address_src", 0, "-ZSP--", 10, 8, "0100 1000 ssN0 dddd address_src", "xorb rbd,address_src(rs)", 0, "-ZSP--", 7, 8, "0000 1000 0000 dddd imm8 imm8", "xorb rbd,imm8", 0, "-ZSP--", 4, 8, "1000 1000 ssss dddd", "xorb rbd,rbs", 0, "*", 4, 8, "1000 1000 ssss dddd", "xorb rbd,rbs", 0, "*", 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};intcount (){ struct op *p = opt; int r = 0; while (p->name) { r++; p++; } return r;}staticintfunc (a, b) struct op *a; struct op *b;{ return strcmp ((a)->name, (b)->name);}/* opcode literal 0000 nnnn insert nnn into stream operand 0001 nnnn insert operand reg nnn into stream*/struct tok_struct{ char *match; char *token; int length;};struct tok_struct args[] ={ {"address_src(rs)", "CLASS_X+(ARG_RS)",}, {"address_dst(rd)", "CLASS_X+(ARG_RD)",}, {"rs(imm16)", "CLASS_BA+(ARG_RS)",}, {"rd(imm16)", "CLASS_BA+(ARG_RD)",}, {"prd", "CLASS_PR+(ARG_RD)",}, {"address_src", "CLASS_DA+(ARG_SRC)",}, {"address_dst", "CLASS_DA+(ARG_DST)",}, {"rd(rx)", "CLASS_BX+(ARG_RD)",}, {"rs(rx)", "CLASS_BX+(ARG_RS)",}, {"disp16", "CLASS_DISP",}, {"disp12", "CLASS_DISP",}, {"disp7", "CLASS_DISP",}, {"disp8", "CLASS_DISP",}, {"flags", "CLASS_FLAGS",}, {"imm16", "CLASS_IMM+(ARG_IMM16)",}, {"imm1or2", "CLASS_IMM+(ARG_IMM1OR2)",}, {"imm32", "CLASS_IMM+(ARG_IMM32)",}, {"imm4m1", "CLASS_IMM +(ARG_IMM4M1)",}, {"imm4", "CLASS_IMM +(ARG_IMM4)",}, {"n", "CLASS_IMM + (ARG_IMMN)",}, {"ctrl", "CLASS_CTRL",}, {"rba", "CLASS_REG_BYTE+(ARG_RA)",}, {"rbb", "CLASS_REG_BYTE+(ARG_RB)",}, {"rbd", "CLASS_REG_BYTE+(ARG_RD)",}, {"rbs", "CLASS_REG_BYTE+(ARG_RS)",}, {"rbr", "CLASS_REG_BYTE+(ARG_RR)",}, {"rrd", "CLASS_REG_LONG+(ARG_RD)",}, {"rrs", "CLASS_REG_LONG+(ARG_RS)",}, {"rqd", "CLASS_REG_QUAD+(ARG_RD)",}, {"rd", "CLASS_REG_WORD+(ARG_RD)",}, {"rs", "CLASS_REG_WORD+(ARG_RS)",}, {"@rd", "CLASS_IR+(ARG_RD)",}, {"@ra", "CLASS_IR+(ARG_RA)",}, {"@rb", "CLASS_IR+(ARG_RB)",}, {"@rs", "CLASS_IR+(ARG_RS)",}, {"imm8", "CLASS_IMM+(ARG_IMM8)",}, {"i2", "CLASS_IMM+(ARG_IMM2)",}, {"cc", "CLASS_CC",}, {"rr", "CLASS_REG_WORD+(ARG_RR)",}, {"ra", "CLASS_REG_WORD+(ARG_RA)",}, {"rs", "CLASS_REG_WORD+(ARG_RS)",}, {"1", "CLASS_IMM+(ARG_IMM_1)",}, {"2", "CLASS_IMM+(ARG_IMM_2)",}, 0, 0};struct tok_struct toks[] ={ "0000", "CLASS_BIT+0", 1, "0001", "CLASS_BIT+1", 1, "0010", "CLASS_BIT+2", 1, "0011", "CLASS_BIT+3", 1, "0100", "CLASS_BIT+4", 1, "0101", "CLASS_BIT+5", 1, "0110", "CLASS_BIT+6", 1, "0111", "CLASS_BIT+7", 1, "1000", "CLASS_BIT+8", 1, "1001", "CLASS_BIT+9", 1, "1010", "CLASS_BIT+0xa", 1, "1011", "CLASS_BIT+0xb", 1, "1100", "CLASS_BIT+0xc", 1, "1101", "CLASS_BIT+0xd", 1, "1110", "CLASS_BIT+0xe", 1, "1111", "CLASS_BIT+0xf", 1, "00I0", "CLASS_BIT_1OR2+0", 1, "00I0", "CLASS_BIT_1OR2+1", 1, "00I0", "CLASS_BIT_1OR2+2", 1, "00I0", "CLASS_BIT_1OR2+3", 1, "01I0", "CLASS_BIT_1OR2+4", 1, "01I0", "CLASS_BIT_1OR2+5", 1, "01I0", "CLASS_BIT_1OR2+6", 1, "01I0", "CLASS_BIT_1OR2+7", 1, "10I0", "CLASS_BIT_1OR2+8", 1, "10I0", "CLASS_BIT_1OR2+9", 1, "10I0", "CLASS_BIT_1OR2+0xa", 1, "10I0", "CLASS_BIT_1OR2+0xb", 1, "11I0", "CLASS_BIT_1OR2+0xc", 1, "11I0", "CLASS_BIT_1OR2+0xd", 1,
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?