[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