mirror of
https://github.com/Motorhead1991/qemu.git
synced 2025-08-29 13:01:52 -06:00
target/i386/hvf: use x86_segment in x86_decode.c
Make the code to rely on the segment definition for checking cs.db. This allows removing HVF specific VMX related definition from the decoder. Introduce a function for retrieving the CS descriptor. No functional change intended. Signed-off-by: Wei Liu <liuwe@linux.microsoft.com> Link: https://lore.kernel.org/r/1740126987-8483-4-git-send-email-liuwe@linux.microsoft.com Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
This commit is contained in:
parent
bc4fa8c3c9
commit
d54d3346b8
1 changed files with 14 additions and 6 deletions
|
@ -1893,6 +1893,16 @@ static void decode_prefix(CPUX86State *env, struct x86_decode *decode)
|
|||
}
|
||||
}
|
||||
|
||||
static struct x86_segment_descriptor get_cs_descriptor(CPUState *s)
|
||||
{
|
||||
struct vmx_segment vmx_cs;
|
||||
x86_segment_descriptor cs;
|
||||
vmx_read_segment_descriptor(s, &vmx_cs, R_CS);
|
||||
vmx_segment_to_x86_descriptor(s, &vmx_cs, &cs);
|
||||
|
||||
return cs;
|
||||
}
|
||||
|
||||
void set_addressing_size(CPUX86State *env, struct x86_decode *decode)
|
||||
{
|
||||
decode->addressing_size = -1;
|
||||
|
@ -1904,10 +1914,9 @@ void set_addressing_size(CPUX86State *env, struct x86_decode *decode)
|
|||
}
|
||||
} else if (!x86_is_long_mode(env_cpu(env))) {
|
||||
/* protected */
|
||||
struct vmx_segment cs;
|
||||
vmx_read_segment_descriptor(env_cpu(env), &cs, R_CS);
|
||||
x86_segment_descriptor cs = get_cs_descriptor(env_cpu(env));
|
||||
/* check db */
|
||||
if ((cs.ar >> 14) & 1) {
|
||||
if (cs.db) {
|
||||
if (decode->addr_size_override) {
|
||||
decode->addressing_size = 2;
|
||||
} else {
|
||||
|
@ -1941,10 +1950,9 @@ void set_operand_size(CPUX86State *env, struct x86_decode *decode)
|
|||
}
|
||||
} else if (!x86_is_long_mode(env_cpu(env))) {
|
||||
/* protected */
|
||||
struct vmx_segment cs;
|
||||
vmx_read_segment_descriptor(env_cpu(env), &cs, R_CS);
|
||||
x86_segment_descriptor cs = get_cs_descriptor(env_cpu(env));
|
||||
/* check db */
|
||||
if ((cs.ar >> 14) & 1) {
|
||||
if (cs.db) {
|
||||
if (decode->op_size_override) {
|
||||
decode->operand_size = 2;
|
||||
} else{
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue