target-i386: add lock mov cr0 = cr8
authorAndre Przywara <andre.przywara@amd.com>
Fri, 18 Sep 2009 22:30:47 +0000 (00:30 +0200)
committerAurelien Jarno <aurelien@aurel32.net>
Sun, 4 Oct 2009 12:04:40 +0000 (14:04 +0200)
AMD CPUs featuring a shortcut to access CR8 even from 32-bit mode.
If you use the LOCK prefix with "mov CR0", it accesses CR8 instead.
This behavior is guarded by the CR8_LEGACY CPUID bit
(Fn8000_0001:ECX[1]).

Signed-off-by: Andre Przywara <andre.przywara@amd.com>
Signed-off-by: Aurelien Jarno <aurelien@aurel32.net>
target-i386/translate.c

index 5b11d7f..0f62a97 100644 (file)
@@ -7351,6 +7351,10 @@ static target_ulong disas_insn(DisasContext *s, target_ulong pc_start)
                 ot = OT_QUAD;
             else
                 ot = OT_LONG;
+            if ((prefixes & PREFIX_LOCK) && (reg == 0) &&
+                (s->cpuid_ext3_features & CPUID_EXT3_CR8LEG)) {
+                reg = 8;
+            }
             switch(reg) {
             case 0:
             case 2: