[Vm-dev] Pharo 2.0 and VM Simulator
Eliot Miranda
eliot.miranda at gmail.com
Fri Apr 12 20:24:47 UTC 2013
On Fri, Apr 12, 2013 at 11:37 AM, phil at highoctane.be <phil at highoctane.be>wrote:
>
> Thanks!
>
> A question: loading VMMaker tells me the following. Why should I load
> beforehand?
>
This page describes what you need for VMMaker.oscog to load:
http://www.mirandabanda.org/cogblog/build-image/
But the config approach is a lot easier :)
>
>
> This package depends on the following classes:
> FFIConstants
> KlattResonatorIndices
> You must resolve these dependencies before you will be able to load these
> definitions:
> FFIPlugin
> declareCVarsIn:
> hasHeaderFile
> moduleName
> requiresPlatformFiles
> atomicTypeOf:
> ffiAddressOf:startingAt:size:
> ffiArgByValue:
> ffiArgument:Spec:Class:
> ffiAtomicArgByReference:Class:
> ffiAtomicStructByReference:Class:
> ffiCall:WithFlags:AndTypes:
> ffiCall:WithFlags:Args:AndTypes:OfSize:
> ffiCalloutTo:WithFlags:
> ffiCheckReturn:With:
> ffiContentsOfHandle:errCode:
> ffiCreateLongLongReturn:
> ffiCreateReturn:
> ffiCreateReturnOop:
> ffiCreateReturnPointer:
> ffiCreateReturnStruct
> ffiFail:
> ffiFloatValueOf:
> ffiGetLastError
> ffiIntegerValueOf:
> ffiLoadCalloutAddress:
> ffiLoadCalloutAddressFrom:
> ffiLoadCalloutModule:
> ffiLogCallout:
> ffiLogCallsTo:
> ffiPushPointerContentsOf:
> ffiPushSignedLongLongOop:
> ffiPushStructureContentsOf:
> ffiPushUnsignedLongLongOop:
> ffiPushVoid:
> ffiReturnCStringFrom:
> ffiSetLastError:
> ffiValidateExternalData:AtomicType:
> initialiseModule
> isAtomicType:
> primitiveCallout
> primitiveCalloutWithArgs
> primitiveCreateManualSurface
> primitiveDestroyManualSurface
> primitiveFFIAllocate
> primitiveFFIDoubleAt
> primitiveFFIDoubleAtPut
> primitiveFFIFloatAt
> primitiveFFIFloatAtPut
> primitiveFFIFree
> primitiveFFIGetLastError
> primitiveFFIIntegerAt
> primitiveFFIIntegerAtPut
> primitiveForceLoad
> primitiveLogCallsTo
> primitiveSetManualSurfacePointer
> KlattSynthesizerPlugin
> declareCVarsIn:
> initialize
> moduleName
> addAmplitudeDiplophonia
> addFlutter
> addFrequencyDiplophonia
> addJitter
> addShimmer
> antiResonator:frequency:bandwidth:
> antiResonator:value:
> cascadeBranch:
> checkedFloatPtrOf:
> checkedShortPtrOf:
> glottalSource
> linearFromdB:
> loadFrom:
> nextRandom
> normalizeGlottalPulse
> parallelFrictionBranch:
> parallelVoicedBranch:
> pitchSynchronousReset
> primitiveSynthesizeFrameIntoStartingAt
> qu:phi:cosphi:sinphi:rphid:
> resonator:frequency:bandwidth:
> resonator:frequency:bandwidth:gain:
> resonator:value:
> resonatorA:
> resonatorA:put:
> resonatorB:
> resonatorB:put:
> resonatorC:
> resonatorC:put:
> resonatorP1:
> resonatorP1:put:
> resonatorP2:
> resonatorP2:put:
> ro:ra:rk:
> saveTo:
> setCurrentFrame:
> synthesizeFrame:into:startingAt:
> voicedPitchSynchronousReset
> zeroQphi:cosphi:sinphi:rphid:
> ThreadedARMFFIPlugin
> calloutStateClass
> initialize
> numRegArgs
> ffiPushDoubleFloat:in:
> ffiPushPointer:in:
> ffiPushSignedByte:in:
> ffiPushSignedChar:in:
> ffiPushSignedLongLong:in:
> ffiPushSignedShort:in:
> ffiPushSingleFloat:in:
> ffiPushUnsignedByte:in:
> ffiPushUnsignedChar:in:
> ffiPushUnsignedLong:in:
> ffiPushUnsignedLongLong:in:
> ffiPushUnsignedShort:in:
> registerArgsSlop
> ThreadedFFIPlugin
> ancilliaryStructClasses
> calloutStateClass
> declareCVarsIn:
> initialize
> maxNumArgs
> moduleName
> preambleCCode
> prepareToBeAddedToCodeGenerator:
> allocaLiesSoUseGetsp
> atomicTypeOf:
> cStackAlignment
> cleanupCalloutState:
> dispatchFunctionPointer:
> externalFunctionHasStackSizeSlot
> ffiAddressOf:startingAt:size:
> ffiAlloc:
> ffiArgByValue:in:
> ffiArgument:Spec:Class:in:
> ffiAtomicArgByReference:Class:in:
> ffiAtomicStructByReference:Class:in:
> ffiCall:ArgArrayOrNil:NumArgs:
> ffiCalloutTo:SpecOnStack:in:
> ffiCheckReturn:With:in:
> ffiContentsOfHandle:errCode:
> ffiCreateIntegralResultOop:ofAtomicType:in:
> ffiFail:
> ffiFloatValueOf:
> ffiFree:
> ffiIntegerValueOf:
> ffiLoadCalloutAddress:
> ffiLoadCalloutAddressFrom:
> ffiLoadCalloutModule:
> ffiLogCallout:
> ffiLogCallsTo:
> ffiPushDoubleFloat:in:
> ffiPushPointer:in:
> ffiPushPointerContentsOf:in:
> ffiPushSignedByte:in:
> ffiPushSignedChar:in:
> ffiPushSignedInt:in:
> ffiPushSignedLongLong:in:
> ffiPushSignedLongLongOop:in:
> ffiPushSignedShort:in:
> ffiPushSingleFloat:in:
> ffiPushString:OfLength:in:
> ffiPushStructure:ofSize:typeSpec:ofLength:in:
> ffiPushStructureContentsOf:in:
> ffiPushUnsignedByte:in:
> ffiPushUnsignedChar:in:
> ffiPushUnsignedInt:in:
> ffiPushUnsignedLongLong:in:
> ffiPushUnsignedLongLongOop:in:
> ffiPushUnsignedShort:in:
> ffiPushVoid:in:
> ffiReturnCStringFrom:
> ffiReturnPointer:ofType:in:
> ffiReturnStruct:ofType:in:
> ffiReturnType:
> ffiSupportsCallingConvention:
> ffiValidateExternalData:AtomicType:
> initialiseModule
> isAlien:
> isAtomicType:
> isCalleePopsConvention:
> isDirectAlien:
> nonRegisterStructReturnIsViaImplicitFirstArgument
> primitiveCallout
> primitiveCalloutWithArgs
> primitiveCreateManualSurface
> primitiveDestroyManualSurface
> primitiveFFIAllocate
> primitiveFFIDoubleAt
> primitiveFFIDoubleAtPut
> primitiveFFIFloatAt
> primitiveFFIFloatAtPut
> primitiveFFIFree
> primitiveFFIGetLastError
> primitiveFFIIntegerAt
> primitiveFFIIntegerAtPut
> primitiveForceLoad
> primitiveLogCallsTo
> primitiveSetManualSurfacePointer
> registerArgsSlop
> returnStructInRegisters:
> sizeField:
> startOfData:
> ThreadedIA32FFIPlugin
> ffiCalloutTo:SpecOnStack:in:
> ffiPushDoubleFloat:in:
> ffiPushPointer:in:
> ffiPushSignedByte:in:
> ffiPushSignedChar:in:
> ffiPushSignedInt:in:
> ffiPushSignedLongLong:in:
> ffiPushSignedShort:in:
> ffiPushSingleFloat:in:
> ffiPushStructure:ofSize:typeSpec:ofLength:in:
> ffiPushUnsignedByte:in:
> ffiPushUnsignedChar:in:
> ffiPushUnsignedInt:in:
> ffiPushUnsignedLongLong:in:
> ffiPushUnsignedShort:in:
> ffiReturnStruct:ofType:in:
> registerArgsSlop
> returnStructInRegisters:
> ThreadedPPCBEFFIPlugin
> calloutStateClass
> initialize
> numRegArgs
> ffiPushDoubleFloat:in:
> ffiPushPointer:in:
> ffiPushSignedByte:in:
> ffiPushSignedChar:in:
> ffiPushSignedInt:in:
> ffiPushSignedLongLong:in:
> ffiPushSignedShort:in:
> ffiPushSingleFloat:in:
> ffiPushUnsignedByte:in:
> ffiPushUnsignedChar:in:
> ffiPushUnsignedInt:in:
> ffiPushUnsignedLong:in:
> ffiPushUnsignedLongLong:in:
> ffiPushUnsignedShort:in:
> registerArgsSlop
> returnStructInRegisters:
>
>
> Select Proceed to continue, or close this window to cancel the operation.
>
>
> 2013/4/12 Eliot Miranda <eliot.miranda at gmail.com>
>
>>
>>
>>
>> On Fri, Apr 12, 2013 at 2:43 AM, phil at highoctane.be <phil at highoctane.be>wrote:
>>
>>>
>>> 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.
>>>
>>
>> Then I would either move to VMMaker or be prepared for a fair bit of
>> work. I haven't worked on the Interpreter in the Cog branch for many
>> years.
>>
>>
>>>
>>> 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 :-)
>>>
>>
>> This should be easy to solve. Hmmm, works in e.g. VMMaker.oscog-eem.284.
>>
>> Try launching it with
>>
>> | vm |
>> StackInterpreter initializeWithOptions: (Dictionary newFromPairs: #()).
>> vm := StackInterpreterSimulator new.
>> vm openOn: 'some.image'.
>> vm openAsMorph; run
>>
>>
>> If it doesn't work then you need to reintegrate
>> from VMMaker.oscog-eem.284.
>>
>> HTH
>> Eliot
>>
>>
>>> 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
>>>>
>>>>
>>>
>>>
>>
>>
>> --
>> best,
>> Eliot
>>
>>
>
>
--
best,
Eliot
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.squeakfoundation.org/pipermail/vm-dev/attachments/20130412/6d3d0e16/attachment-0001.htm
More information about the Vm-dev
mailing list