qemu/target
Alexandro Sanchez Bach 5cd10051c2 target/i386: Fix andn instruction
In commit 7073fbada7, the `andn` instruction
was implemented via `tcg_gen_andc` but passes the operands in the wrong
order:
- X86 defines `andn dest,src1,src2` as: dest = ~src1 & src2
- TCG defines `andc dest,src1,src2` as: dest = src1 & ~src2

The following simple test shows the issue:

    #include <stdio.h>
    #include <stdint.h>

    int main(void) {
        uint32_t ret = 0;
        __asm (
            "mov $0xFF00, %%ecx\n"
            "mov $0x0F0F, %%eax\n"
            "andn %%ecx, %%eax, %%ecx\n"
            "mov %%ecx, %0\n"
          : "=r" (ret));
        printf("%08X\n", ret);
        return 0;
    }

This patch fixes the problem by simply swapping the order of the two last
arguments in `tcg_gen_andc_tl`.

Reported-by: Alexandro Sanchez Bach <alexandro@phi.nz>
Signed-off-by: Alexandro Sanchez Bach <alexandro@phi.nz>
Cc: qemu-stable@nongnu.org
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
2018-04-05 14:41:54 +02:00
..
alpha cpu: get rid of unused cpu_init() defines 2018-03-19 14:10:36 -03:00
arm target/arm: Always set FAR to a known unknown value for debug exceptions 2018-03-23 18:26:46 +00:00
cris cpu: get rid of unused cpu_init() defines 2018-03-19 14:10:36 -03:00
hppa target/hppa: Include priv level in user-only iaoq 2018-03-26 22:56:57 +08:00
i386 target/i386: Fix andn instruction 2018-04-05 14:41:54 +02:00
lm32 cpu: get rid of unused cpu_init() defines 2018-03-19 14:10:36 -03:00
m68k -----BEGIN PGP SIGNATURE----- 2018-03-20 14:19:23 +00:00
microblaze cpu: get rid of unused cpu_init() defines 2018-03-19 14:10:36 -03:00
mips cpu: get rid of unused cpu_init() defines 2018-03-19 14:10:36 -03:00
moxie cpu: get rid of unused cpu_init() defines 2018-03-19 14:10:36 -03:00
nios2 cpu: get rid of unused cpu_init() defines 2018-03-19 14:10:36 -03:00
openrisc cpu: get rid of unused cpu_init() defines 2018-03-19 14:10:36 -03:00
ppc cpu: get rid of unused cpu_init() defines 2018-03-19 14:10:36 -03:00
riscv RISC-V: Workaround for critical mstatus.FS bug 2018-03-29 10:22:26 -07:00
s390x s390x/cpumodel: fix feature groups and breakage of MSA8 2018-03-23 09:05:42 +00:00
sh4 cpu: get rid of unused cpu_init() defines 2018-03-19 14:10:36 -03:00
sparc cpu: get rid of unused cpu_init() defines 2018-03-19 14:10:36 -03:00
tilegx cpu: get rid of unused cpu_init() defines 2018-03-19 14:10:36 -03:00
tricore cpu: get rid of unused cpu_init() defines 2018-03-19 14:10:36 -03:00
unicore32 cpu: get rid of unused cpu_init() defines 2018-03-19 14:10:36 -03:00
xtensa target/xtensa: fix timers test 2018-03-26 14:17:04 -07:00