summary refs log tree commit diff stats
path: root/hw/core/qdev.c
diff options
context:
space:
mode:
authorQi Hu <huqi@loongson.cn>2022-10-24 10:41:55 +0200
committerPaolo Bonzini <pbonzini@redhat.com>2022-10-31 09:46:34 +0100
commit121531751087ad3f8d87ad17068835bbcd14fb02 (patch)
tree6e68c6f3e37f7d642645b284d9df227ed05697d3 /hw/core/qdev.c
parent75d30fde55485b965a1168a21d016dd07b50ed32 (diff)
downloadfocaccia-qemu-121531751087ad3f8d87ad17068835bbcd14fb02.tar.gz
focaccia-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 'hw/core/qdev.c')
0 files changed, 0 insertions, 0 deletions