Repository navigation
DynComp: treat the remaining vector shifts as shifts - #88
Conversation
Iop_QSal*, Iop_QShl* (64-bit variants), Iop_Rol64x2, and Iop_SarV128 are shifts, like their 128-bit counterparts. The result gets the tag of the shifted value, and the shift amount does not interact with it.
Treat Iop_QShlNsat*, Iop_Sh*, Iop_Rsh*, Iop_QandSQ*sh*, Iop_QandUQ*sh*, and Iop_QandQ*Nnarrow* as shifts, rather than panicking on them. Move the 64-bit saturating shifts into the 64-bit shift group, Iop_Rol64x2 next to the other rotates, and Iop_SarV128 next to Iop_ShlV128 and Iop_ShrV128. Correct the group headings and the comment about unimplemented opcodes.
Document that Qand* ops tag their QC-flag half with the data tag, that per-lane VECTOR x VECTOR shift amounts are treated like scalar shift amounts, and that the BCD ops are not shifts. Say which function each unimplemented op belongs in, and drop the VDup ops, which are not IROps in libvex_ir.h.
|
@coderabbitai review |
|
|
@coderabbitai review |
✅ Action performedReview finished.
|
|
@coderabbitai review |
|
|
@coderabbitai review |
|
|
@coderabbitai review |
|
|
@coderabbitai review |
|
|
@coderabbitai review |
|
…RF PRs codespecs#89-codespecs#95 Both upgrades should wait for them: codespecs#89, codespecs#90, codespecs#91, and codespecs#95 change dwarf.c (and codespecs#90/codespecs#95 change mc_main.c and mc_include.h), and codespecs#85-codespecs#88 change dyncomp_translate.c. codespecs#85's --dyncomp-unhandled-ops=warn and codespecs#87's explicit unary handling also change how to find unhandled IROps.
Iop_QSal*,Iop_QShl*(64-bit variants),Iop_Rol64x2, andIop_SarV128were in DynComp's list of unhandled binary operators, so Kvasir panicked on them. They are shifts, like their 128-bit counterparts that DynComp already handles, so this PR handles them the same way: the result gets the tag of the shifted value, and the shift amount does not interact with it.Split out of #85.