mirror of
https://github.com/Motorhead1991/qemu.git
synced 2025-08-09 10:34:58 -06:00
target/i386: Fix carry flag for BLSI
BLSI has inverted semantics for C as compared to the other two BMI1 instructions, BLSMSK and BLSR. Introduce CC_OP_BLSI* for this purpose. Resolves: https://gitlab.com/qemu-project/qemu/-/issues/2175 Signed-off-by: Richard Henderson <richard.henderson@linaro.org> Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org> Message-Id: <20240801075845.573075-3-richard.henderson@linaro.org>
This commit is contained in:
parent
266d6dddbd
commit
83a3a20e59
7 changed files with 72 additions and 1 deletions
|
@ -16,6 +16,7 @@ X86_64_TESTS += noexec
|
|||
X86_64_TESTS += cmpxchg
|
||||
X86_64_TESTS += adox
|
||||
X86_64_TESTS += test-1648
|
||||
X86_64_TESTS += test-2175
|
||||
TESTS=$(MULTIARCH_TESTS) $(X86_64_TESTS) test-x86_64
|
||||
else
|
||||
TESTS=$(MULTIARCH_TESTS)
|
||||
|
|
24
tests/tcg/x86_64/test-2175.c
Normal file
24
tests/tcg/x86_64/test-2175.c
Normal file
|
@ -0,0 +1,24 @@
|
|||
/* SPDX-License-Identifier: GPL-2.0-or-later */
|
||||
/* See https://gitlab.com/qemu-project/qemu/-/issues/2185 */
|
||||
|
||||
#include <assert.h>
|
||||
|
||||
int test_setc(unsigned int x, unsigned int y)
|
||||
{
|
||||
asm("blsi %1, %0; setc %b0" : "+r"(x) : "r"(y));
|
||||
return (unsigned char)x;
|
||||
}
|
||||
|
||||
int test_pushf(unsigned int x, unsigned int y)
|
||||
{
|
||||
asm("blsi %1, %0; pushf; pop %q0" : "+r"(x) : "r"(y));
|
||||
return x & 1;
|
||||
}
|
||||
|
||||
int main()
|
||||
{
|
||||
assert(test_setc(1, 0xedbf530a));
|
||||
assert(test_pushf(1, 0xedbf530a));
|
||||
return 0;
|
||||
}
|
||||
|
Loading…
Add table
Add a link
Reference in a new issue