Lines Matching defs:rm
388 static inline unsigned char tcg_calc_opc_len(TCGContext *s, int opc, int r, int rm, int x)
397 rex |= (rm & 8) >> 3; /* REX.B */
399 rex |= opc & (rm >= 4 ? P_REXB_RM : 0);
411 static void tcg_out_opc(TCGContext *s, int opc, int r, int rm, int x)
428 rex |= (rm & 8) >> 3; /* REX.B */
436 rex |= opc & (rm >= 4 ? P_REXB_RM : 0);
461 #define tcg_out_opc(s, opc, r, rm, x) (tcg_out_opc)(s, opc)
464 static void tcg_out_modrm(TCGContext *s, int opc, int r, int rm)
466 tcg_out_opc(s, opc, r, rm, 0);
467 tcg_out8(s, 0xc0 | (LOWREGMASK(r) << 3) | LOWREGMASK(rm));
470 /* Output an opcode with a full "rm + (index<<shift) + offset" address mode.
475 static void tcg_out_modrm_sib_offset(TCGContext *s, int opc, int r, int rm,
481 if (index < 0 && rm < 0) {
489 tcg_target_long pc = (tcg_target_long)s->code_ptr + 5 + ~rm;
526 if (rm < 0) {
527 mod = 0, len = 4, rm = 5;
528 } else if (offset == 0 && LOWREGMASK(rm) != TCG_REG_EBP) {
538 if (index < 0 && LOWREGMASK(rm) != TCG_REG_ESP) {
540 tcg_out_opc(s, opc, r, rm, 0);
541 tcg_out8(s, mod | (LOWREGMASK(r) << 3) | LOWREGMASK(rm));
554 tcg_out_opc(s, opc, r, rm, index);
556 tcg_out8(s, (shift << 6) | (LOWREGMASK(index) << 3) | LOWREGMASK(rm));
568 int rm, tcg_target_long offset)
570 tcg_out_modrm_sib_offset(s, opc, r, rm, -1, 0, offset);