#include <stdio.h>
#include <capstone/platform.h>
static void printInstruction(MCInst *MI, SStream *O, MCRegisterInfo *MRI)
{
static const uint32_t OpInfo[] = {
0U, 0U, 0U, 0U, 0U, 0U, 0U, 0U, 0U, 0U, 0U, 665U, 0U, 0U, 658U, 687U, 645U, 0U, 0U, 0U, 0U, 0U, 2250U, 2250U, 10363U, 10383U, 2361840U, 2255U, 2404U, 2404U, 10769U, 2099777U, 19161U, 19161U, 10672U, 10672U, 10425U, 10510U, 10510U, 10510U, 10510U, 2099418U, 2099418U, 2099638U, 2099638U, 10774U, 10774U, 2099418U, 2099418U, 2099638U, 2099638U, 10774U, 10774U, 10791U, 553511U, 815655U, 2099768U, 2132815U, 2132815U, 1163U, 19301U, 10614U, 10614U, 10614U, 10614U, 2099807U, 5247047U, 17041459U, 1168U, 1200U, 10488U, 2474U, 2610U, 1207U, 1242U, 10475U, 10723U, 19342U, 6334686U, 6334929U, 19351U, 2099310U, 6334765U, 10569U, 10569U, 2400U, 2400U, 10554U, 10554U, 10585U, 10585U, 10401U, 19256U, 1236U, 6334676U, 1139U, 1224U, 1151U, 1174U, 1187U, 6334772U, 51670U, 2099588U, 10252U, 10252U, 6334968U, 6334883U, 6334906U, 62438U, 70630U, 78822U, 87014U, 95206U, 8432212U, 6596970U, 6334955U, 6334768U, 675U, 10528U, 10528U, 10528U, 10568U, 10568U, 10576U, 10576U, 1247U, 45093065U, 12585354U, 12585483U, 14682170U, 12585018U, 10241U, 10241U, 10241U, 10241U, 10241U, 14682697U, 14682697U, 19134U, 19134U, 100937U, 100937U, 2099282U, 12585545U, 12585545U, 109129U, 109129U, 2099396U, 2099396U, 1105U, 184551985U, 1075U, 1015U, 1045U, 117327U, 19148U, 117327U, 19148U, 100943U, 100943U, 2099292U, 109135U, 109135U, 12585551U, 12585551U, 268437799U, 2462U, 45093054U, 2604U, 452987281U, 452987418U, 19224U, 2099463U, 2099463U, 19169U, 2344U, 2099443U, 2099699U, 2418U, 2132826U, 2132826U, 78681013U, 2136899U, 2132859U, 2132869U, 6334721U, 2456U, 2593U, 10561U, 10561U, 612U, 2132748U, 10264U, 2132728U, 2132728U, 2132728U, 10273U, 2132738U, 125856U, 632U, 2132771U, 2132716U, 2132951U, 2132848U, 2132939U, 10282U, 10621U, 10621U, 10621U, 10621U, 2132928U, 125867U, 2361855U, 2361855U, 2331U, 2331U, 2405U, 2405U, 1133U, 12585025U, 12585037U, 1119U, 1090U, 1030U, 1060U, 100954U, 100954U, 2099301U, 109146U, 109146U, 12585562U, 12585562U, 2239U, 2239U, 19245U, 6334912U, 6334738U, 6334920U, 2100415U, 138207U, 19438U, 10467U, 10715U, 1252U, 2417U, 2361861U, 2361861U, 0U
};
static const char AsmStrs[] = {
'l', 'd', 'a', 'p', 32, 'r', '1', '1', ',', 32, 0,
'g', 'e', 't', 's', 'r', 32, 'r', '1', '1', ',', 32, 0,
's', 'e', 't', 32, 'c', 'p', ',', 32, 0,
's', 'e', 't', 32, 'd', 'p', ',', 32, 0,
's', 'e', 't', 32, 's', 'p', ',', 32, 0,
'c', 'r', 'c', '3', '2', 32, 0,
'l', 'd', 'a', '1', '6', 32, 0,
's', 't', '1', '6', 32, 0,
'c', 'r', 'c', '8', 32, 0,
's', 't', '8', 32, 0,
'#', 32, 'L', 'D', 'A', 'W', 'F', 'I', 32, 0,
'#', 32, 'L', 'D', 'W', 'F', 'I', 32, 0,
'#', 32, 'S', 'T', 'W', 'F', 'I', 32, 0,
'#', 32, 'E', 'H', '_', 'R', 'E', 'T', 'U', 'R', 'N', 32, 0,
'#', 32, 'A', 'D', 'J', 'C', 'A', 'L', 'L', 'S', 'T', 'A', 'C', 'K', 'D', 'O', 'W', 'N', 32, 0,
'#', 32, 'A', 'D', 'J', 'C', 'A', 'L', 'L', 'S', 'T', 'A', 'C', 'K', 'U', 'P', 32, 0,
'#', 32, 'F', 'R', 'A', 'M', 'E', '_', 'T', 'O', '_', 'A', 'R', 'G', 'S', '_', 'O', 'F', 'F', 'S', 'E', 'T', 32, 0,
'b', 'l', 'a', 32, 0,
'l', 's', 'u', 'b', 32, 0,
'l', 'd', 'c', 32, 0,
'l', 'a', 'd', 'd', 32, 0,
'a', 'n', 'd', 32, 0,
'g', 'e', 't', 'd', 32, 0,
'b', 'f', 32, 0,
'e', 'e', 'f', 32, 0,
'w', 'a', 'i', 't', 'e', 'f', 32, 0,
'e', 'c', 'a', 'l', 'l', 'f', 32, 0,
'n', 'e', 'g', 32, 0,
'd', 'g', 'e', 't', 'r', 'e', 'g', 32, 0,
'p', 'e', 'e', 'k', 32, 0,
'm', 'k', 'm', 's', 'k', 32, 0,
'b', 'l', 32, 0,
't', 'e', 's', 't', 'l', 'c', 'l', 32, 0,
's', 'h', 'l', 32, 0,
'k', 'c', 'a', 'l', 'l', 32, 0,
'l', 'm', 'u', 'l', 32, 0,
'e', 'n', 'd', 'i', 'n', 32, 0,
'g', 'e', 't', 'n', 32, 0,
'e', 'x', 't', 'd', 'p', 32, 0,
'r', 'e', 't', 's', 'p', 32, 0,
'k', 'e', 'n', 't', 's', 'p', 32, 0,
'k', 'r', 'e', 's', 't', 's', 'p', 32, 0,
'e', 'x', 't', 's', 'p', 32, 0,
'e', 'q', 32, 0,
'a', 's', 'h', 'r', 32, 0,
'i', 'n', 's', 'h', 'r', 32, 0,
'x', 'o', 'r', 32, 0,
'c', 'l', 'r', 's', 'r', 32, 0,
's', 'e', 't', 's', 'r', 32, 0,
'g', 'e', 't', 'r', 32, 0,
'l', 'd', '1', '6', 's', 32, 0,
'm', 'a', 'c', 'c', 's', 32, 0,
'r', 'e', 'm', 's', 32, 0,
'l', 's', 's', 32, 0,
'g', 'e', 't', 't', 's', 32, 0,
'd', 'i', 'v', 's', 32, 0,
'b', 'l', 'a', 't', 32, 0,
'b', 't', 32, 0,
'i', 'n', 'c', 't', 32, 0,
't', 'e', 's', 't', 'c', 't', 32, 0,
't', 'e', 's', 't', 'w', 'c', 't', 32, 0,
'e', 'e', 't', 32, 0,
'g', 'e', 't', 32, 0,
'w', 'a', 'i', 't', 'e', 't', 32, 0,
'e', 'c', 'a', 'l', 'l', 't', 32, 0,
'i', 'n', 't', 32, 0,
'a', 'n', 'd', 'n', 'o', 't', 32, 0,
'g', 'e', 't', 's', 't', 32, 0,
's', 'e', 'x', 't', 32, 0,
'z', 'e', 'x', 't', 32, 0,
'l', 'd', '8', 'u', 32, 0,
'b', 'a', 'u', 32, 0,
'b', 'u', 32, 0,
'm', 'a', 'c', 'c', 'u', 32, 0,
'r', 'e', 'm', 'u', 32, 0,
'b', 'r', 'u', 32, 0,
'l', 's', 'u', 32, 0,
'l', 'd', 'i', 'v', 'u', 32, 0,
'b', 'y', 't', 'e', 'r', 'e', 'v', 32, 0,
'b', 'i', 't', 'r', 'e', 'v', 32, 0,
'l', 'd', 'a', 'w', 32, 0,
'l', 'd', 'w', 32, 0,
'i', 'n', 'p', 'w', 32, 0,
's', 't', 'w', 32, 0,
'c', 'l', 'z', 32, 0,
'#', 32, 'S', 'E', 'L', 'E', 'C', 'T', '_', 'C', 'C', 32, 'P', 'S', 'E', 'U', 'D', 'O', '!', 0,
's', 'e', 't', 32, 'k', 'e', 'p', ',', 32, 'r', '1', '1', 0,
'L', 'I', 'F', 'E', 'T', 'I', 'M', 'E', '_', 'E', 'N', 'D', 0,
'B', 'U', 'N', 'D', 'L', 'E', 0,
'D', 'B', 'G', '_', 'V', 'A', 'L', 'U', 'E', 0,
'#', 'M', 'E', 'M', 'B', 'A', 'R', 'R', 'I', 'E', 'R', 0,
'L', 'I', 'F', 'E', 'T', 'I', 'M', 'E', '_', 'S', 'T', 'A', 'R', 'T', 0,
'l', 'd', 'a', 'w', 32, 'r', '1', '1', ',', 32, 'c', 'p', '[', 0,
'l', 'd', 'w', 32, 'r', '1', '1', ',', 32, 'c', 'p', '[', 0,
'b', 'l', 'a', 32, 'c', 'p', '[', 0,
'm', 's', 'y', 'n', 'c', 32, 'r', 'e', 's', '[', 0,
's', 'e', 't', 'p', 's', 'c', 32, 'r', 'e', 's', '[', 0,
's', 'e', 't', 'c', 32, 'r', 'e', 's', '[', 0,
's', 'e', 't', 'd', 32, 'r', 'e', 's', '[', 0,
's', 'e', 't', 'c', 'l', 'k', 32, 'r', 'e', 's', '[', 0,
'm', 'j', 'o', 'i', 'n', 32, 'r', 'e', 's', '[', 0,
's', 'e', 't', 'n', 32, 'r', 'e', 's', '[', 0,
's', 'y', 'n', 'c', 'r', 32, 'r', 'e', 's', '[', 0,
'f', 'r', 'e', 'e', 'r', 32, 'r', 'e', 's', '[', 0,
'o', 'u', 't', 's', 'h', 'r', 32, 'r', 'e', 's', '[', 0,
'c', 'h', 'k', 'c', 't', 32, 'r', 'e', 's', '[', 0,
'o', 'u', 't', 'c', 't', 32, 'r', 'e', 's', '[', 0,
'c', 'l', 'r', 'p', 't', 32, 'r', 'e', 's', '[', 0,
's', 'e', 't', 'p', 't', 32, 'r', 'e', 's', '[', 0,
'o', 'u', 't', 't', 32, 'r', 'e', 's', '[', 0,
'o', 'u', 't', 32, 'r', 'e', 's', '[', 0,
'e', 'd', 'u', 32, 'r', 'e', 's', '[', 0,
'e', 'e', 'u', 32, 'r', 'e', 's', '[', 0,
's', 'e', 't', 'e', 'v', 32, 'r', 'e', 's', '[', 0,
's', 'e', 't', 'v', 32, 'r', 'e', 's', '[', 0,
'o', 'u', 't', 'p', 'w', 32, 'r', 'e', 's', '[', 0,
's', 'e', 't', 't', 'w', 32, 'r', 'e', 's', '[', 0,
's', 'e', 't', 'r', 'd', 'y', 32, 'r', 'e', 's', '[', 0,
's', 'e', 't', 32, 'p', 's', '[', 0,
's', 'e', 't', 32, 't', '[', 0,
'i', 'n', 'i', 't', 32, 't', '[', 0,
's', 't', 'a', 'r', 't', 32, 't', '[', 0,
'l', 'd', 'w', 32, 's', 'p', 'c', ',', 32, 's', 'p', '[', '1', ']', 0,
's', 't', 'w', 32, 's', 'p', 'c', ',', 32, 's', 'p', '[', '1', ']', 0,
'l', 'd', 'w', 32, 's', 's', 'r', ',', 32, 's', 'p', '[', '2', ']', 0,
's', 't', 'w', 32, 's', 's', 'r', ',', 32, 's', 'p', '[', '2', ']', 0,
'l', 'd', 'w', 32, 's', 'e', 'd', ',', 32, 's', 'p', '[', '3', ']', 0,
's', 't', 'w', 32, 's', 'e', 'd', ',', 32, 's', 'p', '[', '3', ']', 0,
'l', 'd', 'w', 32, 'e', 't', ',', 32, 's', 'p', '[', '4', ']', 0,
's', 't', 'w', 32, 'e', 't', ',', 32, 's', 'p', '[', '4', ']', 0,
's', 's', 'y', 'n', 'c', 0,
'g', 'e', 't', 32, 'r', '1', '1', ',', 32, 'e', 'd', 0,
'g', 'e', 't', 32, 'r', '1', '1', ',', 32, 'i', 'd', 0,
'c', 'l', 'r', 'e', 0,
'd', 'c', 'a', 'l', 'l', 0,
'g', 'e', 't', 32, 'r', '1', '1', ',', 32, 'k', 'e', 'p', 0,
'g', 'e', 't', 32, 'r', '1', '1', ',', 32, 'k', 's', 'p', 0,
'd', 'e', 'n', 't', 's', 'p', 0,
'd', 'r', 'e', 's', 't', 's', 'p', 0,
't', 's', 'e', 't', 'm', 'r', 32, 'r', 0,
'g', 'e', 't', 32, 'r', '1', '1', ',', 32, 'e', 't', 0,
'f', 'r', 'e', 'e', 't', 0,
'd', 'r', 'e', 't', 0,
'k', 'r', 'e', 't', 0,
'w', 'a', 'i', 't', 'e', 'u', 0,
};
uint32_t Bits = OpInfo[MCInst_getOpcode(MI)];
#ifndef CAPSTONE_DIET
SStream_concat0(O, AsmStrs+(Bits & 2047)-1);
#endif
if (strchr((const char *)AsmStrs+(Bits & 2047)-1, '[')) {
set_mem_access(MI, true, 0);
}
switch ((Bits >> 11) & 3) {
default: case 0:
XCore_insn_extract(MI, (const char *)AsmStrs+(Bits & 2047)-1);
return;
break;
case 1:
printOperand(MI, 0, O);
break;
case 2:
printOperand(MI, 1, O);
break;
case 3:
printOperand(MI, 2, O);
break;
}
switch ((Bits >> 13) & 31) {
default: case 0:
SStream_concat0(O, ", ");
break;
case 1:
return;
break;
case 2:
SStream_concat0(O, "]");
set_mem_access(MI, false, 0);
return;
break;
case 3:
SStream_concat0(O, "\n");
break;
case 4:
SStream_concat0(O, "], ");
set_mem_access(MI, false, 0);
break;
case 5:
SStream_concat0(O, ", res[");
set_mem_access(MI, true, 0);
break;
case 6:
SStream_concat0(O, ", ps[");
set_mem_access(MI, true, 0);
printOperand(MI, 1, O);
SStream_concat0(O, "]");
set_mem_access(MI, false, 0);
return;
break;
case 7:
SStream_concat0(O, "]:cp, ");
set_mem_access(MI, false, XCORE_REG_CP);
printOperand(MI, 0, O);
return;
break;
case 8:
SStream_concat0(O, "]:dp, ");
set_mem_access(MI, false, XCORE_REG_DP);
printOperand(MI, 0, O);
return;
break;
case 9:
SStream_concat0(O, "]:lr, ");
set_mem_access(MI, false, XCORE_REG_LR);
printOperand(MI, 0, O);
return;
break;
case 10:
SStream_concat0(O, "]:pc, ");
set_mem_access(MI, false, XCORE_REG_PC);
printOperand(MI, 0, O);
return;
break;
case 11:
SStream_concat0(O, "]:sp, ");
set_mem_access(MI, false, XCORE_REG_SP);
printOperand(MI, 0, O);
return;
break;
case 12:
SStream_concat0(O, ", dp[");
set_mem_access(MI, true, XCORE_REG_DP);
printOperand(MI, 1, O);
SStream_concat0(O, "]");
set_mem_access(MI, false, 0);
return;
break;
case 13:
SStream_concat0(O, ", sp[");
set_mem_access(MI, true, XCORE_REG_SP);
printOperand(MI, 1, O);
SStream_concat0(O, "]");
set_mem_access(MI, false, 0);
return;
break;
case 14:
SStream_concat0(O, ", cp[");
set_mem_access(MI, true, XCORE_REG_CP);
printOperand(MI, 1, O);
SStream_concat0(O, "]");
set_mem_access(MI, false, 0);
return;
break;
case 15:
SStream_concat0(O, "], r11");
set_mem_access(MI, false, 0);
return;
break;
case 16:
SStream_concat0(O, "]:r");
set_mem_access(MI, false, 0);
printOperand(MI, 0, O);
SStream_concat0(O, ", ");
printOperand(MI, 1, O);
return;
break;
}
switch ((Bits >> 18) & 7) {
default: case 0:
printOperand(MI, 1, O);
break;
case 1:
printOperand(MI, 2, O);
break;
case 2:
printInlineJT(MI, 0, O);
return;
break;
case 3:
printInlineJT32(MI, 0, O);
return;
break;
case 4:
printOperand(MI, 0, O);
SStream_concat0(O, ", ");
break;
}
switch ((Bits >> 21) & 7) {
default: case 0:
SStream_concat0(O, ", ");
break;
case 1:
return;
break;
case 2:
printOperand(MI, 3, O);
SStream_concat0(O, ", ");
printOperand(MI, 4, O);
return;
break;
case 3:
SStream_concat0(O, "]");
set_mem_access(MI, false, 0);
return;
break;
case 4:
SStream_concat0(O, "], ");
set_mem_access(MI, false, 0);
printOperand(MI, 2, O);
return;
break;
case 5:
printOperand(MI, 2, O);
break;
case 6:
SStream_concat0(O, "[");
set_mem_access(MI, true, 0xffff);
printOperand(MI, 2, O);
SStream_concat0(O, "]");
set_mem_access(MI, false, 0);
return;
break;
case 7:
SStream_concat0(O, "[-");
set_mem_access(MI, true, -0xffff);
printOperand(MI, 2, O);
SStream_concat0(O, "]");
set_mem_access(MI, false, 0);
return;
break;
}
switch ((Bits >> 24) & 7) {
default: case 0:
printOperand(MI, 2, O);
break;
case 1:
printOperand(MI, 3, O);
return;
break;
case 2:
SStream_concat0(O, ", ");
printOperand(MI, 3, O);
SStream_concat0(O, ", ");
printOperand(MI, 4, O);
return;
break;
case 3:
printOperand(MI, 4, O);
SStream_concat0(O, ", ");
break;
case 4:
return;
break;
}
switch ((Bits >> 27) & 3) {
default: case 0:
return;
break;
case 1:
printOperand(MI, 2, O);
SStream_concat0(O, ", ");
printOperand(MI, 3, O);
return;
break;
case 2:
SStream_concat0(O, ", ");
printOperand(MI, 3, O);
SStream_concat0(O, ", ");
printOperand(MI, 4, O);
SStream_concat0(O, ", ");
printOperand(MI, 5, O);
return;
break;
case 3:
printOperand(MI, 5, O);
return;
break;
}
}
static const char *getRegisterName(unsigned RegNo)
{
#ifndef CAPSTONE_DIET
static const char AsmStrs[] = {
'r', '1', '0', 0,
'r', '0', 0,
'r', '1', '1', 0,
'r', '1', 0,
'r', '2', 0,
'r', '3', 0,
'r', '4', 0,
'r', '5', 0,
'r', '6', 0,
'r', '7', 0,
'r', '8', 0,
'r', '9', 0,
'c', 'p', 0,
'd', 'p', 0,
's', 'p', 0,
'l', 'r', 0,
};
static const uint8_t RegAsmOffset[] = {
38, 41, 47, 44, 4, 11, 14, 17, 20, 23, 26, 29, 32, 35,
0, 7,
};
return AsmStrs+RegAsmOffset[RegNo-1];
#else
return NULL;
#endif
}