[Vm-dev] Probably pointless endianness question re: Float changes circa 4.6

Eliot Miranda eliot.miranda at gmail.com
Sun Jul 5 22:05:15 UTC 2020


Tim, P.S. now is the best time ever to attempt a 64-bit or 32-bit PPC JIT. The VMMaker.oscog infrastructure is better than ever. I did the ARMv8 code generator in record time (about 6 weeks, ignoring misunderstandings on my part).  And a 32-bit JIT would speed up 6505 images considerably.  I don’t have time to write either of these but I’d love to mentor you if you felt like having a go.

_,,,^..^,,,_ (phone)

> On Jul 5, 2020, at 2:16 PM, David T. Lewis <lewis at mail.msen.com> wrote:
> 
> 
> Hi Tim,
> 
> I cannot follow up on this right now, but will do so soon (maybe tomorrow).
> 
> The float changes for format 6505 are actually quite simple so I'm sure
> we can get this sorted out.
> 
> Dave
> 
>> On Sun, Jul 05, 2020 at 12:52:24PM -0700, Tim Johnson wrote:
>> 
>> Hi all,
>> 
>> I finally achieved something I have wanted to do for ten years, though  
>> its relevance has steadily declined over that time:  build the Carbon  
>> and Cocoa VMs on a PowerPC Mac.
>> 
>> - Carbon VM (4.2.5b1, from VMMaker 4.2.4 on Squeak 4.1)
>> - iOS/ObjC/Cocoa VM (5.7b2, from VMMaker 4.2.6 on Squeak 4.1)
>> 
>> After building a successful product, I took the Carbon VM and began  
>> incrementing the non-oscog VMMaker's version in a Squeak 4.5 image.  I  
>> was able to build products along the way from 4.3.21 past 4.4.12 and  
>> beyond.  (I had to stop when [as could be expected] some plugins  
>> wouldn't export and some support code was missing.)
>> 
>> Eventually I had a Mac Carbon VM which could load 4.6's format 6505  
>> image, and it began displaying the world, but it also had a few  
>> drawing errors and didn't respond to events.  A snip from  
>> SqueakDebug.log is at the end of this message, but probably isn't  
>> worth anyone's time to evaluate!
>> 
>> Where I think my efforts hit a dead end is with the Float changes [2]  
>> in the 6505 image format used by Squeak 4.6 [1].
>> 
>> But I'm just hoping to verify here that the Float changes in image  
>> format 6505 could have fatal implications for a big-endian platform  
>> like PowerPC (the formerly-native format for the Floats ;) ) on a  
>> "vintage" stack/interpreter VM, and that perhaps that would have been / 
>> expected/ to be the last straw for it.  (A further question might be:   
>> how big would the lift have been to keep it going?  Or was that work  
>> done and just would require some extra attention?)
>> 
>> I'm sure none of this is relevant or worth time.  I guess my main  
>> question is whether this was supposed to have "kept working" but  
>> didn't ??? and whether that could have lingering implications on  
>> Squeak's effort (thanks David T Lewis!) to continue supporting the  
>> stack/interpreter VMMaker (though specifically only affecting big- 
>> endian platforms, which admittedly is a very small population).  I  
>> suppose there could hypothetically be some big-endian platform out  
>> there which gets some Linux package of the 4.10.2 VM and fails to  
>> launch any image past 4.5 for similar reasons...?
>> 
>> FWIW, I did try the old Darwin/PPC port of 4.10.2 [3]  with both 4.6  
>> and David T Lewis's "Squeak 5.2-in-V3 format" image (which is no  
>> longer available on the 'net!) and it exhibited similar behavior:   
>> couldn't display the world, ate 100% CPU, had to be forced to quit.
>> 
>> Thanks,
>> a Tim
>> 
>> [1] http://wiki.squeak.org/squeak/6290
>> [2] http://forum.world.st/float-word-order-td106936.html
>> [3] http://squeakvm.org/unix/
>> 
>> Error: Cannot truncate this number
>> 3 July 2020 8:11:03.001 am
>> 
>> VM: unix - Smalltalk
>> Image: Squeak4.6 [latest update: #13700]
>> 
>> SecurityManager state:
>> Restricted: false
>> FileAccess: true
>> SocketAccess: true
>> Working Dir /Users/ADMIN/Downloads/Squeak4.6-13700
>> Trusted Dir /Users/ADMIN/Downloads/Squeak4.6-13700/secure
>> Untrusted Dir /Users/ADMIN/Downloads/Squeak4.6-13700/My Squeak
>> 
>> Float(Object)>>error:
>>    Receiver: NaN
>>    Arguments and temporary variables:
>>        aString:    'Cannot truncate this number'
>>    Receiver's instance variables:
>> NaN
>> Float>>truncated
>>    Receiver: NaN
>>    Arguments and temporary variables:
>>        di:    nil
>>        df:    nil
>>        q:    nil
>>        r:    nil
>>    Receiver's instance variables:
>> NaN
>> Float>>rounded
>>    Receiver: NaN
>>    Arguments and temporary variables:
>> 
>>    Receiver's instance variables:
>> NaN
>> Color>>setRed:green:blue:
>>    Receiver: <<error during printing>>
>>    Arguments and temporary variables:
>>        r:    NaN
>>        g:    NaN
>>        b:    NaN
>>    Receiver's instance variables:
>>        rgb:    nil
>>        cachedDepth:    nil
>>        cachedBitPattern:    nil
>> 
>> Color class>>r:g:b:
>>    Receiver: Color
>>    Arguments and temporary variables:
>>        r:    NaN
>>        g:    NaN
>>        b:    NaN
>>    Receiver's instance variables:
>>        superclass:    Object
>>        methodDict:    a MethodDictionary(size 107)
>>        format:    136
>>        instanceVariables:    #('rgb' 'cachedDepth' 
>>        'cachedBitPattern')
>>        organization:    ('access' alpha blue brightness green hue 
>>        luminance  red saturatio...etc...
>>        subclasses:    {TranslucentColor}
>>        name:    #Color
>>        classPool:    a Dictionary(#Black->Color black 
>>        #Blue->Color blue  #BlueShift->0 #Br...etc...
>>        sharedPools:    nil
>>        environment:    Smalltalk
>>        category:    #'Graphics-Primitives'
>> 
>> Color class>>r:g:b:alpha:
>>    Receiver: Color
>>    Arguments and temporary variables:
>>        r:    NaN
>>        g:    NaN
>>        b:    NaN
>>        alpha:    0.0
>>    Receiver's instance variables:
>>        superclass:    Object
>>        methodDict:    a MethodDictionary(size 107)
>>        format:    136
>>        instanceVariables:    #('rgb' 'cachedDepth' 
>>        'cachedBitPattern')
>>        organization:    ('access' alpha blue brightness green hue 
>>        luminance  red saturatio...etc...
>>        subclasses:    {TranslucentColor}
>>        name:    #Color
>>        classPool:    a Dictionary(#Black->Color black 
>>        #Blue->Color blue  #BlueShift->0 #Br...etc...
>>        sharedPools:    nil
>>        environment:    Smalltalk
>>        category:    #'Graphics-Primitives'
>> 
>> Color>>alphaMixed:with:
>>    Receiver: Color veryDarkGray
>>    Arguments and temporary variables:
>> 


More information about the Vm-dev mailing list