.\lib\rtl\largeint.c
There's a sutraction performed in your implementation. But actually it's a logical negation (asm -> NEG; C -> ~) in this function of the low and high part:
RtlLargeIntegerNegate()
Oliver
PS: I have no CVS access, so anyone here having it should fix this.
Oliver Schneider wrote:
.\lib\rtl\largeint.c
There's a sutraction performed in your implementation. But actually it's a logical negation (asm -> NEG; C -> ~) in this function of the low and high part:
RtlLargeIntegerNegate()
The implementation is actually correct... you can try it yourself:
LARGE_INTEGER Test;
Test.LowPart = Test.HighPart = 24; Test = RtlLargeIntegerNegate(Test); printf("%x %x\n", Test.LowPart, Test.HighPart);
The native implementation uses NEG + *SBB*.
- Filip
The implementation is actually correct... you can try it yourself:
LARGE_INTEGER Test;
Test.LowPart = Test.HighPart = 24; Test = RtlLargeIntegerNegate(Test); printf("%x %x\n", Test.LowPart, Test.HighPart);
The native implementation uses NEG + *SBB*.
That was what I did not recognize. You are right :)
Sorry for this.
Oliver