[Vm-dev] Pharo 2.0 and VM Simulator

phil at highoctane.be phil at highoctane.be
Fri Apr 12 09:43:39 UTC 2013


This is what I do have:

VMClass subclass: #InterpreterPrimitives
VMClass subclass: #ObjectMemory
ObjectMemory subclass: #Interpreter

and also:

InterpreterPrimitives subclass: #StackInterpreter
StackInterpreter subclass: #StackInterpreterPrimitives

I am interested in getting Interpreter to work at this point, not
StackInterpreter, in the simulator.

StackIntepreter simulation has other problems:

UndefinedObject(Object)>>doesNotUnderstand: #adaptToNumber:andSend:
UndefinedObject(Object)>>adaptToInteger:andSend:
SmallInteger(Integer)>>quo:
SmallInteger>>quo:
SmallInteger(Integer)>>//
SmallInteger>>//
StackInterpreterSimulatorLSB(StackInterpreter)>>interpreterAllocationReserveBytes
StackInterpreterSimulatorLSB(StackInterpreterSimulator)>>openOn:extraMemory:
in Block: [f := FileStream readOnlyFileNamed: fileName....
BlockClosure>>ensure:
StackInterpreterSimulatorLSB(StackInterpreterSimulator)>>openOn:extraMemory:
StackInterpreterSimulatorLSB(StackInterpreterSimulator)>>openOn:
UndefinedObject>>DoIt

Looks like all of this needs some love... no problem doing that but I need
to sort out these questions with your help :-)

Phil






2013/4/11 Eliot Miranda <eliot.miranda at gmail.com>

>
>
>
> On Thu, Apr 11, 2013 at 2:11 AM, phil at highoctane.be <phil at highoctane.be>wrote:
>
>>
>> Hello,
>>
>> I've been working on getting the simulator to work from VMMaker.
>>
>> Now, I can load my 6505 formatted image inside the simulator and it looks
>> okay (from what I can inspect).
>>
>> Then, I am now running the test of the sim:
>>
>> test
>> transcript clear.
>> byteCount := 0.
>>  quitBlock := [^ self].
>> self internalizeIPandSP.
>> self fetchNextBytecode.
>>  [true] whileTrue:
>> [self dispatchOn: currentBytecode in: BytecodeTable.
>> byteCount := byteCount + 1.
>>  byteCount \\ 10000 = 0 ifTrue: [self fullDisplay]].
>> self externalizeIPandSP.
>>
>>
>> and I hit an issue:
>>
>> MNU: isInstanceOfClassFloat: oop.
>> InterpreterSimulatorLSB(Interpreter)>>floatValueOf:
>> InterpreterSimulatorLSB(Interpreter)>>loadFloatOrIntFrom:
>> InterpreterSimulatorLSB(Interpreter)>>primitiveFloatEqual:toArg:
>> InterpreterSimulatorLSB(Interpreter)>>bytecodePrimEqual
>> InterpreterSimulatorLSB(InterpreterSimulator)>>dispatchOn:in:
>> InterpreterSimulatorLSB(InterpreterSimulator)>>test
>> UndefinedObject>>DoIt
>>
>> This happens here:
>>
>> floatValueOf: oop
>>  "Answer the C double precision floating point value of the argument,
>>  or fail if it is not a Float, and answer 0.
>>  Note: May be called by translated primitive code."
>>
>> | isFloat result |
>> <returnTypeC: #double>
>>  <var: #result type: #double>
>> isFloat := self isInstanceOfClassFloat: oop.
>> isFloat ifTrue:
>>  [self cCode: '' inSmalltalk: [result := Float new: 2].
>>  self fetchFloatAt: oop + BaseHeaderSize into: result.
>>  ^result].
>> self primitiveFail.
>> ^0.0
>>
>> There is such a method in IntepreterPrimitives, but not in the
>> Interpreter itself nor parents.
>>
>> InterpreterPrimitives>>isInstanceOfClassFloat: oop
>>  <inline: true>
>> "N.B.  Because Slang always inlines is:instanceOf:compactClassIndex:
>>  (because is:instanceOf:compactClassIndex: has an inline: pragma) the
>>  phrase (objectMemory splObj: ClassFloat) is expanded in-place and is
>>  _not_ evaluated if oop has a non-zero CompactClassIndex."
>>  ^objectMemory
>> is: oop
>> instanceOf: (objectMemory splObj: ClassFloat)
>>  compactClassIndex: ClassFloatCompactIndex
>>
>> Clues?
>>
>
> Just copy the method into Interpreter and replace objectMemory with self.
>  But I don't understand which VMMsker you're using.  In David Lewis' trunk,
> e.g. VMMaker-dtl.316, Interpreter inherits from InterpreterPrimitives.
>
>
>>
>> Phil
>>
>>
>
>
> --
> best,
> Eliot
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.squeakfoundation.org/pipermail/vm-dev/attachments/20130412/37e24d3e/attachment-0001.htm


More information about the Vm-dev mailing list