Closed krono closed 7 years ago
Buglet:
RSqueak 64bit:
((2 raisedTo: 30) -1 ) bitInvert32. "-3221225474 [SmallInteger]"
" inlined #bitInvert32 "
((2 raisedTo: 30) -1 ) bitXor: 16rFFFFFFFF."3221225472 [SmallInteger]"
Non-Buglet: RSqueak 32bit:
((2 raisedTo: 30) -1 ) bitInvert32. "3221225472 [SmallInteger]"
" inlined #bitInvert32 "
((2 raisedTo: 30) -1 ) bitXor: 16rFFFFFFFF."3221225472 [SmallInteger]"
I noticed that in the previous impl, we ignored the sign in the bit operations and forcibly interpreted the arguments as uints, whereas now we keep the sign intact (and go to rbigint, if required). One thing to try is to revert to the old behavior, and not use rbigint at all, maybe the fallback code does something that rbigint doesn't...
Fixed via 4941d8f6d
Squeak 64bit:
RSqueak 64bit:
Note
#bitXor:
is this inInteger
This is uses excessively in BitBlt(Simulation). viz.
BitBltSimulation >> #copyLoop
:which is translated to
While this looks unproblematic on first sight (b/c uint will be 64bit on 64bit anyway), I'm unsure for all the other shifts