qemu-aarch64: wrong execution result when executing the code Description of problem: The following aarch64 code results in the wrong execution result `4611686018427387903`, which is `0x3fffffffffffffff`. (The correct result is `-1`) The bug seems to be introduced in between v8.1.5 and v8.2.1 since the results are correct in v8.1.5. ```c // foo.c #include #include int64_t callme(size_t _1, size_t _2, int64_t a, int64_t b, int64_t c); int main() { int64_t ret = callme(0, 0, 0, 1, 2); printf("%ld\n", ret); return 0; } ``` ```s // foo.S .global callme callme: cmp x2, x3 cset x12, lt and w11, w12, #0xff cmp w11, #0x0 csetm x14, ne lsr x13, x14, x4 sxtb x0, w13 ret ``` Steps to reproduce: 1. Build the code with `aarch64-linux-gnu-gcc foo.c foo.S -o foo` (`aarch64-linux-gnu-gcc (Ubuntu 11.4.0-1ubuntu1~22.04) 11.4.0`) 2. Run the code with `qemu-aarch64 -L /usr/aarch64-linux-gnu -E LD_LIBRARY_PATH=/usr/aarch64-linux-gnu/lib foo` and see the result Additional information: - Original discussion is held in [this wasmtime issue](https://github.com/bytecodealliance/wasmtime/issues/8233). Thanks to Alex Crichton for clarifying this bug.