aboutsummaryrefslogtreecommitdiff
path: root/target-i386/cpu.c
diff options
context:
space:
mode:
authorEduardo Habkost <ehabkost@redhat.com>2016-09-22 14:58:32 -0300
committerEduardo Habkost <ehabkost@redhat.com>2016-09-27 16:17:17 -0300
commit8057c621b1b17cbcb35fe67d1a09ada9055873a9 (patch)
tree30d27b49bb6168236c5b90faa12457f13bbce48e /target-i386/cpu.c
parent4928cd6de6b4211a79f98c8dc39115be1e815c2b (diff)
target-i386: xsave: Simplify CPUID[0xD,0].{EAX,EDX} calculation
Instead of assigning individual bits in a loop, just copy the values from ena_mask. Reviewed-by: Richard Henderson <rth@twiddle.net> Signed-off-by: Eduardo Habkost <ehabkost@redhat.com>
Diffstat (limited to 'target-i386/cpu.c')
-rw-r--r--target-i386/cpu.c8
1 files changed, 2 insertions, 6 deletions
diff --git a/target-i386/cpu.c b/target-i386/cpu.c
index 99685812ad..7e66003204 100644
--- a/target-i386/cpu.c
+++ b/target-i386/cpu.c
@@ -2523,15 +2523,11 @@ void cpu_x86_cpuid(CPUX86State *env, uint32_t index, uint32_t count,
for (i = 2; i < ARRAY_SIZE(x86_ext_save_areas); i++) {
const ExtSaveArea *esa = &x86_ext_save_areas[i];
if ((ena_mask >> i) & 1) {
- if (i < 32) {
- *eax |= 1u << i;
- } else {
- *edx |= 1u << (i - 32);
- }
*ecx = MAX(*ecx, esa->offset + esa->size);
}
}
- *eax |= ena_mask & (XSTATE_FP_MASK | XSTATE_SSE_MASK);
+ *eax = ena_mask;
+ *edx = ena_mask >> 32;
*ebx = *ecx;
} else if (count == 1) {
*eax = env->features[FEAT_XSAVE];