PSLLH/PSRLH/PSRAH: shift amounts 16-31 should use sa[3:0] (SSE gives 0 / sign fill)
Maintainer thường phản hồi trong vòng 4 ngày
Chưa có ai nhận issue này.
Đánh giá
- Độ khó
- 2/5
- Thời gian dự kiến
- 1-3 giờ
- Mức phù hợp với người mới
- 84/100
Hướng nghiên cứu
Trong các dòng 110–115 của mmi_translator.cpp, ba trường hợp dịch halfword truyền giá trị sa thô cho SSE. Đọc các trường hợp đó và so sánh hành vi của chúng với bằng chứng EE được trích dẫn trong issue, bắt đầu từ ps2autotests/tests/cpu/ee_simd/logic.expected. Với các trường hợp này, hãy che lượng dịch để chỉ giữ bốn bit thấp nhất, sau đó xác minh các kernel tái hiện cho sa 16 và 31 khớp với hành vi của EE.
Do mô hình lập chỉ mục viết ra từ nội dung của issue.
Mô tả
Hi! The halfword shift-immediate MMI ops pass the full 5-bit sa field to SSE. On the EE only the low 4 bits count for halfwords, so with sa 16-31 the results differ.
Where: mmi_translator.cpp lines 110-115 (at e5636981) emit _mm_slli_epi16 / _mm_srli_epi16 / _mm_srai_epi16 with the raw sa. SSE returns 0 (or a sign fill for srai) for any count above 15.
What the EE does:
| op | sa | EE | PS2Recomp |
|---|---|---|---|
| psllh / psrlh | 16 | value unchanged (shift by 0) | 0 in every lane |
| psrah | 16 | value unchanged | sign fill |
| psllh / psrlh | 31 | shift by 15 | 0 in every lane |
| psrah | 31 | shift by 15 | sign fill (same result, by coincidence) |
Evidence for the EE rule:
- Real PS2 output in ps2autotests
tests/cpu/ee_simd/logic.expected:psllh -1, 16comes back unchanged andpsllh -1, 31gives8000in every halfword. All 144 shift-immediate lines there fit sa[3:0] for the halfword forms. - PCSX2
MMI.cpp_PSLLH:<< (_Sa_ & 0xf). - DobieStation
emotion_mmi.cpp:shift = (instruction >> 6) & 0xF.
Repro: a one-instruction kernel (lq, psllh t0, a3, 16, sq) built with ps2dev EE gcc, run through PS2Recomp e5636981: every lane comes back 0, where the EE leaves the value unchanged. With sa 15 everything matches. Masking the count to sa & 15 in the three halfword cases fixes all of our sa 16/31 kernels (the word forms PSLLW/PSRLW/PSRAW are fine as they are; there all 5 bits count).
To be fair about impact: a C compiler shouldn't emit a halfword shift of 16 or more, so this most likely only matters for hand-written asm with an unusual count. Happy to open a small PR with the & 15 if that's useful.
AI tools helped with the testing and this write-up. I've reviewed it.
- Ngôn ngữ chính
- C++
- Star
- 3.3k
- Fork
- 149
- Merge trung bình
- 8 giờ 46 phút
- Pull request đã merge (30 ngày)
- 1
Chuẩn bị môi trường
Dự án này không cung cấp dev container, Dockerfile hay hướng dẫn đóng góp, nên bạn cần tự thiết lập môi trường: hãy bắt đầu từ README và xem hướng dẫn đóng góp lần đầu của chúng tôi để biết các bước chung.
Bắt đầu từ đâu
- Đọc hết issue, rồi đọc hướng dẫn đóng góp của dự án.
- Bình luận trên issue rằng bạn sẽ nhận — tránh hai người làm cùng một việc.
- Fork repository và làm thay đổi trên một nhánh.
- Mở pull request có tham chiếu số hiệu của issue.
Issue khác của ran-j/PS2Recomp
-
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 77/100
Maintainer thường phản hồi trong vòng 4 ngày
-
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 88/100
ran-j/PS2Recomp#393 · 1 bình luận ·
Maintainer thường phản hồi trong vòng 4 ngày
-
EE sceCdStatus stub always reports READ (6), hanging games that wait for PAUSECó thể đã có người làm @ahmedgamalalzatary đã nhận 19 ngày trước. Đang mở
Độ khó 1/5 Dưới một giờ Mức phù hợp với người mới 95/100
Maintainer thường phản hồi trong vòng 4 ngày
-
VU0 macro VSQI / VSQD: address and source registers swapped in generated codeCó thể đã có người làm @yanm1103 đã nhận 26 ngày trước. Đang mở
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 72/100
Maintainer thường phản hồi trong vòng 4 ngày
-
Runtime: SampleTexture casts unbounded or NaN texture coordinates to int, which is undefined behaviourCó thể làm lại được Pull request cho issue này đã bị đóng mà không được merge. Đang mở
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 68/100
ran-j/PS2Recomp#273 · 2 bình luận ·
Maintainer thường phản hồi trong vòng 4 ngày
Tất cả issue của ran-j/PS2Recomp
Issue tương tự
-
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 69/100
-
area:qmc bug
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 69/100
Maintainer thường phản hồi trong vòng 3 ngày
-
bug good first issue
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 74/100
ASGC-Game-Jam/asgc-gamejam-2026#563 ·
Maintainer thường phản hồi trong vòng 1 ngày
-
area/ysql kind/bug priority/medium status/awaiting-triage
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 78/100
yugabyte/yugabyte-db#37523 ·
Maintainer thường phản hồi trong vòng 1 ngày
-
Let agents name their jobsĐang mở
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 66/100