Lines Matching refs:r_m

335  * this decodes the r_m field for mode's 0, 1, 2 in 16 bit mode
348 * This decodes 32 bit addressing mode r_m field for modes 0, 1, 2
361 * This decodes 64 bit addressing mode r_m field for modes 0, 1, 2
1446 #define REX_B 0x01 /* extends ModRM r_m, SIB base, or opcode reg */
1529 dtrace_get_modrm(dis86_t *x, uint_t *mode, uint_t *reg, uint_t *r_m)
1534 dtrace_get_SIB(x, mode, reg, r_m);
1544 dtrace_rex_adjust(uint_t rex_prefix, uint_t mode, uint_t *reg, uint_t *r_m)
1547 if (reg != NULL && r_m == NULL) {
1553 if (r_m != NULL && (REX_B & rex_prefix) != 0)
1554 *r_m += 8;
1660 * r_m = r_m (or reg if mode == 3) field from ModRM byte
1664 * the value of reg or r_m must have already been adjusted for any REX prefix.
1668 dtrace_get_operand(dis86_t *x, uint_t mode, uint_t r_m, int wbit, int opindex)
1694 (void) strlcat(opnd, dis_MMREG[r_m], OPLEN);
1697 (void) strlcat(opnd, dis_XMMREG[r_m], OPLEN);
1700 (void) strlcat(opnd, dis_SEGREG[r_m], OPLEN);
1703 (void) strlcat(opnd, dis_CONTROLREG[r_m], OPLEN);
1706 (void) strlcat(opnd, dis_DEBUGREG[r_m], OPLEN);
1709 (void) strlcat(opnd, dis_TESTREG[r_m], OPLEN);
1713 (void) strlcat(opnd, dis_REG8[r_m], OPLEN);
1715 (void) strlcat(opnd, dis_REG8_REX[r_m], OPLEN);
1718 (void) strlcat(opnd, dis_REG16[r_m], OPLEN);
1722 (void) strlcat(opnd, dis_REG16[r_m], OPLEN);
1724 (void) strlcat(opnd, dis_REG32[r_m], OPLEN);
1726 (void) strlcat(opnd, dis_REG64[r_m], OPLEN);
1741 * mode 1 is r_m + 8 bit displacement
1742 * mode 2 is r_m + 16 bit displacement
1743 * mode 0 is just r_m, unless r_m is 6 which is 16 bit disp
1746 if ((mode == 0 && r_m == 6) || mode == 2)
1751 if (mode == 0 && r_m == 6)
1757 (void) strlcat(opnd, dis_addr16[mode][r_m], OPLEN);
1766 if (r_m == ESP_REGNO || r_m == ESP_REGNO + 8) {
1777 base = r_m;
1789 else if ((r_m & 7) == EBP_REGNO ||
1807 (void) strlcat(opnd, dis_addr32_mode0[r_m],
1810 (void) strlcat(opnd, dis_addr32_mode12[r_m],
1814 (void) strlcat(opnd, dis_addr64_mode0[r_m],
1816 if (r_m == 5) {
1821 (void) strlcat(opnd, dis_addr64_mode12[r_m],
1865 * vbit indicates direction (0 for "opcode r,r_m") or (1 for "opcode r_m, r")
1867 #define STANDARD_MODRM(x, mode, reg, r_m, rex_prefix, wbit, vbit) { \
1868 dtrace_get_modrm(x, &mode, &reg, &r_m); \
1869 dtrace_rex_adjust(rex_prefix, mode, &reg, &r_m); \
1870 dtrace_get_operand(x, mode, r_m, wbit, vbit); \
1877 * wbit is for the r_m operand
1880 #define MIXED_MM(x, mode, reg, r_m, rex_prefix, wbit, w2, vbit) { \
1881 dtrace_get_modrm(x, &mode, &reg, &r_m); \
1882 dtrace_rex_adjust(rex_prefix, mode, &reg, &r_m); \
1883 dtrace_get_operand(x, mode, r_m, wbit, vbit); \
1890 * 0 for "opcode imm, r, r_m" or
1891 * 1 for "opcode imm, r_m, r"
1893 #define THREEOPERAND(x, mode, reg, r_m, rex_prefix, wbit, w2, immsize, vbit) { \
1894 dtrace_get_modrm(x, &mode, &reg, &r_m); \
1895 dtrace_rex_adjust(rex_prefix, mode, &reg, &r_m); \
1896 dtrace_get_operand(x, mode, r_m, wbit, 2-vbit); \
1904 #define FOUROPERAND(x, mode, reg, r_m, rex_prefix, wbit, w2, immsize) { \
1905 dtrace_get_modrm(x, &mode, &reg, &r_m); \
1906 dtrace_rex_adjust(rex_prefix, mode, &reg, &r_m); \
1907 dtrace_get_operand(x, mode, r_m, wbit, 2); \
1916 #define ONEOPERAND_TWOIMM(x, mode, reg, r_m, rex_prefix, wbit, immsize) { \
1917 dtrace_get_modrm(x, &mode, &reg, &r_m); \
1918 dtrace_rex_adjust(rex_prefix, mode, &reg, &r_m); \
1919 dtrace_get_operand(x, mode, r_m, wbit, 2); \
1952 uint_t r_m; /* r_m value from ModRM byte */
2210 dtrace_get_modrm(x, &mode, &opcode3, &r_m);
2220 dp = (instable_t *)&dis_opFP5[r_m];
2226 dp = (instable_t *)&dis_opFP4[opcode3 - 4][r_m];
2437 dtrace_get_modrm(x, &mode, &reg, &r_m);
2438 dtrace_rex_adjust(rex_prefix, mode, &reg, &r_m);
2443 dtrace_get_operand(x, mode, r_m, wbit, 0);
2457 dtrace_get_modrm(x, &mode, &reg, &r_m);
2458 dtrace_rex_adjust(rex_prefix, mode, &reg, &r_m);
2462 dtrace_get_operand(x, mode, r_m, wbit, 0);
2470 dtrace_get_modrm(x, &mode, &reg, &r_m);
2471 dtrace_rex_adjust(rex_prefix, mode, &reg, &r_m);
2476 dtrace_get_operand(x, mode, r_m, wbit, 0);
2485 THREEOPERAND(x, mode, reg, r_m, rex_prefix, wbit, LONG_OPND,
2492 STANDARD_MODRM(x, mode, reg, r_m, rex_prefix, wbit, 0);
2502 STANDARD_MODRM(x, mode, reg, r_m, rex_prefix, wbit, 1);
2508 STANDARD_MODRM(x, mode, reg, r_m, rex_prefix, wbit, 1);
2519 MIXED_MM(x, mode, reg, r_m, rex_prefix, wbit, MM_OPND, 1);
2524 dtrace_get_modrm(x, &mode, &reg, &r_m);
2528 MIXED_MM(x, mode, reg, r_m, rex_prefix, wbit, MM_OPND, 1);
2534 dtrace_get_modrm(x, &mode, &reg, &r_m);
2535 dtrace_rex_adjust(rex_prefix, mode, &reg, &r_m);
2536 dtrace_get_operand(x, mode, r_m, wbit, 2);
2546 STANDARD_MODRM(x, mode, reg, r_m, rex_prefix, wbit, 1);
2552 dtrace_rex_adjust(rex_prefix, mode, NULL, &r_m);
2553 dtrace_get_operand(x, mode, r_m, wbit, 1);
2564 dtrace_get_modrm(x, &mode, &reg, &r_m);
2565 dtrace_rex_adjust(rex_prefix, mode, NULL, &r_m);
2566 dtrace_get_operand(x, mode, r_m, wbit, 1);
2578 r_m = reg;
2579 dtrace_get_operand(x, mode, r_m, wbit, 1);
2623 dtrace_get_modrm(x, &mode, &reg, &r_m);
2624 dtrace_rex_adjust(rex_prefix, mode, NULL, &r_m);
2625 dtrace_get_operand(x, mode, r_m, LONG_OPND, vbit);
2636 dtrace_rex_adjust(rex_prefix, mode, NULL, &r_m);
2637 dtrace_get_operand(x, mode, r_m, wbit, 1);
2654 dtrace_rex_adjust(rex_prefix, mode, NULL, &r_m);
2655 dtrace_get_operand(x, mode, r_m, wbit, 1);
2668 dtrace_get_modrm(x, &mode, &reg, &r_m);
2669 dtrace_rex_adjust(rex_prefix, mode, NULL, &r_m);
2670 dtrace_get_operand(x, mode, r_m, wbit, 0);
2674 if (cpu_mode == SIZE64 && mode == 3 && r_m == 0) {
2701 if (r_m == 0) {
2708 } else if (r_m == 1) {
2724 dtrace_get_modrm(x, &mode, &reg, &r_m);
2727 dtrace_rex_adjust(rex_prefix, mode, NULL, &r_m);
2728 dtrace_get_operand(x, mode, r_m, wbit, 0);
2757 dtrace_get_modrm(x, &mode, &reg, &r_m);
2758 dtrace_rex_adjust(rex_prefix, mode, &reg, &r_m);
2760 dtrace_get_operand(x, REG_ONLY, r_m, LONG_OPND, 1 - vbit);
2814 STANDARD_MODRM(x, mode, reg, r_m, rex_prefix, wbit, 0);
2819 STANDARD_MODRM(x, mode, reg, r_m, rex_prefix, wbit, 1);
2830 MIXED_MM(x, mode, reg, r_m, rex_prefix, wbit, MM_OPND, 0);
2839 dtrace_get_modrm(x, &mode, &reg, &r_m);
2843 dtrace_rex_adjust(rex_prefix, mode, &reg, &r_m);
2844 dtrace_get_operand(x, mode, r_m, wbit, 0);
2856 dtrace_get_modrm(x, &mode, &reg, &r_m);
2860 THREEOPERAND(x, mode, reg, r_m, rex_prefix, wbit, LONG_OPND, 1,
2866 THREEOPERAND(x, mode, reg, r_m, rex_prefix, LONG_OPND, XMM_OPND,
2880 THREEOPERAND(x, mode, reg, r_m, rex_prefix, wbit, w2, 1, 1);
2892 dtrace_get_modrm(x, &mode, &reg, &r_m);
2896 MIXED_MM(x, mode, reg, r_m, rex_prefix, wbit, LONG_OPND, 0);
2906 STANDARD_MODRM(x, mode, reg, r_m, rex_prefix, wbit, 0);
2936 dtrace_get_modrm(x, &mode, &reg, &r_m);
2945 MIXED_MM(x, mode, reg, r_m, rex_prefix, wbit, XMM_OPND, 1);
2953 dtrace_get_modrm(x, &mode, &reg, &r_m);
2963 MIXED_MM(x, mode, reg, r_m, rex_prefix, wbit, XMM_OPND, 0);
2969 MIXED_MM(x, mode, reg, r_m, rex_prefix, wbit, XMM_OPND, 0);
2974 MIXED_MM(x, mode, reg, r_m, rex_prefix, wbit, XMM_OPND, 1);
2982 MIXED_MM(x, mode, reg, r_m, rex_prefix, wbit, XMM_OPND, 0);
2990 MIXED_MM(x, mode, reg, r_m, rex_prefix, wbit, MM_OPND, 0);
2997 MIXED_MM(x, mode, reg, r_m, rex_prefix, wbit, LONG_OPND, 0);
3003 dtrace_get_modrm(x, &mode, &reg, &r_m);
3006 dtrace_rex_adjust(rex_prefix, mode, &reg, &r_m);
3007 dtrace_get_operand(x, mode, r_m, XMM_OPND, 0);
3018 THREEOPERAND(x, mode, reg, r_m, rex_prefix, wbit, XMM_OPND, 1,
3052 FOUROPERAND(x, mode, reg, r_m, rex_prefix, XMM_OPND, XMM_OPND,
3058 ONEOPERAND_TWOIMM(x, mode, reg, r_m, rex_prefix, XMM_OPND, 1);
3073 dtrace_rex_adjust(rex_prefix, mode, NULL, &r_m);
3074 dtrace_get_operand(x, mode, r_m, wbit, 0);
3154 dtrace_rex_adjust(rex_prefix, mode, NULL, &r_m);
3155 dtrace_get_operand(x, mode, r_m, LONG_OPND, 0);
3301 dtrace_get_modrm(x, &mode, &reg, &r_m);
3309 dtrace_rex_adjust(rex_prefix, mode, &reg, &r_m);
3310 dtrace_get_operand(x, mode, r_m, BYTE_OPND, 0);
3315 dtrace_rex_adjust(rex_prefix, mode, &reg, &r_m);
3316 dtrace_get_operand(x, mode, r_m, BYTE_OPND, 0);
3352 x->d86_opnd[0].d86_opnd[4] = r_m + '0';
3366 x->d86_opnd[vbit].d86_opnd[4] = r_m + '0';