[Vm-dev] Pharo 2.0 and VM Simulator

Igor Stasenko siguctua at gmail.com
Thu Apr 11 18:45:51 UTC 2013


On 11 April 2013 18:00, Eliot Miranda <eliot.miranda at gmail.com> wrote:
>
>
>
> 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.

It its Cog branch, i think.

>
>>
>>
>> Phil
>>
>
>
>
> --
> best,
> Eliot
>



-- 
Best regards,
Igor Stasenko.


More information about the Vm-dev mailing list