[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[RFC PATCH v1 03/19] target/i386/hvf: use x86_segment in x86_decode.c
From: |
Wei Liu |
Subject: |
[RFC PATCH v1 03/19] target/i386/hvf: use x86_segment in x86_decode.c |
Date: |
Fri, 21 Feb 2025 00:36:11 -0800 |
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>
---
target/i386/hvf/x86_decode.c | 20 ++++++++++++++------
1 file changed, 14 insertions(+), 6 deletions(-)
diff --git a/target/i386/hvf/x86_decode.c b/target/i386/hvf/x86_decode.c
index a4a28f113f..d6d5894e54 100644
--- a/target/i386/hvf/x86_decode.c
+++ b/target/i386/hvf/x86_decode.c
@@ -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{
--
2.39.5 (Apple Git-154)
- [RFC PATCH v1 00/19] Factor out HVF's instruction emulator, Wei Liu, 2025/02/21
- [RFC PATCH v1 10/19] taret/i386/hvf: provide and use write_mem in emul_ops, Wei Liu, 2025/02/21
- [RFC PATCH v1 05/19] target/i386/hvf: remove HVF specific calls from x86_decode.c, Wei Liu, 2025/02/21
- [RFC PATCH v1 03/19] target/i386/hvf: use x86_segment in x86_decode.c,
Wei Liu <=
- [RFC PATCH v1 15/19] target/i386/hvf: drop some dead code, Wei Liu, 2025/02/21
- [RFC PATCH v1 08/19] target/i386: rename hvf_mmio_buf to mmio_buf, Wei Liu, 2025/02/21
- [RFC PATCH v1 13/19] target/i386: rename lazy flags field and its type, Wei Liu, 2025/02/21
- [RFC PATCH v1 19/19] target/i386: move x86 instruction emulator out of hvf, Wei Liu, 2025/02/21
- [RFC PATCH v1 04/19] target/i386/hvf: introduce x86_emul_ops, Wei Liu, 2025/02/21
- [RFC PATCH v1 02/19] target/i386/hvf: fix the declaration of hvf_handle_io, Wei Liu, 2025/02/21
- [RFC PATCH v1 06/19] target/i386/hvf: move and rename {load, store}_regs, Wei Liu, 2025/02/21
- [RFC PATCH v1 11/19] target/i386/hvf: move and rename simulate_{rdmsr, wrmsr}, Wei Liu, 2025/02/21
- [RFC PATCH v1 12/19] target/i386/hvf: provide and use simulate_{wrmsr, rdmsr} in emul_ops, Wei Liu, 2025/02/21
- [RFC PATCH v1 14/19] target/i386/hvf: drop unused headers, Wei Liu, 2025/02/21