The extended assembly documentation list only "q" as an operand modifier for DImode registers. The "d" seems to be an AMD-ism, which appears to be only begrudgingly supported by gcc. Signed-off-by: Bill Wendling <morbo@xxxxxxxxxx> --- x86/emulator.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/x86/emulator.c b/x86/emulator.c index b132b90..621caf9 100644 --- a/x86/emulator.c +++ b/x86/emulator.c @@ -799,7 +799,7 @@ static void test_smsw_reg(uint64_t *mem) asm(KVM_FEP "smswl %k0\n\t" : "=a" (rax) : "0" (in_rax)); report("32-bit smsw reg", rax == (u32)cr0); - asm(KVM_FEP "smswq %d0\n\t" : "=a" (rax) : "0" (in_rax)); + asm(KVM_FEP "smswq %q0\n\t" : "=a" (rax) : "0" (in_rax)); report("64-bit smsw reg", rax == cr0); }