x86: reduce check_{byte,word,long,qword}_reg() overhead

These run after template matching. Therefore it is quite pointless for
them to check all operands, when operand sizes matching across operands
is already known. Exit the loops early in such cases.

In check_byte_reg() also drop a long-stale part of a comment.
This commit is contained in:
Jan Beulich 2024-05-31 10:22:50 +02:00
parent 9736d941f2
commit 939c703789

View File

@ -9850,11 +9850,13 @@ check_byte_reg (void)
if (i.types[op].bitfield.class != Reg)
continue;
/* If this is an eight bit register, it's OK. If it's the 16 or
32 bit version of an eight bit register, we will just use the
low portion, and that's OK too. */
/* If this is an eight bit register, it's OK. */
if (i.types[op].bitfield.byte)
continue;
{
if (i.tm.opcode_modifier.checkoperandsize)
break;
continue;
}
/* I/O port address operands are OK too. */
if (i.tm.operand_types[op].bitfield.instance == RegD
@ -9908,6 +9910,9 @@ check_long_reg (void)
i.suffix);
return 0;
}
else if (i.tm.opcode_modifier.checkoperandsize)
break;
return 1;
}
@ -9943,6 +9948,9 @@ check_qword_reg (void)
register_prefix, i.op[op].regs->reg_name, i.suffix);
return 0;
}
else if (i.tm.opcode_modifier.checkoperandsize)
break;
return 1;
}
@ -9978,6 +9986,9 @@ check_word_reg (void)
i.suffix);
return 0;
}
else if (i.tm.opcode_modifier.checkoperandsize)
break;
return 1;
}