aboutsummaryrefslogtreecommitdiff
path: root/common-user/safe-syscall.S
diff options
context:
space:
mode:
authorPaolo Bonzini <pbonzini@redhat.com>2024-05-09 12:38:10 +0200
committerPaolo Bonzini <pbonzini@redhat.com>2024-05-10 15:45:14 +0200
commit41c685dc59bb611096f3bb6a663cfa82e4cba97b (patch)
treef011fcbed8e10538ea3d14f2d576e0c281ada6e7 /common-user/safe-syscall.S
parent9f07e47a5e96c88c1d2892fbdcbc8ff0437b7ac3 (diff)
target/i386: fix operand size for DATA16 REX.W POPCNT
According to the manual, 32-bit vs 64-bit is governed by REX.W and REX ignores the 0x66 prefix. This can be confirmed with this program: #include <stdio.h> int main() { int x = 0x12340000; int y; asm("popcntl %1, %0" : "=r" (y) : "r" (x)); printf("%x\n", y); asm("mov $-1, %0; .byte 0x66; popcntl %1, %0" : "+r" (y) : "r" (x)); printf("%x\n", y); asm("mov $-1, %0; .byte 0x66; popcntq %q1, %q0" : "+r" (y) : "r" (x)); printf("%x\n", y); } which prints 5/ffff0000/5 on real hardware and 5/ffff0000/ffff0000 on QEMU. Cc: qemu-stable@nongnu.org Reviewed-by: Zhao Liu <zhao1.liu@intel.com> Reviewed-by: Richard Henderson <richard.henderson@linaro.org> Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
Diffstat (limited to 'common-user/safe-syscall.S')
0 files changed, 0 insertions, 0 deletions