[Vm-dev] Pharo 2.0 and VM Simulator
Esteban Lorenzano
estebanlm at gmail.com
Fri Apr 12 18:52:00 UTC 2013
why don't you use the ConfigurationOfCog?
On Apr 12, 2013, at 8:37 PM, phil at highoctane.be wrote:
> Thanks!
>
> A question: loading VMMaker tells me the following. Why should I load beforehand?
>
>
> 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
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.squeakfoundation.org/pipermail/vm-dev/attachments/20130412/a8caa452/attachment-0001.htm
More information about the Vm-dev
mailing list