pike.git / src / code / amd64.c

version» Context lines:

pike.git/src/code/amd64.c:4764:   static struct amd64_opcode amd64_opcodes[4][256] = {    /* Main table. */   {    /* 0x00 */    { "add", RMR8, }, { "add", RMR, }, { "add", RRM8, }, { "add", RRM, },    { "add", ALI8, }, { "add", AI, }, { NULL, 0, }, { NULL, 0, },    { "or", RMR8, }, { "or", RMR, }, { "or", RRM8, }, { "or", RRM, },    { "or", ALI8, }, { "or", AI, }, { NULL, 0, }, { "F", OP_F, },       /* 0x10 */ +  { "adc", RMR8, }, { "adc", RMR, }, { "adc", RRM8, }, { "adc", RRM, }, +  { "adc", ALI8, }, { "adc", AI, }, { NULL, 0, }, { NULL, 0, },    { NULL, 0, }, { NULL, 0, }, { NULL, 0, }, { NULL, 0, },    { NULL, 0, }, { NULL, 0, }, { NULL, 0, }, { NULL, 0, }, -  { NULL, 0, }, { NULL, 0, }, { NULL, 0, }, { NULL, 0, }, -  { NULL, 0, }, { NULL, 0, }, { NULL, 0, }, { NULL, 0, }, +        /* 0x20 */    { "and", RMR8, }, { "and", RMR, }, { "and", RRM8, }, { "and", RRM, },    { "and", ALI8, }, { "and", AI, }, { "es", G2, }, { NULL, 0, },    { "sub", RMR8, }, { "sub", RMR, }, { "sub", RRM8, }, { "sub", RRM, },    { "sub", ALI8, }, { "sub", AI, }, { "cs", G2, }, { NULL, 0, },       /* 0x30 */    { "xor", RMR8, }, { "xor", RMR, }, { "xor", RRM8, }, { "xor", RRM, },    { NULL, 0, }, { NULL, 0, }, { "ss", G2, }, { NULL, 0, },
pike.git/src/code/amd64.c:4814:       /* 0x80 */    { "and", RMI8OP, }, { "and", RMIOP, }, { NULL, 0, }, { "and", RMSI8OP, },    { "test", RMR8, }, { "test", RMR, }, { NULL, 0, }, { NULL, 0, },    { "mov", RMR8, }, { "mov", RMR, }, { "mov", RRM8, }, { "mov", RRM, },    { "mov", RMS, }, { "lea", RRM, }, { "mov", SRM, }, { NULL, 0, },       /* 0x90 */    { NULL, 0, }, { NULL, 0, }, { NULL, 0, }, { NULL, 0, },    { NULL, 0, }, { NULL, 0, }, { NULL, 0, }, { NULL, 0, }, +  { "cbw/cwde/cdqe", OP_IMPLICIT_A, }, { NULL, 0, }, { NULL, 0, }, { NULL, 0, },    { NULL, 0, }, { NULL, 0, }, { NULL, 0, }, { NULL, 0, }, -  { NULL, 0, }, { NULL, 0, }, { NULL, 0, }, { NULL, 0, }, +        /* 0xa0 */    { "mov", ALM8, }, { "mov", AM, }, { "mov", MAL8, }, { "mov", MA, }, -  { NULL, 0, }, { NULL, 0, }, { NULL, 0, }, { NULL, 0, }, +  { NULL, 0, }, { NULL, 0, }, { "cmpsb", 0, }, { "cmps", 0, },    { "test", ALI8, }, { "test", AI, }, { NULL, 0, }, { NULL, 0, },    { NULL, 0, }, { NULL, 0, }, { NULL, 0, }, { NULL, 0, },       /* 0xb0 */    { "mov", RI8, }, { NULL, 0, }, { NULL, 0, }, { NULL, 0, },    { NULL, 0, }, { NULL, 0, }, { NULL, 0, }, { NULL, 0, },    { "mov", RI, }, { NULL, 0, }, { NULL, 0, }, { NULL, 0, },    { NULL, 0, }, { NULL, 0, }, { NULL, 0, }, { NULL, 0, },       /* 0xc0 */
pike.git/src/code/amd64.c:4857:    /* 0xf0 */    { "lock", G1, }, { NULL, 0, }, { "repne", G1, }, { "rep", G1, },    { NULL, 0, }, { "cmc", 0, }, { "neg", RM8OP|2, }, { "neg", RMOP|2, },    { "clc", 0, }, { NULL, 0, }, { "cli", 0, }, { NULL, 0, },    { "cld", 0, }, { NULL, 0, }, { "dec", RM8OP|3, }, { "dec", RMOP|3, },   },   /* Opcode prefix 0x0f. */   {    /* 0x00 */    { NULL, 0, }, { NULL, 0, }, { NULL, 0, }, { NULL, 0, }, +  { NULL, 0, }, { NULL, 0, }, { "clts", 0, }, { NULL, 0, },    { NULL, 0, }, { NULL, 0, }, { NULL, 0, }, { NULL, 0, },    { NULL, 0, }, { NULL, 0, }, { NULL, 0, }, { NULL, 0, }, -  { NULL, 0, }, { NULL, 0, }, { NULL, 0, }, { NULL, 0, }, +        /* 0x10 */    { NULL, 0, }, { NULL, 0, }, { NULL, 0, }, { NULL, 0, },    { NULL, 0, }, { NULL, 0, }, { NULL, 0, }, { NULL, 0, },    { NULL, 0, }, { NULL, 0, }, { NULL, 0, }, { NULL, 0, },    { NULL, 0, }, { NULL, 0, }, { NULL, 0, }, { NULL, 0, },       /* 0x20 */    { NULL, 0, }, { NULL, 0, }, { NULL, 0, }, { NULL, 0, },    { NULL, 0, }, { NULL, 0, }, { NULL, 0, }, { NULL, 0, },    { NULL, 0, }, { NULL, 0, }, { NULL, 0, }, { NULL, 0, }, -  { NULL, 0, }, { NULL, 0, }, { NULL, 0, }, { NULL, 0, }, +  { NULL, 0, }, { NULL, 0, }, { NULL, 0, }, { "comiss/d", RRM, },       /* 0x30 */    { NULL, 0, }, { NULL, 0, }, { NULL, 0, }, { NULL, 0, },    { NULL, 0, }, { NULL, 0, }, { NULL, 0, }, { NULL, 0, },    { "aes|blendvps/d|crc32", OP_F_38, }, { NULL, 0, }, { "aes|blendps/d", OP_F_3A, }, { NULL, 0, },    { NULL, 0, }, { NULL, 0, }, { NULL, 0, }, { NULL, 0, },       /* 0x40 */    { "cmovo", RRM, }, { "cmovno", RRM, }, { "cmovb", RRM, }, { "cmovae", RRM, },    { "cmove", RRM, }, { "cmovne", RRM, }, { "cmovbe", RRM, }, { "cmova", RRM, },    { "cmovs", RRM, }, { "cmovns", RRM, }, { "cmovp", RRM, }, { "cmovnp", RRM, },    { "cmovel", RRM, }, { "cmovge", RRM, }, { "cmovle", RRM, }, { "cmovg", RRM, },       /* 0x50 */    { NULL, 0, }, { NULL, 0, }, { NULL, 0, }, { NULL, 0, }, -  +  { "andps/d", RRM, }, { "andnps/d", RRM, }, { NULL, 0, }, { NULL, 0, }, +  { "add[p]s/d", RRM, }, { NULL, 0, }, { NULL, 0, }, { NULL, 0, },    { NULL, 0, }, { NULL, 0, }, { NULL, 0, }, { NULL, 0, }, -  { NULL, 0, }, { NULL, 0, }, { NULL, 0, }, { NULL, 0, }, -  { NULL, 0, }, { NULL, 0, }, { NULL, 0, }, { NULL, 0, }, +        /* 0x60 */    { NULL, 0, }, { NULL, 0, }, { NULL, 0, }, { NULL, 0, },    { NULL, 0, }, { NULL, 0, }, { NULL, 0, }, { NULL, 0, },    { NULL, 0, }, { NULL, 0, }, { NULL, 0, }, { NULL, 0, },    { NULL, 0, }, { NULL, 0, }, { NULL, 0, }, { "movdqa", RRM, },       /* 0x70 */    { NULL, 0, }, { NULL, 0, }, { NULL, 0, }, { NULL, 0, },    { NULL, 0, }, { NULL, 0, }, { NULL, 0, }, { NULL, 0, },
pike.git/src/code/amd64.c:5307:    }    switch(modrm & 0xc0) {    case 0x00:    sprintf(buf, "(%s)", reg_buf);    break;    case 0x40:    sprintf(buf, "%d(%s)", ((signed char *)pc)[bytes], reg_buf);    bytes++;    break;    case 0x80: +  if (legacy_prefix[2] == 0x66) { +  sprintf(buf, "%d", ((INT16 *)(pc + bytes))[0]); +  bytes += 2; +  } else {    bytes += amd64_readint32(pc + bytes, buf); -  +  }    sprintf(buf + strlen(buf), "(%s)", reg_buf);    break;    }    break;    case 0xc0:    sprintf(buf, "%s", amd64_describe_reg(byte_mode, legacy_prefix, rex,    rex & 1, modrm & 7));    break;    }    return bytes;
pike.git/src/code/amd64.c:5393:    rex & 1, byte & 0x07);    }       if (op->flags & OP_IMM) {    if (!params[0]) {    params[0] = buffers[0];    buffers[0][0] = 0;    }    if (op->flags & (OP_8|OP_S8)) {    sprintf(buffers[0] + strlen(buffers[0]), "$%d", ((signed char *)pc)[pos++]); +  } else if (legacy_prefix[2] == 0x66) { +  /* 16-bit */ +  sprintf(buffers[1] + strlen(buffers[1]), "$%d", ((signed INT16 *)(pc + pos))[0]); +  pos += 2;    } else {    sprintf(buffers[0] + strlen(buffers[0]), "$");    pos += amd64_readint32(pc + pos, buffers[0] + strlen(buffers[0]));    }    } else if (op->flags & OP_PCREL) {    INT32 val;    if (!params[0]) {    params[0] = buffers[0];    buffers[0][0] = 0;    }