Home | History | Annotate | Download | only in x86

Lines Matching refs:rex

110 yasm_x86__set_rex_from_reg(unsigned char *rex, unsigned char *low3,
121 if (*rex == 0xff) {
123 N_("cannot use A/B/C/DH with instruction needing REX"));
126 *rex |= 0x40 | (((reg & 8) >> 3) << rexbit);
128 /* AH/BH/CH/DH, so no REX allowed */
129 if (*rex != 0 && *rex != 0xff) {
131 N_("cannot use A/B/C/DH with instruction needing REX"));
134 *rex = 0xff; /* Flag so we can NEVER set it (see above) */
206 unsigned char *rex, unsigned int bits)
210 if (yasm_x86__set_rex_from_reg(rex, &rm, reg, bits, X86_REX_B))
273 yasm_x86__bc_apply_prefixes(x86_common *common, unsigned char *rex,
295 if (!rex)
297 N_("ignoring REX prefix on jump"));
298 else if (*rex == 0xff)
300 N_("REX prefix not allowed on this instruction, ignoring"));
302 *rex = 0x48;
312 if (!rex)
314 N_("ignoring REX prefix on jump"));
315 else if (*rex == 0xff)
317 N_("REX prefix not allowed on this instruction, ignoring"));
319 if (*rex != 0) {
322 N_("overriding generated REX prefix"));
325 N_("multiple REX prefixes, using leftmost"));
331 *rex = (unsigned char)prefixes[i] & 0xff;
439 fprintf(f, "%*sSpPre=%02x REX=%03o PostOp=%u\n", indent_level, "",
441 (unsigned int)insn->rex,
538 &insn->rex, bc))
599 /* VEX and XOP prefixes never have REX (it's embedded in the opcode).
602 * We can't do it earlier, as we don't know all of the REX byte until now.
606 * In order to do this, REX.X, REX.B, and REX.W/VEX.W must all be 0,
611 (insn->rex == 0xff || (insn->rex & 0x0B) == 0)) {
618 } else if (insn->rex != 0xff && insn->rex != 0 &&
822 /* 3-byte VEX/XOP; merge in 1s complement of REX.R, REX.X, REX.B */
824 if (insn->rex != 0xff)
825 insn->opcode.opcode[0] |= ((~insn->rex) & 0x07) << 5;
826 /* merge REX.W via ORing; there should never be a case in which REX.W
829 if (insn->rex != 0xff && (insn->rex & 0x8) != 0)
832 /* 2-byte VEX; merge in 1s complement of REX.R */
834 if (insn->rex != 0xff && (insn->rex & 0x4) == 0)
836 /* No other REX bits should be set */
837 if (insn->rex != 0xff && (insn->rex & 0xB) != 0)
838 yasm_internal_error(N_("x86: REX.WXB set, but 2-byte VEX"));
839 } else if (insn->rex != 0xff && insn->rex != 0) {
841 yasm_internal_error(N_("x86: got a REX prefix in non-64-bit mode"));
842 YASM_WRITE_8(*bufp, insn->rex);