Open samrussell opened 8 months ago
Does your PR not add support for this?
Nope, the my PR for the Z80 plugin is a workaround, but this is a binary ninja issue. LLIL_ADC has the carry flag automatically calculated but LLIL_SBB doesn't. From what I can see SBB is just the complement to ADC and the fact that ADC is implemented means SBB should also be implemented in the default Architecture
implementation
I think this might actually be a symptom of the SBB opcode not being fully implemented in x86/x64, which would make it a bug, not an enhancement:
from slack:
Version and Platform (required):
Bug Description: Extending the gameboy plugin to implement LLIL lifting, the carry flag appears to process correctly on most arithmetic instructions but sub_borrow raises an error
replicating 0000397c 9a sbc A, D
in comparison, SUB works fine
00003977 92 sub D
my guess is this was just an oversight and the flag calculation on LowLevelILFunction.sub() can be copied across (unsigned comparison of rhs and result and if result is larger then we have overflowed and set C)