[Vm-dev] Pharo 2.0 and VM Simulator
phil at highoctane.be
phil at highoctane.be
Fri Apr 12 18:37:15 UTC 2013
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/29f2fdd9/attachment-0001.htm
More information about the Vm-dev
mailing list