diff options
| author | Christian Krinitsin <mail@krinitsin.com> | 2025-07-03 19:39:53 +0200 |
|---|---|---|
| committer | Christian Krinitsin <mail@krinitsin.com> | 2025-07-03 19:39:53 +0200 |
| commit | dee4dcba78baf712cab403d47d9db319ab7f95d6 (patch) | |
| tree | 418478faf06786701a56268672f73d6b0b4eb239 /results/classifier/semantic-bugs/instruction/2865 | |
| parent | 4d9e26c0333abd39bdbd039dcdb30ed429c475ba (diff) | |
| download | emulator-bug-study-dee4dcba78baf712cab403d47d9db319ab7f95d6.tar.gz emulator-bug-study-dee4dcba78baf712cab403d47d9db319ab7f95d6.zip | |
restructure results
Diffstat (limited to 'results/classifier/semantic-bugs/instruction/2865')
| -rw-r--r-- | results/classifier/semantic-bugs/instruction/2865 | 65 |
1 files changed, 0 insertions, 65 deletions
diff --git a/results/classifier/semantic-bugs/instruction/2865 b/results/classifier/semantic-bugs/instruction/2865 deleted file mode 100644 index 993bac92..00000000 --- a/results/classifier/semantic-bugs/instruction/2865 +++ /dev/null @@ -1,65 +0,0 @@ -instruction: 0.901 -assembly: 0.741 -mistranslation: 0.694 -device: 0.653 -graphic: 0.618 -socket: 0.439 -vnc: 0.390 -network: 0.364 -other: 0.326 -boot: 0.235 -semantic: 0.210 -KVM: 0.187 - -loongarch64: wrong implementation of `xvldi` instruction -Description of problem: -Consider this sample program. - -```c++ -#include <cstdio> -#include <cstdint> -#include <lsxintrin.h> -#include <lasxintrin.h> - -void dump_u32(__m256i x) { - uint32_t tmp[32/4]; - __lasx_xvst(x, tmp, 0); - putchar('['); - for (int i=0; i < 32/4; i++) { - if (i > 0) { - putchar(' '); - } - - printf("%08x", tmp[i]); - } - puts("]"); -} - -int main() { - __m256i const1 = __lasx_xvldi(-3832); - dump_u32(const1); -} -``` - -The magic constants here means: replicate in 32-bit words a byte (0x4) shifted left by 8. We should have a vector of words 0x800, and indeed, the program run on a real hardware prints expected: - -``` -[00000800 00000800 00000800 00000800 00000800 00000800 00000800 00000800] -``` - -The same program run under Qemu prints: - -``` -[08000800 00000000 08000800 00000000 08000800 00000000 08000800 00000000] -``` -Additional information: -I grabbed the latest sources, it seems there's bug in `target/loongarch/tcg/insn_trans/trans_vec.c.inc`, in function `vldi_get_value`. - -```c - case 1: - /* data: {2{16'0, imm[7:0], 8'0}} */ - data = (t << 24) | (t << 8); - break; -``` - -There should be `(t << (8+32)) | t << 8`. |