-
Notifications
You must be signed in to change notification settings - Fork 298
Support compsd Pseudo-Op #4024
Copy link
Copy link
Open
Labels
Arch: x86Issues with the x86/x64 architecture pluginIssues with the x86/x64 architecture pluginComponent: ArchitectureIssue needs changes to an architecture pluginIssue needs changes to an architecture pluginEffort: LowIssues require < 1 week of workIssues require < 1 week of workImpact: LowIssue is a papercut or has a good, supported workaroundIssue is a papercut or has a good, supported workaround
Milestone
Description
Activity
Metadata
Metadata
Assignees
Labels
Arch: x86Issues with the x86/x64 architecture pluginIssues with the x86/x64 architecture pluginComponent: ArchitectureIssue needs changes to an architecture pluginIssue needs changes to an architecture pluginEffort: LowIssues require < 1 week of workIssues require < 1 week of workImpact: LowIssue is a papercut or has a good, supported workaroundIssue is a papercut or has a good, supported workaround
This is really nitpicky and rarely an issue, but for the CMPSD instruction (note there are two -- I'm talking about the floating-point comparison one), binja is lifting to a 3-operand intrinisic
_mm_cmpeq_sd. This is misleading because the third operand determines the comparison condition (It is sometimes cmpeq_sd, but only when the third operand is 0). https://www.felixcloutier.com/x86/cmpsdhttps://github.com/Vector35/arch-x86/blob/46061eb65bdc9cd7eddd6f400376895534d61f99/arch_x86_intrinsics.cpp#L4730-L4731
lifts to
But the condition for this instruction is actually NLE rather than EQ. Capstone gives
which would also be an improvement. But the dream would be if these just lifted to proper floating point operations in IR rather than intrinsics :)