[Vm-dev] VM Maker: VMMaker.oscog-cb.2095.mcz

Ronie Salgado roniesalg at gmail.com
Tue Jan 17 15:20:15 UTC 2017


Hi Clement,

Ronie, I could not merge with your code (I got "Could no merge because one
> character keycode is normally not used in code")

Fixed.

It seems there is something fishy in this version (before my changes), I
> can't properly compile the VM ?

Last night, Eliot introduced some changes at version
VMMaker.oscog-eem.2094, with a compilation error. That version also
requires defining a macro(#define maybeHaltIfDebugPC() ) for being able to
compile the vm. It seems that Eliot has not yet added the actual definition
of the macro. For testing quickly, that define somewhere at sq.h



2017-01-17 9:59 GMT-03:00 Clément Bera <bera.clement at gmail.com>:

>
> It seems there is something fishy in this version (before my changes), I
> can't properly compile the VM ?
>
> On Tue, Jan 17, 2017 at 1:27 PM, <commits at source.squeak.org> wrote:
>
>>
>> ClementBera uploaded a new version of VMMaker to project VM Maker:
>> http://source.squeak.org/VMMaker/VMMaker.oscog-cb.2095.mcz
>>
>> ==================== Summary ====================
>>
>> Name: VMMaker.oscog-cb.2095
>> Author: cb
>> Time: 17 January 2017, 1:26:37.587598 pm
>> UUID: a685bd8e-f11b-41b3-9d74-b38403dfc9b3
>> Ancestors: VMMaker.oscog-eem.2094
>>
>> Ronie, I could not merge with your code (I got "Could no merge because
>> one character keycode is normally not used in code")
>>
>> Added support for inlined primitive #characterAsInteger.
>>
>> =============== Diff against VMMaker.oscog-eem.2094 ===============
>>
>> Item was changed:
>>   ----- Method: SistaCogit>>genUnaryInlinePrimitive: (in category
>> 'inline primitive generators') -----
>>   genUnaryInlinePrimitive: prim
>>         "Unary inline primitives."
>>         "SistaV1: 248           11111000        iiiiiiii
>> mjjjjjjj                Call Primitive #iiiiiiii + (jjjjjjj * 256) m=1
>> means inlined primitive, no hard return after execution.
>>          See EncoderForSistaV1's class comment and
>> StackInterpreter>>#unaryInlinePrimitive:"
>>         | rcvrReg resultReg |
>>         rcvrReg := self allocateRegForStackEntryAt: 0.
>>         resultReg := self allocateRegNotConflictingWith: (self
>> registerMaskFor: rcvrReg).
>>         prim
>>                 caseOf: {
>>                                         "00             unchecked class"
>>                         [1] ->  "01             unchecked pointer
>> numSlots"
>>                                 [self ssTop popToReg: rcvrReg.
>>                                  self ssPop: 1.
>>                                  objectRepresentation
>>                                         genGetNumSlotsOf: rcvrReg into:
>> resultReg;
>>                                         genConvertIntegerToSmallIntegerInReg:
>> resultReg].
>>                                         "02             unchecked pointer
>> basicSize"
>>                         [3] ->  "03             unchecked byte numBytes"
>>                                 [self ssTop popToReg: rcvrReg.
>>                                  self ssPop: 1.
>>                                  objectRepresentation
>>                                         genGetNumBytesOf: rcvrReg into:
>> resultReg;
>>                                         genConvertIntegerToSmallIntegerInReg:
>> resultReg].
>>                                         "04             unchecked
>> short16Type format numShorts"
>>                                         "05             unchecked
>> word32Type format numWords"
>>                                         "06             unchecked
>> doubleWord64Type format numDoubleWords"
>>                         [11] -> "11             unchecked fixed pointer
>> basicNew"
>>                                 [self ssTop type ~= SSConstant ifTrue:
>>                                         [^EncounteredUnknownBytecode].
>>                                  (objectRepresentation
>>                                         genGetInstanceOf: self ssTop
>> constant
>>                                                 into: resultReg
>>                                                         initializingIf:
>> self extBSpecifiesInitializeInstance) ~= 0 ifTrue:
>>                                         [^ShouldNotJIT]. "e.g. bad class"
>>                                  self ssPop: 1] .
>>                         [20] -> "20     identityHash"
>>                                 [self ssTop popToReg: rcvrReg.
>>                                  objectRepresentation
>> genGetHashFieldNonImmOf: rcvrReg asSmallIntegerInto: resultReg.
>> +                                self ssPop: 1] .
>> -                                self ssPop: 1]
>>                                         "21             identityHash
>> (SmallInteger)"
>>                                         "22             identityHash
>> (Character)"
>>                                         "23             identityHash
>> (SmallFloat64)"
>>                                         "24             identityHash
>> (Behavior)"
>> +                                       "30     immediateAsInteger
>> (Character)
>> +                                        31     immediateAsInteger
>> (SmallFloat64)"
>> +                       [30] ->
>> +                               [self ssTop popToReg: rcvrReg.
>> +                                objectRepresentation
>> genConvertCharacterToSmallIntegerInReg: rcvrReg.
>> +                                self ssPop: 1]
>>                                   }
>> +
>>                 otherwise:
>>                         [^EncounteredUnknownBytecode].
>>         extB := 0.
>>         numExtB := 0.
>>         self ssPushRegister: resultReg.
>>         ^0!
>>
>> Item was changed:
>>   ----- Method: StackInterpreter>>unaryInlinePrimitive: (in category
>> 'miscellaneous bytecodes') -----
>>   unaryInlinePrimitive: primIndex
>>         "SistaV1:       248             11111000        iiiiiiii
>>       mjjjjjjj                Call Primitive #iiiiiiii + (jjjjjjj * 256)
>> m=1 means inlined primitive, no hard return after execution."
>>         <option: #SistaVM>
>>         | result |
>>         primIndex caseOf: {
>>                 "1000   unchecked class"
>>                 [0]     ->      [result := objectMemory fetchClassOf:
>> self internalStackTop.
>>                                  self internalStackTopPut: result].
>>                 "1001   unchecked pointer numSlots"
>>                 [1]     ->      [result := objectMemory numSlotsOf: self
>> internalStackTop.
>>                                  self internalStackTopPut: (objectMemory
>> integerObjectOf: result)].
>>                 "1002   unchecked pointer basicSize"
>>                 [2]     ->      [result := (objectMemory numSlotsOf: self
>> internalStackTop)
>>                                                 - (objectMemory
>> fixedFieldsOfClass: (objectMemory fetchClassOfNonImm: self
>> internalStackTop)).
>>                                  self internalStackTopPut: (objectMemory
>> integerObjectOf: result)].
>>                 "1003   unchecked byte8Type format numBytes (includes
>> CompiledMethod)"
>>                 [3]     ->      [result := objectMemory numBytesOf: self
>> internalStackTop.
>>                                  self internalStackTopPut: (objectMemory
>> integerObjectOf: result)].
>>                 "1004   unchecked short16Type format numShorts"
>>                 [4]     ->      [result := objectMemory num16BitUnitsOf:
>> self internalStackTop.
>>                                  self internalStackTopPut: (objectMemory
>> integerObjectOf: result)].
>>                 "1005   unchecked word32Type format numWords"
>>                 [5]     ->      [result := objectMemory num32BitUnitsOf:
>> self internalStackTop.
>>                                  self internalStackTopPut: (objectMemory
>> integerObjectOf: result)].
>>                 "1006   unchecked doubleWord64Type format numDoubleWords"
>>                 [6]     ->      [result := objectMemory num64BitUnitsOf:
>> self internalStackTop.
>>                                  self internalStackTopPut: (objectMemory
>> integerObjectOf: result)].
>>
>>                 "1011   unchecked fixed pointer basicNew"
>>                 [11] -> [| classObj numSlots |
>>                                  classObj := self internalStackTop.
>>                                  numSlots := objectMemory instanceSizeOf:
>> classObj.
>>                                  result := objectMemory
>> eeInstantiateSmallClass: classObj numSlots: numSlots.
>>                                  (extB noMask: 1) ifTrue:
>>                                         [0 to: numSlots - 1 do:
>>                                                 [:i| objectMemory
>> storePointerUnchecked: i ofObject: result withValue: objectMemory
>> nilObject]].
>>                                  extB := 0.
>>                                 numExtB := 0.
>>                                  self internalStackTopPut: result].
>>                 "1020   identityHash"
>>                 [20] -> [result := objectMemory hashBitsOf: self
>> internalStackTop.
>> +                                self internalStackTopPut: (objectMemory
>> integerObjectOf: result)].
>> -                                self internalStackTopPut: (objectMemory
>> integerObjectOf: result)]
>>                 "1021           identityHash (SmallInteger)"
>>                 "1022           identityHash (Character)"
>>                 "1023           identityHash (SmallFloat64)"
>>                 "1024           identityHash (Behavior)"
>> +               "1030   immediateAsInteger (Character)
>> +                1031   immediateAsInteger (SmallFloat64)"
>> +               [30] -> [ result := objectMemory characterValueOf: self
>> internalStackTop.
>> +                                self internalStackTopPut: (objectMemory
>> integerObjectOf: result)]
>>                  }
>>         otherwise:
>>                 [localIP := localIP - 3.
>>                  self respondToUnknownBytecode]!
>>
>>
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.squeakfoundation.org/pipermail/vm-dev/attachments/20170117/3d3fdf7a/attachment-0001.html>


More information about the Vm-dev mailing list