/* 00-07 ([1:0] = 0) ([15:13] = 0-7) */
{"ADDI4SPN $I,D", 23, 6, 5, 11, 12, 7, 8, 9, 10}, /* 12:5 → 5:4|9:6|2|3 */
{"FLD A,fD", 25, 10, 11, 12, 5, 6}, /* 12:10|6:5 → 5:3|7:6 */
{"LW A,D", 26, 6, 10, 11, 12, 5}, /* 12:10|6:5 → 5:3|2|6 */
{"FLW A,fD", 26, 6, 10, 11, 12, 5}, /* 12:10|6:5 → 5:3|2|6 */
{"? ", 0},
{"FSD f2,A", 25, 10, 11, 12, 5, 6}, /* 12:10|6:5 → 5:3|7:6 */
{"SW 2,A", 26, 6, 10, 11, 12, 5}, /* 12:10|6:5 → 5:3|2|6 */
{"FSW f2,A", 26, 6, 10, 11, 12, 5}, /* 12:10|6:5 → 5:3|2|6 */
/* 08-0F ([1:0] = 1) ([15:13] = 0-7 not 4) */
{"ADDI $I,D", -26, 3, 4, 5, 6, 12}, /* 12|6:2 → * 5:0 */
{"JAL p", -21, 3, 4, 5, 11, 2, 7, 6, 9, 10, 8, 12}, /* 12:2 → * 11|4|9:8|10|6|7|3:1|5 */
{"LI $I,D", -26, 3, 4, 5, 6, 12}, /* 12|6:2 → * 5:0 */
{"LUI $I,D", -15, 2, 3, 4, 5, 6, 12}, /* 12|6:2 → * 17:12 */
{"? ", 0},
{"J p", -21, 3, 4, 5, 11, 2, 7, 6, 9, 10, 8, 12}, /* 12:2 → * 11|4|9:8|10|6|7|3:1|5 */
{"BEQZ S,p", -24, 3, 4, 10, 11, 2, 5, 6, 12}, /* 12:10|6:2 → * 8|4|3|7:6|2:1|5 */
{"BNEZ S,p", -24, 3, 4, 10, 11, 2, 5, 6, 12}, /* 12:10|6:2 → * 8|4|3|7:6|2:1|5 */
/* 10-17 ([1:0] = 2) ([15:13] = 0-7 not 4) */
{"SLLI $I,D", 26, 3, 4, 5, 6, 12}, /* 12|6:2 → 5:0 */
{"FLDSP I,fD", 24, 5, 6, 12, 2, 3, 4}, /* 12|6:2 → 5:3|8:6 */
{"LWSP I,D", 25, 4, 5, 6, 12, 2, 3}, /* 12|6:2 → 5:2|7:6 */
{"FLWSP I,fD 25, 4, 5, 6, 12, 2, 3}, /* 12|6:2 → 5:2|7:6 */
{"? ", 0},
{"FSDSP f2,$I", 24, 10, 11, 12, 7, 8, 9}, /* 12:7 → 5:3|8:6 */
{"SWSP 2,$I", 25, 9, 10, 11, 12, 7, 8}, /* 12:7 → 5:2|7:6 */
{"FSWSP f2,$I", 25, 9, 10, 11, 12, 7, 8}, /* 12:7 → 5:2|7:6 */
/* 18-1A ([1:0] = 1) ([15:13] = 4) ([11:10] = 0-2) */
{"SRLI $I,D", 26, 3, 4, 5, 6, 12}, /* 12|6:2 → 5:0 */
{"SRAI $I,D", 26, 3, 4, 5, 6, 12}, /* 12|6:2 → 5:0 */
{"ANDI $I,D", -26, 3, 4, 5, 6, 12}, /* 12|6:2 → * 5:0 */
/* 1B-1E ([1:0] = 1) ([15:13] = 4) ([11:10] = 3) ([6:5] = 0-3) */
{"SUB 2,D", 0},
{"XOR 2,D", 0},
{"OR 2,D", 0},
{"AND 2,D", 0},
/* 1F-22 ([1:0] = 2) ([15:13] = 4) ([12] = 0-1) (rs2 = 0-nonzero) */
{"JR S", 0},
{"MV 2,D", 0},
{"JALR S", 0},
{"ADD 2,D", 0},
/* 23-23 ([1:0] = 1) ([15:13] = 3) ( rd = 2) */
{"ADDI16SP $I", -23, 6, 2, 5, 3, 4, 12}, /* 12|6:2 → * 9|4|6|8:7|5 */
maxn 17 maxop 16 maxperm 34
aop = WBITS(1,0) << 3 + WBITS(15,13);
if((aop & 0x7) == 4){
switch(WBITS(1,0)){
case 1:
aop = 0x18 + WBITS(12,10);
if(aop == 0x1B)
aop += WBITS(6,5);
break;
case 2:
aop = 0x1F + (WBITS(12,12) << 1) + (rs2 != 0);
break;
}
}
cop = &coptab[aop];
imm = 0;
ibits = cop->ibits;
while((i = ibits&0xF) != 0){
imm = (imm<<1) | ((ibits & (1<<i)) != 0);
|