[squeak-dev] 2 raisedTo: 63 on Pi returns 0 ? (was Re: how to determine available RAM?)

David T. Lewis lewis at mail.msen.com
Sun May 9 15:07:30 UTC 2021


youtube.com/watch?v=OjYoNL4g5Vg

Dave


On Sun, May 09, 2021 at 04:56:44PM +0200, Bruce O'Neel wrote:
> 
>   
> Hi,  
>   
> Tim seems to be using a 64 bit VM on the Pi 4. I do not see it on 32 bit VMs on a Pi 3 nor on a Pi 400, so the same hardware. ??I do see it on a Arm64 system though.  
>   
> So it seems, for once, not to be a 32 bit system problem and does seem to be just Arm64.  
>   
> cheers  
>   
> bruce  
>   
>   
> 
> > On Sat, May 08, 2021 at 03:25:35PM -0700, tim Rowledge wrote:  
> >  > I had to modify Dave's code smidge because #raisedTo: etc get used in the printing of the results of theTranscript>showln: used in ... #raisedToInteger:, which confused things a smidge.  
> >  >  
> >  > So, renamed to #testRaisedToInteger: -  
> >  >  
> >  > On Mac 64bit  
> >  > TOP LOOP 1 BITPROBE 32  
> >  > INNER LOOP 4  
> >  > TOP LOOP 4 BITPROBE 16  
> >  > INNER LOOP 64  
> >  > TOP LOOP 64 BITPROBE 8  
> >  > INNER LOOP 16384  
> >  > TOP LOOP 16384 BITPROBE 4  
> >  > INNER LOOP 1073741824  
> >  > TOP LOOP 1073741824 BITPROBE 2  
> >  > INNER LOOP 4611686018427387904  
> >  > TOP LOOP 4611686018427387904 BITPROBE 1  
> >  >  
> >  > On Pi4 64bit  
> >  >  
> >  > TOP LOOP 1 BITPROBE 32  
> >  > INNER LOOP 4  
> >  > TOP LOOP 4 BITPROBE 16  
> >  > INNER LOOP 64  
> >  > TOP LOOP 64 BITPROBE 8  
> >  > INNER LOOP 16384  
> >  > TOP LOOP 16384 BITPROBE 4  
> >  > INNER LOOP 1073741824  
> >  > TOP LOOP 1073741824 BITPROBE 2  
> >  > INNER LOOP 0  
> >  > TOP LOOP 0 BITPROBE 1  
> >  >  
> >  > What we then see is that the Integer>>#digitMultiply:neg: primitive is failing; commenting out the prim gets us the correct answer.  
> >  >  
> >  > However, to make like that bit more amusing,  
> >  > `SmallInteger maxVal squared`  
> >  > gives the same answer on both systems (with the prim enabled on Pi 4) so it isn't simply that the largeint plugin is broken overall.  
> >  > If I try 16r80000000 squared I *usually* get 0 but once or twice get 4611686018427387904, so clearly something odd is going on. Given that this appears to be platform specific I have to start suspecting something in the ARM64 trampoline code.  
> >  >  
> >   
> >   
> >  If the primitive is failing for 16r80000000 squared, then I wonder if we  
> >  may be looking at a signed/unsigned arithmetic problem somewhere in the  
> >  plugin.  
> >   
> >  16r80000000 asRegister ==> a TwosComplementRegister with value -2147483648 (10000000000000000000000000000000)  
> >   
> >  You are running a 32-bit VM on Pi, right? If so, then perhaps the  
> >  same failure is happening on other 32-bit VMs but nobody noticed it  
> >  until now?  
> >   
> >  Dave
>   
> 

> 



More information about the Squeak-dev mailing list