diff options
author | Qi Hu | 2022-10-24 10:41:55 +0200 |
---|---|---|
committer | Paolo Bonzini | 2022-10-31 09:46:34 +0100 |
commit | 121531751087ad3f8d87ad17068835bbcd14fb02 (patch) | |
tree | 6e68c6f3e37f7d642645b284d9df227ed05697d3 /util | |
parent | Merge tag 'block-pull-request' of https://gitlab.com/stefanha/qemu into staging (diff) | |
download | qemu-121531751087ad3f8d87ad17068835bbcd14fb02.tar.gz qemu-121531751087ad3f8d87ad17068835bbcd14fb02.tar.xz qemu-121531751087ad3f8d87ad17068835bbcd14fb02.zip |
target/i386: Fix calculation of LOCK NEG eflags
After:
lock negl -0x14(%rbp)
pushf
pop %rax
%rax will contain the wrong value because the "lock neg" calculates the
wrong eflags. Simple test:
#include <assert.h>
int main()
{
__volatile__ unsigned test = 0x2363a;
__volatile__ char cond = 0;
asm(
"lock negl %0 \n\t"
"sets %1"
: "=m"(test), "=r"(cond));
assert(cond & 1);
return 0;
}
Reported-by: Jinyang Shen <shenjinyang@loongson.cn>
Co-Developed-by: Xuehai Chen <chenxuehai@loongson.cn>
Signed-off-by: Xuehai Chen <chenxuehai@loongson.cn>
Signed-off-by: Qi Hu <huqi@loongson.cn>
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
Diffstat (limited to 'util')
0 files changed, 0 insertions, 0 deletions