PSLLH/PSRLH/PSRAH: shift amounts 16-31 should use sa[3:0] (SSE gives 0 / sign fill)
Los mantenedores suelen responder en 4 días
Nadie ha tomado este issue todavía.
Evaluación
- Dificultad
- 2/5
- Tiempo estimado
- 1-3 horas
- Aptitud para principiantes
- 84/100
Línea de trabajo
En las líneas 110–115 de mmi_translator.cpp, los tres casos de desplazamiento de halfword pasan el valor sin procesar de sa a SSE. Lee esos casos y compara su comportamiento con las pruebas de EE citadas en el issue, empezando por ps2autotests/tests/cpu/ee_simd/logic.expected. Enmascara la cantidad de desplazamiento con sus cuatro bits inferiores en esos casos y luego verifica que los kernels de reproducción para sa 16 y 31 coincidan con el comportamiento de EE.
Escrito por el modelo de indexación a partir del texto del issue.
Descripción
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.
- Lenguaje dominante
- C++
- Estrellas
- 3.3k
- Forks
- 149
- Merge medio
- 8 h 46 min
- PR fusionados (30 d)
- 1
Preparar el entorno
Este proyecto no incluye contenedor de desarrollo, Dockerfile ni guía de contribución, así que la configuración corre por tu cuenta: empieza por su README y consulta nuestra guía para la primera contribución para los pasos generales.
Primeros pasos
- Lee el issue completo y luego la guía de contribución del proyecto.
- Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
- Haz un fork del repositorio y trabaja en una rama.
- Abre un pull request que haga referencia al número del issue.
Más de ran-j/PS2Recomp
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 77/100
Los mantenedores suelen responder en 4 días
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 88/100
ran-j/PS2Recomp#393 · 1 comentario ·
Los mantenedores suelen responder en 4 días
-
EE sceCdStatus stub always reports READ (6), hanging games that wait for PAUSEPosiblemente ocupada @ahmedgamalalzatary la tomó hace 19 días. Abierto
Dificultad 1/5 Menos de una hora Aptitud para principiantes 95/100
Los mantenedores suelen responder en 4 días
-
VU0 macro VSQI / VSQD: address and source registers swapped in generated codePosiblemente ocupada @yanm1103 la tomó hace 26 días. Abierto
Dificultad 2/5 1-3 horas Aptitud para principiantes 72/100
Los mantenedores suelen responder en 4 días
-
Runtime: SampleTexture casts unbounded or NaN texture coordinates to int, which is undefined behaviourQuizá libre de nuevo Un pull request para esta issue se cerró sin fusionarse. Abierto
Dificultad 2/5 1-3 horas Aptitud para principiantes 68/100
ran-j/PS2Recomp#273 · 2 comentarios ·
Los mantenedores suelen responder en 4 días
Todos los issues de ran-j/PS2Recomp
Issues similares
-
area:qmc bug
Dificultad 2/5 1-3 horas Aptitud para principiantes 69/100
Los mantenedores suelen responder en 3 días
-
bug good first issue
Dificultad 2/5 1-3 horas Aptitud para principiantes 74/100
ASGC-Game-Jam/asgc-gamejam-2026#563 ·
Los mantenedores suelen responder en 1 día
-
area/ysql kind/bug priority/medium status/awaiting-triage
Dificultad 2/5 1-3 horas Aptitud para principiantes 78/100
yugabyte/yugabyte-db#37523 ·
Los mantenedores suelen responder en 1 día
-
Let agents name their jobsAbierto
Dificultad 2/5 1-3 horas Aptitud para principiantes 66/100
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 62/100
Cockatrice/Cockatrice#7896 ·
Los mantenedores suelen responder en 1 día