[Vm-dev] SqueakFFI 32-bit (win) | int64_t not working for negative integers

Marcel Taeumel marcel.taeumel at hpi.de
Mon Apr 11 16:42:26 UTC 2022


Hi all --

This is not working in 32-bit on Windows:

FFITestLibrary ffiTest8LongLongSum: -1 with: -1 with: -1 with: -1 with: -1 with: -1 with: -1 with: -1.


It answers " 34359738360 " instead of " - 8 ". It's working fine in a 64-bit build. The debugging output in this test functions says:

8 long longs came in as
i1 = 4294967295 (ffffffff)
i2 = 4294967295 (ffffffff)
i3 = 4294967295 (ffffffff)
i4 = 4294967295 (ffffffff)
i5 = 4294967295 (ffffffff)
i6 = 4294967295 (ffffffff)
i7 = 4294967295 (ffffffff)
i8 = 4294967295 (ffffffff)

... this is clearly wrong. Or is it? On 64-bit, the same function says:

8 long longs came in as
i1 = -1 (ffffffffffffffff)
i2 = -1 (ffffffffffffffff)
i3 = -1 (ffffffffffffffff)
i4 = -1 (ffffffffffffffff)
i5 = -1 (ffffffffffffffff)
i6 = -1 (ffffffffffffffff)
i7 = -1 (ffffffffffffffff)
i8 = -1 (ffffffffffffffff)

Both are formatted via " %lld (%llx) " I am missing something here... did we change the representation of negative integers in Squeak and forgot to update something along ThreadedFFIPlugin >> #ffiIntegerValueOf:? :-/

Best,
Marcel

***

EXPORT(long long) ffiTest8LongLongSum(long long c1, long long c2, long long c3, long long c4, long long c5, long long c6, long long c7, long long c8)
{
printf("8 long longs came in as\ni1 = %lld (%llx)\ni2 = %lld (%llx)\ni3 = %lld (%llx)\ni4 = %lld (%llx)\ni5 = %lld (%llx)\ni6 = %lld (%llx)\ni7 = %lld (%llx)\ni8 = %lld (%llx)\n", c1, c1, c2, c2, c3, c3, c4, c4, c5, c5, c6, c6, c7, c7, c8, c8);
return c1 + c2 + c3 + c4 + c5 + c6 + c7 + c8;
}
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.squeakfoundation.org/pipermail/vm-dev/attachments/20220411/077d5f59/attachment.html>


More information about the Vm-dev mailing list